第三章:传感器基础——机器人的“感官世界”

大家好,我是你们的老朋友。今天我们来聊聊机器人导航里最基础、也最关键的一环——传感器。说白了,机器人要动起来,得先知道“我在哪”、“周围有什么”。这全靠传感器来感知。

我个人习惯把传感器比作机器人的眼睛、耳朵和平衡感。激光雷达是“眼睛”,看距离;深度相机是“立体眼”,看形状和颜色;IMU和里程计是“内耳”和“脚步”,感知姿态和位移。这三者缺一不可。

3.1 激光雷达工作原理

激光雷达,英文叫LiDAR。它发射激光束,打到物体上反射回来,通过计算时间差来测距。原理其实很简单:光速是已知的,时间差一测,距离就出来了。

核心公式:

距离 = (光速 × 飞行时间) / 2

为什么除以2?因为激光走了个来回。嗯,这里要注意,实际应用中要考虑大气衰减、多路径效应等,但入门阶段记住这个公式就够了。

常见的激光雷达类型:

  • 单线激光雷达:只扫描一个平面,适合室内导航。我在项目中用过RPLIDAR A1,性价比不错。
  • 多线激光雷达:扫描多个平面,能构建3D点云。Velodyne的16线、32线是经典款。
  • 固态激光雷达:没有旋转部件,靠光学相控阵或闪光技术。未来趋势,但目前成本高。

避坑指南:我曾经在室外强光下调试单线激光雷达,结果数据全是噪声。后来才明白,太阳光中的红外成分会干扰激光接收器。所以,室外场景尽量选带滤光片的雷达,或者用多线雷达。

ROS中的使用:

在ROS里,激光雷达数据通常以sensor_msgs/LaserScan消息发布。你可以用rviz直接可视化。我个人习惯先跑一个rosbag record录下数据,离线调试,这样省得每次都要搬机器人。

# 启动激光雷达驱动(以RPLIDAR为例)
roslaunch rplidar_ros rplidar.launch

# 查看话题
rostopic echo /scan

3.2 深度相机(RGB-D)原理

深度相机,也叫RGB-D相机。它同时输出彩色图像和深度图像。你想想看,有了深度信息,机器人就能知道每个像素点离自己有多远,这对避障和三维重建太重要了。

主流技术方案:

技术 原理 代表产品 优缺点
结构光 投射红外点阵,通过变形计算深度 Kinect v1, Intel RealSense 室内精度高,室外易受干扰
飞行时间(ToF) 发射红外脉冲,测量飞行时间 Kinect v2, Azure Kinect 速度快,但分辨率较低
双目立体视觉 两个摄像头视差计算深度 ZED, MYNT EYE 室外可用,但计算量大

我个人在项目里用过Intel RealSense D435,它属于结构光+双目融合的方案。说实话,室内效果很好,但一到阳光直射的窗边,深度图就出现大块黑洞。嗯,这是物理限制,没办法。

小技巧:如果你用RGB-D相机做导航,建议把深度图像投影到激光坐标系下,生成伪激光数据。这样就能复用激光SLAM算法了。ROS里有现成的depthimage_to_laserscan包。

# 安装工具包
sudo apt install ros-noetic-depthimage-to-laserscan

# 启动转换节点
rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/camera/depth/image_raw

3.3 IMU与里程计基础

IMU,惯性测量单元。它包含加速度计和陀螺仪。加速度计测线性加速度,陀螺仪测角速度。里程计则是通过编码器或视觉推算位移。

IMU的核心问题:漂移。为什么?因为加速度计测的是加速度,要积分两次才能得到位移。积分一次是速度,再积分一次是位置。每次积分都会累积误差。陀螺仪也有零偏,时间一长,角度就歪了。

我记得第一次做IMU融合时,机器人明明停着,但积分出来的位置却在“漂移”。后来加了卡尔曼滤波,才把问题压下去。

里程计类型:

  • 轮式里程计:靠电机编码器,简单可靠。但打滑时数据就废了。
  • 视觉里程计:靠相机特征点匹配,无打滑问题。但光照变化大时容易丢。
  • 激光里程计:靠激光点云匹配,精度高。但计算量大。

警告:千万不要只用IMU做长时间定位。我曾经试过,10分钟后位置误差能到几十米。IMU只能做短时间辅助,或者和GPS、激光雷达做融合。

ROS中的IMU数据:

IMU数据通常以sensor_msgs/Imu消息发布。里面包含四元数(姿态)、角速度、线性加速度。我个人习惯先检查imu_tf是否配置正确,否则坐标系一乱,整个导航就崩了。

# 查看IMU数据
rostopic echo /imu/data

# 常用IMU驱动(如MPU6050)
roslaunch imu_publisher imu_publisher.launch

知识体系总览

下面这张图是我自己画的,把本章的核心逻辑串起来了。你一看就明白:传感器各自负责什么,数据怎么流动,最终怎么服务于导航。

传感器基础:数据流与融合 激光雷达 输出:LaserScan 测距:2D/3D点云 特点:精度高,室外受限 深度相机 (RGB-D) 输出:Image + Depth 测距:结构光/ToF/双目 特点:信息丰富,易受光照 IMU + 里程计 输出:Imu + Odometry 推算:加速度/角速度 特点:高频,有漂移 传感器融合 (卡尔曼滤波 / 图优化) 输出:机器人位姿 + 环境地图 导航与避障

你看,激光雷达、深度相机、IMU/里程计,各自采集原始数据,然后通过融合算法得到稳定的位姿和地图,最后才能做导航和避障。任何一个传感器出问题,整个系统都会受影响。

我的建议:刚开始做机器人时,别急着上多传感器融合。先让一个传感器跑通,比如只用激光雷达做SLAM。等流程走通了,再逐步加入IMU和相机。这样出了问题也好排查。

好了,这一章的内容就到这里。传感器是机器人的基础,理解透了,后面的导航算法才能玩得转。记住:没有好的数据,再牛的算法也是白搭。


专注资料整理