@[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 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);
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++)
{
std::cout << std::hex << (buffer[i] & 0xff) << "";
}
std::cout << std::endl;
sp.write(buffer,n);
}
rate.sleep();
}
sp.close();
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)