上身用户指令状态
切换到 上身用户指令状态后,用户可以为上身关节发送外部关节位置命令,以及执行器配置设置命令(如 pd 参数)。机器人将执行这些命令并相应地更新其状态。同时,下身执行器将设置为零扭矩模式。
状态明细
| 状态名称 | 任务名称 | 手柄映射 | DDS 映射 | 频率 |
|---|---|---|---|---|
| Upper UserCmd | UpperBodyUserCmdTask | 无 | 11 | 400Hz |
| 可用于悬挂 | 可用于站立 | 自动保护切换 |
|---|---|---|
| 是 | 否 | 否 |
手柄控制
此状态没有手柄控制。
客户端控制
| 速度控制 | 站姿控制 | 关节控制 | 关节参数控制 |
|---|---|---|---|
| 否 | 否 | 上身 | 上身 |
进入 UpperBodyUserCmdTask 状态
初始化 AuroraCore 后,使用 aurora 客户端的 set_fsm_state 函数进入上身用户指令状态。
client = AuroraClient.get_instance(domain_id=123, robot_name="gr2") # 初始化 aurora 客户端
time.sleep(1)
client.set_fsm_state(11) # 切换到上身用户指令状态
关节控制
可通过 set_group_cmd 函数进行关节控制。由于位置命令立即生效,建议在上身关节命令中使用插值以避免命令急剧变化。
可用控制组: waist、head、left_manipulator、right_manipulator、left_hand、right_hand
left_manipulator_init_pose = client.get_group_state("left_manipulator", key="position")
left_manipulator_target_pose = [0.0, 0.0, 0.0, -1.2, 0.0, 0.0, 0.0]
total_steps = 200
for i in range(total_steps):
# 从初始位置插值到目标姿势
left_manipulator_pose = [s + (e - s) * i / total_steps for s, e in zip(left_manipulator_init_pose, left_manipulator_target_pose)]
client.set_group_cmd({"left_manipulator": left_manipulator_pose})
time.sleep(0.01)
关节参数控制
可通过 set_motor_cfg_pd 函数进行关节控制。目前,Aurora 仅支持所有关节的 pd 控制模式。
可用控制组: waist、head、left_manipulator、right_manipulator
kp_config = {
"waist": [200],
"head": [100, 100],
"left_manipulator": [300, 300, 100, 100, 50, 50, 50],
"right_manipulator": [300, 300, 100, 100, 50, 50, 50],
}
kd_config = {
"waist": [10],
"head": [10, 10],
"left_manipulator": [10, 10, 5, 5, 5, 5, 5],
"right_manipulator": [10, 10, 5, 5, 5, 5, 5],
}
client.set_motor_cfg_pd(kp_config, kd_config)
有关关节限制,请参阅 机器人规格