苍天下的蓝耀__【毕设】六足机器人的设计
序
这个项目是我本科毕业设计作品,可实现功能有常规控制(前后左右移动、左右自旋)、保持自平衡、三档变速及自主避障功能,历时三个月在家独立完成。应各位的请求写一篇项目技术总结,用以类似项目开发参考。本文将以机械结构、硬件设计、软件设计、算法处理(核心)、GUI开发几个方面来叙述。资料下载在每章的末尾,演示视频b站链接:https://www.bilibili.com/video/BV12V41167nU
关键字:DH模型、STM32、三角步态、PWM控制、PCB、Solidworks、GUI、UCOS
一、机械结构
*机械结构直接使用的这位up的作品,非常感谢!链接:www.bilibili.com/video/BV1n4411S7Me
*因我专业是自动化,机械类不太熟悉现学的solidworks2018,推荐一个速学视频我学了差不多100分钟左右就可以进行简单修改了。链接:https://www.bilibili.com/video/BV1jt411v77o?p=1
修改后的草图
3D打印后的实物
自己喷漆,商家喷太贵啦(弄脏地面已被爸打)
组装后
(!!!注意:安装时一定要把舵机中值对应到机械结构中间部分,以保证有足够的活动范围!!!)
补充:主结构部分(PCB下面那部分六个插槽)的舵机插槽短了点可能是打印误差,我都是用锉刀磨了2、3mm才能塞进去,Link2偏偏一点问题没有奇怪= =。所有孔部分都是用胶枪粘的,,,,因为一拧螺丝进去,不到一半就断了,因该是孔径太浅了再加上打印精度不够。
3D打印图纸下载链接:https://download.csdn.net/download/qq_40690943/12663102
二、硬件设计
下位机核心用的是STM32F407,驱动部分是两路XL4016(output:5V8A),注意两路驱动分别连接左右两侧三个舵机的VCC,这样运行时每路驱动最多只会给两个足的舵机供电(三角步态后续会讲),以保证最大电流供应!
硬件清单:MG996×18、1.3寸oled×1、五轴按键×1、NRF转串口×2、超声波×1、MPU6050×1、7.2V7C锂电池×1、三线电压表×1、STM32F407最小系统×1
XL4016驱动电路(电流一定要够!否则极易失控!)
AD13设计的PCB效果图
焊接后(散热片空间计算错了emmmm)
原理图、PCB下载链接:https://download.csdn.net/download/qq_40690943/12663111
三、框架搭建
1、首先配置舵机使用的定时器,使用了三个通用定时器,两个高级定时器(舵机太多了通道不够用呀)
初始化定时器
(!!!注意:高级定时器要在通用定时器之后初始化,如果在前编译通过但会出异常,极易烧毁舵机!!!)
2、测出各个舵机的中值,之后都是用PWM值对应角度的,不了解的小伙伴可以搜下舵机控制原理。
舵机中值宏
3、开发下位机GUI,1.3寸oled配合五轴按键比较小巧灵活、便于调试
以及初始化各种外设
(!!!接受上位机命令的串口的中断抢占优先级必须高于其它模块的优先级!!!)
4、上位机:原子家的F7开发板+7寸电容屏,用NRF转串口模块与下位机通信
OS:UCOSIII
GUI:STemWin
可以直接用GUIBuilder开发
回调函数中的通知代码
界面效果
四、运动控制
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α
比较不错的参考视频:
https://www.bilibili.com/video/BV1Ts411k7wV
https://www.bilibili.com/video/BV1c7411j7Mk
https://www.bilibili.com/video/BV1dE411T73U
五、步态设计
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、通过改变延时时间调整速度(延时不能太小,否则舵机响应不及会造成损伤)
六、花里胡哨功能
1、避障模块用的超声波,只在前方装了一个,所以只能前进状态下进行避障,当检测到前方30cm内有障碍时会强制向左转,直至前方30cm内无障碍为止才跳回前进状态。反射面积有点小,在曲面障碍物前会不太好使,就像视频3:01处那样emmmm,,,(触发口是放在中断里和自平衡公用一个定时器,flag解决一切23333)
2、自平衡使用的MPU6050做传感器,能够在不稳定平面实现稳定,开环运行,未设置PID闭环(高度有限,直接把偏差按比例乘就能达到不错的效果),在横滚角(安装位置受限,就是前后)下FOOT_C、FOOT_D不做运算。
MDK中融合程序
3、LED大灯
LED片拆的台灯上的,用一个NPN三极管做开关,效果看着还挺拉风哈哈哈~~。
版权声明:本文为CSDN博主「苍天下的蓝耀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40690943/article/details/107548298
暂无评论