运动底盘是移动机器人的重要组成部分,不像激光雷达、IMU、麦克风、音响、摄像头这些通用部件能够直接买到,很难买到通用的底盘。一方面是由于底盘的尺寸结构和参数是要与具体机器人匹配的;另外一方面是由于底盘包含软硬件整套解决方案,是不少机器人公司的核心技术,通常不会随便公开。出于强烈的求知欲与学习热情,我想本身DIY一整套两轮差分底盘,而且将完整的设计过程公开出去供你们学习。说干就干,本章节主要内容:html
1.stm32主控硬件设计python
2.stm32主控软件设计nginx
3.底盘通讯协议算法
4.底盘ROS驱动开发django
5.底盘PID控制参数整定ubuntu
6.底盘里程计标centos
对于作纯SLAM算法、机器人导航避障、或者别的须要用到移动底盘的应用,其实不须要搞明白底盘的底层硬件原理和软件实现等繁琐的细节,只须要根据底盘通讯协议,在上层应用程序中利用串口以收发数据的方式来完成对底盘的操做。也就是说底盘的底层操做细节被封装到基于串口通讯的API中了。网络
先来讲说ROS社区提供的rosserial库,rosserial库是为了解决单片机与机器人之间的通讯问题,使用rosserial库能够实现单片机与机器人之间透明的ROS主题发布与订阅通讯。原理其实很简单,如图30。架构
(图30)ROS社区提供的rosserial协议ide
单片机中经过包含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这两部分的协议进行详细的讲解。
DEBUG-uart1协议内容分为:调试打印信息(stm32单片机==>机器人)、调试命令(stm32单片机<==机器人)。调试打印信息是stm32单片机向机器人发送数据,调试命令是机器人向stm32单片机发送数据。
(图32)调试打印信息(stm32单片机==>机器人)
在机器人端,对从串口获取的字符串数据流,直接用printf()函数就能够解析。
(图33)调试命令(stm32单片机<==机器人)
在机器人端,将要下发的调试命令(其实就是请求stm32单片机的版本信息与PID信息命令、请求将stm32中PID恢复为默认值命令、请求将stm32中PID设置为指定值命令)封装成对应的数据帧,而后让串口下发由这15个字节组成的数据帧就好了。
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技术交流群,一块儿讨论学习^_^
关于咱们:
视频教程: