RL 控制示例
DR02 Pro RL 训练视频 或 Bilibili · DR02 视频教程
本示例演示如何通过 ROS2 话题与 DR02 机器人进行 RL 控制交互。
RL 训练代码:DeepRoboticsLab/rl_training
运动状态切换
Section titled “运动状态切换”用户能够通过 /MOTION_STATE 话题切换机器人的 RL 控制状态:
| 运动状态 | 状态值 |
|---|---|
| 空闲 | 0 |
| 关节阻尼/软急停 | 2 |
| RL控制 | 17 |
| 悬吊起立 | 0x20006 |
切换至 RL 控制模式
Section titled “切换至 RL 控制模式”import rclpyfrom rclpy.node import Nodefrom drdds.msg import MotionState
class RLControlNode(Node): def __init__(self): super().__init__('rl_control_node') self.publisher = self.create_publisher( MotionState, '/MOTION_STATE', 10)
def enable_rl_control(self): msg = MotionState() msg.header.frame_id = 0 msg.data.state = 17 # RL控制状态 self.publisher.publish(msg) self.get_logger().info('已切换至RL控制模式')速度指令下发
Section titled “速度指令下发”通过 /STEER 话题下发归一化的速度指令控制机器人移动:
| 字段 | 含义 | 范围 |
|---|---|---|
| x | 前后方向运动速度 | [-1, 1] |
| y | 左右方向运动速度 | [-1, 1] |
| z | 高度方向运动速度 | [-1, 1] |
| roll | 翻滚角 | [-1, 1] |
| pitch | 俯仰角 | [-1, 1] |
| yaw | 偏航角 | [-1, 1] |
发送速度指令示例
Section titled “发送速度指令示例”from drdds.msg import Steer
def send_velocity_cmd(node, vx, vy, vyaw): msg = Steer() msg.header.frame_id = 0 msg.x = vx # 前后 (1.0 = 最大速度前进) msg.y = vy # 左右 (1.0 = 最大速度左移) msg.z = 0.0 # 高度 msg.roll = 0.0 msg.pitch = 0.0 msg.yaw = vyaw # 偏航 (旋转) node.publisher.publish(msg)