@[TOC]ROS学习笔记——ROS中使用串口进行通讯测试
参考两篇文献,感谢原作者:
https://blog.csdn.net/qq_44623066/article/details/125626937
https://blog.csdn.net/liuxiaodong400/article/details/90370927
一、安装ROS提供的serial包实现串口通信
1.首先,下载serial软件包:
sudo apt-get install ros-kinetic-serial #ros为Kinect版本
二、查看串口号
方式一:使用Ubuntu下的串口助手cutecom——推荐
1.安装cutecom打开:
sudo apt-get install cutecom
2、打开cutecom工具
cutecom
3、可以在Setting中设置串口参数,然后打开测试串口以及硬件链接是否正确
方式二:查看当前终端串口号
1、查看当前终端的串口信息
ls /dev/tty*
2.插入临时使用的外设串口
3.再次查看终端串口号
ls /dev/tty*,看看此时多了那个串口号,就是接入的外设
当方式一打开串口是提示 :
串口打开失败 permiss denied!
假设该设备号为/dev/ttyUSB0,给设备赋予可读写权限
sudo chmod 777 /dev/ttyUSB0
注:下文代码实现使用的台式机自带默认端口ttyS0端口。
————————————————
三、创建功能包以及实现代码
功能包serial_demo/src目录下新建一个c++程序:
代码如下:
#include <ros/ros.h>
#include <serial/serial.h>
#include <iostream>
int main(int argc, char *argv[])
{
//中文显示
setlocale(LC_ALL,"");
// 初始化节点
ros::init(argc,argv,"serial_port");
//创建句柄
ros::NodeHandle nh;
// 创建一个serial类
serial::Serial sp;
serial::Timeout to = serial::Timeout::simpleTimeout(100);
//打开串口
try
{
//设置要打开的串口名称
sp.setPort("/dev/ttyS0");
//设置串口波特率
sp.setBaudrate(115200);
sp.setBytesize(serial::bytesize_t::eightbits);
sp.setStopbits(serial::stopbits_t::stopbits_one);
sp.setFlowcontrol(serial::flowcontrol_t::flowcontrol_none);
// 创建timeout
serial::Timeout to=serial::Timeout::simpleTimeout(1000);
//设置串口 超时时间
sp.setTimeout(to);
// 打开串口
sp.open();
}
catch(serial::IOException& e)
{
ROS_ERROR_STREAM("打开串口失败。。。。。。");
return -1 ;
}
// 判断串口是否成功打开
if (sp.isOpen()){
ROS_INFO("/dev/ttyS0 串口已打开");
}
else{
return -1;
}
// 循环间隔
ros::Rate rate(10);
while (ros::ok())
{
// 获取缓冲区内的字节数
size_t n = sp.available();
if (n!=0)
{
uint8_t buffer[1024];
// 读取数据
n = sp.read(buffer,n);
ROS_INFO("接收到串口数据:");
for (int i = 0; i < n; i++)
{
// 16进制的方式 打印到屏幕
std::cout << std::hex << (buffer[i] & 0xff) << "";
}
std::cout << std::endl;
//把数据发送回去
sp.write(buffer,n);
}
rate.sleep();
}
//关闭串口
sp.close();
return 0;
}