注: 本系列教程中开源的PCB文件、3D模型、相关代码不可用于商业用途,仅仅供大家自己打样学习自主导航小车使用。

第二版的小车主要想实现基于视觉的导航任务,考虑第一版小车硬件上存在很多问题,因此对机械也进行了改进。

1 更新日志

在自主导航小车开源项目中,我们分享了第一版的小车底盘结构和搭建过程。在使用的过程中发现了如下问题:
1、由于电机轴直接通过法兰连接轮胎,时间久了以后会导致电机轴变形,轮子和电机连接松动。
2、同一侧的轮子在原地旋转的时候,每个轮子受力不同,因此导致转向不灵活,同一侧的轮胎的速度会不一样影响里程计。

1.1 硬件方面

1、更新底盘机械机构(增加轴承和同步带),保证载重和同一侧轮子速度一直。
2、自行设计了一套电源板对外提供电源,规范布线。
3、设计了一套控制板,包含DBUS、串口、485、CAN等常用接口和隔离输入输出IO。

1.2 软件方面

1、更新小车底盘控制代码结构,将部分操作函数移到了中断函数里面。
2、增加IMU数据读取(MPU9250),增加了注释。

2 底盘硬件结构

因此我们使用了增加了轴承座和同步带来解决这个问题。下图中左侧是第一版的小车底盘,右图是第二版的小车底盘。

在这里插入图片描述

2.1 底盘机械组装

小车的机械部分我们还是每一个轮子对应连接一个电机。并利用同步带把前后的电机连接起来。小车的3D机械图纸也是开源的,可以加扣扣群获取。(这里感谢师弟(徐久铭)帮忙设计机械)
实际中各位可以按照自己的实际情况找一个铝板固定电机支座子。以下是我们所使用到的设备清单:

在这里插入图片描述
有需要硬件清单的同学可以在评论区留下邮箱,看到后发送excel到你的邮箱中。

2.2 底盘硬件框图

小车硬件框图如下图所示的,第二版小车电机共使用4个大疆的M3508 电机,电机通过CAN总线与嵌入式处理器STM32相连,小车板载的IMU(MPU9250)使用IIC总线与STM32相连。处理器使用STM32F103单片机,单片机通过232串口与工控机实现数据交换。底盘STM32处理器主要实现遥控器数据采集、IMU数据采集和电机速度的闭环控制。 底盘控制器接收遥控器或者是工控机发送的目标速度指令(v,w),根据当前电机反馈的状态数据,通过PID控制器计算控制量,最后通过CAN总线下发电流值到每一个电机上,实现速度闭环控制。
在这里插入图片描述

  • 电机使用的是大疆的M3805电机,该电机峰值功率高达220W,峰值扭矩5Nm;最大持续功率为150W,可以持续输出3.5N-m的扭矩,M3508电机使用CAN总线通讯,可实时反馈电机电流、速度、位置。
  • 遥控器使用的是大疆DT7遥控器,通讯协议为DBUS协议。使用反相器连接遥控器的引脚,将串口的波特率设置为1M以后,可通过串口解析遥控器的数据
  • IMU使用MPU9250提供三轴加速度、三轴旋转角速度和三轴的磁力,利用四元数互补滤波实现9轴姿态融合算法,计算输出3个姿态角(roll,pitch,yaw),用于测量小车姿态。
  • 超声波使用是一个自制的模块(提供ROS节点),该模块同样使用STM32作为处理器实时读取12路超声波传感器的数据,并将数据打包转换到CAN总线和串口总线上,上传到工控机中。

2.3 底盘电气系统

工业用途底盘的电气系统主要负责为传感器和工控机供电,对电池充放电进行管理,检测电池电量、过流保护及控制小车各模块上电顺序。通常小车上使用DC-DC电压转换模块对外提供12V、19V、5V 等直流电源,而小车电机这类大功率设备的供电(高压供电)应由主控板通过控制固态继电器或者接触器实现。此外电气系统还应具备过载保护的功能,当系统某一路电压出现过载时,主控板可通过控制继电器断开该路电压保障系统的安全。

实际我们搭建的小车由于使用的功率较小,因此我们对电气系统进行了简化。没有使用高低压顺序上电,也没有使用接触器控制电机的上电。电池使用的是大疆的电池,该电池自带有过放电、充电保护和电池电量显示的功能。在此基础上我们自制了如下的电源板,电源板输入20-36V DC直流,输出1路DC 5V 2A 、1路DC 3.3-19V 2A 可调电源 、1路DC 12V 3.5A、1路DC 19V 3.5A,可满足对工控机和自主导航小车车载传感器供电需求。
在这里插入图片描述
该电源板经过电子负载实际测试,5V和3.3V-19V (采用LM2596S方案),每一路可实现2A的稳定输出,加装散热片以后可实现2.5A长时间输出。
12V 在电子负载实测中可以达到长时间稳定输出3.5A 输出,加装扇热片以后可以实现4A长时间输出,短时可达4.5A。
19V在电子负载实测中可以达到长时间稳定输出3.5A 输出,加装扇热片以后可以实现4A长时间输出,短时可达4.5A。

电源板实物图如下:(该电源板的原理图可在底盘github代码仓库中找到)
在这里插入图片描述

电池依旧还是使用的和第一版小车一样的电池2块。
在这里插入图片描述
注意: 大家在选取电池的时候一定要选择带有过冲和过放保护、质量过硬的电池,否则在使用过程中可能会造成电池鼓包,产生安全隐患。

3 差速底盘软件结构

3.1 控制板介绍

新的控制板在第一版的基础上增加了12V和5V对外输出,对外引出了485和232的接口。

在这里插入图片描述
这里我们使用了多个电路板分层的思想去设计底盘的控制器,控制板和电源板的板子外形都是一样的,可以堆叠在一起。这种结构的优势在于:快速开发、积木式组合、故障快速更换。

3.2 代码结构

代码的结构并没有很大的改变,只增加了IMU的读取,以及增加了一些注释和功能

下图展示了小车底盘运动控制的功能模块图,单片机控制器主要包含有4个功能:1)解析遥控器和上位机发送过来的数据指令。2)分别设置一个PID控制器控制每一个轮子的速度。3)解析电机反馈的电机状态数据。4)上传电机数据到上位机。

这里涉及到的STM32的模块有:CAN模块串口2中断接收串口1DMA接收IIC模块
在这里插入图片描述
我们在实现上述功能的时候,将实时性要求高的操作,如PID运算,电机状态数据读取等操作放在了中断函数中,而读取遥控器数据设置小车目标速度、上传电机状态数据等实时性要求相对较弱的操作放在主循环中,通过状态变量实现。

小车底盘完整代码见github上【1】

3.3 差速底盘运动学模型

在完成小车底盘传感器的安装以后,我们首先需要分析小车的运动学模型,找到小车整车速度(v,w)与每一个电机的转动角速度的关系。小车整车的速度 V V V及航向角速度 w w w满足以下关系:
在这里插入图片描述
这里我只贴出了结论,详细的推导过程可以参考第一版小车的博客(开源自主导航小车MickX4(一)ROS底盘硬件

在这里插入图片描述

上述理论模型主要用于控制小车,当设定了小车整车的速度以后我们需要转换到每一个轮子的目标转速,最后对每个轮子分别实现变换控制。其次在推算小车的里程位置时候,我们获得的数据是小车每一个轮子的转速或者是转动的角度,此时我们需要根据上述模型,从每一个轮子的速度逆向计算小车的整体速度与位移量。

小车的控制板PCB文件、电源板3D文件和小车机械设计3D图可以通过加讨论群获取,请大家帮忙点赞收藏,支持支持。

注: 本系列教程中开源的PCB文件、3D模型、相关代码不可用于商业用途,仅仅供大家自己打样学习自主导航小车使用。

参考资料

[1] 底盘STM32代码: https://github.com/RuPingCen/mick_robot_chasiss
[2] ROS节点代码:https://github.com/RuPingCen/mick_robot

欢迎大家在评论区交流讨论(cenruping@vip.qq.com) O(∩_∩)O

或者加群水一波(1149897304)
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐