跳到主要内容

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. 最后再上真机,并从低速、低增益、安全区域开始。

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