机器人控制:从传感器到全身控制

1.4k 词

涵盖机器人常用传感器、编码器、以及现代控制方法(WBC、LQR、MPC)。

惯性传感器(IMU)

IMU(Inertial Measurement Unit)测量物体的角速度和加速度,通过积分得到姿态、速度和位置。

组成

  • 加速度计:测量线加速度(含重力分量)
  • 陀螺仪:测量角速度
  • 磁力计(部分 IMU 包含):测量地磁场,用于修正航向角

姿态解算

从角速度积分得到姿态角(欧拉角/四元数),但纯积分存在漂移。通常使用互补滤波卡尔曼滤波融合加速度计和陀螺仪数据。

编码器

编码器测量电机转动角度和速度,分为:

  • 增量式:输出脉冲信号,需要累计计数(断电后丢失位置)
  • 绝对式:直接输出绝对角度值(断电不丢失)

编码器数据通过硬件接口(CAN/串口)读取,经过减速比换算得到关节实际角度。

传感器数据分析

机器人系统中常见传感器数据处理:

  • 低通滤波:去除高频噪声
  • 移动平均滤波:平滑数据,减少毛刺
  • 中值滤波:去除脉冲噪声
  • 卡尔曼滤波:多传感器融合的最优估计

现代控制方法

LQR(线性二次型调节器)

适用于线性系统的最优控制。通过求解 Riccati 方程得到状态反馈增益矩阵 K,使二次型代价函数最小。

$$u = -Kx$$

  • 需要系统的线性化模型
  • 参数通过 Q(状态权重)和 R(控制权重)矩阵调节

MPC(模型预测控制)

在每个采样时刻求解有限时域内的优化问题,只执行第一步控制量,下一时刻重新优化。

  • 能处理约束(输入/状态限制)
  • 计算量大,对实时性有要求
  • 常用于轨迹跟踪、自动驾驶
LQR MPC
优化方式 离线求解 Riccati 方程 在线求解优化问题
约束处理 不能直接处理 天然支持
计算量
适用场景 调节、镇定 轨迹跟踪、预测

WBC(全身控制)

Whole-Body Control 将机器人的多个任务(如末端位姿、质心、姿态等)统一在一个优化框架中求解。

核心思想:将任务按优先级排列,低优先级任务在高优先级任务的零空间中执行,互不干扰。

$$\dot{q} = J_1^+ \dot{x}_1 + (I - J_1^+ J_1) J_2^+ \dot{x}_2$$

  • $J_i$:各任务的雅可比矩阵
  • $J^+$:伪逆
  • $(I - J_1^+J_1)$:任务 1 的零空间投影

WBC 在足式机器人(四足、人形)中应用广泛,能同时处理平衡、行走、操作等多个目标。

控制器插件机制

在 ROS 中,控制器以插件形式注册和加载:

1
2
3
4
5
6
7
8
9
#include <controller_interface/controller.h>
#include <pluginlib/class_list_macros.h>

class MyController : public controller_interface::Controller<JointStateInterface> {
bool init(JointStateInterface* hw, ros::NodeHandle& nh) override { ... }
void update(const ros::Time& time, const ros::Duration& period) override { ... }
};

PLUGINLIB_EXPORT_CLASS(MyController, controller_interface::ControllerBase)

通过 pluginlib 动态加载,配合 ros_control 实现热插拔式控制器管理。