ROS串口通信

1. USB转串口设备连接到Ubuntu虚拟机

1.1 查看windows 是否能识别USB转串口

将 USB转串口设备 插入电脑的USB接口,在搜索中输入“设备管理器”,打开【设备管理器】
在这里插入图片描述
windows识别到USB转串口:
在这里插入图片描述

1.2 USB转串口设备与Ubuntu虚拟机连接

点击VM的【虚拟机】菜单 →【可移动设备】 →【Future Devices USB Serial Converter】→【 连接(断开与主机的连接)】
在这里插入图片描述
【Future Devices USB Serial Converter】菜单项前面被打√,代表识别到串口。

1.3 查看USB转串口在Ubuntu虚拟机中的设备名称

拔出USB转串口设备,在终端中输入指令

$  ls /dev/tty*

重新插入USB转串口设备,再执行指令ls /dev/tty*,可以看到新增一项“/dev/ttyUSB0” ,ttyUSB0就是对应的串口设备名称。
在这里插入图片描述
为串口设备文件增加可读写权限,否则不能对串口设备执行读写操作
方式1 :临时设置串口设备文件的权限(每次开机都需重新设置)

$ sudo chmod 666 /dev/ttyUSB0

方式2:创建ttyUSB权限规则文件(一劳永逸)

$ sudo gedit /etc/udev/rules.d/70-ttyusb.rules

文件中写入下列代码:

KERNEL=="ttyUSB*", OWNER="root", GROUP="root", MODE="0666" 

保存,重新登录后即生效


2. ROS安装serial包

安装指令:

sudo apt-get install ros-melodic-serial

不同版本的ROS,有对应的ROS包,melodic版本的ROS,serial包名称为
“ ros-melodic-serial ”


3. ROS实现串口通信

(1)创建串口对象
(2)设置串口属性,打开串口
(3)串口数据收发

3.1 编写串口通信程序

3.1.1 创建工作空间,编译,将工作空间添加到环境变量**
$ mkdir  -p test_serial_ws/src
$ cd test_serial_ws
$ catkin_make
....
$ source devel/setup.bash
3.1.2 创建软件包,添加依赖 serial包,编辑程序文件**
$ cd src
$ catkin_create_pkg serial_demo roscpp serial

src文件下,创建serial_demo.cpp的c++程序

$ serial_demo
$ cd  src 
& touch serial_demo.cpp

编辑serial_demo.cpp文件

#include <ros/ros.h>
#include <serial/serial.h>
#include <iostream>

int main(int argc,char**argv)
{
	setlocale(LC_ALL,"");
	//ros显示中文
	ros::init(argc,argv,"serial_port");
	//创建节点,节点名唯一
	ros::NodeHandle nh;
	//创建句柄 ,向ros master注册节点信息
	
	serial::Serial sp;
	//创建窗口对象
	
	try
	{
		sp.setPort("/dev/ttyUSB0");
		//设置要打开串口名称
		sp.setBaudrate(9600);
		//设置波特率
		serial::bytesize_t bytesize = serial::eightbits;
		sp.setBytesize(bytesize);
		//设置数据位
		serial::parity_t parity = serial::parity_none;
		sp.setParity(parity);
		//设置奇偶检验
		serial::stopbits_t stopbits = serial::stopbits_one;
		sp.setStopbits(stopbits) ;
		//设置停止位
		serial::Timeout to = serial::Timeout::simpleTimeout(100);
		sp.setTimeout(to);
		//设置接收字节间隔的超时时间
		sp.open();	
		//打开串口
	}
	catch(serial::IOException &e)
	{
		ROS_ERROR_STREAM("打开串口失败");//串口设备的权限不够
	}
	if(sp.isOpen())
	{
		sp.flushInput();
		//清空输入的缓存区
		ROS_INFO_STREAM("串口打开成功");	
	}
	else
	{
		return -1;
	}
	ros::Rate loop_rate(500);
	while(ros::ok())
	{
		size_t n = sp.available();
		//缓冲区中数据的字节数,函数返回值作为接收字符的长度
		if(n!=0)
		{
			std::string rev;
			rev = sp.read(n);//n为字节数
			//读取缓冲区数据
			std::cout<<rev<<std::endl;
			sp.write(rev.c_str());;
			//发送读取到的数据
		}
		loop_rate.sleep();
	}
	sp.close();
	return 0;
}

修改CMakeList文件

add_executable(serial_demo src/serial_demo.cpp)
add_dependencies(serial_demo ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(serial_demo  ${catkin_LIBRARIES})

编译

$ cd test_serial_ws
$ catkin_make
.....

3.2 运行

首先插入另外一个USB转串口设备,在windows下使用串口调试助手打开该串口设备,同时将两个USB串口设备进行物理连接。

在Ubuntu虚拟机打开终端,运行roscore

$ roscore

打开另外一个终端,运行serial_port节点

$ rosrun serial_demo serial_demo

在这里插入图片描述
Serial Library

  • 1
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值