rosserial进行串口通信
rosserial进行串口通信
串口通信
基础介绍
- 用于两个模块之间传输数据,是我们最常用的数据通信方式之一。包括单片机之间的通信,单片机与工控机之间的通信,单片机与外设模块之间的通信等等。
- 由于 CPU 与接口之间按并行方式传输,接口与外设之间按串行方式传输,因此,在串行接口中,必须要有 “ 接收移位寄存器 “ (串→并)和 “ 发送移位寄存器 “ (并→串).
- 串口通讯是以高低电平为传输媒介,一位一位的传输,这一点是后面需要时刻牢记的。
具体发送的过程
波特率:传输速度的参数。指的是信号被调制以后在单位时间内的变化,即单位时间内载波参数变化的次数。如每秒钟传送240个字符,而每个字符格式包含10位(1个起始位,1个停止位,8个数据位),这时的波特率为240Bd,比特率为10位*240个/秒=2400bps。
数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包的数据位数,标准值是6、7和8位。比如,当我想发送一个uint8的整数,它就刚好能够完整发送。
我们只需要记住的是,串口一次只能发送8位二进制数,所以要发送和接受的数据是以8位二进制数的数组存储的,如下:
1
uint8_t buffer[12]
产生的问题
那既然我们一次只能发8位数字,那对于float这种32位的数字要怎么发呢?
答案是把它拆开为4个8位数字发出去。
1 | float x = 3.5 |
- 看上去拆开的方法显然没有我们想的那么简单。
- 我们知道
float
的数据存储类型是比较复杂的,有尾数幂数等等巴拉巴拉。当我们把其拆分的时候会遇到许多问题,为了更好的运算,我们将其转换为无符号32位整数,即unsigned int
。 - 仔细看上面的代码
unsigned int f1 = (*((unsigned int *)&(x)))
,你可能会感觉很疑惑这行代码,但你细看或许就明白了。 - 实际上是把x的指针类型强行从
float
变成unsigned int
。这样的好处是其在内存中的值不会变,那个二进制数还是那些,而我们直接使用类型转换实际上会改变其在内存中的值。
同样再收到消息的时候我们也需要相同的操作
1 | unsigned int hor = 0; |
Ubuntu中串口通讯
Ubuntu下的串口助手cutecom可以快速帮你查看是否有串口信号传入你的ubuntu。(虽然我之前并没有用过,使用方法也可以请教电控组成员或自行谷歌,如果不大行就算了吧)
安装cutecom并打开
1
2sudo apt-get install cutecom
sudo cutecom查看连接你电脑的串口信息
1
ls -l /dev | grep ttyU* #/dev路径下通常包含了所连外设,故要查看串口需要在这里进行查看,而grep是正则化,只查看名字是ttyU开头的文件
或者
1
dmesg | grep ttyS* #网上看到的,不知道行不行
你可以通过拔插串口看哪一个设备改变从而确定设备名称。
详细的你可以看我随便找的一个链接:https://blog.csdn.net/maizousidemao/article/details/103236666
Ros中的串口通讯
Ros使用rosserial包作为串口通信的方式
- 首先下载rosserial
1 | sudo apt-get install ros-melodic-serial |
- 进入安装位置确认是否安装成功
1 | roscd serial |
- 若是成功则能够进入位置
1 | /opt/ros/melodic/share/serial |
然后创造工作空间,参照这个博客
创造功能包并编写以下代码
1 | //serial_port.cpp |
- CmakeLists如下:
1 | cmake_minimum_required(VERSION 2.8.3) |
- 运行roscore,运行节点看是否能打开串口。如果提示Unable to open port,是由于权限不够引起的,进行如下操作
创建文件:(若使用的是ttyACM将ttyusb替换即可)
1 | sudo gedit /etc/udev/rules.d/70-ttyusb.rules |
在打开的文件中添加
1 | KERNEL=="ttyUSB[0-9]*", MODE="0666" |
或者直接更改权限
1 | sudo chmod 777 /dev/ttyUSB*#后面这个是你的串口设备 |
- Post title:rosserial进行串口通信
- Post author:newsun-boki
- Create time:2021-11-02 01:56:47
- Post link:https://github.com/newsun-boki2021/11/02/rosserial/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.