9. 姿态
PiCrawler 可以通过编写坐标数组来摆出特定的姿态。这里演示的是抬起右后腿的姿势。
运行代码
cd ~/picrawler/examples
sudo python3 9_do_step.py
运行程序后,机器人首先会缓慢站立起来,以达到稳定的姿态。
站立完成后,机器人会在循环中重复执行两个动作。它首先进入一个站立步态姿势,并保持该姿势几秒钟,然后切换到一个自定义步态,使四条腿移动到不同的坐标位置。这样就形成了一个重复的姿态变化动作。
机器人会持续在这两种姿态之间交替运行,直到程序被停止。如果按下 Ctrl+C,程序会安全退出,机器人也会回到坐下的姿态。
代码
#!/usr/bin/env python3
from picrawler import Picrawler
from time import sleep
# Create Picrawler instance
crawler = Picrawler()
# Leg order:
# [right front], [left front], [left rear], [right rear]
new_step = [[45, 45, -75], [45, 0, -75], [45, 0, -30], [45, 45, -75]]
# Get the default stand step from the move list
stand_step = crawler.move_list['stand'][0]
def main():
action_speed = 80 # Speed for movement actions
try:
# Stand up slowly at 40% speed to reduce current spikes
crawler.do_step('stand', 40)
sleep(1.0)
# Continuous action loop
while True:
crawler.do_step(stand_step, action_speed)
sleep(3)
crawler.do_step(new_step, action_speed)
sleep(3)
except KeyboardInterrupt:
# Handle Ctrl+C for safe exit
print("\nExiting safely...")
finally:
# Return to sitting position before shutting down
try:
crawler.do_step('sit', 40)
sleep(1.0)
except Exception:
pass
if __name__ == "__main__":
main()
它是如何工作的?
在这段代码中,你需要特别关注的是 crawler.do_step() 。
与 do_action() 类似, do_step() 也能控制 PiCrawler 的动作。
不同之处在于:前者用于执行连续动作,例如 move forward ;而后者则用来实现 stand 、 sit 等独立的姿态。
它有两种用法:
第一种:可以直接传入字符串,调用 picrawler 库中的 step_list 字典。
crawler.do_step('stand',speed)
# "speed" 表示动作速度,范围为 0~100。
第二种:也可以直接传入包含 4 组坐标值的数组。
new_step=[[45, 45, -75], [45, 0, -75], [45, 0, -30], [45, 45, -75]]
# 这四组坐标分别用于控制右前腿、左前腿、左后腿和右后腿。
每条腿都有独立的坐标系,如下图所示:
你需要分别测量每个足端的坐标,如下图所示:
顺带一提:第一种方法中调用的 step_list 其实也是由 4 组坐标值数组组成的。
step_list = {
"stand":[
[45, 45, -50],
[45, 45, -50],
[45, 45, -50],
[45, 45, -50]
],
"sit":[
[45, 45, -30],
[45, 45, -30],
[45, 45, -30],
[45, 45, -30]
],
}