ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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

文章目录

  • 1、下载相关包
  • 2、编程实现
    • 2.1、新建功能包
    • 2.2、c++代码
    • 2.3、配置CMakLists
  • 3 、硬件
  • 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 serial

2.2、c++代码

在src目录下新建demo_serial.cpp文件

#include<ros/ros.h>#include<serial/serial.h>#include<iostream>intmain(intargc,char**argv){ros::init(argc,argv,"serial_port");//创建句柄(虽然后面没用到这个句柄,但如果不创建,运行时进程会出错)ros::NodeHandle n;//创建一个serial对象serial::Serial sp;//创建timeoutserial::Timeout to=serial::Timeout::simpleTimeout(100);//设置要打开的串口名称sp.setPort("/dev/ttyUSB0");//设置串口通信的波特率sp.setBaudrate(9600);//串口设置timeoutsp.setTimeout(to);try{//打开串口sp.open();}catch(serial::IOException&e){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 n=sp.available();if(n!=0){uint8_tbuffer[1024];//读出数据n=sp.read(buffer,n);for(inti=0;i<n;i++){//16进制的方式打印到屏幕//std::cout << std::hex << (buffer[i] & 0xff) << " ";std::cout<<buffer[i];}std::cout<<std::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

终端2:
1、改变环境变量

source devel/setup.bash

2、 修改Linux 系统对串口设备的默认权限限制
不然会串口打开失败

sudo chmod 777/dev/ttyUSB0

3、运行节点代码

rosrun demo_serial demo_serial

4.2.2、串口助手

在主机那边打开一个串口助手,配置好基本配置,打开串口。

4.2.3发送数据

主机向ros虚拟机发送数据,ros那边成功收到数据,并返回数据。

参考链接:https://blog.csdn.net/qqliuzhitong/article/details/114384297

返回列表