玩Pixhawk飞控的人迟早会遇到两个老大难一是低空定高飘得离谱二是飞着飞着撞东西。气压计在近地面被地面效应和气流折腾得像个醉汉超声波模块又测不远、怕干扰。后来我给机子加装了一颗北醒TFmini-i-CAN激光雷达相当于给飞控配了一双能真正“看距离”的眼睛把自动避障和定高两个功能一次补齐。这篇教程我从选型、接线、参数配到实测整套流程拆开讲清楚适合正在玩Pixhawk的DIY玩家也适合准备做无人机避障、近地定高作业开发的工程师参考。1. 为什么选这颗“眼睛”方案选型与原理拆解1.1 北醒TFmini-i-CAN到底是个什么传感器北醒TFmini-i-CAN本质上是一颗基于ToFTime of Flight飞行时间法原理的激光测距雷达。它发出激光脉冲光打到目标表面再反射回来通过计算光子在空气中的飞行时间得出传感器到目标的距离。这个原理决定了它和超声波有本质区别激光不受空气温度、湿度、声音反射角度影响方向性好响应快而且测距范围宽得多。TFmini-i-CAN的量程一般在0.1米到12米之间常见型号在近距离也能稳定输出数据典型精度在厘米级。对于无人机定高和避障来说这个量程非常合适。定高时你需要的只是离地高度通常几米就够了避障时前方障碍物检测三到五米的有效距离就能给飞控留出足够的刹车空间。更重要的是它带的是CAN接口支持无人机行业常用的DroneCAN协议早期叫UAVCAN。这意味着它可以直接挂到Pixhawk的CAN总线上不需要额外的USB转接板、不需要接串口线一条四芯线就把供电和数据都解决了。1.2 避障与定高背后的数据链路加装雷达的核心思路是这样一条链路雷达测距 → 数据通过DroneCAN总线送入Pixhawk → 飞控内部做数据融合和逻辑判断 → 输出给电机执行。定高场景下雷达作为测距仪RangeFinder持续向下测距把“离地高度”告诉飞控。传统飞控主要靠气压计估高但气压计有个天生的毛病气压随天气、温度、气流变化会漂。室内开个空调、飞手呼口气、地面桨叶气流反弹高度数据就可能上下乱跳。激光雷达提供的距离数据是绝对测量不受这些因素影响飞控把气压高度和雷达高度做融合以后低空定高会稳很多。避障场景下雷达朝向飞行方向实时探测前方障碍物。飞控里的避障逻辑ArduPilot里的AVOID功能拿到雷达距离后会和设定的“安全距离”做比较。如果前方物体太近飞控就会限制飞行速度甚至刹停不让飞机继续往前顶。要注意的是ArduPilot默认的避障逻辑更偏向“停车”而不是“绕飞”这一点后面实操部分我再细说。1.3 CAN版本比串口版本强在哪儿很多人会问TFmini不是还有串口版、I2C版吗为什么我推荐i-CAN版本。最核心的是抗干扰能力。无人机机身上电调、电机、无线数传都是强干扰源串口在长线传输时容易丢包、乱码尤其是几根杜邦线飞线的情况下数据偶发卡顿很头疼。CAN总线是差分信号传输天然抗共模干扰传输距离远误码率低在振动和电磁噪声环境里稳定得多。其次是接线的便利性。Pixhawk的CAN口本身就是为这类传感器设计的接线只有电源正、电源负、CANH、CANL四根。而CAN总线是串联拓扑一个CAN口能挂多个传感器。今天你挂一颗雷达明天想加第二颗、第三颗不用额外占飞控的串口往同一条总线上并联就行只要给每个设备配不同的Node ID。这点对以后升级避障方案非常重要。I2C虽然也能挂多个设备但地址冲突、线长受限、速度低远没有CAN实用。所以如果你手头飞控有CAN口直接选TFmini-i-CAN版本是投入产出比最划算的选择。2. 硬件准备与接线一次搞定不短路2.1 材料清单动手之前先把东西备齐省得装到一半到处找线清单如下北醒TFmini-i-CAN激光雷达一颗Pixhawk系列飞控一块这里注意最好是带CAN口的版本比如Pixhawk 2/Cube、Pixhawk 4老版Pixhawk 2.4.8裸板一般没有原生CAN口需要转接板不建议新手折腾一条四芯CAN连接线或者自己压端子做线线材用26AWG以上的双绞线更好一个5V电源来源飞控CAN口输出不够的话可以单独从BEC取电万用表一个排查线序和供电问题用Mission Planner地面站电脑一台泡沫板或纸箱作为避障测试的障碍物目标2.2 引脚定义和接线方式TFmini-i-CAN接线端子通常是四根线红色接电源正极、黑色接电源负极、另外两根分别是CANH和CANL信号线。不同批次线序可能不同拿到模块以后不要盲目按颜色接第一件事是看说明书或者用万用表量一下先找供电对5V和GND之间的阻值应该是正常的电路负载CANH和CANL之间通常会有一个120Ω左右的终端电阻标记或者模块上有拨码开关控制。Pixhawk的CAN口引脚定义也有差异。以Pixhawk 4为例CAN1和CAN2接口分别是四个针脚同样是电源和CANH/CANL具体针脚顺序最好以飞控丝印或者官方wiki为准。我的习惯是新飞控到家先把针脚定义截图存手机接线时对着看避免凭感觉插。接线方式一句话飞控CAN口的正极接雷达电源正负极接负CANH接CANHCANL接CANL交叉接线等于挖坑。2.3 供电与终端电阻最容易翻车的地方雷达正常工作需要稳定的5V电源。飞控CAN口一般能提供一定电流但对于TFmini-i-CAN这种带CAN收发器、长时间工作的模块我不建议从飞控的辅助供电口硬扛。尤其当CAN总线上还挂了其他设备时电流一旦不够雷达会出现“刚开始能识别过一会儿数据丢失”的诡异问题。最稳的做法是直接从电池经过BEC降压模块取5V给雷达单独供一路电同时把电源负极和飞控的GND共地。共地非常关键不共地会导致CAN信号电平基准不一致设备枚举不上。终端电阻是CAN总线另一个大坑。CAN总线规范要求总线两端各有一个120Ω的终端电阻用来匹配阻抗、减少信号反射。如果总线上没有终端电阻会出现偶发通讯失败如果有两个以上设备都打开了终端电阻信号强度被过度衰减同样会通讯不稳。Pixhawk的CAN口有的版本板载了终端电阻有的靠跳线帽设置TFmini-i-CAN模块上有的自带终端电阻拨码。实际操作里记住一个原则整条CAN总线只保留两个端点启用终端电阻其他中间节点全部关闭或者用前面提到的万用表电阻档测一下CANH和CANL之间是不是40到120Ω左右的值心里就有底了。安装位置上雷达朝下做定高时建议装在机身中心底部、起落架内侧镜头垂直朝向地面周围不要被电调、电池、线束遮挡。朝前做避障时装在机头正前方偏下位置保证视野里能看到正前方障碍物同时避免直接被桨叶气流吹到。3. 固件与参数配置保姆级实操教学3.1 固件版本与DroneCAN接口启用硬件接完先确认飞控固件。我建议使用ArduPilot Copter 4.1及以上版本这个版本以后DroneCAN功能已经非常成熟参数名也统一了。Pixhawk刷固件的方法不再赘述Mission Planner里“安装固件”页面选好机型点刷写就行。固件刷完连接地面站先做一次飞控的加速度计、罗盘、遥控校准这不光是飞行安全的基本要求也是后续传感器测试的前提。启用DroneCAN总线的核心参数是CAN_P1_DRIVER 设为 1如果你用的固件还是老版本可能看到的是UAVCAN_ENABLE或HAL_CAN_DRIVER原理一样启用即可。参数改完必须重启飞控CAN设备一般是在启动阶段被枚举的热插拔不一定能识别。重启之后在Mission Planner的“DroneCAN”状态页面或者MAVLink控制台里输入uavcan status应该能看到TFmini-i-CAN被列出来。看到设备名那一刻整条硬件链路就算通了。如果什么都看不到返回上一章检查接线和终端电阻。启用DroneCAN后CAN总线的波特率默认通常是1Mbps不需要特殊修改。除非你总线上同时挂了第三方电调并且电调只支持更低波特率那才需要统一调整。3.2 测距仪参数让飞控认识这颗雷达设备被识别之后下一步是告诉飞控“这颗雷达是一台测距仪”。ArduPilot里测距仪的参数前缀是RNGFND1表示一号测距仪。在Mission Planner的“完整参数列表”里搜索RNGFND1逐个设置RNGFND1_TYPE必须设定为DroneCAN对应的测距仪类型不同的固件版本在下拉菜单里的标签不完全一样。有的显示“DroneCAN”有的显示“Benewake CAN”选能匹配你模块的那个。这里不要凭印象填数字直接在图形界面下拉选最快。RNGFND1_ORIENT这是传感器朝向关键参数。当前位置填0代表朝前避障用填25代表朝下定高用。很多时候避障不生效或者定高不工作就是这一项填错了。RNGFND1_MIN_CM最小测距值单位厘米。TFmini-i-CAN近距盲区很小但为了避免近处杂波干扰通常设为10也就是忽略10厘米以内的数据。RNGFND1_MAX_CM最大测距值单位厘米。这个值决定了飞控信任多远的数据。朝下做定高设置500到800足够了朝前做避障可以设到800甚至1200。RNGFND1_GNDCLEAR_CM雷达自身安装高度单位厘米。假设雷达装在机腹下方5厘米处这里就填5。这个参数影响定高时对“离地高度”的换算不要漏掉。参数保存后打开Mission Planner的“状态”页面找到sonar_range或者rangefinder相关字段应该能看到实时变化的距离数值。这时候把雷达对着墙、对着地面来回晃动观察数值是否同步跟随。数值跳动几厘米是正常的如果数值乱跳或者明显滞后继续往下看排查部分。3.3 定高相关参数让飞控信任激光高度雷达数据正常以后定高就能接上了。ArduPilot里测距仪参与高度估计的核心参数是RNGFND1_USE把它设为1表示雷达数据会参与飞控的高度状态估计。这样在AltHold定高、Loiter悬停、PosHold位置保持等模式下飞控会自动融合气压计高度和雷达高度而不是只看气压计的漂移值。想让雷达在定高里充分发挥作用还可以开启地形跟随功能。参数TERRAIN_FOLLOW设为1飞机就能在起伏地形上保持固定的离地高度。这个功能在航测、巡检场景里特别实用山坡上飞气压计会认为你在爬升雷达却能准确感知你离草地就两米。实测下来室内定高效果最明显。地面是瓷砖、木地板、水泥地时激光反射稳定悬停高度能锁得很死。在室外草地上雷达把草尖作为反射面高度偶尔会有几厘米的波动但整体依然比气压计稳得多。3.4 避障相关参数设定安全距离与刹车逻辑避障参数同样是AVOID前缀。在ArduPilot Copter里最关键的几个设置是AVOID_ENABLE设为2表示启用基于测距仪的避障。如果设为1那是GPS围栏避障跟雷达没关系。AVOID_MARGIN保护距离单位厘米。设为250就是允许飞机在障碍物2.5米外就必须停下。这个值太小刹车距离不够太大飞行时会觉得“手脚被绑住”。我的建议是室内测试先用200到300室外再根据飞行速度放大。这里特别说明一下ArduPilot避障的实际表现。它不是一个“看见障碍物自动绕飞”的系统。在Loiter或者PosHold模式下如果前方有障碍物进入保护距离飞控会限制你向前打杆飞机在靠近障碍物时自动减速并刹停但不会主动向左右绕路。想真正做到“绕飞”需要更复杂的路径规划配置甚至要加装多方向的雷达甚至视觉传感器。所以单雷达方案把它理解成“电子围栏”或“防撞刹车”更准确。另外避障功能只在有定位的模式下生效。Stabilize自稳这类手动模式没有位置环避障算法无法介入雷达数据再准也拦不住飞机往前冲。测试避障千万别开自稳模式。3.5 验证数据地面站实读最可靠参数全部设好以后不要急着上天先在地面做一轮数据验证。在Mission Planner的“状态”页面打开rangefinder相关项把雷达朝下放在桌面确认读数等于雷达离桌面距离抬起来一点读数应该同步变大。把雷达朝向走廊尽头前后走动确认读数连续变化没有突然跳到0或者满量程。用毛巾、手掌盖住雷达镜头确认读数变成0或者被MIN_CM过滤掉说明遮挡保护逻辑在起作用。如果你用的是MAVLink控制台也可以直接用命令读param show RNGFND1_查看参数是否生效。确认参数写入成功之后再进入下一章的飞行测试。4. 实测现场定高起飞与避障刹停4.1 定高测试室内先练手感定高测试我强烈建议先在有保护圈的小型四轴上进行电池绑牢在宽敞室内或者无风室外进行。第一次测试别追求高先把飞机推到Loiter模式解锁起飞离地半米以内悬停。观察两个东西悬停时油门杆回中后飞机是否稳定锁在某一高度以及Mission Planner的高度曲线是否有规律性波浪。加了雷达以后正常情况高度曲线应该是很平的一条线上下偏差在10厘米级别。如果依然上下飘先看雷达数据是否连续别急着怀疑飞控算法。高度锁住以后慢慢推油门爬升到1.5到2米再松杆看飞机是否能稳定停在当前高度而不是弹跳。雷达定高的响应比气压计快很多飞机会表现出一种“粘住地面高度”的感觉非常直观。我实测时印象最深的是在室内瓷砖地面上飞机从0.3米提到1.2米悬停十分钟高度纹丝不动而旁边另一台没加雷达的飞机气压计高度自己漂了快半米。这差距就是激光雷达带来的。4.2 避障测试保险为先纸箱当靶子避障测试要格外谨慎选择空旷场地飞机加装桨叶保护圈障碍物用泡沫板或者大纸箱不要用硬物。测试流程是这样的先把雷达固定为前向确保RNGFND1_ORIENT是0。解锁起飞在Loiter模式下悬停在离地面0.5米左右。把纸箱放在飞机前方两到三米处然后非常缓慢地向前推杆。正常现象是飞机向前飞接近纸箱大概AVOID_MARGIN设定的距离时飞机会明显减速再往前推杆也不会继续靠近像是前面有一堵看不见的墙。此时向左右打杆飞机能轻松避开纸箱说明避障逻辑没有锁死所有方向。一个容易被忽略的点是雷达锥角。TFmini-i-CAN的视场角不大雷达只能看清正前方一小片区域。纸箱放到雷达视野偏左偏右的位置飞控根本“看不见”直接撞上去也是正常的。所以别把单雷达避障想成360度无死角它只能管住雷达指向的那一个方向。4.3 测试中的真实问题与调参心得测试过程中我也踩过一些坑写出来给大家参考。第一次避障测试时飞机完全无视纸箱直直往前顶。排查了半天发现RNGFND1_ORIENT虽然设为0但雷达实际安装时轻微朝上倾斜加上机身姿态前倾雷达看到的区域已经越过纸箱顶部照到墙上了。解决办法是重新调整雷达安装角度让它尽量和机身水平面平行并且在Mission Planner里设定合理的RNGFND1_MAX_CM把远处干扰数据过滤掉。还有一次定高测试飞机高度剧烈抖动像筛糠一样。原因是雷达用扎带绑在机腹固定不牢桨叶振动传导到镜头导致测距值高频抖动。后来换了块泡棉双面胶把雷达和机架之间做了一层软连接抖动立刻消失。雷达安装一定要兼顾“牢靠”和“减振”。另外在阳光直射环境中激光雷达偶尔会出现噪点。TFmini-i-CAN的抗强光能力已经做得不错但正午大太阳直射地面反射物时读数还是会有小幅波动。这种情况可以通过地面站里的数据平滑功能或者在后期算法里做简单的滑动滤波处理不要指望传感器每一帧都完美。5. 常见问题排查与经验补完5.1 问题速查表下面这张表是我实际调试中遇到频率最高的几类问题按“现象 - 原因 - 排查方法”整理成速查表。现象常见原因排查方法DroneCAN设备扫描不到线序接错、供电不足、终端电阻异常用万用表确认电源和CANH/CANL检查独立供电和共地确认终端电阻只在总线两端设备识别但测距值一直为0雷达被遮挡、镜头损坏、MIN_CM设置过大拿走遮挡物查看镜头表面是否脏污降低MIN_CM测试测距值乱跳或者断续电源纹波大、CAN总线受到干扰改用BEC独立供电缩短CAN线长度给雷达做减振定高模式下高度依然漂移RNGFND1_USE没有开启或雷达朝向不是朝下确认RNGFND1_USE1RNGFND1_ORIENT25观察状态页面测距值是否正常避障完全不生效没开AVOID_ENABLE2、在手动模式下测试、雷达朝向参数错误检查避障参数切到Loiter/PosHold模式校准ORIENT朝向多个CAN设备互相冲突Node ID重复查阅雷达说明给每个设备分配不同Node ID5.2 一些掏心窝的经验整个项目做完后我的体会是一颗雷达加一个Pixhawk解决的是无人机“近地感知”里最刚需的问题。如果你只准备装一颗雷达我强烈建议先朝下做定高。定高的收益是立竿见影的室内低空放心飞不用再盯着高度数提心吊胆而且调试难度比避障低很多。避障用途虽然听着更“智能”但它对安装角度、模式选择、场景理解要求更高而且单雷达只能守护一个方向期望值不要拉太高。雷达装好以后别忘了定期检查镜头。无人机起降时卷起的尘土、草屑、水滴都容易糊住镜头这玩意儿比镜头脏污更隐蔽因为雷达还能工作但有效距离大打折扣。我现在的习惯是每次飞行前用软布擦一下镜头顺便看一眼线材有没有被桨叶打伤。从安全性上讲雷达避障是辅助不是保险。手动模式下它拦不住你速度太快时它也刹不住真正让你安全的是飞行习惯。测试阶段老老实实找空旷场地、装保护圈、保持电池余量雷达只会让你的飞行更从容不会替代你的判断。这套“飞控加眼睛”的方案后续还可以往多雷达方向扩展前向避障加向下定高同时挂在不同节点上再配合无人机的任务模式就能实现更接近“自主飞行”的体验了。
阅读完成 · 觉得有帮助?