三、传感器基础与数据特性(下):轮式里程计、GNSS与相机
好,咱们接着聊。上一节我们把惯性传感器和激光雷达的脾气摸了个大概,这一节轮到另外三位主角:轮式里程计、GNSS和相机。这三样东西,说白了就是机器人“认路”的不同方式——一个靠轮子转圈算距离,一个靠天上卫星定坐标,一个靠眼睛看世界。各有各的长处,也各有各的坑。
3.1 轮式里程计(Wheel Odometry)模型
轮式里程计,我习惯叫它“轮子编码器”。原理其实特别简单:轮子转一圈,车走多远,这是固定的。你只要数清楚轮子转了多少圈,就能算出走了多少路。
但这里有个关键问题——轮子会打滑。我在项目里遇到过好几次,地面稍微有点水或者沙子,编码器数据就飘得离谱。你算出来走了10米,实际可能只走了8米。这就是轮式里程计的硬伤:它只能测轮子转了多少,测不了轮子到底抓没抓住地。
常见的轮式里程计模型有两种:
- 差分驱动模型:左右轮各装一个编码器。通过左右轮转速差,可以算出转弯半径和角度。我最早做AGV小车时用的就是这种,结构简单,但转弯时容易累积误差。
- 阿克曼模型:类似汽车转向结构。前轮转向,后轮驱动。这种模型需要知道转向角度,计算稍微复杂一点,但更接近真实车辆的运动特性。
嗯,这里要注意:不管哪种模型,轮式里程计的误差都是随时间累积的。你跑得越远,位置就越不准。所以它通常只用来做短距离的航迹推算,或者配合其他传感器做融合。
3.2 编码器数据与航迹推算
编码器输出的数据,说白了就是脉冲数。每个脉冲对应轮子转过的一个固定角度。比如一个编码器每圈输出1024个脉冲,那每个脉冲对应的距离就是轮子周长除以1024。
航迹推算(Dead Reckoning)就是基于这个脉冲数,一步步推算当前位置。公式其实不复杂:
// 伪代码示例:航迹推算
delta_distance = pulse_count * distance_per_pulse
x += delta_distance * cos(theta)
y += delta_distance * sin(theta)
theta += delta_theta // 由左右轮差速算出
你看,就这么几行。但实际跑起来,误差会慢慢变大。我做过一个测试:让小车在光滑地板上直线走20米,编码器算出来走了20.3米,实际用卷尺量只有19.7米。差了0.6米,这就是打滑和轮径误差共同作用的结果。
3.3 全球导航卫星系统(GNSS)原理
GNSS,说白了就是GPS、北斗这些卫星定位系统的统称。原理其实挺巧妙的:卫星在天上不停地发信号,信号里带着卫星自己的位置和时间戳。地面上的接收器收到信号后,算一下信号飞了多久,就能知道离卫星有多远。
但这里有个问题:接收器的时钟不准。卫星上的原子钟精度极高,但接收器里的晶振便宜啊,误差可能差出几微秒。所以至少需要4颗卫星才能解算出三维位置——三颗用来定位,一颗用来校准时间误差。
我刚开始做室外机器人时,觉得GNSS简直是神器。后来发现,在城市峡谷或者树荫下,信号反射严重,定位误差能到十几米。嗯,那时候我才明白,GNSS也不是万能的。
3.4 RTK定位精度与常见误差源
RTK(实时动态差分定位)是GNSS的增强版。原理是:在地面架一个已知位置的基准站,基准站算出卫星信号的误差,然后把误差修正值发给移动站。这样一来,移动站的定位精度可以从米级提升到厘米级。
我在做农业机器人项目时用过RTK,精度确实好。但有几个坑要注意:
- 基准站和移动站的距离:超过10公里,误差会明显增大。因为大气层对信号的延迟,在不同地方是不一样的。
- 初始化时间:RTK刚开机时需要几分钟来解算模糊度。这段时间内精度很差,千万别直接拿来用。
- 信号遮挡:RTK需要同时看到至少5颗卫星。在高楼旁边或者隧道里,直接失效。
常见误差源总结一下:
| 误差源 | 影响程度 | 应对方法 |
|---|---|---|
| 电离层延迟 | 米级 | 双频接收机、RTK差分 |
| 多路径效应 | 米级到十米级 | 避开反射面、使用抗多径天线 |
| 卫星钟差 | 亚米级 | 差分修正 |
| 接收机噪声 | 分米级 | 滤波平滑 |
3.5 相机视觉传感器简介与图像数据特点
相机,说白了就是机器人的眼睛。但和人类的眼睛不一样,相机看到的是像素矩阵——每个像素就是一个数值,代表该点的亮度或者颜色。
图像数据有几个特点,做融合时一定要心里有数:
- 数据量大:一张1080p的彩色图像,未经压缩就有约6MB。处理起来很吃算力。
- 缺乏深度信息:普通相机只能知道物体在图像上的位置,不知道它离你有多远。除非你用双目相机或者深度相机。
- 对光照敏感:强光下过曝,暗光下噪点多。我做过一个室内项目,白天和晚上的图像特征点数量能差一个数量级。
- 纹理依赖:白墙、光滑地面这些纹理少的场景,相机基本废了。特征点都提取不出来。
相机在SLAM里主要用来做视觉里程计(Visual Odometry)和回环检测。视觉里程计通过跟踪图像中的特征点来估计运动,回环检测则通过识别曾经到过的地方来消除累积误差。
好了,这一节的内容就到这里。轮式里程计、GNSS和相机,各有各的脾气。做融合时,关键是要理解每个传感器的长处和短板,然后想办法让它们互相弥补。下一节,我们开始讲真正的融合算法——卡尔曼滤波。到时候你会看到,这些传感器数据是怎么揉到一起的。