需要参考轮趣的智能小车自己搭建一台智能机器人,这里从底层控制开始逐步搭建。
控制模式
之后要自行搭建智能小车,所以将轮趣的底盘代码进行学习,根据开发手册先大致过一遍需要的内容。
有做很多个控制方法,包括了手柄、串口、CAN、ROS等,如下所示:
如上图所示,对于项目而宫,重要的是PS2控制(即迎控器控制),以及CAN控制(需要用到CAN通讯),串口控制(上位机算法的通讯),其余的关注一下就可以了。
速度单位
全部控制程序全部换算成国际单位制m/s,所以要将缉码器的原始数据转换为m/s。
这里涉及的就是轮子半径、编码器数据、控制频率、编码器精度,通过这几个数据最终完成小车速度的换算。公式如下所示:
串口控制
就是ROS与STM32的通讯,通过串口3来完成通讯。
这里需要自定义一个数据帧,通过这个数据帧来完成电机控制状态的传输通讯。这里发送的数据包括:机器人使能;机器人三轴速度;IMU三轴加速度、角速度;电池电压。还要加上串口通讯可以用作检验的帧头帧尾和校验位。
同时,串口发送一次只能发送8位,而目前数据为24位,所以数据需要拆成高8位和低8位来传输。这里就相当于自定义了一套encoder和decoder的密码模式。
这里可以借鉴他的编码方式:帧头固定0x7B,帧尾固定0x7D,用一位fag_stop表示是否使能,数据校验通过BCC校验(所有数据为异或)
具体的编码方式,也就是串口一次所传输的数据是可以自定义的,这里就不展开了,在自己做项目的时候可能还要修改一下。
APP调参
可以通过蓝牙/WIFI来完成控制,实质也是自定义数据,然后通过串口2来完成数据传输。
PS2控制
这里因为是专门的控制手柄,有自己做好的底层信号处理,对于应用层开发者而言,需要做的就是解析传输过来的信号,并完成对应的控制状态选择就可以了。
CAN控制
数据传输直接通过CAN总线来完成,需要先配置好CAN,然后自定义数据来完成传输,总体逻辑是类似的,只不过只需要关心具体的传输数据了,因为CAN是自带数据校验等的(CAN数据中自己就有校验等等的位)。
OLED显示
通过IIC总线来完成内容显示。只需要通过OLED的通讯协议,来完成画点就可以了。
陀螺仪零点漂移消除
IMU的数据存在零点漂移,需要设计一定的算法来完成滤波。
设置一定的延时,在刚上电的时候并不读取角速度值,直到超过了这个时间,才会去读取角速度值并将其作为漂移值。
运动学解算
这个就是两轮差速小车、麦轮小车等的运动学模型,将电机与机器人的运动联系起来。
这里之后的项目是需要四驱车模型,这里就记录一下四驱车的运动模型。
其中VA、VB、VC、VD分别为 A、B、C、D四个轮子的转速,也就是电机的转速;Vx为小车沿着X轴平移速度,w为小车沿Z轴的旋转速度;a=D/2为小车轮距D的一半,b=H/2为小车轴距H的一半。
最终就可解算出如下的运动学公式,将机器人运动转化为电机旋转:
PID控制
这里直接就是一个速度闭环控制,只用PI就差不多了,增量式或者位置式PI都可以。
整体程序结构图
现根据运动学模型来选择具体的计算公式,然后完成一系列外设的初始化,最后接到RTOS的任务接口,开始循环执行对应的任务。
对于遥控命令,都是通过串口/CAN的中断来获取。