1. 四足机器人本体感知里程计技术解析
在机器人定位导航领域,本体感知里程计(Proprioceptive Odometry)正逐渐成为无外部传感器环境下的关键技术方案。这项技术通过整合机器人自身的IMU和关节编码器数据,实现了不依赖视觉或激光雷达的位姿估计能力。对于四足机器人这类动态运动平台而言,传统基于外部传感器的定位方式在复杂光照、粉尘环境或植被覆盖区域常常失效,而本体感知方案则展现出独特的鲁棒性优势。
1.1 技术挑战与核心思路
当前本体感知里程计面临三个主要技术瓶颈:IMU积分漂移、关节速度测量噪声以及长期高度估计不稳定。IMU的双重积分会放大加速度计的微小偏差,导致位置估计在几分钟内就可能产生数米的误差。同时,电机编码器的量化噪声和数值微分过程会引入足端速度观测的脉冲干扰,严重影响运动学约束的可靠性。
CAPO(Contact-Anchored Proprioceptive Odometry)框架的创新之处在于将接触足端视为"运动学锚点":当足端与地面保持接触时,其世界坐标系位置应保持恒定,从而为机体位姿估计提供间歇性的全局约束。这种思路类似于人类在黑暗环境中通过触摸墙壁来校正自身位置感知,只不过机器人是用其足端接触点作为空间参考。
关键技术启示:接触锚定本质上是在时间域上离散地建立世界坐标系约束,相比连续的外部传感器观测,虽然信息量减少,但可靠性显著提高,特别适合动态接触场景。
1.2 系统架构与数据流
CAPO的系统架构包含五个核心模块:
- 接触检测模块:基于关节扭矩估计足端接触力,采用阈值法判断接触状态
- 落足点记录模块:在足端触地瞬间记录世界坐标系下的接触点坐标
- 高度校正模块:通过聚类算法消除高度测量的小偏差累积
- 速度滤波模块:采用IKVel-CKF抑制编码器量化噪声
- 航向校正模块:利用多足接触几何约束抑制IMU航向漂移
数据流处理流程如下:
graph TD A[IMU数据] --> B[姿态预估] C[关节编码器] --> D[正向运动学] D --> E[足端位置/速度] E --> F[接触检测] F -->|接触状态| G[落足点记录] G --> H[高度校正] E --> I[IKVel-CKF滤波] I --> J[速度约束] B --> K[多传感器融合] J --> K H --> K2. 接触锚定关键技术实现
2.1 基于扭矩的接触检测
接触检测的可靠性直接影响运动学约束的质量。传统基于足端力阈值的检测方法在动态冲击下容易产生误判,CAPO创新性地采用关节扭矩反推足端接触力的方法:
def estimate_foot_wrench(joint_torques, jacobian): # 通过虚功原理计算足端力 # J^T * f = τ → f = (JJ^T)^-1 Jτ return np.linalg.pinv(jacobian.T) @ joint_torques实际部署时需要注意:
- 雅可比矩阵需根据当前关节角度实时计算
- 力阈值fth需针对不同机器人平台进行标定
- 接触状态需要添加滞后滤波防止高频切换
实验数据显示,相比简单的阈值法,扭矩反推方法在Astrall机器人上使接触检测准确率从82%提升至96%,特别是在楼梯过渡等复杂地形场景表现突出。
2.2 落足点记录与高度校正
落足点记录看似简单,但隐藏着两个关键技术细节:
触地瞬间检测算法:
bool is_touchdown(int leg_idx, float current_force) { static float prev_force[4] = {0}; bool contact_now = current_force < F_THRESHOLD; bool contact_prev = prev_force[leg_idx] < F_THRESHOLD; prev_force[leg_idx] = current_force; return contact_now && !contact_prev; }高度聚类校正算法:
- 维护一个高度记录集合H={(hₙ,wₙ,tₙ)},包含高度值、置信权重和最后更新时间
- 新高度值首先与现有记录匹配(|z-hₙ|<Δh)
- 匹配成功则进行高度校正:z ← hₙ + (z-hₙ)*α
- 更新匹配记录的权重和时间戳:wₙ ← wₙ*exp(-Δt/κ) + 1
- 无匹配时创建新高度记录
该算法在Unitree Go2 EDU的楼梯实验中,将垂直方向的累计误差从1.2m降低到0.1m以内,效果显著。
3. 逆运动学容积卡尔曼滤波设计
3.1 编码器噪声问题分析
电机编码器的量化误差会通过运动学链放大,在足端速度观测中表现为脉冲式干扰。实验数据显示,12位编码器在300RPM转速下,足端速度噪声可达标称值的200%。传统EKF由于线性化近似,对这种非线性噪声抑制效果有限。
3.2 IKVel-CKF算法实现
容积卡尔曼滤波(CKF)采用确定性采样点逼近非线性分布,避免了雅可比矩阵计算:
状态变量: x = [r_x, r_y, r_z, v_x, v_y, v_z]ᵀ (髋关节到足端的相对位置和速度)
观测模型: z = h(x) + v = [θ₁,θ₂,θ₃, θ̇₁,θ̇₂,θ̇₃]ᵀ
核心滤波步骤:
- 生成2n个容积点(n为状态维度)
- 通过非线性观测模型传播容积点
- 计算预测均值和协方差
- 更新卡尔曼增益和状态估计
实测数据显示,IKVel-CKF使足端速度噪声降低到标称值的25%以内,虽然引入约20ms的相位延迟,但显著提升了接触约束的可靠性。
4. 多平台实验验证
4.1 仿真环境测试
在Gazebo仿真中设置两种测试场景:
- 平坦地形闭环轨迹(200m)
- 楼梯攀爬轨迹(15m垂直升降)
性能对比数据:
| 指标 | CAPO | CAPO-CKF | 激光SLAM |
|---|---|---|---|
| 水平误差(m) | 0.51 | 0.57 | 0.53 |
| 垂直误差(m) | 0.007 | 0.007 | 0.65 |
| CPU占用(%) | 12.3 | 28.7 | 45.2 |
特别值得注意的是,在楼梯场景中,原始CAPO因速度尖峰导致一次高度估计错误(约8cm),而CAPO-CKF版本全程保持稳定。
4.2 实物机器人测试
在四款机器人平台上进行闭环测试:
Unitree Go2 EDU:
- 120米篮球场闭环:2.21m误差
- 8米阶梯往返:<0.1m垂直误差
Astrall点足机器人:
- 200米水平闭环:0.16m误差
- 15米垂直闭环:0.22m误差
Astrall轮腿机器人:
- 700米长距离测试:7.68m误差
- 20米垂直测试:0.54m误差
轮式平台在长距离测试中表现较差,主要原因是未建模的轮毂打滑现象。这提示我们下一步需要引入滑移检测算法。
5. 工程实践建议
在实际部署CAPO系统时,我们总结了以下经验教训:
参数调优指南:
- 接触力阈值fth:从0.5倍静态重量开始调整
- 高度聚类分辨率Δh:设为足端半径的2-3倍
- CKF过程噪声Q:对角线元素设为[1e-4, 1e-4, 1e-4, 1e-2, 1e-2, 1e-2]
计算优化技巧:
- 将IKVel-CKF运行频率降至100Hz仍能保持良好效果
- 使用Eigen库的LLT分解加速协方差矩阵运算
- 对雅可比矩阵计算使用查表法近似
故障排查清单:
- 出现高度漂移:检查接触检测阈值和高度聚类参数
- 速度估计不稳定:验证编码器分辨率设置和差分间隔
- 航向快速漂移:检查IMU校准和多足几何约束权重
这套系统已在GitHub开源(Ros2Go2Estimator),包含完整的ROS2节点和参数配置文件,方便研究社区直接部署测试。