二哈Python控制说明

如何设置姿态?

一个姿态根据四条腿的转动角度或足端前后移动距离表示。

根据转动角度
# 前脚向前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)]} # 走完复位
])

不同姿态复位参数参考

如何停止?

1. 执行复位动作来覆盖之前的动作

bot.exec({ n:[ xpos(15, 15, -15, -15) ] })

2. 立即停止

bot.stop()