Skip to main content

View as Markdown

Page content converted to Markdown. Use the original page link at the end to explore interactive graphics.

7. 系统集成

控制器不是孤立公式。真正做机器人项目时,你需要把控制器接到仿真器、ROS2、运动规划、强化学习策略或 VLA 动作接口上。这一章梳理常见接线方式。

7.1 控制接口​

接任何控制器前,先明确:

  1. 输入是什么?
  2. 输出是什么?
  3. 运行频率是多少?

常见输入:

  • 目标关节角
  • 目标关节速度
  • 目标末端位姿
  • 目标底盘速度
  • 参考轨迹
  • 当前关节状态、IMU、力传感器、视觉估计

常见输出:

  • 位置命令
  • 速度命令
  • 力矩命令
  • 电流命令
  • 底盘线速度 / 角速度

频率不匹配是机器人系统里非常常见的问题。VLA 可能 5Hz 出动作,底层电机控制可能 1kHz 运行。中间必须有动作保持、插值、滤波或轨迹生成。

7.2 ROS2 control​

ros2_control 可以理解为 ROS2 里的控制器和硬件接口框架。它把上层控制器和底层硬件解耦:

MoveIt 2 / 控制节点
|
v
controller_manager
|
v
controller
|
v
hardware_interface
|
v
真实电机 / 仿真假硬件

在 MoveIt 2 基础与运动规划 里,机械臂轨迹会交给 ros2_control 里的控制器执行。真实项目里,你需要配置:

  • 关节列表
  • 控制器类型
  • command interface,例如 position / velocity / effort
  • state interface,例如 position / velocity
  • 控制器启动和激活流程

7.3 MoveIt 2 接口​

MoveIt 2 主要负责规划,不负责底层电机闭环。

典型链路:

目标末端位姿
-> MoveIt 2 规划关节轨迹
-> trajectory controller
-> ros2_control hardware interface
-> 仿真或真机

如果你发现 MoveIt 2 里轨迹规划成功,但机器人不动,优先检查:

  • 控制器是否启动。
  • 控制器名字是否和 MoveIt 配置一致。
  • 关节名是否完全匹配。
  • command interface 是否匹配。
  • 轨迹时间戳是否合理。
  • 当前 joint state 是否发布。

规划成功只是上半场,控制器执行成功才是完整闭环。

7.4 仿真接口​

仿真器通常提供两类接口:

  • 直接写控制输入,例如 data.ctrl[:] = torque_cmd。
  • 配置 actuator,让仿真器内部做位置 / 速度 / 力矩控制。

做控制器学习时,推荐先从显式控制开始:

while sim_running:
q = read_joint_position()
dq = read_joint_velocity()
torque = pd_control(q_des, dq_des, q, dq, kp, kd)
data.ctrl[joint_id] = torque
mujoco.mj_step(model, data)

这样你能清楚看到每个控制周期发生了什么。等控制器稳定后,再接更复杂的 actuator、ROS2 bridge 或策略模型。

7.5 RL 策略接口​

强化学习策略不一定直接输出底层力矩。常见动作空间包括:

策略输出底层控制器常见场景
目标关节角PD四足 locomotion
目标关节角残差PD + residual在参考步态上微调
目标速度速度控制 / MPC移动机器人
末端位姿IK + 轨迹控制机械臂操作
直接力矩力矩控制高动态仿真策略

让策略输出目标关节角,再由 PD 执行,是一种很常见的工程折中:策略负责高层协调,PD 负责高频稳定。

7.6 VLA 动作接口​

VLA 可能输出:

  • 末端位姿增量
  • 离散动作 token
  • 一段 action chunk
  • 夹爪开合命令
  • 自然语言子目标

这些动作通常不能直接进入电机。中间需要动作适配层:

VLA 动作
-> 动作反归一化
-> 坐标系转换
-> 限幅和安全检查
-> IK / 轨迹生成
-> 控制器执行

VLA 系统的稳定性,很大一部分取决于这个动作适配层是否清楚。模型输出错一点时,控制器和安全层要能阻止错误被放大成危险动作。

7.7 调试顺序​

不要一上来就把所有模块连起来。更稳的顺序是:

  1. 单独验证传感器读数和单位。
  2. 单独验证执行器命令方向和限幅。
  3. 跑单关节 PD。
  4. 跑多关节定点控制。
  5. 跑轨迹跟踪。
  6. 接运动规划器。
  7. 接 RL / VLA 策略。
  8. 最后再上真机,并从低速、低增益、安全区域开始。

如果系统不稳定,先把上层策略断开,用固定目标验证底层控制。不要在控制器还没稳定时调模型输出。