3. 传感器选型与数据读取:激光雷达、深度相机、超声波传感器特性对比,ROS驱动配置

做自主避障,传感器就是无人机的「眼睛」。眼睛选错了,后面算法再牛也白搭。

我这些年踩过的坑,有一半都出在传感器选型上。今天咱们就把激光雷达、深度相机、超声波这三种主流传感器掰开揉碎聊清楚。顺便把ROS驱动怎么配也一并搞定。

3.1 三种传感器的核心特性对比

先给个总览表格,方便你快速对比。后面我再逐个细讲。

特性 激光雷达(LiDAR) 深度相机(RGB-D) 超声波传感器
测距原理 TOF / 三角法 结构光 / 双目 / TOF 声波反射
有效距离 0.1m ~ 100m+ 0.3m ~ 10m 0.02m ~ 5m
精度 ±1cm ~ ±3cm ±1cm ~ ±5cm ±1cm ~ ±3cm(近距离)
视角 360°(单线)/ 多线 水平60°~90°,垂直45°~70° 15°~30°(锥形)
抗环境光干扰 强(室外可用) 弱(强光下易失效) 强(不受光照影响)
数据维度 2D点云 / 3D点云 RGB图像 + 深度图 单点距离
典型功耗 2W ~ 15W 1.5W ~ 5W 0.1W ~ 0.5W
典型成本 ¥500 ~ ¥50000+ ¥300 ~ ¥3000 ¥10 ~ ¥100

核心结论:没有完美的传感器。激光雷达精度高但贵,深度相机信息丰富但怕强光,超声波便宜但视角窄。实际项目中,我通常建议「激光雷达 + 超声波」或「深度相机 + 超声波」的组合方案。

3.2 激光雷达(LiDAR)—— 精度之王

激光雷达是我个人最偏爱的传感器。为什么?因为它稳定、可靠、数据干净。

我在一个物流仓库的项目里用过单线激光雷达做避障。仓库里灰尘大、光线暗,深度相机基本废了,但激光雷达一点问题没有。说白了,激光雷达就是「硬汉」级别的传感器。

3.2.1 常见型号与选型建议

  • 单线激光雷达:如 RPLIDAR A1/A2、Sick TIM系列。适合2D平面避障,室内场景首选。
  • 多线激光雷达:如 Velodyne VLP-16、Livox Mid-40。适合3D空间感知,室外复杂环境必备。
  • 固态激光雷达:如 Ouster OS系列。体积小、寿命长,但价格偏高。

我的经验:如果预算有限且只在室内飞,RPLIDAR A2 是性价比之王。室外的话,至少上 Livox Mid-40,别省这个钱。

3.2.2 ROS驱动配置

以 RPLIDAR A2 为例,驱动配置非常简单:

# 1. 安装驱动
sudo apt install ros-noetic-rplidar-ros

# 2. 启动驱动(连接USB后)
roslaunch rplidar_ros rplidar.launch

# 3. 查看数据
rostopic echo /scan

启动后,/scan 话题会发布 sensor_msgs/LaserScan 消息。里面包含距离、角度、强度等信息。

注意:激光雷达的USB线缆质量很重要。我曾经因为一根劣质USB线,导致数据丢包严重,排查了整整两天。建议用带屏蔽层的线,长度不超过2米。

3.3 深度相机(RGB-D)—— 信息最丰富

深度相机能同时提供彩色图像和深度信息。说白了,它既能看到「是什么」,又能知道「有多远」。

但我要泼一盆冷水:深度相机在室外强光下基本就是废的。我有个项目在夏天正午测试,Intel RealSense D435 的深度数据全是噪点,根本没法用。所以,如果你要做室外飞行,深度相机只能作为辅助传感器。

3.3.1 常见型号与选型建议

  • Intel RealSense D435/D455:双目+主动红外,室内外都能用(但室外受限)。ROS支持最好。
  • Microsoft Kinect v2/Azure Kinect:TOF原理,室内效果极佳。但体积大、功耗高,不适合小型无人机。
  • Orbbec Astra系列:国产替代,性价比高。ROS驱动也完善。

3.3.2 ROS驱动配置

以 Intel RealSense D435 为例:

# 1. 安装驱动
sudo apt install ros-noetic-realsense2-camera

# 2. 启动相机
roslaunch realsense2_camera rs_camera.launch

# 3. 查看彩色图和深度图
rqt_image_view /camera/color/image_raw
rqt_image_view /camera/depth/image_rect_raw

驱动会发布多个话题:/camera/color/image_raw(彩色图)、/camera/depth/image_rect_raw(深度图)、/camera/color/camera_info(相机内参)。

小技巧:启动时加上 filters:=pointcloud 参数,可以直接得到点云数据:

roslaunch realsense2_camera rs_camera.launch filters:=pointcloud

这样就不用自己写点云生成代码了。

3.4 超声波传感器—— 便宜但好用

超声波传感器经常被忽视。很多人觉得它精度低、视角窄,没什么用。但我不这么看。

超声波有一个激光雷达和深度相机都比不了的优点:不受光照和透明物体影响。我在一个玻璃幕墙建筑附近的飞行项目中,激光雷达打到玻璃上直接穿透了,深度相机也反光失效。最后是靠超声波传感器才保住了避障功能。

3.4.1 常见型号与选型建议

  • HC-SR04:最经典的型号,¥5一个。精度一般,但够用。
  • US-100:升级版,带温度补偿,精度更高。
  • MaxBotix MB系列:工业级,IP67防护,室外首选。

3.4.2 ROS驱动配置

超声波传感器通常通过I2C或串口连接。以 HC-SR04 为例,通过 Arduino 桥接:

# 1. 安装rosserial
sudo apt install ros-noetic-rosserial-arduino

# 2. Arduino端代码(核心部分)
#include <ros.h>
#include <std_msgs/Float32.h>

ros::NodeHandle nh;
std_msgs::Float32 dist_msg;
ros::Publisher pub("ultrasonic_distance", &dist_msg);

void loop() {
    // 触发测距
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    
    // 读取回波时间
    duration = pulseIn(echoPin, HIGH);
    distance = duration * 0.034 / 2;  // 声速340m/s
    
    dist_msg.data = distance;
    pub.publish(&dist_msg);
    delay(50);
}

ROS端启动:

rosrun rosserial_python serial_node.py /dev/ttyUSB0

避坑指南:我曾经在无人机上装了4个超声波传感器,结果它们互相干扰。原因是多个传感器同时发射声波,产生了串扰。解决办法是分时触发,每个传感器错开10ms以上。

3.5 传感器融合策略

单一传感器总有短板。我建议的典型组合方案:

  • 室内飞行:单线激光雷达(主) + 超声波(辅助,用于检测透明障碍物)
  • 室外飞行:多线激光雷达(主) + 深度相机(辅助,用于识别物体类型) + 超声波(辅助,用于近距补盲)
  • 低成本方案:深度相机(主) + 超声波(辅助)

核心原则:传感器之间要有「冗余」和「互补」。冗余是指同一个信息有多个来源,互补是指不同传感器覆盖不同的短板。你想想看,如果所有传感器都在强光下失效,那无人机不就瞎了吗?

3.6 本章知识体系总览

下面这张图总结了三种传感器的核心特性、选型要点和ROS驱动配置流程。建议你保存下来,做项目时对照着看。

传感器选型与数据读取知识体系 激光雷达 (LiDAR) 深度相机 (RGB-D) 超声波传感器 核心特性 • 精度高:±1~3cm • 距离远:0.1~100m+ • 抗干扰强,室外可用 核心特性 • 信息丰富:RGB+深度 • 距离适中:0.3~10m • 强光下易失效 核心特性 • 成本极低:¥10~100 • 不受光照影响 • 视角窄:15°~30° ROS驱动配置与数据读取 输出话题:/scan | /camera/color/image_raw | /camera/depth/image_rect_raw | /ultrasonic_distance 激光雷达 深度相机 超声波

嗯,以上就是传感器选型与数据读取的核心内容。记住一句话:没有最好的传感器,只有最合适的组合。做项目时多想想你的实际场景,别盲目追求高参数。


公众号:蓝海资料掘金营,微信deep3321