跳转到内容

RL 控制示例

DR02 Pro RL 训练视频 或 Bilibili · DR02 视频教程

本示例演示如何通过 ROS2 话题与 DR02 机器人进行 RL 控制交互。

RL 训练代码:DeepRoboticsLab/rl_training

用户能够通过 /MOTION_STATE 话题切换机器人的 RL 控制状态:

运动状态状态值
空闲0
关节阻尼/软急停2
RL控制17
悬吊起立0x20006
import rclpy
from rclpy.node import Node
from 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控制模式')

通过 /STEER 话题下发归一化的速度指令控制机器人移动:

字段含义范围
x前后方向运动速度[-1, 1]
y左右方向运动速度[-1, 1]
z高度方向运动速度[-1, 1]
roll翻滚角[-1, 1]
pitch俯仰角[-1, 1]
yaw偏航角[-1, 1]
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)