ARTICLE DETAIL

资讯详情

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

基于Livox MID360的20m/s高速避障无人机:传感器选型与系统设计

基于Livox MID360的20m/s高速避障无人机:传感器选型与系统设计 1. 为什么偏偏是Livox MID360高速避障的传感器选型逻辑做高速避障无人机第一个绕不开的问题就是用什么传感器去“看”世界。超声波响应慢、作用距离短视觉方案在强光或暗光下容易翻车传统机械式激光雷达虽然成熟但体积大、重量高、动辄上万元装到一台追求20m/s飞行速度的穿越机上基本等于给短跑运动员绑了沙袋。我前后试过三种方案最后锁定Livox MID360原因很实在。MID360是一款非重复扫描的固态激光雷达重量约265克测距范围在80米左右对10%反射率目标约40米水平视场角360度垂直视场角-7度到52度点频最高约20万点每秒。这几个参数放在一起意味着它用一颗雷达就能覆盖机身周围几乎全部方向不需要像机械式雷达那样靠旋转去拼凑视野也不像某些固态雷达只有前向一个窄锥角。对于高速飞行来说前向和侧向的感知盲区越小留给飞控的反应时间就越充裕。这里要解释一个关键点为什么高速避障对“视场角”这么敏感。假设无人机以20m/s飞行前方30米出现障碍物从探测到需要完成减速或转向总时间只有1.5秒。如果雷达只有前向60度视场那么当无人机做急转弯时侧方障碍物可能在转弯过程中才进入视野此时距离已经很近。MID360的360度水平视场让机身四周始终处于感知范围内飞控在做横向机动时不需要“扭头”去看这是高速场景下非常实际的收益。另一个选它的理由是点云密度和帧率。MID360单帧点云在非重复扫描模式下随着积分时间增加覆盖会越来越密。对于避障来说我们不需要每帧都做完整建图而是要在几十毫秒内判断出“哪个方向有障碍、距离多少”。它的数据输出频率和ROS驱动成熟度让整个感知链路可以跑在机载计算机上不需要额外下传处理。当然选它也有代价。MID360的点云是非重复扫描的单帧看起来比较稀疏直接拿单帧做障碍物聚类容易漏检。我的做法是累积3到5帧再做处理用时间换密度。这个取舍在后面讲数据处理时会详细展开。注意MID360对强光直射比较敏感正对太阳飞行时点云噪声会明显增加。实际飞行尽量避开正午逆光航线或者给雷达加装遮光罩。2. 整机架构设计从雷达数据到电机响应的完整链路2.1 硬件拓扑与算力分配一台能跑20m/s避障的无人机硬件上不能只是“把雷达装上去”那么简单。我的配置是机架用5寸穿越机改装的碳纤维框架轴距约250mm动力系统选6S电池配2806.5电机和5.1寸三叶桨悬停油门在35%左右最大推力推重比约4:1。这个动力冗余是为了在高速下还能有足够的加速度去做紧急避让。飞控用Pixhawk 6C刷PX4固件。机载计算机用Jetson Orin Nano负责跑雷达驱动、点云处理和局部路径规划。雷达通过以太网连接到Orin Nano飞控和Orin Nano之间用串口做MAVLink通信。整个链路是MID360出点云 → Orin Nano做障碍检测和避障决策 → 通过MAVLink发送速度或位置设定点给PX4 → PX4控制电机执行。这里有一个容易踩坑的地方很多人把雷达直接接到飞控上指望飞控自己处理点云。PX4虽然支持避障但它的算力有限处理20万点每秒的点云根本不现实。正确的分工是机载计算机做重活飞控只负责稳定控制和执行设定点。Orin Nano的算力足够跑一个轻量级的点云处理管线同时留出余量给视觉或其他任务。2.2 坐标系与安装标定雷达装到机架上必须做外参标定。MID360的坐标系定义是X向前Y向左Z向上。安装时尽量让雷达的X轴和机头方向一致Z轴和机体垂直。如果安装有偏差点云里的障碍物位置就会和实际位置对不上避障逻辑会误判。我的做法是先把雷达用减震球固定在机架顶部尽量靠近重心位置减少飞行振动对点云的影响。然后在平地上放一个已知位置的障碍物手动记录点云中障碍物的坐标和实际坐标对比算出旋转和平移偏差。如果偏差在5厘米和2度以内基本可以接受。超过这个范围需要在ROS里加一个静态变换节点做补偿。提示MID360的IP地址默认是192.168.1.1XX网段如果机载计算机的网段冲突需要先改雷达IP。改IP用Livox Viewer或者SDK里的配置工具改完记得重启雷达。2.3 供电与振动处理MID360的功耗约6瓦供电电压9到27伏可以直接从6S电池经BEC降压到12伏供电。但要注意雷达对电源噪声比较敏感最好单独用一个低噪声BEC不要和电调共用一路电源。我试过和电调共用点云里会出现规律性的噪声条纹换了独立BEC之后就干净了。振动是另一个隐形杀手。高速飞行时电机振动会通过机架传到雷达导致点云在垂直方向上出现“拖尾”。我的处理是在雷达和机架之间加四颗硅胶减震球同时在PX4里把雷达的安装位置设置为远离振动源。如果振动仍然明显可以在点云处理前加一个统计滤波把明显偏离主体的点去掉。3. 点云数据处理从原始数据到障碍物地图3.1 驱动安装与数据接收在Orin Nano上跑MID360官方提供了ROS和ROS2的驱动包。我用的是ROS2 Humble安装livox_ros_driver2配置好雷达IP和主机IP后启动驱动节点就能在/livox/lidar话题上收到点云数据。数据格式是自定义的CustomMsg需要转换成标准的PointCloud2才能用PCL或Open3D处理。转换的时候要注意时间戳同步。MID360的点云每个点都带时间戳如果直接当成同一时刻的点处理高速飞行时会有运动畸变。我的做法是用驱动里的时间同步功能把点云按帧对齐到同一时刻或者用IMU数据做去畸变。这一步在低速时影响不大但20m/s飞行时一帧点云的时间跨度内无人机可能移动了几十厘米不去畸变的话障碍物位置会明显偏移。3.2 点云滤波与地面分割原始点云里包含地面、机身自身振动产生的噪声、以及远处的稀疏点。直接拿来做避障计算量大且容易误判。我的处理流程是三步第一步用直通滤波把雷达后方和上方不需要的点去掉。虽然MID360是360度但无人机主要关心前向和侧向后方可以适当裁剪减少计算量。第二步用统计滤波去掉离群点。设置邻域点数为20标准差倍数为1.5把明显孤立的噪声点滤掉。第三步地面分割。用RANSAC拟合地面平面把地面点去掉剩下的就是障碍物候选点。这一步很关键因为地面点如果不去掉避障算法会以为下方一直有障碍导致无人机不敢下降。地面分割的参数需要根据飞行高度调整。RANSAC的距离阈值设0.2米左右比较合适太小会把地面上的小起伏当成障碍太大又会漏掉低矮障碍物。3.3 障碍物聚类与膨胀去掉地面后剩下的点用欧式聚类分成不同的障碍物簇。聚类容差设0.5米最小簇点数设10最大簇点数不设上限。每个簇计算一个包围盒得到障碍物的位置和尺寸。然后做膨胀处理。因为点云是稀疏的障碍物边缘可能不完整如果直接按包围盒避障无人机可能从边缘擦过去。我的做法是把每个障碍物的包围盒向外膨胀0.5米相当于给无人机加了一个安全半径。这个膨胀距离根据飞行速度调整速度越快膨胀越大。20m/s时我用到0.8米。膨胀后的障碍物信息会写入一个局部代价地图用栅格表示每个栅格记录是否有障碍。栅格分辨率设0.2米范围覆盖机身周围20米。这个代价地图就是后续路径规划的依据。实操心得点云聚类的参数不要照搬教程。不同场景下障碍物的大小和密度差别很大最好在实际飞行场地先录一段点云离线调好参数再上机。4. 避障算法实现20m/s下的反应速度从哪来4.1 局部路径规划选型高速避障不能用全局规划因为障碍物是动态出现的全局规划来不及重算。我用的是基于采样的局部规划方法在速度空间里采样多组速度和角速度组合预测每组组合在未来0.5秒内的轨迹检查轨迹是否与代价地图冲突选一条无冲突且最接近目标方向的轨迹执行。这个方法的优点是计算量可控在Orin Nano上跑1000组采样大约需要5到8毫秒满足20Hz的控制频率。缺点是采样分辨率有限可能错过最优解但在高速避障场景下安全通过比最优路径更重要。采样范围要根据速度调整。最大速度设20m/s最大角速度设90度每秒加速度限制设5m/s²。这些参数决定了无人机的机动能力边界设得太激进会导致轨迹不可执行设得太保守又避不开障碍。4.2 紧急制动与优先级局部规划之外我还加了一层紧急制动逻辑。当障碍物距离小于安全距离我设的是3米且局部规划找不到无冲突轨迹时直接触发紧急制动以最大减速度停下来。这个逻辑是最后一道防线宁可停住也不要撞上去。紧急制动的减速度设8m/s²从20m/s到停住需要2.5秒滑行距离约25米。所以安全距离不能设得太小否则制动距离不够。实际飞行时我把前向安全距离设为15米侧向设为8米后方设为5米。这些距离是根据制动距离和反应时间反推出来的。4.3 速度自适应策略固定参数在低速时太保守高速时又不够安全。我的做法是让安全距离和膨胀半径随速度线性变化。速度低于5m/s时膨胀半径0.3米前向安全距离5米速度到20m/s时膨胀半径0.8米前向安全距离15米。这样低速时无人机可以灵活穿梭高速时自动拉开安全余量。这个自适应策略用一个简单的线性插值实现输入是当前速度输出是膨胀半径和安全距离。实测下来这个策略让无人机在低速穿越窄缝和高速直线飞行之间切换得很自然不需要手动调参。5. 飞控配置与MAVLink通信5.1 PX4避障参数设置PX4里和避障相关的参数主要有几个CP_DIST是碰撞预防的距离阈值设成和机载计算机一致的安全距离CP_GO_NO_DATA设0表示没有障碍物数据时允许飞行CP_MAX_DIST设20米表示避障考虑的最大距离。还要开COM_OBS_AVOID让PX4接收来自机载计算机的避障设定点。这个参数打开后PX4会把外部发来的速度设定点经过碰撞预防模块检查后再执行相当于飞控层面还有一层保护。注意PX4的碰撞预防模块默认只处理前向障碍如果要用全向避障需要在机载计算机里把障碍物信息转换成PX4能理解的格式或者直接用机载计算机的速度设定点覆盖飞控的避障逻辑。5.2 MAVLink消息设计机载计算机和飞控之间的通信我用的是MAVLink的SET_POSITION_TARGET_LOCAL_NED消息发送速度设定点。消息里包含速度的XYZ分量和偏航角速度。发送频率设20Hz和局部规划的频率一致。这里有一个细节PX4对速度设定点有加速度限制如果机载计算机发的速度变化太剧烈PX4会做平滑处理导致实际响应比预期慢。我的做法是在机载计算机里也加一个加速度限制让发出的速度设定点本身就在飞控能执行的范围内。这样飞控不需要做额外平滑响应更直接。5.3 失控保护与降级策略高速避障最怕的是机载计算机死机或通信中断。我的保护策略是如果飞控超过0.5秒没收到新的速度设定点自动切换到位置保持模式悬停等待如果超过3秒没恢复自动返航。这个逻辑在PX4里用失控保护参数配置COM_OBL_RC_ACT设成返航COM_OF_LOSS_T设成0.5秒。另外雷达数据如果中断机载计算机应该立即停止发送速度设定点让飞控进入悬停。我在机载计算机里加了一个看门狗监控雷达话题的更新频率低于10Hz就触发保护。6. 实测调参与常见问题排查6.1 首次试飞的分步验证不要一上来就开20m/s。我的试飞流程是先悬停测试雷达数据是否正常点云里能不能看到地面和周围障碍物然后以3m/s低速飞行测试避障逻辑是否能识别障碍并绕开再逐步提速到5m/s、10m/s、15m/s每个速度段飞几个起落确认避障行为符合预期最后才上20m/s。每个速度段重点看两个指标一是障碍物检测的延迟从障碍物进入视野到无人机开始机动的时间二是避障后的轨迹是否平滑有没有出现震荡或急停。如果延迟超过100毫秒或者轨迹震荡明显就要回去调参数。6.2 常见问题速查表现象可能原因排查方法解决措施点云稀疏障碍物漏检单帧点云密度不足查看单帧点云点数累积3到5帧再处理障碍物位置偏移雷达外参不准或运动畸变对比静止时点云和实际位置重新标定外参加去畸变无人机震荡避障参数过于激进观察速度设定点变化降低加速度限制增大膨胀半径紧急制动频繁触发安全距离设得太大查看制动触发时的障碍距离适当减小安全距离或提高规划成功率雷达数据中断网线接触不良或供电不稳检查网口指示灯和电压更换网线独立BEC供电高速时避障反应慢点云处理延迟大测量从收到点云到发出设定点的时间降低点云分辨率优化聚类参数6.3 几个用血泪换来的经验第一个经验雷达的安装角度比想象中重要。我一开始把雷达水平安装结果垂直视场角只有-7到52度下方盲区很大低空飞行时看不到近处地面。后来把雷达向前倾斜了10度下方盲区减小低空避障明显改善。第二个经验点云处理不要追求完美。一开始我试图把每个障碍物都精确聚类结果计算量太大延迟超过50毫秒。后来改成先用栅格做粗略的占据检测只在必要时才做精细聚类延迟降到15毫秒以内。第三个经验电池电压对雷达影响很大。6S电池满电25.2伏放到3.5伏每片时只有21伏如果BEC质量不好雷达供电可能跌到10伏以下导致点云异常。我的做法是BEC选宽压输入输出稳定在12伏并且在电池低压时降低飞行速度减少雷达功耗压力。第四个经验飞行场地要提前扫描。第一次在陌生场地飞雷达把场地边缘的围栏当成了障碍物导致无人机一直往中间躲。后来我养成了习惯每次换场地先用低速飞一圈让雷达建一个粗略的场地地图确认没有误检再提速。7. 从能飞到好用几个可以继续深挖的方向这套配置跑通之后20m/s直线避障已经比较稳定了。但如果要应对更复杂的场景还有几个方向可以继续做。一个是多雷达融合MID360虽然360度但垂直视场有限加一个下视雷达可以补盲对起降和低空飞行帮助很大。另一个是把视觉和雷达做前融合视觉提供语义信息雷达提供精确距离两者互补可以区分“需要避开的障碍”和“可以穿过的草丛”。还有一个方向是预测性避障。现在的逻辑是看到障碍才反应如果能把障碍物的运动趋势也考虑进去比如对向飞来的无人机就可以提前规划绕行路线而不是等到很近才急转。这个需要引入目标跟踪计算量会上去但Orin Nano的算力还有余量。最后说一个实际体会高速避障的瓶颈往往不在算法而在传感器安装、供电、振动这些“脏活”上。我见过太多人算法调得很好一飞就炸最后发现是雷达没固定牢或者网线松了。把硬件做扎实比调参更重要。
返回列表