RL行走状态
RL行走状态允许机器人在下身移动的同时在上身的摆臂和关节控制之间切换。下身将执行基于强化学习的控制器,允许在三个方向上进行速度控制。
上身由状态管理器任务管理,允许用户在不同的上身控制器之间切换:
- Default:无控制器,映射到上身状态 0。
- UpperBodyActTask:摆臂任务,映射到上身状态 1。
- UpperBodyTeleTask:关节控制任务,映射到上身状态 2。
状态明细
| 状态名称 | 任务名称 | 手柄映射 | DDS 映射 | 频率 |
|---|---|---|---|---|
| RL Locomotion | LowerBodyWbcrlTask / UpperBodyStateManagerTask | RB+A | 3 | 50Hz / 500Hz |
| 可用于悬挂 | 可用于站立 | 自动保护切换 |
|---|---|---|
| 否 | 是 | 是 |
手柄控制
进入RL行走状态
初始化 AuroraCore 后,同时按下肩键 RB 和按钮 A 进入RL行走状态。
速度控制
使用左右摇杆对机器人应用速度控制。
- 左摇杆垂直轴:向前和向后移动
- 左摇杆水平轴:向左和向右移动
- 右摇杆水平轴:向左和向右转
站姿控制
使用手柄上的方向键来控制机器人的站姿。
- 按
上或下方向键来控制机器人的高度。 - 按
左或右方向键来控制机器人的俯仰角。
摆臂切换
单击按钮 B 打开摆臂,然后单击 X 关闭摆臂。
客户端控制
| 速度控制 | 站姿控制 | 关节控制 | 关节参数控制 |
|---|---|---|---|
| 是 | 否 | 上身 | 否 |
进入RL行走状态
初始化 AuroraCore 后,使用 aurora 客户端的 set_fsm_state 函数进入RL行走状态。
Python
client = AuroraClient.get_instance(domain_id=123, robot_name="gr3")
time.sleep(1)
client.set_fsm_state(3) # 切换到RL行走状态
速度控制
在发送速度命令之前,需要先切换速度源。将速度源设置为 2(客户端控制),之后通过 set_velocity 函数进行速度控制。
速度范围: vx: [-1.0, 1.0], vy: [-0.3, 0.3], vyaw: [-0.6, 0.6]
Python
client.set_velocity_source(2) # 将速度源设置为客户端控制
time.sleep(0.5)
client.set_velocity(0.3, 0.0, 0.0, 5.0) # 以 0.3 m/s 向前移动 5 秒
time.sleep(5.0)
client.set_velocity(0.0, 0.3, 0.0, 5.0) # 以 0.3 m/s 向左移动 5 秒
time.sleep(5.0)
client.set_velocity(0.0, 0.0, 0.5, 5.0) # 以 0.5 rad/s 左转 5 秒
time.sleep(5.0)
client.set_velocity(0.0, 0.0, 0.0, 1.0) # 停止
站姿控制
可通 过 set_stand_pose 函数进行站姿控制。
站姿范围: delta_z: [0.04, -0.48], delta_pitch: [-0.3, 0.5]
Python
client.set_stand_pose(-0.1, 0.0, 0.0) # 下蹲 0.1 米
time.sleep(2.0)
client.set_stand_pose(0.0, 0.2, 0.0) # 前倾 0.2 弧度
time.sleep(2.0)
client.set_stand_pose(0.0, 0.0, 0.0) # 返回默认姿势
time.sleep(2.0)
摆臂
Python
client.set_upper_fsm_state(1) # 打开摆臂
关节控制
要在 RL locomotion 状态下应用关节控制,将上身状态切换为 2。
Python
client.set_upper_fsm_state(2) # 打开关节控制
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)
可用控制组: waist、head、left_manipulator、right_manipulator、left_endeffector、right_endeffector