跳到主要内容

RL行走状态

RL行走状态允许机器人在下身移动的同时在上身的摆臂和关节控制之间切换。下身将执行基于强化学习的控制器,允许在三个方向上进行速度控制。

上身由状态管理器任务管理,允许用户在不同的上身控制器之间切换:

  • Default:无控制器,映射到上身状态 0。
  • UpperBodyActTask:摆臂任务,映射到上身状态 1。
  • UpperBodyTeleTask:关节控制任务,映射到上身状态 2。

状态明细

状态名称任务名称手柄映射DDS 映射频率
RL LocomotionLowerBodyWbcrlTask / UpperBodyStateManagerTaskRB+A350Hz / 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)

可用控制组: waistheadleft_manipulatorright_manipulatorleft_endeffectorright_endeffector