SLAM导航机器人零基础实战系列:(四)差分底盘设计——4.底盘ROS驱动开发

SLAM导航机器人零基础实战系列:(四)差分底盘设计——4.底盘ROS驱动开发

摘要                                            

运动底盘是移动机器人的重要组成部分,不像激光雷达、IMU、麦克风、音响、摄像头这些通用部件可以直接买到,很难买到通用的底盘。一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的;另一方面是因为底盘包含软硬件整套解决方案,是很多机器人公司的核心技术,一般不会随便公开。出于强烈的求知欲与学习热情,我想自己DIY一整套两轮差分底盘,并且将完整的设计过程公开出去供大家学习。说干就干,本章节主要内容:

1.stm32主控硬件设计

2.stm32主控软件设计

3.底盘通信协议

4.底盘ROS驱动开发

5.底盘PID控制参数整定

6.底盘里程计标


4.底盘ROS驱动开发                  

对于做纯SLAM算法、机器人导航避障、或者别的需要用到移动底盘的应用,根据底盘的通信协议,直接使用底盘ROS驱动实现跟底盘的交互。miiboo机器人底盘的ROS驱动代码组织如图36。

(图36)miiboo机器人底盘的ROS驱动代码组织

整个代码组织是一个完整的ROS功能包,功能包名为miiboo_bringup,功能包中包含两个ROS节点源码(base_controller.cpp和pid_set.cpp),不难看出这两个节点正是对底盘通信协议中的DATA-uart2与DEBUG-uart1的具体实现。base_controller.cpp负责对底盘控制驱动的具体实现,pid_set.cpp负责对底盘调试驱动的具体实现。本节重点对这两个节点进行讲解,至于功能包名下的其他内容将放在后面的miiboo机器人SLAM导航实战中具体展开。

4.1.底盘控制节点             

接口:

底盘控制节点对下与底盘DATA-uart2串口通信,对上开放ROS接口为应用层提功能数据发布与订阅,便于SLAM导航等功能的开发。

(图37)底盘控制节点接口

节点实现源码解析:

底盘控制节点由base_controller.cpp实现。程序主要分为两个过程:订阅topic数据并下发给底盘、从底盘接收数据并发布到topic。

首先,程序订阅/cmd_vel作为用户的控制输入,将控制输入的速度信息转换为通信协议中DATA-uart2规定的格式,然后通过串口下发给底盘,实现对底盘的运动控制。订阅/cmd_vel的回调函数和串口下发函数分别如图38和图39所示。

(图38)订阅/cmd_vel的回调函数

(图39)串口下发函数

然后,程序从串口获取底盘的速度反馈,并将速度反馈数据放入航迹推演算法中进行解算,得到里程计,将反馈回来的左轮速度、右轮速度值分别发布到/wheel_left_speed和/wheel_right_speed主题,将解算出来的里程计分别发布到/odom和/tf主题。由于不同的算法对里程计的格式要求不一样,所以将里程计同时发布到/odom和/tf主题,便于不同的算法使用。从串口获取速度反馈并求解里程计和发布反馈速度与里程计到topic

分别如图40和图41所示。

(图40)从串口获取速度反馈并求解里程计

(图41)发布反馈速度与里程计到topic

基于航迹推演算法的里程计解算:

首先,我们需要了解一下ROS下的机器人坐标系为右手坐标系,如图42,机器人底盘的正前方为x轴正方向、机器人底盘的正上方为z轴正方向、机器人底盘的正左方向为y轴正方向、机器人航向角theta坐标轴以x轴为0度角并逆时针方向增大。一般以机器人底盘上电时刻,机器人底盘的位置建立里程计坐标系,也就是说机器人底盘的起始位姿为原点O,机器人底盘在运动过程中,通过前一时刻的位置和左、右轮位移可以推算出机器人底盘的下一时刻位姿,这就是航迹推演算法。

(图42)机器人右手坐标系与航迹推演

我们这里值讨论两轮差分底盘的情况,分析如图41,通过前一时刻的位置和左、右轮位移可以推算出机器人底盘的下一时刻位姿。航迹推演的数学模型如图43。

(图43)航迹推演的数学模型

在很短的时间间隔里,前后两个机器人位姿满足一定的关系,具体看图44的推导。

(图44)短时间内两个机器人位姿的约束关系

这样,经过进一步的化简,可以得到我们解算里程计的核心公式,如图45。

(图45)解算里程计核心公式

不难发现,上面程序中解算里程计部分的代码就是这个核心公式的具体编程实现。关于航迹推演算法更详细的推导,请参考:

12.1.1. Using Odometry to Track Robot Movement — Robotics Programming Study Guide

4.2.底盘调试节点            

接口:

底盘调试节点对下与底盘DEBUG-uart1串口通信,对上通过命令行终端指令交互方式。

(图46)底盘调试节点接口

节点实现源码解析:

底盘调试节点由pid_set.cpp实现。程序主要分为两个过程:从终端获取调试命令并下发给底盘、从底盘接收应答数据并显示在终端。

首先,程序从终端获取调试命令,用户可输入数字1,2,3,如果用户输入3会再要求输入kp,ki,kd这三个数,将调试命令转换为通信协议中DEBUG-uart1规定的格式,然后通过串口下发给底盘,实现对底盘的调试。调试命令获取与下发如图47。

(图47)调试命令获取与下发

然后,程序从串口获取底盘的应答信息,这里就比较简单了,直接将获取的应答数据原样打印到终端就行了,如图48。

(图48)应答数据原样打印

后记              

如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加QQ技术交流群(117698356

参考文献

[1] 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

QQ技术讨论群: 117698356

  • 6
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ROS机器人差分驱动是指机器人底盘采用个独立的驱动轮来实现移动和转向的一种方式。这种驱动方式常用于室内移动机器人或小型机器人,因其简单可靠且易于控制而被广泛应用。 差分驱动机器人底盘通常由驱动轮和一个支撑轮组成。其中,两个驱动轮位于机器人前方,两个驱动轮位于机器人后方。两个前轮和两个后轮通过差速驱动系统进行控制,可以实现机器人的前后移动和转向。 控制差分驱动机器人通常需要计算机视觉、激光雷达等传感器提供的信息,并利用机器人操作系统(ROS)进行控制。使用ROS可以方便地编写控制算法,将传感器信息与机器人的运动进行结合,实现自主导航、避障等功能。 在控制差分驱动机器人时,需要精确计算每个驱动轮的速度和方向,以实现所需的运动。通常,通过控制前后驱动轮的差速来控制机器人的转向,通过控制两个轮子的速度差来控制机器人的移动。 差分驱动机器人具有较好的机动性和稳定性,可以在狭小的空间中自由移动。同时,由于每个驱动轮都是独立控制的,机器人具有良好的灵活性和操控性。 总之,ROS机器人差分驱动是一种常见且实用的底盘驱动方式,可以通过控制驱动轮的速度和方向来实现机器人的移动和转向,为机器人的自主导航和避障提供了便利。 ### 回答2: ROS机器人差分驱动是一种常用的机器人运动方式。差分驱动是指机器人通过两侧轮子的差速运动来实现转向和前进后退。在差分驱动中,机器人有两个主动轮和两个被动轮。主动轮通过电机驱动来实现转动和前进后退,而被动轮则只能自由滚动而不能主动转动。 ROS(Robot Operating System)是一个开源的机器人操作系统,提供了一系列工具和库函数,方便开发者进行机器人软件开发和控制。ROS支持多种机器人运动方式,其中包括差分驱动。使用ROS开发差分驱动机器人非常方便,只需安装相关驱动包和控制节点,即可利用ROS提供的运动控制命令实现机器人的运动控制。 差分驱动机器人的控制主要基于电机的转速控制和轮子的差速运动。通过控制两侧轮子的转速差异,可以实现机器人的转向。若两侧轮子的转速相同,则机器人会直线行进;若两侧轮子的转速不同,则机器人会以一个轮子为转轴进行转向。通过不同的转速组合,可以实现机器人在平面上的自由运动。 实现差分驱动机器人的关键是进行良好的运动轨迹规划和速度控制。通过ROS提供的导航功能包,可以实现机器人的路径规划和定位,同时通过控制节点对机器人的电机进行速度控制,从而实现机器人的自主导航和运动控制。 总之,ROS机器人差分驱动是一种灵活、高效的机器人运动方式,可以通过ROS提供的工具和库函数来实现机器人的控制和导航。它在各种移动机器人应用中具有广泛的应用前景,并且通过不同的算法和控制策略可以实现更加复杂的机器人任务。 ### 回答3: ROS机器人差分驱动是一种常用的移动机器人驱动方式。差分驱动是指通过控制机器人两辆驱动轮的转速差异来实现机器人的转向与运动。差分驱动相比于其他驱动方式,如全向轮驱动或单轮驱动,具有以下优点: 1. 稳定性:差分驱动使用轮分布在机器人个角落,使得机器人的操作更加稳定。这是因为驱动分布均匀,对机器人的力矩分配均匀,避免了单一驱动轮承担过多压力,提高了机器人的稳定性。 2. 灵活性:差分驱动具有较高的灵活性和机动性。机器人可以向任意方向移动和转向,不受限于前进或后退。这种灵活性使得机器人在狭小空间或复杂环境中具有更大的自由度,更容易进行定位、路径规划和避障等任务。 3. 高效性:差分驱动具有较高的效率和动力输出。相比于其他驱动方式,差分驱动可以更好地分配驱动力和转向力,提高机器人的运动效率和速度。这对于需要快速移动或需要携带重负荷的机器人而言尤为重要。 总之,ROS机器人差分驱动是一种稳定、灵活和高效的驱动方式,适用于各种移动机器人应用场景。利用ROS系统的强大功能,可以轻松实现差分驱动下的机器人控制、SLAM(Simultaneous Localization And Mapping)建图、避障等高级功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值