开源自主导航小车MickX4
在学习ROS的阶段我们使用的都是标准的ROS底盘,只需要一个命令就可以启动小车,然后向 cmd_vel话题上发送数据即可控制小车移动的线速度和角速度。使用标准的ROS底盘可以使我们快速的掌握ROS导航的相关知识。处于加深对ROS自主导航小车的学习,因此设计自制一个ROS小车底盘,学习标准底盘的制作过程。
本系列教程意在分享自己学习ROS自主导航小车时候的笔记,教程内容包含了从零开始搭建一个如下所示的四轮小车模型,小车的名字为 MickX4,我们按照小车底盘硬件,然后介绍ROS建图,导航与控制这个顺序介绍小车的搭建过程。教程一共分为6篇:
开源自主导航小车MickX4(一)ROS底盘硬件
开源自主导航小车MickX4(二)ROS底盘运动控制
开源自主导航小车MickX4(三)底盘ROS节点
开源自主导航小车MickX4(四)小车cartographer建图
开源自主导航小车MickX4(五)小车室外导航
开源自主导航小车MickX4(六)总结与展望
下图是一个MickX4小车的装配效果图:
1 ROS底盘电气系统
在ROS的自主导航框架中,运动控制系统主要负责小车底盘的精准速度控制并向工控机提供底盘传感器接口,这一部分被封装成了ROS的标准接口。小车底盘接收上位机下发的速度指令(v_tar,w_tar), 根据运动学模型解算每一个电机对应的转速值,控制器根据电机当前状态实时计算控制量,控制电机达到指定的转速。实现车辆的精准控制。
通常小车的底盘控制是由单片机进行完成的,主要原因是通常电机接口不统一,部分电机采用CAN总线的方式驱动,但是有一些伺服电机采用的是PWM进行控制,而工控机通常只提供标准的接口(如,USB口、串口、以太网口)。单片机扩展IO接口容易,可控制车载其他设备(如,大灯、转向灯等)。另一方面使用的单片机进行控制的优点是单片机实时性强,可以通过单片机的中断实现实时处理,其次小车底盘的运动控制属于轻任务量的控制,而工控机适合处理大计算量的任务,如目标识别,构建环境地图等。此外,在一定程度上也体现了机器人中模块化的思想,这种结构也可减轻工控机的负担。
1.1 底盘机械组装
小车的机械部分我们用电机支座把电机固定在型材上,并使用型材搭建小车的底盘承重的支架。(这种结构很粗糙,车辆载重会影响电机的轴承,因此只适合做的算法验证的小车)
Mickx4 小车底盘组装全过程
这种结构还是比较皮实的,以下是我们在户外测试的小视频,视频中可以看到M3508电机的功率非常强劲,站个人上去也能走,但是实际测试过程中发现,四轮转向还是比较费力的,人站上去可以前后走,但是原地转向就不行了。
Mickx4 自主导航小车底盘测试
这一部分我们没有做过多的研究,只是分享了一个搭建过程,因为我们是从实验室找的废旧的材料组装的。实际中各位可以按照自己的实际情况找一个碳板或者加工一个底盘支架固定电机即可。以下是我们所使用到的设备清单:
有需要硬件清单的同学可以在评论区留下邮箱,看到后发送excel到你的邮箱中。
1.2 底盘硬件框图
这里我们首先搭建如图5-2所示的小车硬件框图,该小车电机共使用4个大疆的M3508 电机,电机通过CAN总线与处理器相连,处理器使用STM32F103单片机作为唯一的处理单元。小车板载的IMU使用IIC总线与处理器相连,超声波模块安装于小车四周,超声波由超声波控制器采集打包通过串口协议发送到控制器中。最后处理器通过串口转以太网模块对工控机提供以太网接口,通过TCP/IP 与工控机实现数据交换。
这里我们首先搭建如图5-2所示的小车硬件框图,使用STM32F1单片机作为底盘的主控制器(简称:底盘控制器),以实现遥控器数据采集、IMU数据采集、超声波和速度的闭环控制。
底盘控制器接收遥控器或者是工控机发送的目标速度指令(v,w),根据当前电机反馈的状态数据,通过PID控制器计算控制量,最后通过CAN总线下发到每一个电机上。
- 电机使用的是大疆的M3805电机,该电机峰值功率高达220W,峰值扭矩5Nm;最大持续功率为150W,可以持续输出3.5N-m的扭矩,M3508电机使用CAN总线通讯,可实时反馈电机电流、速度、位置。
- 遥控器使用的是大疆DT7遥控器,通讯协议为DBUS协议。使用反相器连接遥控器的引脚,将串口的波特率设置为1M以后,可通过串口解析遥控器的数据
- IMU使用MPU6050提供三轴加速度和三轴旋转角速度、HMC5883提供三轴的磁力,利用四元数互补滤波实现9轴姿态融合算法,计算输出3个姿态角(roll,pitch,yaw),用于测量小车姿态。
- 超声波使用是一个自制的模块,该模块同样使用STM32作为处理器实时读取16路超声波传感器的数据,并将数据打包转换到CAN总线和串口总线上,上传到底盘控制器中。
1.3 电气系统搭建
底盘的电气系统主要负责为传感器和工控机供电,对电池充放电进行管理,检测电池电量、过流保护及控制小车各模块上电顺序。通常小车上使用DC-DC电压转换模块对外提供12V、19V、5V 等直流电源,而小车电机这类大功率设备的供电(高压供电)应由主控板通过控制固态继电器或者接触器实现。此外电气系统还应具备过载保护的功能,当系统某一路电压出现过载时,主控板可通过控制继电器断开该路电压保障系统的安全。
实际我们搭建的小车由于使用的功率较小,因此我们没有使用高低压顺序上电,也没有使用接触器控制电机的上电。电池使用的是大疆的电池,该电池自带有过放电、充电保护和电池电量显示的功能,对电气系统进行了简化。
下图显示了我们所使用的DC-DC模块和电池。
注意: 大家在选取电池的时候一定要选择带有过冲和过放保护、质量过硬的电池,否则在使用过程中可能会造成电池鼓包,产生安全隐患。
2 差速底盘运动学模型
在完成小车底盘传感器的安装以后,我们首先需要分析小车的运动学模型,找到小车整车速度(v,w)与每一个电机的转动角速度的关系。
主流的小车底盘按照转向方式分为差速转向底盘、全向轮底盘、阿卡曼转向底盘。其中差速底盘由于其结构简单通常被研究平台所采用,而阿卡曼转向的底盘主要用于自动驾驶领域。
四轮差速底盘如图5-4所示,四轮差速底盘的转向中心在小车的几何中心上。几何中心到小车四个轮子的距离相等,通常四轮差速模型是按照左右两侧轮子的速度一样,即当做两轮模型来控制的。四轮差速模型在车辆转弯的时候依靠轮胎的打滑实现转向,
因此可以假设 v 1 = v 2 v1=v2 v1=v2, v 3 = v 4 v3=v4 v3=v4
此处我们以图2中的差速模型进行讨论其运动学特性。通常小车采用右手坐标系(右手食指为x方向,大拇指指向Z轴方向,中指指向Y方向),这里假设小车左轮的速度为 v l v_l vl,右轮的速度为 v r v_r vr,左右轮间距为 2 l 2l 2l,小车整车的速度为 V V V,航向角速度为 w w w(角速度定义逆时针方向为正)。小车转弯的半径为 R R R,则小车的转向半径R满足:
小车左右轮线速度满足:
因此有(1)和(2)式可以得到左右轮的线速度为:
对上式中的两个方程联立求解可以得到小车整车的速度 V V V及航向角速度 w w w满足以下关系:
上述理论模型主要用于控制小车,当设定了小车整车的速度以后我们需要转换到每一个轮子的目标转速,最后对每个轮子分别实现变换控制。其次在推算小车的里程位置时候,我们获得的数据是小车每一个轮子的转速或者是转动的角度,此时我们需要根据上述模型,从每一个轮子的速度逆向计算小车的整体速度与位移量。
在完成小车底盘传感器的安装以后,我们在下一部分根据小车的运动学模型,找到小车整车速度
(v,w)与每一个电机的转动角速度的关系,并为小车设计速度控制器,实现小车的遥控运动。
参考资料
【1】当前小车底盘的代码位于:https://github.com/RuPingCen/mick-robot-chasiss
欢迎大家点赞在评论区交流讨论(cenruping@vip.qq.com) O(∩_∩)O
或者加群交流(1149897304)
来源:oschina
链接:https://my.oschina.net/u/4300092/blog/4565903