下位机核心用的是STM32F407,驱动部分是两路XL4016(output:5V8A),注意两路驱动分别连接左右两侧三个舵机的VCC,这样运行时每路驱动最多只会给两个足的舵机供电(三角步态后续会讲),以保证最大电流供应!
硬件清单:MG996×18、1.3寸oled×1、五轴按键×1、NRF转串口×2、超声波×1、MPU6050×1、7.2V7C锂电池×1、三线电压表×1、STM32F407最小系统×1XL4016驱动电路(电流一定要够!否则极易失控!)
3
框架搭建
1)配置舵机使用的定时器,使用了三个通用定时器,两个高级定时器(舵机太多了通道不够用呀)
初始化定时器(注意:高级定时器要在通用定时器之后初始化,如果在前编译通过但会出异常,极易烧毁舵机!!!)
2)测出各个舵机的中值,之后都是用PWM值对应角度的,不了解的小伙伴可以搜下舵机控制原理。舵机中值宏:
3)开发下位机GUI,1.3寸oled配合五轴按键比较小巧灵活、便于调试:
以及初始化各种外设。(注意:接受上位机命令的串口的中断抢占优先级必须高于其它模块的优先级!!!)4)上位机:原子家的F7开发板+7寸电容屏,用NRF转串口模块与下位机通信OS:UCOSIIIGUI:STemWin可以直接用GUIBui
4
运动控制
1)运动模型使用的是DH模型,其意义在于正运动学是在已知六足机器人腿部的各个连杆长度及各个旋转角度,通过正运动学公式计算得到六足机器人足端的位姿,这里只考虑位置信息即X、Y、Z。而逆运动学就是反过来,在已知足端末尾的位置信息时,可以倒推出各个自由度的旋转角度。
2)DH模型的四个核心参数(资料来源于网络)
θn为Xn-1绕Zn-1旋转至与Xn平行的旋转角度α为Zn-1绕Xn-1旋转至与Zn平行的旋转角度dn为Zn-1与在Zn轴上分别做的两条公垂线的距离an为Zn-1与Zn的垂线距离Zn-1与Zn轴上的公垂线为0,故本设计不考虑d
3)将其余参数代入变换矩阵,我设定的θ1=90°、θ2=40°,θ3=120°,a1~a3就是连杆长度,α为90°
随后就是三个齐次变换矩阵相乘(s和c分别对应各自由度的正弦、余弦,l为Link就是a)
4)解出后得出正运动学公式
5)进而推出逆运动学公式
逆运动学公式体现在程序中:
6)OK,现在可以配置原点坐标了,将a1~a3、θ1 ~θ3(θ2、3请合理配置,太矮了影响美观,太高了活动范围太小)代入正运动学公式,这一步可以用MATLAB或者VS直接计算。
得出结果后设置宏,接下来所有的控制都是在这基础上做的偏差,例如我要让机器人向前走1cm,那么把X0-1代入逆运动学公式即可实现,其它基础控制同理。7)在前进时,不仅要改变X轴,还需改变Z轴,Z轴随着X轴的变化而变化,运用余弦定理即可解决,其它基础控制同理例如:△Z^2= △X ^2 + Z0 ^2 - 2*△X *Z0 cosα
5
步态设计
1)步态使用的是三角步态(六次项根轨迹法没吃透就抬腿硬走了emmm)
FOOT_A、FOOT_E、FOOT_D为左对足(Left_FOOT)FOOT_B、FOOT_F、FOOT_C为右对足(Right_FOOT)
以前进状态为例:前进状态逻辑,L对足首先向前迈出一步,L对足落地后,R对足紧跟着向前迈出一步但和地面保持一定高度,此时仅有L对足与地面支撑受力,随后L对足贴着地面向后一步,因为L对足与地面摩擦产生作用力使六足机器人身体向前移动一步的距离,R对足落地。随后是循环步骤执行环节,L对足向前迈出一步不落地保持悬空,R对足贴着地面向后一步,L对足落地,R对足向前迈出一步不与地面接触,L对足紧贴地面向后一步,R对足落地,随后依次循环进行。其它的基础控制逻辑大同小异。2)通过改变延时时间调整速度(延时不能太小,否则舵机响应不及会造成损伤)
6
花里胡哨功能
1)避障模块用的超声波,只在前方装了一个,所以只能前进状态下进行避障,当检测到前方30cm内有障碍时会强制向左转,直至前方30cm内无障碍为止才跳回前进状态。反射面积有点小,在曲面障碍物前会不太好使,就像视频3:01处那样。(触发口是放在中断里和自平衡共用一个定时器,flag解决一切。)
2)自平衡使用的MPU6050做传感器,能够在不稳定平面实现稳定,开环运行,未设置PID闭环(高度有限,直接把偏差按比例乘就能达到不错的效果),在横滚角(安装位置受限,就是前后)下FOOT_C、FOOT_D不做运算。MDK中融合程序:
3)LED大灯LED是拆的台灯上的,用一个NPN三极管做开关,效果看着还挺拉风哈~~