写在前面

在阅读主循环前,我们脑海里要时刻记住自己的任务

1.弄明白主循环里的每个模块的功能分别是什么?它所用的算法背后的物理数学基础?

2.主循环里的每个模块的输入量和输出量是什么?输入量从哪里来?输出量输出到哪里?

以下是我总结的控制程序的大框架,其中需要注意的是,图中所说足端坐标都是以每条腿与身体连接的关节为坐标系

padog.py的逻辑顺序详解

本讲只是说明总框架下的子模块有哪些?输入输出量是什么?具体原理在往后章节有单独介绍。

试想一下自己行走的步骤,首先我们得决定自己往哪个方向行走,紧接着决定自己采用什么方式去走,是采用走路,跑步还是双脚跳。当决定哪种的步态之后,我们就可以大概知道自己的步子该怎么迈了,跑步就迈的远一点,走路就近一点,双脚跳就是两只脚一起用力。最后就是控制自己的脚(关节和肌肉),往想好的地方用力便可以完成行走。当然,在行走的过程中,我们会碰到外在环境的干扰,我们需要在稳住身体重心的前提下,在开始预想的状态下,再加重一点力或者减轻一点。

四足机器人的运动控制也是如此,我们通过遥控器将前进后退和转弯的期望值通过web_c.py文件里面的次循环,传入以下这三个函数

    padog.move(thr,L,R)

    padog.height(Hgt)

    padog.gesture(Pitch,Roll,Yst)

并修改控制狗狗身体姿态的全局变量,紧接着,控制主程序mainloop()会通过gait_mode这个标志位确定狗狗走路选择的步态,可以选择walk步态或者trot步态,经过步态算法得出足端坐标。与此同时,根据身体姿态的不同,也会计算出当前姿态对应的足端坐标。两者相加便是此刻所需的足端坐标,这个足端坐标是以身体与大腿为原点建立的坐标系,并只取xoz平面确定的二维空间的上的点。所以此时,我们可以将一个三维空间的问题拆解成4个二维空间的问题进行求解。

将求出的二维平面的点进行进一步的分析,传入逆运动学模块或者VMC解耦模块,就可以计算出每个关节此时的角度。

最后将计算出的所有舵机角度,传入角度发送模块,模块通过IIC传输协议发送到舵机控制板上,便可以实现对舵机的控制,做出此刻应当做出的反应。

以此反复循环,就是控制主循环所作的内容。

补充

在V6.0版本中,陀螺仪的并非是每种模式都会用到,它仅仅是在自稳模式和walk步态中才会有采用。

在自稳模式中,又分为跌倒和非跌倒状态。非跌倒状态的机器人可以根据此刻身体姿态的不同,调节自己的关节,使四只腿都与地面接触,保持稳定。

若机器人跌倒,则可以进入一个固定的翻身起立模块,使狗狗可以重新站立。当执行翻身起立模块时,主循环可以被视为是中断的,所有的控制信号都不能影响这个过程。

总结

我将整份程序阅读完成之后,根据文章开头的简易框架进行详细补充,总结出了下图这个大框架。由图中可以看出,输入量的数据来源主要有两个,遥控器发出的值和陀螺仪计算得出的值,输入的值经过一步一步的计算最终得出舵机需要输出的占空比,最终使狗狗能够保持身体平衡并能自由行走。后续的文章是对每一个模块,从理论模型到代码实现进行讲解。第一次写博客,如果哪里有误或许写的不好欢迎大家指出。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐