第三章:传感器基础——机器人的“感官世界”
大家好,我是你们的老朋友。今天我们来聊聊机器人导航里最基础、也最关键的一环——传感器。说白了,机器人要动起来,得先知道“我在哪”、“周围有什么”。这全靠传感器来感知。
我个人习惯把传感器比作机器人的眼睛、耳朵和平衡感。激光雷达是“眼睛”,看距离;深度相机是“立体眼”,看形状和颜色;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
知识体系总览
下面这张图是我自己画的,把本章的核心逻辑串起来了。你一看就明白:传感器各自负责什么,数据怎么流动,最终怎么服务于导航。
你看,激光雷达、深度相机、IMU/里程计,各自采集原始数据,然后通过融合算法得到稳定的位姿和地图,最后才能做导航和避障。任何一个传感器出问题,整个系统都会受影响。
我的建议:刚开始做机器人时,别急着上多传感器融合。先让一个传感器跑通,比如只用激光雷达做SLAM。等流程走通了,再逐步加入IMU和相机。这样出了问题也好排查。
好了,这一章的内容就到这里。传感器是机器人的基础,理解透了,后面的导航算法才能玩得转。记住:没有好的数据,再牛的算法也是白搭。