网易首页 > 网易号 > 正文 申请入驻

学术界最实用的STM32和ROS机器人的串口通信方案,一般人不告诉他

0
分享至

现在学术界最实用的STM32和ROS机器人的串口通信方案,一般人我不告诉他

全网最实用的STM32和ROS机器人的串口通信方案(大量网友调用成功)

具体协议大致如下,易读、易调用、易拓展、易更改。

源码文件:进入下面公众号:小白学移动机器人,发送:串口通信升级。即可获得。

本方案解决的问题:解决以STM32做ROS机器人底层驱动的串口通信问题。

为什么要写篇文章?:

最近发现越来越多的小伙伴走入ROS机器人的领域,而ROS机器人与底层驱动的串口通信问题,是大家学习路上的一个难题。很多小伙伴对STM32单片机并不熟悉,对串口通信的理解并不透彻,自己去解决这个问题,费时费力,最后也可能没有好的结果,并且这又不是大多数学习ROS机器人的重点。最后发现网上也没有很好的教程(也可能是我没找到),所以,这里根据本人的开发经历,给大家提供一种高效、稳定、易用的ROS机器人与STM32串口通信的常用方案。

如果不想了解细节的朋友,可以只看下面方案介绍和方案快速使用部分,关于方案的原理就不用花时间思考了,但是还是希望大家对细节有敬畏之心。

本方案提供的API:(最基础的ROS机器人需要的协议)

STM32向ROS发送左轮实时轮速、右轮实时轮速、实时角度、预留控制位。

ROS向STM32发送左轮设定速度、右轮设定速度、预留控制位

本方案优势:

经测试,长期稳定运行

保证数据准确率极高

频率50HZ左右,可更高,根据自己发送频率设置

易用,引入相关头文件即可,低耦合

------------------------------------------------华丽丽的分界线--------------------------------------------

方案介绍:

本方案将数据开头加入数据头,数据尾部加入数据循环冗余校验和数据尾,将数据打包发送,确保数据的正确性,避免出现一些无法察觉的问题。同样根据STM32和Linux系统配备相应的数据解析协议。

本方案STM32下位机依托USART1编写的收发协议,ROS上位机依托boost::asio编写的收发协议。串口并不一定是串口1,可以更改,但是需要程序变更一些内容(很容易,程序中有标记共三处)。

本方案巧妙的使用共用体的特性,进行数据解析,(也就是无需使用数据分离技术解析数据)。关于共用体,你只需要知道以下几点:

.C语言的一种机制,结构体内不同成员共享内存的机制,(即内存地址一致)

.同一时刻,只能访问其中的一个成员

.不同成员,按照成员类型的性质进行内存访问

不理解的小伙伴,可以看下图,有直观的理解即可。有图有真相

温馨提示:从左向右读图。

-----------------------------------------------华丽丽的分界线--------------------------------------------

方案快速使用:

硬件环境准备:(必须)

STM32串口+TTL转USB模块(CH340)+Linux硬件设备

线路连接:(有图有真相)

STM32下位机软件使用介绍:

首先是STM32串口参数的配置:(这里配置代码和相关例程都一致)

·波特率=115200

·数据长度=8位

·停止位=1个

·奇偶校验位=无

·硬件数据流控制=无

其次是函数使用说明,封装函数如下图:

这里做简单说明:

函数usartReceiveOneData(int *p_leftSpeedSet,int *p_rightSpeedSet,unsigned char *p_crtlFlag),填入地址参数作数据获取,使用时放在相应串口的中断服务函数中即可。如这里使用的串口1,如下图所示:

函数usartSendData(short leftVel, short rightVel,short angle,unsigned char ctrlFlag),填入需要发送的数据变量作发送,使用时放入指定频率的循环里使用,每次发送一次数据,最好延时10-15ms,下位机发送和上位机接收都需要时间(时间和串口波特率有关)。我使用的如下图所示:

其余的两个函数是被上面两个函数调用的,这里就不多说了。

注意:

在外部引用函数时,注意引用头文件#include "mbotLinuxUsart.h"

小伙伴在编译时,可能出现#include "mbotLinuxUsart.h"文件下 sys.h不存在,原因是使用的不是正点原子的例程,此时将#include 替换为各自版本的配置头文件,如果不清楚,就在其他.h文件中复制粘贴已有的头文件,关于stm32的

ROS上位机软件使用介绍:(PC)

看图说话,下面共有四个函数,看函数名和参数就可以理解用途。

首先是调用头文件#include "mbot_linux_serial.h",然后进行初始化串口

在程序初始化的时候调用serialInit()函数,内置串口参数和下位机串口参数一致。

然后就是在调用writeSpeed(double RobotV, double YawRate,unsigned char ctrlFlag)函数,参数是机器人线速度和角速度,也就是/cmd_vel的数据。将机器人的需要设定的速度下发到下位机。

最后就是调用readSpeed(double &vx,double &vth,double &th,unsigned char &ctrlFlag)函数,这里使用的引用,输入存放机器人线速度、角速度、角度的变量即可。为了发布机器人里程计用的。

注意:

这里需要两个参数根据自己的机器人进行更改,ROBOT_LENGTH机器人真实轮间距(从左侧轮子中心到右侧轮子中心的距离),ROBOT_RADIUS机器人轮间距的一半。

文中boost::asio::serial_port sp(iosev, "/dev/mbot");的设备名字是我的串口的设备名字,小伙伴可以根据自己的进行更改,例如,/dev/ttyUSB0。

到这里大家肯定都可以愉悦的使用了。如果想知道细节,请往下看。

-------------------------------------------华丽丽的分界线-----------------------------------------------

方案的原理解释:

此方案用的是共用体的思路,上面小伙伴们也都对共用有个大致的了解。这是一种按照共用体内成员的数据类型进行内存访问的特性,不同数据类型按照自己的类型访问内存。上位机和下位机的原理是一致的。都定义了数据头、数据尾的常量,和收发共用体。

下位机发送的数据协议:上位机发送的数据协议:

STM32的串口接收原理:每接收到一个字节就会触发一次中断,我这里采用在串口的中断服务函数中进行数据接收的解析,具体函数体现在receiveTo103()

根据上位机发送的协议进行判断解析,详见代码,注释清晰。

Linux上位机采用ASIO,ASIO不仅支持网络通信,还能支持串口通信。

这里采用boost::asio::write(sp, boost::asio::buffer(buf));发送数据

使用boost::asio::read_until(sp, response, "\r\n",err);

copy(istream_iterator(istream(&response)>>noskipws),

istream_iterator(),buf);

获取数据,再具体的细节需要见源码解释了。脑子里的思想就是把相应的数据放到相应的位置,没有数据解析概念,对应的字符数据存好后,就可以通过另外一个成员访问了。

我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加蚣重呺也能领取哦。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
庚欣:七国集团正在走下坡路,而且很难回头了

庚欣:七国集团正在走下坡路,而且很难回头了

直新闻
2024-06-14 23:29:57
女生主动起来会有多主动?网友:已四十,在星巴克打排位被要微信

女生主动起来会有多主动?网友:已四十,在星巴克打排位被要微信

奇特短尾矮袋鼠
2024-06-14 12:29:40
眼看来中国的外国游客越来越多,欧美开始有些不淡定了

眼看来中国的外国游客越来越多,欧美开始有些不淡定了

布拉旅游说
2024-06-15 19:17:01
马蓉刚走又来了冯清,倒霉的王宝强,终究还是绕不过“女人坑”

马蓉刚走又来了冯清,倒霉的王宝强,终究还是绕不过“女人坑”

娱乐白名单
2024-06-13 10:25:31
事态升级!央视工作人员硬刚周也,周也翻白眼视频也曝光了!

事态升级!央视工作人员硬刚周也,周也翻白眼视频也曝光了!

娱小小新
2024-06-15 14:51:47
无证倒卖香烟案引行政诉讼:收回专卖许可是否送达本人?烟草局承认3年后补贴通知

无证倒卖香烟案引行政诉讼:收回专卖许可是否送达本人?烟草局承认3年后补贴通知

红星新闻
2024-06-13 22:58:18
“叛变”!台积电、三星宣布,如果中国不买了,后果就严重了!

“叛变”!台积电、三星宣布,如果中国不买了,后果就严重了!

户外钓鱼哥阿旱
2024-06-15 18:33:44
世联赛最新排名出炉,中国女排第六,三球队争最后一个总决赛席位

世联赛最新排名出炉,中国女排第六,三球队争最后一个总决赛席位

湘楚风云
2024-06-16 02:19:01
2024最建议买的5款SUV,很耐用开不坏,其它的请慎买

2024最建议买的5款SUV,很耐用开不坏,其它的请慎买

鸭梨说车
2024-06-15 16:45:52
绝了,姆巴佩还没亮相!皇马内讧爆发,魔笛带头反驳,为梅西正名

绝了,姆巴佩还没亮相!皇马内讧爆发,魔笛带头反驳,为梅西正名

阿泰希特
2024-06-15 21:08:21
6月15日,以军基地被炸,土耳其不宣而战,菲律宾船员弃船逃生

6月15日,以军基地被炸,土耳其不宣而战,菲律宾船员弃船逃生

笔墨V
2024-06-15 22:49:39
今年的经济形势有多严峻?身边却出现了许多反常的现象

今年的经济形势有多严峻?身边却出现了许多反常的现象

山丘楼评
2024-06-02 23:30:58
50年石油美元协议到期 沙特:不再续约

50年石油美元协议到期 沙特:不再续约

南方都市报
2024-06-16 07:03:39
上港国脚因伤退出国家队 回中超踢满全场被质疑诈伤

上港国脚因伤退出国家队 回中超踢满全场被质疑诈伤

球事百科吖
2024-06-15 14:43:22
2024安徽中考数学难度太大,有考生坦言:命题组成功将我送进大山

2024安徽中考数学难度太大,有考生坦言:命题组成功将我送进大山

育学笔谈
2024-06-15 21:17:31
上海失踪女童遗体已找到 排除刑事案件

上海失踪女童遗体已找到 排除刑事案件

北青网-北京青年报
2024-06-15 17:05:07
中超最新积分榜:国安遭绝杀排第5,河南队终结6轮不胜跳出降级区

中超最新积分榜:国安遭绝杀排第5,河南队终结6轮不胜跳出降级区

中超伪球迷
2024-06-15 22:15:52
北京天津开始出现了,新型婚姻模式,绝对颠覆你的三观。

北京天津开始出现了,新型婚姻模式,绝对颠覆你的三观。

娱乐洞察点点
2024-06-15 14:21:29
青岛下跌7.3%,东营反超烟台!山东各地1-4月税收收入排行出炉

青岛下跌7.3%,东营反超烟台!山东各地1-4月税收收入排行出炉

水又木二
2024-06-15 17:43:14
炸裂!那些震碎你三观的八卦!网友:真的是太劲爆了

炸裂!那些震碎你三观的八卦!网友:真的是太劲爆了

王二哥老搞笑
2024-05-30 12:26:57
2024-06-16 07:34:44
大方老师单片机
大方老师单片机
领单片机速学资料,点我头像~
259文章数 1144关注度
往期回顾 全部

科技要闻

TikTok开始找退路了?

头条要闻

欧洲杯-23秒丢球破纪录 意大利2-1逆转阿尔巴尼亚

头条要闻

欧洲杯-23秒丢球破纪录 意大利2-1逆转阿尔巴尼亚

体育要闻

莱夫利,让困难为我让路

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

新情况!高层对人民币的态度180°转弯

汽车要闻

东风奕派eπ008售21.66万元 冰箱彩电都配齐

态度原创

教育
亲子
数码
健康
公开课

教育要闻

情侣高考后办订婚宴后续,当事人回应原因,网友:升学宴还办吗?

亲子要闻

孩子总是便秘 家长要注意 这几点

数码要闻

低至 5747 元,爱普生 CH-TW6280T 真 4K 投影仪京东大促

晚餐不吃or吃七分饱,哪种更减肥?

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版