ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Livox MID360激光雷达20m/s高速避障实战指南

Livox MID360激光雷达20m/s高速避障实战指南 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毫秒没有新的速度指令看门狗自动触发悬停或者降落。这个机制能防止算法崩溃导致无人机失控。我在实际飞行中遇到过几次避障算法因为点云异常而输出错误指令的情况看门狗及时触发悬停避免了撞墙。后来分析日志发现是雷达窗口被灰尘遮挡导致点云大面积缺失清理窗口后问题消失。这个经历让我养成了每次飞行前检查雷达窗口和看门狗状态的习惯。
返回列表