控制器描述
主循环
主程序是位于此目录下的 run_robot.py 。机器人代码以循环方式运行,通过操纵杆接口、控制器和硬件接口来协调其行为。
操纵杆接口负责从UDP套接字读取操纵杆输入,并将其转换为通用的机器人 命令 类型。另一个单独的程序 joystick.py 发布这些UDP消息,它负责通过蓝牙从PS4控制器读取输入。控制器承担大部分工作,在不同状态(小跑、行走、休息等)之间切换,并生成舵机位置目标。下面展示了控制器的详细模型。代码的第三个组件,即硬件接口,将控制器生成的位置目标转换为PWM占空比,然后将其传递给 pigpiod 的Python绑定,该绑定随后在软件中生成PWM信号,并将这些信号发送到连接到树莓派的电机。
控制器细节
此图展示了机器人控制器的细分结构。在其中,你可以看到四个主要组件:步态调度器(也称为步态控制器)、站立控制器、摆动控制器和逆运动学模型。
步态调度器负责规划在任何给定时间哪些脚应着地(站立),哪些脚应向前移动到下一步(摆动)。例如在小跑时,对角的腿对同步移动,并在站立和摆动之间轮流。如图所示,步态调度器可以被视为每条腿的指挥者,随着时间推移在站立和摆动之间切换。
站立控制器控制着地的脚,实际上非常简单。它查看期望的机器人速度,然后为这些站立的脚生成相对于身体的目标速度,该速度与期望速度方向相反。它还包含转向功能,在这种情况下,它使脚相对于身体沿与期望身体旋转方向相反的方向转动。
摆动控制器抬起刚刚完成站立阶段的脚,并将其移动到下一个触地位置。触地位置的选择是为了使脚在摆动中向前移动的距离与在站立中向后移动的距离相同。例如,如果在站立阶段脚以 -0.4m/s 的速度向后移动(以实现身体 +0.4m/s 的速度),且站立阶段持续 0.5 秒,那么我们知道脚将向后移动 -0.20m。然后摆动控制器将脚向前移动 0.20m,使其回到起始位置。你可以想象,如果摆动控制器只将腿向前移动 0.15m,那么每一步脚相对于身体就会越来越落后 -0.05m。
站立和摆动控制器都会为脚生成相对于身体质心的笛卡尔坐标中的目标位置。在笛卡尔坐标中进行站立和摆动规划很方便,但我们现在需要将其转换为电机角度。这通过使用逆运动学模型来完成,该模型在笛卡尔身体坐标和电机角度之间进行映射。这些电机角度,也称为关节角度,然后被填充到 状态 变量中,并由模型返回。