☰
Livox MID360激光雷达20m/s高速避障实战指南
2026/10/7 18:29:57 网站建设 项目流程

1. 为什么偏偏是MID360配高速穿越机

把一台20m/s速度的无人机交给激光雷达做避障,这件事在两年前还属于实验室里烧预算的项目。现在Livox MID360把价格打到了万元以内,体积和重量也压到了能上五寸机的程度,很多做无人机自主导航的团队开始认真考虑这套组合。但真正动手之后你会发现,雷达装上去只是第一步,后面从坐标系对齐、点云滤波、障碍物膨胀到速度环限幅,每一步都有坑。

先说清楚这套方案适合谁。如果你在做无人机自主飞行、高速避障、室内外穿梭这类项目,手上有一台Pixhawk或同类开源飞控,会用ROS/ROS2做基本的数据收发,那这篇内容基本可以照着走。如果你只是想给航拍机加个前向避障,那MID360有点大材小用,超声波或者双目视觉更划算。20m/s这个速度意味着每秒移动20米,从雷达发现障碍到飞控执行避让,留给整个链路的时间窗口可能只有100到200毫秒,这对传感器帧率、算法延迟和执行器响应都提出了硬要求。

MID360的核心参数决定了它为什么适合这个场景。它采用非重复扫描方式,视场角水平360度、垂直-7度到52度,等效点频约20万点每秒,最远探测距离在80%反射率下能到70米,10%反射率下约40米。对高速飞行来说,垂直视场角覆盖了前下方一大片区域,能提前看到地面起伏和前方障碍。非重复扫描的好处是随着积分时间增加,点云覆盖率会持续提升,不像传统机械式雷达那样固定扫描线。但这也带来一个问题:单帧点云比较稀疏,直接拿去做障碍物检测会漏检,必须做多帧累积或者用体素栅格做概率更新。

重量和功耗也是选它的理由。MID360本体约265克,加上连接线和供电模块大概300克出头,对五寸到七寸的穿越机来说是可以接受的负载。功耗方面典型值约6.5瓦,峰值不超过10瓦,用飞控的5V输出配合一个独立的降压模块就能带动。这里有个细节:MID360需要12V供电,不是5V,所以你必须单独准备一路12V降压,直接从6S电池降压或者用飞控的12V输出口。我见过有人直接接5V结果雷达根本转不起来,排查了半天才发现是供电电压不对。

提示:MID360的供电接口是XT30,不是常见的杜邦线接口,装机前记得准备好对应的转接线,否则现场会很尴尬。

2. 硬件选型与机架布局的取舍

2.1 机架尺寸和雷达安装位置

20m/s的飞行速度对机架刚性要求很高,机架太小装不下雷达,太大又影响机动性。我实测下来,七寸机架是比较平衡的选择,轴距在300到350毫米之间。雷达的安装位置直接决定了避障的盲区范围,装得越高,前下方盲区越大;装得越低,地面反射点云越多,容易误判。

比较合理的做法是把MID360装在机架顶部中心偏前的位置,雷达底面距离机架顶板大约20到30毫米,用四个减震柱固定。这样做的原因是:第一,远离电机和螺旋桨的电磁干扰,MID360对电磁环境比较敏感,靠近电调会导致点云噪声明显增加;第二,顶部安装能让垂直视场角更好地覆盖前下方,减少地面杂波;第三,中心位置让雷达坐标系和机体坐标系的平移量最小,后续标定更简单。

但顶部安装也有代价,雷达会暴露在螺旋桨下洗气流里。高速飞行时气流对雷达的机械结构影响不大,但灰尘和细小颗粒会被吹到雷达窗口上,时间长了会影响测距精度。我的做法是在雷达前方加一片薄亚克力挡板,高度刚好挡住螺旋桨下洗的直接冲击,同时不影响激光发射和接收角度。

2.2 飞控和机载计算机的搭配

飞控方面,Pixhawk 6C或者CUAV V5+这类支持MAVLink和外部定位输入的飞控都可以。关键是要有足够的串口和CAN口,MID360通过以太网输出数据,所以机载计算机必须有一个网口。我用的方案是飞控负责底层姿态和速度控制,机载计算机跑ROS2节点做点云处理和避障决策,两者通过MAVLink或者ROS2的MAVROS桥接通信。

机载计算机的选择上,树莓派4B能跑通基本流程,但点云处理帧率上不去,20m/s场景下延迟会超过200毫秒,不太够用。 Jetson Orin Nano或者NUC这类x86小主机更合适,算力足够做体素滤波和局部地图更新。我实测Orin Nano在15瓦功耗模式下,处理MID360的10Hz点云并输出避障指令,端到端延迟能控制在80到120毫秒之间,基本满足20m/s的避障需求。

电池方面,6S 1300到1800mAh的锂聚合物电池比较合适,放电倍率至少100C。20m/s飞行时电流波动很大,瞬时电流可能到80到100安培,电池放电能力不够会导致电压骤降,飞控触发低压保护。我遇到过用普通航拍电池飞高速,结果一加速就掉高度,后来换成高倍率穿越机电池才解决。

2.3 通信链路和遥控器设置

高速避障飞行时,遥控器的主要作用是切换模式和紧急接管,不需要频繁手动操作。我建议设置三个飞行模式:手动模式、定点模式、自主避障模式。自主避障模式下,飞控接收机载计算机的速度指令,但遥控器的摇杆输入作为速度上限的缩放因子,这样可以在紧急情况下通过收油门快速降速。

数传链路方面,普通915MHz数传在20m/s速度下延迟和带宽都不够用,建议用WiFi或者4G/5G图传模块做机载计算机的远程监控。但要注意,自主避障模式下即使通信中断,机载计算机也应该能独立完成避障和悬停,不能依赖地面站做实时决策。

3. 从点云到避障指令的完整链路

3.1 MID360驱动配置和坐标系定义

MID360在ROS2下的驱动有官方提供的livox_ros_driver2,安装之后需要配置雷达的IP地址和主机IP在同一网段。默认雷达IP是192.168.1.1XX,主机需要设置成192.168.1.50这类同网段地址。配置文件中要指定雷达的广播码或者直接指定IP,数据格式选择PointCloud2或者自定义的CustomMsg。CustomMsg包含每个点的精确时间戳,做运动补偿时更准确,建议用这个格式。

坐标系定义是后面所有工作的基础。我习惯用这样一套定义:机体坐标系原点在飞控IMU中心,X轴指向机头前方,Y轴指向右侧,Z轴指向下方。雷达坐标系原点在雷达光学中心,X轴指向雷达前方,Y轴指向左侧,Z轴指向上方。这两个坐标系之间的变换包括一个平移和一个旋转,平移量可以从机架图纸上量出来,旋转量主要是雷达安装时的俯仰角和偏航角偏差。

标定的方法很简单:把无人机放在水平地面上,雷达朝向正前方,用卷尺量出雷达到IMU的三轴距离,然后写一个静态变换发布节点。俯仰角和偏航角的偏差可以通过观察地面点云是否水平来调整,如果地面点云在雷达坐标系下不是水平面,说明俯仰角有偏差,手动微调直到地面点云Z值基本一致。

3.2 点云滤波和障碍物提取

原始点云包含大量噪声和地面点,直接拿去做避障会频繁误触发。滤波流程一般分三步:第一步是体素栅格降采样,把点云分辨率降到0.1到0.2米,减少计算量;第二步是统计滤波或者半径滤波,去掉离群点;第三步是地面分割,把地面点从障碍物点中分离出来。

地面分割的方法有很多,简单一点用RANSAC拟合平面,复杂一点用Patchwork++或者地面栅格法。20m/s飞行时地面起伏变化快,RANSAC每帧拟合的平面可能不稳定,我建议用栅格法:把点云按极坐标分成若干扇区和环带,每个栅格内取最低点作为地面参考,高于地面一定阈值的点判为障碍物。阈值一般取0.3到0.5米,太小会把地面起伏误判为障碍,太大又会漏掉矮障碍。

障碍物提取之后要做膨胀处理,因为点云是稀疏的,单个点不能代表整个障碍物。膨胀半径根据飞行速度和制动距离来定。20m/s速度下,如果最大减速度是5m/s²,制动距离是40米,但实际避障不需要完全刹停,只需要横向避让,所以膨胀半径可以小一些,取0.5到1.0米。膨胀的方法可以用三维栅格地图做距离变换,或者简单地对每个障碍点生成一个球体。

3.3 局部地图构建和避障决策

局部地图用三维栅格或者八叉树来存,分辨率0.2米左右。每帧点云更新一次地图,同时用时间衰减把旧障碍物清除掉,避免地图越来越臃肿。地图的范围不需要太大,前后左右各10到15米就够了,再远的信息对20m/s避障意义不大,因为等飞到那里情况已经变了。

避障决策我试过两种方案:一种是基于采样的局部规划,比如在速度空间里采样若干组速度和角速度,预测短时间内的轨迹,选一条不撞障碍且最接近目标方向的;另一种是基于势场法,障碍物产生斥力,目标点产生引力,合力方向作为加速度指令。势场法计算量小,但容易陷入局部极小值,在狭窄通道里会来回震荡。采样法更稳定,但计算量大,需要机载计算机有足够的算力。

我最终用的是简化版的采样法:在当前位置的前方生成一个扇形区域,按角度和速度离散成若干候选轨迹,每条轨迹用局部地图做碰撞检测,选第一条无碰撞且角度偏差最小的轨迹。候选轨迹的数量控制在50到100条,每条预测1秒左右,计算量在Orin Nano上大约10到20毫秒,可以接受。

3.4 速度指令下发和飞控接口

避障算法输出的是期望速度矢量,需要转换成飞控能理解的指令。如果用PX4飞控,可以通过MAVLink的SET_POSITION_TARGET_LOCAL_NED消息发送速度指令,坐标系用机体坐标系或者本地NED坐标系。如果用ArduPilot,可以用SET_POSITION_TARGET_LOCAL_NED或者直接发速度控制消息。

这里有个关键点:飞控内部有自己的速度环和姿态环,外部速度指令的更新频率不能太低,否则飞控会在指令之间做插值,导致实际轨迹和期望轨迹偏差较大。我建议速度指令的更新频率至少20Hz,最好50Hz。如果避障算法的输出频率只有10Hz,需要在中间加一个插值或者预测环节,把指令平滑到50Hz再发给飞控。

注意:发送速度指令时一定要设置好坐标系和参考系,我见过有人把机体坐标系的速度当成NED坐标系发出去,结果无人机往侧面飞而不是往前飞,直接撞墙。

4. 20m/s速度下的参数调优和实测

4.1 速度环和制动距离的匹配

20m/s不是随便设的,它和雷达探测距离、算法延迟、制动能力都有关系。假设雷达有效探测距离40米,算法延迟100毫秒,通信延迟20毫秒,飞控响应延迟30毫秒,总延迟150毫秒。在这150毫秒内,无人机已经飞了3米。剩下的37米用于避让,如果横向避让需要1秒,那在这1秒内又飞了20米,实际可用于决策的距离只有17米左右。所以20m/s已经是比较激进的速度,再高就需要更远的探测距离或者更快的算法。

制动距离的测试方法是:在定点模式下让无人机以20m/s前飞,然后突然给一个反向速度指令,记录从指令发出到速度降到零的时间和距离。我实测的数据是,最大减速度约4m/s²,制动距离约50米,制动时间约5秒。这个数据说明,如果前方40米有障碍,光靠刹车是停不住的,必须提前横向避让。

4.2 避障触发距离和膨胀半径的整定

避障触发距离不能太近,否则来不及避让;也不能太远,否则频繁触发影响飞行效率。我的经验值是:触发距离等于速度乘以1.5到2.0秒。20m/s速度下,触发距离取30到40米。膨胀半径取0.8米,这样即使点云有噪声,也不会因为单个噪点就触发避障。

整定的方法是:先在低速下测试,比如5m/s,观察避障触发时无人机距离障碍物的实际距离,然后逐步提高速度,调整触发距离和膨胀半径,直到高速下也能稳定避让。我建议每次调整一个参数,记录每次飞行的轨迹和避障触发点,用数据来指导调参,不要凭感觉。

4.3 点云噪声和误报的处理

MID360在室外强光下点云噪声会明显增加,尤其是对着太阳方向飞的时候,噪点可能被误判为障碍物。处理方法有几个:一是限制点云的距离范围,只保留5到40米之间的点;二是用反射强度过滤,MID360的反射强度信息可以帮助区分真实障碍和噪声;三是做时间一致性检查,只有连续多帧都出现的障碍点才认为是真实的。

我遇到过在树荫下飞行时,树叶晃动导致点云频繁出现和消失,避障算法不断触发。后来加了时间一致性检查,要求障碍点在最近3帧中都存在才纳入地图,问题就解决了。代价是响应延迟增加了约100毫秒,但换来了稳定性提升。

4.4 实测数据和典型场景表现

我在一个长约80米、宽约20米的室内场地做了实测。场地中间放了几个纸箱作为障碍物,无人机从一端起飞,以20m/s速度飞向另一端,中途需要绕过纸箱。实测下来,避障成功率在90%以上,失败的情况主要是纸箱太矮,雷达垂直视场角没有覆盖到,或者纸箱表面太光滑,激光反射率太低导致点云稀疏。

室外测试在操场进行,障碍物是足球门和几个锥桶。室外阳光对雷达的影响比预想的小,但地面反射点云明显增多,需要把地面分割阈值调高一些。20m/s速度下,无人机能在距离障碍物约25米时开始横向避让,避让轨迹平滑,过载在2G以内,飞控姿态跟踪良好。

5. 那些文档里不会写的踩坑记录

5.1 雷达IP冲突和网络配置的坑

MID360默认IP是192.168.1.1XX,如果机载计算机的网口也配了192.168.1.X的地址,可能会冲突。我第一次配置时把主机IP设成192.168.1.50,结果雷达连不上,后来发现雷达的默认IP是192.168.1.150,和主机IP不在同一网段但网关设置有问题。解决办法是把主机IP设成192.168.1.50,子网掩码255.255.255.0,网关留空,雷达IP保持默认,这样就能正常通信。

还有一个坑是网线的质量。MID360对网线要求比较高,劣质网线会导致丢包,点云出现周期性缺失。我换了一根带屏蔽的工业网线之后,丢包率从5%降到了0.1%以下。网线长度也不要太长,超过3米就可能影响信号质量。

5.2 时间同步和运动补偿

高速飞行时,点云的运动畸变非常明显。MID360一帧点云的时间跨度约100毫秒,在这100毫秒内无人机飞了2米,如果不做运动补偿,点云会严重变形,障碍物位置会偏移。解决办法是用IMU数据做运动补偿,把每个点的时间戳对应的无人机位姿算出来,把点云变换到同一时刻的坐标系下。

时间同步是运动补偿的前提。MID360支持PTP时间同步,但配置起来比较麻烦。简单一点的方法是用飞控的IMU时间戳作为基准,雷达驱动收到点云后,用最近邻的IMU数据做插值。我实测下来,只要IMU和雷达的时间偏差在10毫秒以内,运动补偿效果就够用了。

5.3 电磁干扰和点云异常

电机和电调工作时会产生强电磁干扰,MID360靠近这些部件时点云会出现异常,表现为大量随机噪点或者测距值跳变。我的解决办法是把雷达尽量远离电调和电机线,至少保持10厘米以上的距离,同时给雷达的供电线加磁环。如果机架是碳纤维的,雷达和飞控之间的连线要用屏蔽线,屏蔽层单端接地。

还有一个容易被忽略的点是雷达窗口的清洁。飞行一段时间后,窗口上会附着灰尘和细小颗粒,导致测距精度下降。我养成的习惯是每次飞行前用镜头布擦一下雷达窗口,这个简单的动作能避免很多莫名其妙的点云问题。

5.4 飞控参数和避障模式的冲突

PX4和ArduPilot都有自己的避障功能,比如PX4的Collision Prevention和ArduPilot的ADSB避障。如果这些功能和外部避障算法同时开启,可能会互相干扰。我的做法是关闭飞控自带的避障功能,只保留外部避障算法的速度指令输入,避免两套逻辑打架。

另外,飞控的失控保护设置也要注意。自主避障模式下,如果遥控器信号丢失,飞控默认会触发返航或者降落,但返航路径可能经过障碍物区域。我建议把失控保护设置成悬停或者继续执行当前任务,等通信恢复后再接管。这个设置因飞控而异,需要仔细检查参数表。

6. 从能飞到好用还差哪些优化

6.1 点云降采样和计算延迟的平衡

体素栅格降采样的分辨率直接影响计算延迟和避障精度。分辨率0.1米时,点云数量大约减少到原来的十分之一,计算延迟约30毫秒;分辨率0.2米时,点云数量减少到二十分之一,计算延迟约15毫秒,但障碍物边界会变得模糊,膨胀半径需要相应加大。我最终用的是0.15米的分辨率,在延迟和精度之间取了个平衡。

如果算力实在不够,可以用ROI滤波,只处理前方一定角度和距离范围内的点云,把无关区域的点直接丢弃。20m/s避障主要关心前方和侧前方,后方和侧后方的点云可以降频处理或者不处理。

6.2 避障轨迹的平滑和飞控跟踪

避障算法输出的速度指令如果跳变太大,飞控跟踪会震荡,实际轨迹和期望轨迹偏差大。解决办法是对速度指令做低通滤波或者用多项式拟合做平滑。我用的是一阶低通滤波,截止频率5Hz,既能平滑指令又不引入太大延迟。

飞控的速度环参数也需要调整。默认参数在低速下表现良好,但20m/s速度下可能响应不够快。我建议把速度环的P增益适当调大,I增益调小,避免积分饱和。具体数值因飞控和机架而异,需要实际飞行调试。

6.3 多传感器融合的扩展思路

MID360在垂直视场角上有盲区,正下方和正上方看不到。如果飞行场景有低矮障碍或者需要垂直避让,可以加一个下视的超声波或者红外测距模块,和雷达数据融合。融合的方法可以用卡尔曼滤波或者简单的加权平均,把不同传感器的障碍物距离估计合并成一个更可靠的估计。

另一个扩展方向是加视觉传感器做语义避障。激光雷达只能看到障碍物的几何形状,不知道是树枝还是电线。如果加一个单目或者双目相机,用轻量级的目标检测网络识别障碍物类型,可以针对不同障碍物采取不同的避让策略。比如对电线要远离,对树枝可以穿越。这个方向计算量比较大,需要更强的机载计算机。

6.4 实际飞行中的应急处理

再好的避障算法也有失效的时候,应急处理能力是最后一道防线。我的做法是设置一个紧急悬停按钮,遥控器上的一个开关,拨动后飞控立即切换到定点模式,无人机原地悬停。这个操作不依赖机载计算机,直接由飞控执行,响应时间在50毫秒以内。

另外,机载计算机上跑一个看门狗节点,监控避障算法的输出频率。如果超过200毫秒没有新的速度指令,看门狗自动触发悬停或者降落。这个机制能防止算法崩溃导致无人机失控。

我在实际飞行中遇到过几次避障算法因为点云异常而输出错误指令的情况,看门狗及时触发悬停,避免了撞墙。后来分析日志发现是雷达窗口被灰尘遮挡导致点云大面积缺失,清理窗口后问题消失。这个经历让我养成了每次飞行前检查雷达窗口和看门狗状态的习惯。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询