1. 为什么选择TFmini-i-CAN一个雷达两种玩法大家好我是老张一个玩了十几年无人机和飞控的“老鸟”。今天想和大家深入聊聊一个特别有意思的硬件组合北醒的TFmini-i-CAN激光雷达和ArduPilot飞控。你可能在很多教程里看到过用超声波、红外或者单点激光雷达来做避障或者定高但通常一个传感器只能干一件事。避障的雷达只管看前面有没有障碍物定高的雷达只管盯着地面算高度想两样都干那就得装两个传感器既占地方又增加重量和布线复杂度。而我这次折腾的TFmini-i-CAN它最大的魅力就在于“一机两用”。通过一套硬件和一套巧妙的参数配置你就能让它在飞行中同时或者分时扮演两个角色既是前方敏锐的“眼睛”帮你避开树木、电线又是向下精准的“尺子”让无人机在复杂地面比如草地、不平整的水泥地上方实现厘米级精度的稳定悬停。这对于追求轻量化、低成本又想实现高级自主飞行功能的多旋翼无人机比如植保机、巡检机、甚至是高级FPV穿越机来说吸引力太大了。为什么是TFmini-i-CAN首先它用的是CAN总线接口。相比常见的串口UART雷达CAN总线优势明显抗干扰能力强一根总线就能挂多个设备理论上ArduPilot支持最多10个这类传感器布线简洁通信可靠特别适合无人机这种电磁环境复杂、空间有限的平台。其次它的性能参数很实在最大测距能到12米对于避障和低空定高绰绰有余精度高而且体积小巧功耗低。最后也是最重要的从ArduPilot Copter 4.1.4固件开始官方就原生支持基于CAN协议的激光雷达用于避障和定高这意味着集成不再是“魔改”而是有官方标准流程的稳定功能。所以如果你手头有一个Pixhawk系列的飞控比如Pixhawk 2.4.8, Cube Orange甚至是一些国产兼容板只要刷了ArduPilot固件并带有CAN接口再加上一个TFmini-i-CAN雷达你就能解锁这个非常实用的双功能。下面我就把我从硬件配置、软件调试到实际测试踩过的坑和总结的经验毫无保留地分享给你。2. 硬件准备与雷达的“身份证”设置工欲善其事必先利其器。在把雷达接到飞控上之前有几步关键的准备工作必须做对否则后面全是坑。首先务必确认你买到的是CAN总线版本。北醒TFmini-i这个型号有485版本和CAN版本硬件接口和通信协议完全不同买错了就只能退货。认准产品型号里的“-CAN”后缀。拿到雷达后别急着接线。TFmini-i-CAN出厂时有一个默认的CAN通信参数但如果我们想连接多个雷达或者为了确保通信稳定可能需要调整它的“身份证”——也就是CAN ID和波特率。雷达有两个ID发送IDSend ID和接收IDReceive ID。简单理解发送ID是雷达往外发数据时用的地址这个地址在ArduPilot那边被看作是接收IDRNGFNDx_RECV_ID。多个雷达挂在同一根CAN总线上时每个雷达的发送ID必须设置为不同的值否则飞控就分不清数据是谁发的了。配置这些参数需要借助一个工具CAN分析仪比如我用的USB-CAN适配器。通过电脑上的串口助手或者专用的CAN工具软件向雷达发送特定的指令帧。这个过程听起来有点硬核但其实就像给设备发短信设定参数一样。这里我给出最常用的几条指令十六进制格式你可以直接用修改发送ID例如想把雷达的发送ID改为4十进制就发送5A 0E 51 00 08 03 00 00 00 04 00 00 00 C8保存设置发送5A 04 11 6F否则断电后修改会丢失。启用/禁用终端电阻CAN总线两端通常需要接120欧姆的终端电阻来消除信号反射。雷达板载了一个可软件控制的终端电阻。如果总线上只有雷达和飞控两个设备且飞控端可能没有终端电阻你可以启用雷达上的这个电阻发送5A 05 60 01 C0。默认是禁用的5A 05 60 00 BF。我的经验是如果通信偶尔出现丢数据启用这个电阻会有奇效。注意这些指令是发给雷达的需要通过CAN分析仪连接到雷达的CAN_H和CAN_L线上。北醒的官方文档里有更详细的指令说明建议操作前通读一遍。一个常见的误区是忘记发送“保存设置”指令导致反复配置都不生效。完成雷达的“单机”设置后我们来处理飞控端的接线。以最常见的Pixhawk 2.4.8为例它的CAN接口通常标记为“CAN”或“CAN1”。你需要找到飞控的引脚定义图确认CAN_H和CAN_L是哪两个针脚。TFmini-i-CAN的线序一般是红电源、黑电源-、黄CAN_H、绿CAN_L。电源可以直接从飞控的电源输出口如PM板取电电压范围是7-30V典型工作电流在100mA左右非常省电。接线时务必仔细接反了可能烧坏设备。3. 飞控参数配置上让雷达成为“避障先锋”硬件连接妥当给飞控上电用Mission Planner或QGroundControl连接上。现在进入最核心的软件配置环节。我们的第一个目标是让雷达实现前方避障功能。首先需要告诉飞控“嘿CAN总线上有设备并且它是遵循特定协议的激光雷达。” 我们进入全部参数表找到并设置以下关键参数启用CAN端口与协议CAN_P1_DRIVER 1启用CAN1端口驱动CAN_D1_PROTOCOL 11这是关键协议号11专指“Benewake CAN雷达协议”ArduPilot用它来解析TFmini-i的数据CAN_P1_BITRATE 250000设置CAN总线波特率为250kbps必须与雷达设置的波特率一致TFmini-i-CAN默认就是250k配置第一个雷达作为避障传感器 接下来我们要把雷达映射到ArduPilot的“测距仪1号”RNGFND1这个虚拟位置上并指定它为避障用途。RNGFND1_TYPE 34类型34同样对应“Benewake CAN”这个参数和上面的协议号是配对使用的RNGFND1_RECV_ID 3这里填的是雷达的发送ID的十进制值如果你没有修改过雷达出厂默认是3。如果你之前用CAN分析仪改成了4这里就填4。RNGFND1_ORIENT 0方向参数。0代表“向前”。这意味着飞控认为这个雷达是面朝前方安装的用于探测前方的障碍物。RNGFND1_MIN_CM 30和RNGFND1_MAX_CM 400设置有效量程。最小距离建议大于雷达的盲区约10cm和你的安装高度。最大距离根据你的避障需求设置不要超过雷达的极限测距12米1200cm通常设400cm4米对于低速避障足够了。RNGFND1_GNDCLEAR 15这个参数很重要单位厘米。它告诉飞控雷达的安装面离地有多高。飞控会用它来补偿计算确保测到的是真实的地面或障碍物距离而不是雷达到自己安装支架的距离。一定要实际测量并准确设置。启用并设置避障功能AVOID_ENABLE 3启用“接近地面站”避障这是最常用的避障模式会根据雷达数据在飞行中自动规避障碍。AVOID_MARGIN 2避障边际单位米。当探测到障碍物距离小于这个值时飞控开始执行避障动作。设为2意味着在2米外就开始规划绕行比较安全。PRX_TYPE 4将接近传感器避障的类型设置为“测距仪”也就是使用我们刚配置的RNGFND1。设置完所有这些参数别忘了点击“写入参数”。然后强烈建议给整个飞控系统完全断电再重新上电。很多CAN设备相关的参数需要重启才能生效偷懒不复位可能会让你在后续调试中怀疑人生。如何验证避障功能配置成功了呢在Mission Planner的“飞行数据”界面按下CtrlF会弹出一个“快速调参”窗口。切换到“Proximity”接近标签页。如果你看到有一个距离数据在实时变化并且当你用手在雷达前方移动时这个数字会灵敏地跟着变那么恭喜你飞控已经正确识别到你的避障雷达了这个界面就是你的“雷达显示屏”在后续测试中非常有用。4. 飞控参数配置下一键切换为“定高尺子”现在我们的雷达已经能完美胜任避障工作了。但如何让它摇身一变成为精准的定高传感器呢难道要重新接线完全不用这就是软件配置的魔力。我们通过另一组参数在飞控内部“虚拟”出第二个雷达专门用于定高。假设我们不想动已经调好的避障雷达RNGFND1那么我们可以使用“测距仪2号”RNGFND2这个位置来定义同一个物理雷达的定高功能。关键技巧在于RNGFNDx_RECV_ID这个参数。只要我们把RNGFND2的接收ID也设置为同一个雷达的发送ID飞控就能从同一条数据流中为两个不同的功能避障和定高提供数据。具体操作如下配置第二个雷达实例用于定高RNGFND2_TYPE 34类型同样是Benewake CANRNGFND2_RECV_ID 3注意这里必须和RNGFND1_RECV_ID设置成一样的值比如都是3。这样飞控才知道这两个虚拟传感器对应的是同一个物理硬件。RNGFND2_ORIENT 25这是实现“一机两用”的灵魂参数方向值25是一个非常特殊的设置它代表“向下但忽略用于避障”。简单说它告诉飞控“这个传感器数据是用来定高的你别把它又算进避障逻辑里。”RNGFND2_MIN_CM和RNGFND2_MAX_CM根据你的定高需求设置。例如你希望无人机在1米到5米的高度范围内使用雷达定高可以设为MIN50,MAX500。RNGFND2_GNDCLEAR 15同样必须准确测量并设置雷达镜片离地面的高度。切换定高传感器源首先将PRX_TYPE改回0禁用或者确保它指向的是RNGFND1避障专用避免冲突。然后找到高度控制相关的参数。最关键的是RNGFND_LANDING系列参数但更直接的是在飞行模式中指定。例如在“定高AltHold”模式或“悬停Loiter”模式下飞控默认会使用首选的高度传感器。你可以通过参数EK3_SRC1_POSZ或ARSPD_USE等来设置但更简单的方法是确保飞控的“首选高度源”是雷达。在Mission Planner的“初始设置”-“必要硬件”-“测距仪”页面你可以看到已连接的测距仪并可以设置哪一个是主高度源。确保你的RNGFND2被启用并设置为主高度源之一。验证定高功能 同样在Mission Planner的“飞行数据”界面CtrlF调出快速调参窗口这次我们看“SonarRange”或“Rangefinder”标签页。这里显示的高度数据应该来自于你设置为定高用途的雷达实例RNGFND2。拿起你的无人机让雷达垂直对着桌面或地面移动观察这个高度读数是否变化平滑、准确。如果读数稳定说明定高雷达配置成功。至此你已经完成了所有配置。你的TFmini-i-CAN雷达现在具备了“双重人格”在飞控的逻辑里它既是向前看的RNGFND1避障又是向下看的RNGFND2定高。在实际飞行中当无人机处于需要避障的模式如定高、悬停、航线飞行时飞控会同时处理这两路数据实现边避障边定高。5. 实战飞行测试与参数微调配置好了不代表在实际飞行中就能完美工作。实验室环境和真实的户外环境天差地别。接下来我分享一些实战测试的步骤和参数微调的经验帮你把系统调教得更加可靠。第一步地面静置测试。这是安全的第一步。将无人机放在开阔平整的地面上上电但不解锁电机。在Mission Planner里观察两个数据避障距离Proximity和定高距离SonarRange。用手或纸板在雷达前方和下方移动检查数据响应是否灵敏、无跳变。同时观察“传感器健康状态”是否有报错如“Bad LiDAR Health”。如果有报错回头检查接线、电源和CAN_ID设置。第二步低空悬停测试重点测试定高。找一个无风或微风的天气在开阔的平地上进行。解锁无人机切换到“定高AltHold”模式缓慢推油门让无人机起飞到1-2米的高度。然后松开摇杆观察无人机是否能稳定悬停。此时尝试在无人机下方放置一个纸箱或走过一个人人为改变地面高度。如果雷达定高生效无人机应该会努力维持相对于当前地面的高度你会看到它随着地面起伏而轻微升降。如果无人机高度漂移严重可能是以下原因RNGFND2_GNDCLEAR设置不准确。重新测量雷达镜片到机架底部的垂直距离。雷达安装不稳固飞行中振动导致数据噪声大。考虑增加减震海绵。地面材质问题。激光雷达对纯黑色、高吸光材质或透明玻璃的反射效果很差可能导致测距失效。尽量在水泥地、草地、土地等正常反射面测试。第三步低速前飞避障测试。设置一个简单的航点任务或者手动控制无人机以较低速度例如1-2米/秒向一个明显的障碍物如纸板墙、灌木丛飞行。在Mission Planner的地面站上实时观察避障距离数据。当距离接近你设置的AVOID_MARGIN比如2米时无人机应该自动减速然后停止或绕行取决于你的避障行为参数设置。首次测试务必保持高度警惕手放在遥控器开关上准备随时切换回手动模式接管参数微调经验谈避障灵敏度AVOID_MARGIN不是越大越好。设得太大无人机可能会在离障碍物还很远时就过于保守地刹车影响飞行效率。设得太小留给系统的反应时间又太短。建议从2米开始根据飞行速度慢慢调整。高速飞行时需要更大的安全边际。定高平滑度如果定高模式下无人机有高频的“点头”现象可能是雷达数据噪声被引入了高度控制环。可以尝试调整RNGFND2_FILT测距仪滤波参数适当增加滤波系数如从0.1增加到0.3让数据更平滑。但注意滤波加得太重会引入延迟影响响应速度。多雷达冲突如果你未来真的接了多个雷达比如前、后、左、右四个方向避障务必确保每个雷达的RNGFNDx_RECV_ID都独一无二并且与雷达硬件设置的发送ID一一对应。同时每个雷达的RNGFNDx_ORIENT方向参数要设置正确前0后2左4右6等。6. 避坑指南与进阶玩法在集成过程中我踩过不少坑这里集中列出来希望能帮你节省大量时间坑一参数写了但没生效。这是最常见的问题。修改任何与CAN总线或传感器相关的参数后务必完全重启飞控断电再上电。仅仅在Mission Planner里点“重启”有时是不够的。坑二避障和定高数据互相干扰。核心检查点就是RNGFNDx_ORIENT参数。用于避障的雷达方向必须是前0、后2等而用于定高的雷达方向必须是25向下且忽略避障。如果设错了比如把定高雷达也设成了向前飞控可能会误把地面当成前方障碍物导致无法起飞。坑三CAN总线通信不稳定。表现为数据时有时无或大量错误帧。检查以下几点1) 波特率是否一致飞控和雷达都是2500002) 线缆是否过长尽量短于30cm是否双绞3) 终端电阻是否需要启用如果总线上只有飞控和雷达两个节点通常在飞控端或雷达端启用一个即可4) 电源电压是否稳定纹波是否过大。坑四高度突然跳变或失效。飞行中如果雷达突然测不到地面例如飞过一片深色水域、玻璃或者高度超过最大量程飞控会丢失雷达高度源。为了避免无人机因此失控务必设置一个合理的高度源切换逻辑。在ArduPilot中你可以设置融合多个高度源如气压计、GPS、雷达。当雷达数据不可信时飞控会自动平滑地切换到气压计保持高度。相关参数如EK3_SRC_OPTIONS和高度源优先级需要仔细配置。进阶玩法当你熟练掌握了单雷达双功能后可以尝试更酷的玩法。比如使用两个TFmini-i-CAN雷达一个朝前专门用于避障方向0一个朝下专门用于定高方向25。这样物理上隔离性能更极致。或者利用CAN总线可以挂多个设备的特性布置一个“雷达阵列”前方、左右两侧各一个用于全方位避障底部一个用于定高总共四个雷达只用一组CAN线CAN_H, CAN_L就能全部搞定极大地简化了机内布线。这需要你为每个雷达分配不同的发送ID并在飞控中正确配置RNGFND1到RNGFND4的参数。最后安全永远是第一位的。无论自动避障看起来多可靠在测试新功能、新参数时一定要在开阔无人的场地进行并且随时准备手动接管。这套基于TFmini-i-CAN和ArduPilot的集成方案为我手上的好几个行业无人机项目提供了稳定且低成本的感知解决方案希望这份详细的实践指南也能帮你顺利搞定无人机的“眼睛”和“尺子”飞得更智能、更安全。如果在实操中遇到新问题不妨去ArduPilot的官方社区看看那里有很多全球的开发者分享他们的配置和经验。