这项目是参加第十届机械创新设计大赛的作品,围绕“自然-和谐”的主题,对自然界动物蝎子进行仿生设计。将仿生学与机械相结合,根据生物界蝎子的生理结构和行为举止,设计了一种能够运用六足稳定,实现行走、转弯等系列动作的仿生蝎子机器人。第一次写文章,为了留个纪念,就在这写点东西,顺便分享参赛作品的制作吧。某站演示视频如下:stm32六足蝎子机器人(开源)_哔哩哔哩_bilibilis
前言
机械结构我就不多说了,学过SolidWorks的小伙伴做起来挺简单,然后3D打印出来。尾巴是一个机械臂,是跟着某站的太极创客做的,他们的官方网站开源了,用的是arduino开发。重点是步态程序部分,那就详细讲讲。
主控用的是STM32RCT6,舵机的控制用的是pca9685,IIC总线与单片机通讯,16路舵机驱动板,用了2个,体验不太好,经济条件允许的情况下建议用幻尔或者众灵科技等等那些24路舵机驱动板,或者自己画一个板打出来也可以。用了一块7.4v 2200mAh 2S锂电池,放电量20c,满电状态下最大可以放电44A,电池连接到降压模块(同时起稳压作用),mg996系列的一般调到6v即可。一共需要18个舵机,没有经济的情况下就去买便宜的mg996,有经济情况下肯定要买数字舵机呀,记得区分度数,有90度,180度和270度等等的舵机,我用的是180度的。
总结一下:需要个stm32主控,舵机驱动板,电池,稳压模块,舵机。舵机标准件(减去了建模的烦恼,还是铝合金材质,轻又坚硬)
运动学分析
自然界的昆虫一般都是用的三角步态来达到疾走的目的,如下图说的一般来讲三个A为一组腿,三个B为一组腿,每三个构成一个三角形,当其中一组处于支撑相的时候,另一组要迅速的处于悬空相,这两者之间是交替互换的,前足固定产生摩擦力带动重心移动,后足有转变方向的作用,他们是交替支撑身体的,所以总的来说三角步态还是相当稳定的步态,相比较其他的方式有很大的优越点,下面用图来简单表示下:
以前进为例:
以上A1、A2、A3为L对足,B1、B2、B3为右对足;
前进状态逻辑,L对足首先向前迈出一步,L对足落地后,R对足紧跟着向前迈出一步但和地面保持一定高度,此时仅有L对足与地面支撑受力,随后在R对足抬起前移时,L对足贴着地面向后一步,因为L对足与地面摩擦产生作用力使六足机器人身体向前移动一步的距离,R对足落地。随后是循环步骤执行环节,L对足向前迈出一步不落地保持悬空,R对足贴着地面向后一步,L对足落地,R对足向前迈出一步不与地面接触,L对足紧贴地面向后一步,R对足落地,随后依次循环进行。
下面便是对单只脚坐标系建立及分析:
图3.腿部简化分析模型
θn为Xn-1绕Zn-1旋转至与Xn平行的旋转角度;
α为Zn-1绕Xn-1旋转至与Zn平行的旋转角度;
dn为Zn-1与在Zn轴上分别做的两条公垂线的距离;
an为Zn-1与Zn的垂线距离;
将其余参数代入变换矩阵,我设定的θ1=90°、θ2=60°,θ3=100°,a1~a3就是连杆长度,α为90;°
随后就是三个齐次变换矩阵相乘(s和c分别对应各自由度的正弦、余弦,l为Link就是a)
依据 D-H 表,将参数代入变换矩阵 A 中。
表1 D-H表
序号 | θ | d | a | α |
1 | θ1 | d 1 | a 1 | 90 |
2 | θ2 | d 2 | a 2 | 0 |
3 | θ3 | d 3 | a 3 | 0 |
得到每个关节的变换矩阵后,可得到从关节 1 变换到关节 3 的最终变换:
上面尾端位置三式表达的意义是在知道每个关节的旋转角度后,就可以求得单腿简化模型的尾端位置。正运动学公式可以在MATLAB或者VB计算求出初始坐标。有运动学正解就有逆运动学解,其意义是在单腿简化模型的位姿为已知的情况下,求得每个关节的旋转角度,且运动学逆解的结果是唯一的。
逆运动学公式如下:
bb了这么多,其实也就是把正逆运动最后那个公式代进去MATLAB计算就可以啦,求出来单条腿三个舵机的运动角度,以前进为例,记录下来。
步态分析
步态的设计可以说是困扰了我非常久的时间,直到比赛前一个星期才堪堪做出来。首先要学stm32的ucosiii系统,掌握任务创建,删除,挂起,恢复,时间片轮转调度等等。主要用了时间片轮转法(Round-Robin,RR)主要用于分时系统中的进程调度。为了实现轮转调度,系统把所有就绪进程按先入先出的原则排成一个队列。新来的进程加到就绪队列末尾。每当执行进程调度时,进程调度程序总是选出就绪队列的队首进程,让它在CPU上运行一个时间片的时间。时间片是一个小的时间单位,通常为10~100ms数量级。当进程用完分给它的时间片后,系统的计时器发出时钟中断,调度程序便停止该进程的运行,把它放入就绪队列的末尾;然后,把CPU分给就绪队列的队首进程,同样也让它运行一个时间片,如此往复。这个是官方解释。大概意思就是肉眼上同步把,在微秒时间内切换任务。我将六条腿分别由六个进程控制,使用时间片轮转运行实现同步,其他每一个模块的采集程序各占用一条进程,通过一条优先级最高的主进程控制各个进程的开关以及信息的采集发送。实现了肉眼上实时的运动。
还不会的话就看看原子哥的实际操作:
【正点原子】手把手教你学UCOSIII教学视频-基于STM32平台_哔哩哔哩_bilibili
这是对于时间片轮转调度的使能以及左前腿任务的创建:
下面是六条腿的任务函数,以下展示左前跟右前腿:
这个是右前腿的任务函数,分为6步,抬起,前移,放下,贴地后移,贴地后移分成3个动作,为了对应抬起前移放下这三个,实现同步。(度数都是通过逆运动计算好的,取整了)
总结
讲到这里其实跟开源差不多了,因为省赛时间比较赶,并没有写挂起任务的函数,所以说一旦通电就一直跑,反正线上答辩他也不知道能不能停下来哈哈哈哈,学会前进,转弯也很简单,也就是绕机器人中心每条腿抬起转动相同角度即可,也是因为我没有写挂起任务,就懒得写转弯的代码了。代码有点乱就不想发出来了,真的不会可以私信我,其实大家学完ucosiii系统就可以做出来了。暑假不在学校大概也不会弄六足了,到此为止了。这次省赛让我用stm32顺心应手了,买了几个数字舵机打算暑假做个六轴机械臂,数字舵机好贵。。。