3. 传感器与感知
四旋翼无人机的自主避障能力,本质上是一个“感知—决策—执行”的闭环问题。其中,感知层是所有上层算法的数据基石,其质量直接决定了路径规划的成功率与飞行安全性。本章将深入剖析四旋翼平台上最常用的四类传感器:激光雷达(LiDAR)、深度相机、超声波传感器以及惯性测量单元(IMU)。我们不仅关注它们的物理原理,更侧重于在工程实践中如何获取、同步、预处理这些异构数据,为后续的障碍物检测与避障路径规划提供可靠输入。
上图展示了四旋翼感知系统的典型硬件架构。可以看到,不同传感器通过不同的物理接口(UART、SPI、MIPI、USB等)与飞行控制器连接,且数据输出频率差异巨大(IMU可达1kHz,而激光雷达通常只有10-50Hz)。这种异构性要求我们在软件层面必须设计合理的数据同步与融合机制,否则避障算法将无法获得一致的环境快照。
3.1 激光雷达:高精度测距与点云生成
核心原理
激光雷达(Light Detection and Ranging, LiDAR)通过发射近红外激光束并测量反射光的飞行时间(Time of Flight, ToF)来计算目标距离。对于单线雷达,其内部电机带动激光头旋转,在二维平面内扫描,得到极坐标形式的距离数据。多线雷达(如16线、32线)则通过堆叠多个激光发射器,获得三维点云。在四旋翼避障应用中,单线雷达常用于水平面360°障碍物检测,而多线雷达则能提供更丰富的环境几何信息,但成本与功耗也显著增加。
数据获取与预处理
以常见的RPLIDAR A1为例,其通过串口(UART)以特定波特率(如115200bps)输出数据帧。数据帧包含起始字节、校验字节以及一系列采样点,每个采样点包含角度(0~360°)和距离(mm)。在嵌入式Linux或ROS环境中,我们通常使用官方SDK或开源驱动(如rplidar_ros)来解析数据。获取原始数据后,必须进行以下预处理:
- 畸变校正: 由于无人机在运动,雷达旋转一圈期间机体已发生位移,导致点云产生运动畸变。需利用IMU数据或里程计信息进行去畸变处理。
- 离群点滤除: 使用统计滤波或半径滤波去除由于灰尘、雨滴或镜面反射产生的孤立噪点。
- 坐标系转换: 将雷达极坐标数据转换到机体坐标系(Body Frame)下的笛卡尔坐标,再通过外参矩阵转换到世界坐标系。
// 伪代码示例:极坐标转笛卡尔坐标
for each sample in lidar_frame:
angle_rad = sample.angle * PI / 180.0
x = sample.distance * cos(angle_rad)
y = sample.distance * sin(angle_rad)
// 应用外参变换矩阵 T_body_to_world
point_world = T_body_to_world * [x, y, 0, 1]
实战场景:室内走廊避障
在室内走廊环境中,单线激光雷达水平扫描可以精确获取两侧墙壁的距离。避障算法(如VFH+或DWA)将这些点云作为输入,生成局部代价地图。例如,当无人机以1m/s速度飞行时,10Hz的雷达数据率意味着每飞行10cm就会获得一帧新的环境数据,足以支持实时避障决策。但需注意,单线雷达无法检测低于或高于扫描平面的障碍物(如桌腿上方悬空的桌面),因此必须与其他传感器融合。
3.2 深度相机:稠密深度图与视觉感知
核心原理
深度相机(RGB-D Camera)能够同时提供彩色图像和每个像素对应的深度值。主流技术方案有三种:双目立体视觉(通过左右摄像头视差计算深度)、结构光(投射红外散斑图案,通过图案畸变计算深度)和ToF(直接测量红外光飞行时间)。在四旋翼上,Intel RealSense D435i(双目+IMU)和Orbbec Astra系列(结构光)是常见选择。深度相机的优势在于能获取稠密的三维环境信息(每秒数十万个点),非常适合检测任意形状的障碍物。
数据获取与同步
深度相机通常通过USB 3.0接口传输数据,在ROS中可使用realsense2_camera或astra_camera驱动。获取的数据流包括:左/右红外图、深度图(16bit,单位mm)、彩色图以及IMU数据(若内置)。关键处理步骤包括:
- 深度图滤波: 使用双边滤波或中值滤波填补深度空洞,同时保留边缘信息。
- 点云生成: 利用相机内参(焦距fx, fy,光心cx, cy)将深度图反投影为3D点云。
- 时间同步: 由于深度图与彩色图由不同传感器芯片产生,需通过硬件同步信号或软件时间戳对齐。
案例拆解:室内悬停避障
假设无人机在室内悬停,需要检测前方0.5m~3m范围内的障碍物。使用D435i获取深度图后,我们设置一个感兴趣区域(ROI),仅保留图像中心区域(如320x240像素)。然后计算该区域内深度值小于安全距离(如1.2m)的像素比例。若比例超过阈值(如30%),则判定前方有障碍物,触发避障机动。这种方法的计算量极小(仅需遍历ROI内像素),可在嵌入式平台实时运行。但缺点是缺乏方向信息,无法指导无人机绕行。更高级的做法是将深度图转换为局部占据栅格地图,供路径规划器使用。
3.3 超声波传感器:近距精确补盲
核心原理与数据特性
超声波传感器(如HC-SR04或US-100)通过发射40kHz的声波脉冲并接收回波来测距。声波在空气中的传播速度约为340m/s,通过测量发射与接收的时间差Δt,即可计算距离d = Δt × 340 / 2。超声波传感器的特点是:近距离精度高(厘米级)、响应速度慢(声速限制)、波束角宽(约15°~30°),且对透明物体、吸音材料(如海绵)检测效果差。在四旋翼上,超声波通常用于低空高度测量(配合气压计)或近距离盲区补盲(如激光雷达近处0.1m内的盲区)。
数据获取与滤波
以HC-SR04为例,其通过GPIO触发:拉高Trig引脚10μs,然后等待Echo引脚高电平,高电平持续时间即为声波往返时间。在嵌入式代码中,需使用微秒级定时器测量脉宽。由于超声波易受温度、气流和多次反射干扰,原始数据噪声较大,必须进行滤波处理:
// 滑动中值滤波示例(窗口大小=5)
float ultrasonic_filtered(float new_sample) {
static float buffer[5] = {0};
static int index = 0;
buffer[index] = new_sample;
index = (index + 1) % 5;
// 复制并排序
float temp[5];
memcpy(temp, buffer, sizeof(temp));
// 简单冒泡排序
for (int i=0; i<4; i++)
for (int j=0; j<4-i; j++)
if (temp[j] > temp[j+1]) swap(temp[j], temp[j+1]);
return temp[2]; // 返回中值
}
3.4 IMU:姿态感知与数据融合核心
核心原理
惯性测量单元(IMU)集成了三轴加速度计和三轴陀螺仪(部分还包含磁力计)。加速度计测量物体在机体坐标系下的比力(重力与惯性力的合力),陀螺仪测量绕三轴的角速度。IMU的数据率极高(通常400Hz~1kHz),是飞控姿态解算(互补滤波或卡尔曼滤波)的核心输入。在避障系统中,IMU数据用于:
- 姿态估计: 提供无人机的横滚、俯仰、偏航角,用于将传感器数据从机体坐标系转换到世界坐标系。
- 运动补偿: 校正激光雷达点云的运动畸变,以及深度相机在运动中的帧间位姿变化。
- 加速度辅助: 与GPS或光流融合,提供更平滑的速度估计。
数据获取与校准
IMU通常通过SPI或I2C接口与飞控MCU连接。以BMI088为例,其SPI通信速率可达10MHz,支持FIFO缓冲,可批量读取数据以减少CPU中断。获取原始数据后,必须进行零偏校准(静止时采集均值)和温漂补偿。此外,加速度计和陀螺仪的坐标系必须与机体坐标系严格对齐,否则会引入姿态误差。
| 传感器 | 数据率 | 接口 | 主要用途 | 典型误差源 |
|---|---|---|---|---|
| 激光雷达 | 10-50 Hz | UART/Ethernet | 2D/3D障碍物检测、SLAM | 运动畸变、镜面反射 |
| 深度相机 | 15-30 FPS | USB 3.0/MIPI | 稠密深度感知、避障 | 环境光干扰、深度空洞 |
| 超声波 | 20-50 Hz | I2C/GPIO | 近距补盲、定高 | 温度影响、串扰、波束角宽 |
| IMU | 200-1000 Hz | SPI/I2C | 姿态解算、运动补偿 | 零偏漂移、温漂、振动噪声 |
实战中的多传感器时间同步
在避障系统中,时间同步是最大的工程挑战之一。假设激光雷达帧率为10Hz,深度相机为30FPS,IMU为500Hz。当无人机以5m/s飞行时,100ms的激光雷达帧间隔内无人机已移动0.5m。若直接使用不同时刻的数据进行融合,会产生严重的空间错位。解决方案是:
- 硬件同步: 使用飞控的PPS(脉冲秒信号)或自定义同步信号触发所有传感器采集。
- 软件插值: 以IMU时间为基准,利用IMU积分推算出其他传感器采集时刻的精确位姿,然后将点云或深度图投影到同一时刻。