4. 感知系统入门:摄像头、激光雷达、IMU、触觉传感器——机器人如何“看”和“感觉”

大家好,我是你们的老朋友。

上一章我们聊了机器人的“小脑”——运动控制。这一章,我们来聊聊机器人的“眼睛”和“皮肤”。说白了,就是感知系统。

人形机器人要走进家庭、走进工厂,它得先知道自己在哪,周围有什么,手里抓的是鸡蛋还是铁块。这些信息从哪来?就靠传感器。

我个人习惯把感知系统分成两大类:外部感知(看世界)和内部感知(感受自己)。今天咱们就把这几个核心传感器挨个捋一遍。

4.1 摄像头:机器人的“眼睛”

摄像头是感知系统里最直观的传感器。它采集的是二维图像,但我们要的是三维世界的信息。

4.1.1 单目 vs 双目 vs RGB-D

这里有个经典问题:单目摄像头能测距吗?理论上可以,但需要移动或者已知物体大小。说白了,单目就像你闭上一只眼睛,很难判断远处物体到底有多远。

类型 原理 优点 缺点 典型应用
单目 单镜头成像 成本低、体积小 无法直接测距 视觉SLAM、目标分类
双目 双镜头视差 被动测距、纹理丰富 计算量大、弱纹理失效 避障、深度估计
RGB-D 结构光/ToF 直接输出深度图 易受环境光干扰 抓取、建图
我的经验: 在室内做抓取任务,我首选RGB-D相机,比如Intel RealSense或Microsoft Kinect。室外强光下,双目更靠谱。别问我怎么知道的——有一次在阳光直射的车间里,RGB-D直接“瞎”了,深度图全是黑洞。

4.1.2 视觉处理流水线

摄像头采集到原始图像后,不是直接拿来用的。一般要经过这么几步:

  1. 去畸变:镜头都有畸变,尤其是广角。先校正。
  2. 特征提取:找角点、边缘、纹理。常用ORB、SIFT、SuperPoint。
  3. 特征匹配:把当前帧和上一帧的特征对上,或者和地图对上。
  4. 位姿估计:通过PnP或直接法,算出相机(也就是机器人)的位置和姿态。

嗯,这里要注意,每一步都可能引入误差。我曾经在调试一个视觉SLAM系统时,发现定位老是漂移。查了两天,最后发现是去畸变参数标错了。一个小数点,毁了一周的工作。

4.2 激光雷达:精确的“尺子”

激光雷达(LiDAR)发射激光束,测量反射时间,直接得到距离信息。它不依赖光照,精度高,是建图和定位的利器。

4.2.1 2D vs 3D LiDAR

  • 2D LiDAR:扫描一个平面,常用于室内导航、避障。比如扫地机器人用的就是这种。
  • 3D LiDAR:扫描多个平面,生成点云。人形机器人一般用这种,能感知三维环境。

我建议,如果你做的是足式机器人,至少用16线以上的3D LiDAR。线数太少,地面点太稀疏,容易把平地误判成悬崖。

4.2.2 点云处理基础

激光雷达输出的是一堆点,每个点有(x, y, z)坐标。处理点云常用的库是PCL(Point Cloud Library)。

// 点云滤波示例:去除离群点
pcl::StatisticalOutlierRemoval<pcl::PointXYZ> sor;
sor.setInputCloud(cloud);
sor.setMeanK(50);
sor.setStddevMulThresh(1.0);
sor.filter(*cloud_filtered);
避坑指南: 我曾经在雨雪天测试机器人,激光雷达的点云里全是噪点。后来才知道,水滴和雪花会反射激光,产生大量“飞点”。解决方案是加一个基于反射强度的滤波器,或者干脆等雨停了再测。

4.3 IMU:机器人的“内耳”

IMU(惯性测量单元)包含加速度计和陀螺仪。它测量的是机器人自身的加速度和角速度。说白了,就是感受“我在动”和“我在转”。

4.3.1 IMU的致命弱点:漂移

IMU通过积分得到位置和姿态。但积分会累积误差。你想想看,加速度计有噪声,积分一次变速度,再积分一次变位置。几秒钟还行,几分钟就飞到天边去了。

所以,IMU不能单独用。它必须和摄像头或激光雷达做融合。最常见的方案是视觉-惯性里程计(VIO)或激光-惯性里程计(LIO)。

4.3.2 IMU标定

买回来的IMU,零偏、尺度因子、轴间误差都不一样。必须标定。

我记得第一次做IMU标定,用了著名的imu_utils工具包。把IMU静置两个小时,采集数据,然后分析Allan方差。结果发现,我买的廉价IMU零偏稳定性差得离谱,根本不适合做VIO。后来换了工业级的,才勉强能用。

核心结论: IMU是感知系统的“粘合剂”。它提供高频的短时运动估计,填补摄像头或激光雷达帧之间的空白。没有IMU,机器人在快速运动时就会“失明”。

4.4 触觉传感器:机器人的“皮肤”

人形机器人要抓取物体,光靠视觉不够。你想想看,你闭着眼睛也能拿起一个鸡蛋,靠的就是触觉。机器人也一样。

4.4.1 触觉传感器的类型

类型 原理 测量量 典型应用
压阻式 压力改变电阻 法向力 指尖抓取力控制
电容式 压力改变电容 法向力、切向力 滑觉检测
压电式 压力产生电荷 动态力 碰撞检测
光学式 相机拍摄弹性体变形 高分辨率力分布 精细操作

4.4.2 触觉在抓取中的应用

我做过一个实验:让机器人抓一个纸杯。只用视觉,机器人一抓就捏扁了。加上触觉反馈后,它能检测到指尖和杯壁的接触力,然后调整抓取力,稳稳地拿起来。

触觉传感器的数据通常要融合到控制回路中。一个简单的力控策略:

# 伪代码:力控抓取
desired_force = 2.0  # 牛顿
while True:
    current_force = read_tactile_sensor()
    error = desired_force - current_force
    position_adjustment = Kp * error
    move_fingers(position_adjustment)
我的建议: 如果你刚开始做触觉,别一上来就搞高分辨率阵列传感器。先买个单点力传感器,装在夹爪上,把力控PID调通。等基础打牢了,再升级到阵列传感器。

4.5 多传感器融合:1+1 > 2

单个传感器都有短板。摄像头怕暗、怕纹理少;激光雷达怕雨雪、怕反射面;IMU会漂移;触觉传感器覆盖范围有限。所以,必须融合。

最常见的融合框架是扩展卡尔曼滤波(EKF)或因子图优化。以视觉-惯性融合为例:

  • 摄像头提供低频的位姿观测(比如30Hz)
  • IMU提供高频的运动预测(比如200Hz)
  • EKF把两者揉在一起,输出平滑且无漂移的位姿估计

下面这张图,是我自己总结的感知系统知识体系,希望能帮你理清思路。

人形机器人感知系统知识体系 感知系统 摄像头 激光雷达 IMU 触觉传感器 单目/双目/RGB-D 特征提取与匹配 2D/3D点云 滤波与配准 加速度计+陀螺仪 零偏标定与积分 力/滑觉/阵列 力控抓取策略 多传感器融合(EKF/因子图) 位姿估计 / 环境地图 / 抓取决策 每个传感器都有短板 融合才是王道