SLAM+语音机器人DIY系列:(四)差分底盘设计——3.底盘通信协议
摘要
运动底盘是移动机器人的重要组成部分,不像激光雷达、IMU、麦克风、音响、摄像头这些通用部件可以直接买到,很难买到通用的底盘。一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的;另一方面是因为底盘包含软硬件整套解决方案,是很多机器人公司的核心技术,一般不会随便公开。出于强烈的求知欲与学习热情,我想自己DIY一整套两轮差分底盘,并且将完整的设计过程公开出去供大家学习。说干就干,本章节主要内容:
3.底盘通信协议
对于做纯SLAM算法、机器人导航避障、或者别的需要用到移动底盘的应用,其实不需要搞明白底盘的底层硬件原理和软件实现等繁琐的细节,只需要根据底盘通信协议,在上层应用程序中利用串口以收发数据的方式来完成对底盘的操作。也就是说底盘的底层操作细节被封装到基于串口通信的API中了。
先来说说。

(图30)ROS社区提供的rosserial协议
单片机中通过包含rosserial.h头文件来引用rosserial库中的数据封装与数据解析方法,这样在单片机上可以直接按照ROS中发布和订阅数据的语法来编写程序,rosserial库会自动完成封装和解析;被rosserial库封装成串口字节流后可以在串口数据线上传输;在机器人上同样通过包含rosserial.h头文件来引用rosserial库中的数据封装与数据解析方法,这样在机器人上直接按照ROS中发布和订阅数据的语法来编写程序,rosserial库会自动完成封装和解析。rosserial协议建立了单片机与机器人之间的透明ROS通信,这个ROS机器人开发这带来了很大的方便。
但是,rosserial协议虽然好,目前rosserial对很多单片机的支持还不是很好,只对少数型号的单片机(比如Arduino系列单片机)有支持,像应用广泛的stm32单片机就没有官方rosserial库的支持;另一个缺点,rosserial协议比较臃肿,这样对通信的资源消耗大并且影响数据实时性。
其实解决rosserial协议这几个缺点很简单,我们借鉴rosserial协议的思想,对rosserial协议中的冗余进行裁剪,我们miiboo机器人底盘自己的通信协议也就应运而生了。miiboo机器人底盘自己的通信协议,如图31。

(图31)miiboo机器人底盘自己的通信协议
其实很好理解,miiboo机器人底盘自己的通信协议包含两个部分:DEBUG-uart1和DATA-uart2。DEBUG-uart1用于stam32与机器人之间传输调试打印信息、调试命令;DATA-uart2用于stam32与机器人之间传输速度反馈、速度控制。并且DEBUG-uart1和DATA-uart2两个串口都采用波特率115200进行数据传输。下面就针对DEBUG-uart1和DATA-uart2这两部分的协议进行详细的讲解。
3.1.DEBUG-uart1协议内容
DEBUG-uart1协议内容分为:调试打印信息(stm32单片机==>机器人)、调试命令(stm32单片机<==机器人)。调试打印信息是stm32单片机向机器人发送数据,调试命令是机器人向stm32单片机发送数据。

(图32)调试打印信息(stm32单片机==>机器人)
在机器人端,对从串口获取的字符串数据流,直接用printf()函数就可以解析。

(图33)调试命令(stm32单片机<==机器人)
在机器人端,将要下发的调试命令(其实就是请求stm32单片机的版本信息与PID信息命令、请求将stm32中PID恢复为默认值命令、请求将stm32中PID设置为指定值命令)封装成对应的数据帧,然后让串口下发由这15个字节组成的数据帧就行了。
3.2.DATA-uart2协议内容
DATA-uart2协议内容分为:速度反馈(stm32单片机==>机器人)、速度控制(stm32单片机<==机器人)。速度反馈是stm32单片机向机器人发送数据,速度控制是机器人向stm32单片机发送数据。

(图34)速度反馈(stm32单片机==>机器人)
在机器人端,对从串口获取的字符串数据流,按照这个数据帧格式进行解析,就可以从这11字节组成的数据帧中解析出左轮速度、右轮速度。

(图35)速度控制(stm32单片机<==机器人)
在机器人端,将要下发的目标速度控制值(左轮速度、右轮速度),按照这个数据帧格式进行封装,然后让串口下发由这11个字节组成的数据帧就行了。其实不难发现,速度反馈和速度控制遵循同样的数据帧格式,这也是很好理解的。
后记
------SLAM+语音机器人DIY系列【目录】快速导览------
第1章:Linux基础
第2章:ROS入门
第3章:感知与大脑
第4章:差分底盘设计
第5章:树莓派3开发环境搭建
第6章:SLAM建图与自主避障导航
2.google-cartographer机器人SLAM建图
第7章:语音交互与自然语言处理
第8章:高阶拓展
2.centos7下部署Django(nginx+uwsgi+django+python3)
----------------文章将持续更新,敬请关注-----------------
如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加入下面的《SLAM+语音机器人DIY》QQ技术交流群,一起讨论学习^_^

SLAM+语音机器人DIY系列:(四)差分底盘设计——3.底盘通信协议的更多相关文章
- SLAM+语音机器人DIY系列:(四)差分底盘设计——6.底盘里程计标
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——1.stm32主控硬件设计
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——2.stm32主控软件设计
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——4.底盘ROS驱动开发
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- SLAM+语音机器人DIY系列:(四)差分底盘设计——5.底盘PID控制参数整定
摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——1.ROS是什么
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- SLAM+语音机器人DIY系列:(三)感知与大脑——4.音响麦克风与摄像头
摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...
- SLAM+语音机器人DIY系列:(三)感知与大脑——5.机器人大脑嵌入式主板性能对比
摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...
- SLAM+语音机器人DIY系列:(三)感知与大脑——6.做一个能走路和对话的机器人
摘要 在我的想象中机器人首先应该能自由的走来走去,然后应该能流利的与主人对话.朝着这个理想,我准备设计一个能自由行走,并且可以与人语音对话的机器人.实现的关键是让机器人能通过传感器感知周围环境,并通过 ...
随机推荐
- css:id选择器的权重>class选择器的权重=属性选择器的权重>元素选择器
最近的项目要自己写前端了,重新学习下前端的一下基本知识. 一般在css样式表中,上面的会被下面的覆盖,如下图,文字会显示蓝色: 所以按照正常的来说,下面的css样式,测试的文字应该还是蓝色 但结果,测 ...
- selenium+python+eclipse 实现 “问卷星”网站,登录与检查登录示例!
1.使用selenium+python+eclipse实现的登录"问卷星",问卷星访问地址:https://www.sojump.com/ 2.实现步骤:1)进入链接---首页-- ...
- Mybatis配置详解
一.SqlSession的使用范围说明 1.SQLSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory, ...
- [asp.net mvc 奇淫巧技] 06 - 也许你的项目同一个用户的请求都是同步的
一.感慨 很久前看到一篇博客中有句话大致的意思是:“asp.net 程序性能低下的主要原因是开发人员技术参差不齐”,当时看到这句话不以为然,然而时间过的越久接触的.net 开发人员越多就越认同这句话: ...
- Emmagee--APP性能测试工具的基本使用
一.Emmagee介绍 Emmagee是监控指定被测应用在使用过程中占用机器的CPU.内存.流量资源的性能测试小工具.该工具的优势在于如同windows系统性能监视器类似,它提供的是数据采集的功能,而 ...
- go语言调度器源代码情景分析之四:函数调用栈
本文是<go调度器源代码情景分析>系列 第一章 预备知识的第3小节. 什么是栈 栈是一种“后进先出”的数据结构,它相当于一个容器,当需要往容器里面添加元素时只能放在最上面的一个元素之上,需 ...
- 『动态』动态JSON万能转换函数 + .Net40 dynamic动态数据绑定
不废话,调用代码: static void Main(string[] args) { string json = File.ReadAllText("2.txt", Encodi ...
- Gradle中的闭包
Gradle是基于Groovy的DSL基础上的构建工具,Gradle中的闭包,其原型上实际上即Groovy中闭包.而在表现形式上,其实,Gradle更多的是以约定和基于约定基础上的配置去展现.但本质上 ...
- windows下,读取快捷方式lnk所指向的路径
BOOL GetLnkFileName( OUT PWSTR pLnkName, OUT PWSTR OepnFileNameBuufer, IN DWORD OpenFileNameBufferSi ...
- Server Error in '/' Application Runtime Error 错误
项目发布后 在本地发布可以运行 在服务器就会出现这种错误 在网上也查找了各种资料 解决方案 都没有解决 因为我用的C# 首先在 Webconfig配置文件中的 system.web中加入 < ...