一个姿态根据四条腿的转动角度或足端前后移动距离表示。
根据转动角度# 前脚向前45° 后脚向后45°
_pos = pos(45, 45, -45, -45)
bot.exec({
n: [_pos]
})
根据足端前后移动距离# 前脚向前移动15mm 后脚向后移动15mm
_pos = xpos(15, 15, -15, -15)
bot.exec({
n: [_pos]
})
接下来都以xpos作示例
一个动作可以看作是由多个姿态连接而成。
# 前后动作示例
dx = 15 # 足端前后移动距离
bot.exec({
n: [ # n是一个姿态列表 这些姿态共同构成了这个动作
xpos(-dx, -dx, -dx, -dx), # 姿态1
xpos(dx, dx, dx, dx), # 姿态2
xpos(0, 0, 0, 0) # 姿态3
]
})
一个组合动作可以看作是由多个动作连接而成。
# 完整的前后动作示例
def act1(dx=15): # 动作1 前后
return [
xpos(-dx, -dx, -dx, -dx),
xpos(dx, dx, dx, dx)
]
def act2(): # 动作2 复位
return [
xpos(0, 0, 0, 0)
]
bot.exec([ # 这个列表表示组合动作 其中的每一个节点代表一个动作
{ n: act1(), c:3 }, # 动作1 重复3次
{ n: act2(), c:1 } # 动作2 重复1次
])
# 超声波检测到障碍物执行“扑”动作 否则执行“走路”动作示例
def detect(): # 超声波距离监测函数
while True:
d = car.hcsr04(A1, A2)
if d < 10: # 退出监测的循环
break
bot.exec({ n: crack() }, wait=True) # 执行距离过近时对应的动作 默认执行动作时后一个会立马覆盖前一个 wait=True时 后一个动作会等待前一个动作执行完后再覆盖
sleep(0.5) # 给0.5s的停顿会让整个过程看起来更有节奏感
main() # 距离过近时触发的动作执行完毕后 回到主函数
def main(): # 主函数 执行“走路”动作 并开启超声波距离监测
bot.exec({ n:walk2(), c:10000})
detect()
main()
姿态传感器示例# 将二哈拿起放在斜面上观察腿部变化
while True:
r,p,y = car.motion.rpy() # 获取三轴角度
if abs(p) > 5:
bot.exec({ n:[ pos(p,p,p,p,0.2) ]}) # 腿部跟随俯仰角变化
else:
bot.exec({ n:[ pos(0,0,0,0,0.2) ]})
sleep(0.1)
内置动作使用示例
# 前后动作
bot.exec({ n:qianhou() })
内置步态使用示例(T为周期,可用于调速)
# “匍匐走”步态 走5步
bot.exec([
{ n:walk2_crawl(), c:5 },
{ n:[xpos(40, 40, -40, -40, 0.3)]} # 走完复位
])
xpos(15, 15, -15, -15)
xpos(51, 51, 0, 0)
xpos(0, 0, -47, -47)
xpos(40, 40, -40, -40)
1. 执行复位动作来覆盖之前的动作
bot.exec({ n:[ xpos(15, 15, -15, -15) ] })
2. 立即停止
bot.stop()