首页-达尔闻    全部    毕业设计| 自制六足机器人

毕业设计| 自制六足机器人

六足机器人可实现功能有:常规控制(前后左右移动、左右自旋)、保持自平衡、三档变速及自主避障功能,历时三个月在家独立完成。
以下分享主要以机械结构、硬件设计、软件设计、算法处理(核心)、GUI开发几个方面来叙述。
收藏
  • 今天我们分享的是一个本科毕设六足机器人,较之前分享的毕设,技术难度上有很大升级。如果对机器人技术不是特别感兴趣的,或是没有耐心的朋友们,慎入。本次分享的重点给大家提供设计思路,希望对入坑六足机器人的同学有帮助。

    六足机器人的制作者是苍天下的蓝耀(同B站ID),在他的csdn博客上也有详细的介绍,感兴趣的可以去看看哦。

    从视频上也可以看出,六足机器人可实现功能有:常规控制(前后左右移动、左右自旋)、保持自平衡、三档变速及自主避障功能,历时三个月在家独立完成。

    以下分享主要以机械结构、硬件设计、软件设计、算法处理(核心)、GUI开发几个方面来叙述。

    关键字:DH模型、STM32、三角步态、PWM控制、PCB、Solidworks、GUI、UCOS。

     

    1机械结构

    机械结构直接使用的是B站up的分享的,但是B站视频已经下掉了。

    我专业是自动化,机械类不太熟悉,现学的solidworks2018,推荐一个速学视频,我学了差不多100分钟左右就可以进行简单修改了。链接:https://www.bilibili.com/video/BV1jt411v77o?p=1

    修改后的草图:

    3D打印后的实物:

    自己喷漆,商家喷太贵啦(弄脏地面已被爸打)

    组装后(注意:安装时一定要把舵机中值对应到机械结构中间部分,以保证有足够的活动范围!!!)

    补充:主结构部分(PCB下面那部分六个插槽)的舵机插槽短了点可能是打印误差,我都是用锉刀磨了2、3mm才能塞进去,Link2偏偏一点问题没有奇怪= =。所有孔部分都是用胶枪粘的,因为一拧螺丝进去,不到一半就断了,应该是孔径太浅了再加上打印精度不够。

    3D打印图纸可以在“达尔闻说”微信回复:六足机器人,获取。

     

    2硬件设计

    下位机核心用的是STM32F407,驱动部分是两路XL4016(output:5V8A),注意两路驱动分别连接左右两侧三个舵机的VCC,这样运行时每路驱动最多只会给两个足的舵机供电(三角步态后续会讲),以保证最大电流供应!

    硬件清单:MG996×18、1.3寸oled×1、五轴按键×1、NRF转串口×2、超声波×1、MPU6050×1、7.2V7C锂电池×1、三线电压表×1、STM32F407最小系统×1

    XL4016驱动电路(电流一定要够!否则极易失控!)

    焊接后(散热片空间计算错了emmmm):

    原理图、PCB文件在“达尔闻说”微信回复:六足机器人,获取。

     

    3框架搭建

    1)配置舵机使用的定时器,使用了三个通用定时器,两个高级定时器(舵机太多了通道不够用呀)

    初始化定时器(注意:高级定时器要在通用定时器之后初始化,如果在前编译通过但会出异常,极易烧毁舵机!!!)

    2)测出各个舵机的中值,之后都是用PWM值对应角度的,不了解的小伙伴可以搜下舵机控制原理。舵机中值宏:

    3)开发下位机GUI,1.3寸oled配合五轴按键比较小巧灵活、便于调试:

    以及初始化各种外设。

    (注意:接受上位机命令的串口的中断抢占优先级必须高于其它模块的优先级!!!)

    4)上位机:原子家的F7开发板+7寸电容屏,用NRF转串口模块与下位机通信

    OS:UCOSIII

    GUI:STemWin

    可以直接用GUIBuilder开发

    回调函数中的通知代码

    界面效果:

    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三极管做开关,效果看着还挺拉风哈~~

Control Render Error!ControlType:productSlideBind,StyleName:Style1,ColorName:Item0,Message:InitError, ControlType:productSlideBind Error:未将对象引用设置到对象的实例。