资讯动态

《ROS1学习笔记——在ros中实现串口通信》

发布时间:2026/8/14 10:40:25 来源:尧图企业网站定制
文章目录1、下载相关包2、编程实现2.1、新建功能包2.2、c代码2.3、配置CMakLists3 、硬件4、编译运行4.1、编译4.2运行4.2.2、串口助手4.2.3发送数据1、下载相关包ros里有相应的串口库可以供我们直接使用sudo apt-get install ros-noetic-serial注意noeyic需要换成自己ubuntu的版本。2、编程实现2.1、新建功能包catkin_create_pkg serial_demo roscpp serial2.2、c代码在src目录下新建demo_serial.cpp文件#includeros/ros.h#includeserial/serial.h#includeiostreamintmain(intargc,char**argv){ros::init(argc,argv,serial_port);//创建句柄虽然后面没用到这个句柄但如果不创建运行时进程会出错ros::NodeHandle n;//创建一个serial对象serial::Serial sp;//创建timeoutserial::Timeout toserial::Timeout::simpleTimeout(100);//设置要打开的串口名称sp.setPort(/dev/ttyUSB0);//设置串口通信的波特率sp.setBaudrate(9600);//串口设置timeoutsp.setTimeout(to);try{//打开串口sp.open();}catch(serial::IOExceptione){ROS_ERROR_STREAM(Unable to open port.);return-1;}//判断串口是否打开成功if(sp.isOpen()){ROS_INFO_STREAM(/dev/ttyUSB0 is opened.);}else{return-1;}ros::Rateloop_rate(500);while(ros::ok()){//获取缓冲区内的字节数size_t nsp.available();if(n!0){uint8_tbuffer[1024];//读出数据nsp.read(buffer,n);for(inti0;in;i){//16进制的方式打印到屏幕//std::cout std::hex (buffer[i] 0xff) ;std::coutbuffer[i];}std::coutstd::endl;//把数据发送回去sp.write(buffer,n);}loop_rate.sleep();}//关闭串口sp.close();return0;}2.3、配置CMakLists在CMakLists文件中添加如下代码add_executable(demo_serial src/demo_serial.cpp)add_dependencies(demo_serial${${PROJECT_NAME}_EXPORTED_TARGETS}${catkin_EXPORTED_TARGETS})target_link_libraries(demo_serial${catkin_LIBRARIES})3 、硬件我这里使用了两个CH430先插上一个选择连接到虚拟机上。然后再插一个选择连接到主机。输入lsusb可以检测接入的USB设备4、编译运行4.1、编译回到空间目录下进行编译catkin_make编译成功后检查devel目录下是否出现可执行文件4.2运行终端1运行roscore终端21、改变环境变量source devel/setup.bash2、 修改Linux 系统对串口设备的默认权限限制不然会串口打开失败sudo chmod 777/dev/ttyUSB03、运行节点代码rosrun demo_serial demo_serial4.2.2、串口助手在主机那边打开一个串口助手配置好基本配置打开串口。4.2.3发送数据主机向ros虚拟机发送数据ros那边成功收到数据并返回数据。参考链接https://blog.csdn.net/qqliuzhitong/article/details/114384297

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价