STM32
直播中

最强海贼王

9年用户 1450经验值
擅长:MEMS/传感技术
私信 关注
[问答]

ROS的serial是如何进行通信的

怎样去安装seria呢?
ROS的serial是如何进行通信的?

回帖(1)

康瑜玲

2021-12-6 09:23:53
前言

ROS与STM32的串口通信
之前写过一篇用boost的串口通信, 本篇写下ros的serial的通信方式.
serial安装

sudo apt-get install ros--serial, 由于是Ubuntu 18, 那么就是:
sudo apt install ros-melodic-serial
STM32工程

串口的使用参考 STM32CubeMX_UART_printf_接收中断_DMA空闲中断_LPUART 一文, 主要代码如下:

  • /* USER CODE BEGIN WHILE */
  • while (1)
  • {
  • /* USER CODE END WHILE */


  • /* USER CODE BEGIN 3 */
  • static uint8_t count = 0;
  • ++count;
  • printf("Hello ROS |%3drn", count);
  • HAL_Delay(10);
  • }
  • /* USER CODE END 3 */
以100Hz的频率打印字符串, 波特率115200-8-N-1.
ROS程序



  • mkdir -p ~/catkin_ws/src
  • cd ~/catkin_ws/src
  • catkin_create_pkg serial_port roscpp std_msgs
  • cd serial_port/src
  • touch serial_port.cpp
  • gedit serial_port.cpp
在打开的serial_port.cpp放入以下代码:

  • #include
  • #include
  • #include


  • int main(int argc, char** argv)
  • {
  • ros::init(argc, argv, "serial_port");
  • ros::NodeHandle n;




  • serial::Serial sp("/dev/ttyACM0",115200,serial::Timeout::simpleTimeout(1000));


  • if(sp.isOpen()) {
  • ROS_INFO_STREAM("/dev/ttyACM0 is opened.");
  • } else {
  • return -1;
  • }


  • ros::Rate loop_rate(100);
  • while (ros::ok())
  • {
  • if(sp.available()) {
  • std_msgs::String result;
  • result.data = sp.read(sp.available());
  • ROS_INFO_STREAM(result.data);
  • }


  • ros::spinOnce();
  • loop_rate.sleep();
  • }


  • sp.close();


  • return 0;
  • }
打开~/catkin_make/src/serial_port/CMakeLists.txt, 填入:

  • add_executable(serial_port src/serial_port.cpp)
  • add_dependencies(serial_port ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
  • target_link_libraries(serial_port
  • ${catkin_LIBRARIES}
  • )
编译运行:



  • roscore


  • cd ~/catkin_ws
  • catkin_make
  • source devel/setup.bash
  • sudo chmod 666 /dev/ttyACM0 #加权限才能正常打开
  • rosrun serial_port serial_port
可以看到打印, 前面是缓存的, 一直到126才算正常:


举报

更多回帖

发帖
×
20
完善资料,
赚取积分