首页 / 资讯中心 / 文章详情

Pixhawk加装北醒TFmini-i-CAN激光雷达:从定高到避障的保姆级教程

Pixhawk加装北醒TFmini-i-CAN激光雷达:从定高到避障的保姆级教程 ★ FEATURED ARTICLE
你有没有遇到过这种情况飞机悬停时高度一上一下像坐电梯低空贴着草地飞稍微偏一下就要撞树电池、电机、飞控全都没问题但就是不敢飞得“有安全感”。问题在于飞控没有眼睛它在用气压计猜自己飞了多高却不知道前方三米是不是有棵树。所以我想用北醒TFmini-i-CAN给PixHawk加装一双“眼睛”实现自动避障和定高。这篇保姆级教程会把硬件选型、接线、固件配置、参数标定、实测排坑全过一遍适合刚入坑Pixhawk、想做低空定高和简单避障的玩家参考。这套方案不是让你飞得花哨而是让飞机在低空、室内、树丛边缘这些场景下心里有数离地多远、前方有没有障碍。下面按我实际装机的顺序来写。1. 为什么是“北醒TFmini-i-CAN PixHawk”这套组合到底能解决什么1.1 定高的本质不是压高准是怕漂很多新手有个误会觉得定高就是气压计比较准。气压计确实能测出大气压变化换算成高度但它的致命伤是容易受气流扰动。无人机螺旋桨下洗气流、空调风、飞行中姿态变化造成的气流挤压都会让气压计数据漂移。室内飞行尤其明显气压计读数可能几秒内跳个半米。一定要清楚飞控里的高度估计默认主要靠惯性测量单元IMU和气压计融合。IMU短时间非常准但长时间会积分漂移气压计长时间大体稳定但是短时间噪声大。融合算法用IMU做短时预测、用气压计做长期校正听起来很完美可一旦气压计本身因为气流产生慢变化偏差融合高度就会跟着“慢漂”。TFmini-i-CAN作为激光测距雷达从正下方打光直接测相对地面的高度。不需要猜气压只要安装角度正确数据就是实打实的距离。在融合算法里激光测距扮演的是“低空时让高度估计收敛到真实值”的角色气压计负责中高空的趋势二者一配合低空定高就稳了。需要说明的是它不是完全替代气压计而是在低空给飞控一个更强的校正“锚点”这正是PixHawk做传感器融合最擅长的事。1.2 避障的本质给飞控一个“前方危险”的距离信号自动避障听上去很高级但原理其实很朴素雷达不断返回前方距离飞控里的避障模块设一个安全阈值当距离小于阈值时通过调低速度、刹车、悬停或者爬升来规避碰撞。这和倒车雷达的逻辑一模一样只不过无人机是在空中动作从“刹车”变成了“减速悬停”。想实现自主避障不是光有雷达就行必须把雷达数据接入飞控的导航控制环。PixHawk收到距离数据后会结合GPS、光流、IMU等定位信息判断“我以当前速度继续往前飞会不会在N秒后撞上东西”然后给出一个可执行的避障指令。这也是为什么我建议用PixHawk而不是普通飞控它能把“距离反馈”和“位置控制”真正闭环。要注意一点一个TFmini-i-CAN只能测一个方向。装上朝前就只能避正前方装上朝下就只能定高。标题里的“自动避障与定高”在我们这套配置里实际上是靠两颗雷达一颗朝前、一颗朝下。预算紧张可以先只装朝下解决定高避障后装我更建议直接上两颗因为一次调好CAN总线加第二颗只是几分钟的事。1.3 为什么选CAN接口版本而不是串口版北醒TFmini系列里有串口版也有TFmini-i-CAN这个CAN版本。很多新手图方便直接买串口版插上飞控的串口也能用但串口有几个问题一是飞控串口资源很紧张地面站、数传、GPS、光流都要用串口二是串口线抗干扰能力相对弱机架上的电调和电机是强干扰源布线稍长就容易丢数据三是串口协议是一对一想接第二颗雷达就得再占一个串口。CAN总线则不一样两根信号线CAN_H和CAN_L就能挂很多设备所有设备都在同一条总线上通信天然抗干扰、可扩展。PixHawk的CAN口正是为这类外设设计的。TFmini-i-CAN选CAN版本相当于把未来的扩展空间留出来了想加第二颗、第三颗雷达在总线上并线就可以不用再找串口。代价是配置门槛比串口版高一些但按照下面这篇教程走一次配通后面就很舒服。2. 装机前的物料清单和三个容易忽略的确认点2.1 全套硬件清单先列一张我实际用到的清单照着准备就行物料数量说明北醒TFmini-i-CAN雷达2一颗朝前避障一颗朝下定高PixHawk飞控1我用的是Cube BlackPixhawk 4也行必须有CAN口CAN总线线材若干最好用双绞线绞合越密抗干扰越好5V独立供电模块1我给雷达单独供电不共用飞控CAN口的5VUSB-CAN转换器1调雷达参数、查协议时用Mission Planner地面站1ArduPilot最常用的地面站软件万用表1量电压、测终端电阻排查时救命扎带、降压模块、延长线若干装机固定用这个清单里的USB-CAN转换器是我强烈建议提前准备的不是可选项。TFmini-i-CAN买回来默认协议不一定是飞控认识的DroneCAN协议需要先用CAN转换器接电脑通过北醒调试工具确认或切换协议。没这个工具后面卡住会很难受。2.2 确认你的Pixhawk是真的带CAN口“PixHawk”是个大系列版本很多不是所有板子都有CAN口。Cube Black、Pixhawk 2.1、Pixhawk 4这些主流型号都带CAN扩展口早期Pixhawk 1、一些国产mini飞控则没有CAN口那我就建议你优先用串口版TFmini或者加一块CAN扩展板。否则你拿着TFmini-i-CAN回家发现飞控上没地方插那才叫尴尬。怎么看飞控有没有CAN口看外壳丝印一般写着CAN1、CAN2或者是四个针脚的“CAN BUS”排针。Cube的CAN口通常在侧面Pixhawk 4的是标准CAN接口。如果你手里的板子不确定去飞控官网查一下硬件手册这个动作不要省我见过有人把I2C口当成CAN口猛插结果接口烧了。2.3 确认雷达朝向、安装位置和电源余量安装位置非常影响效果这点比很多人想的更重要。朝下定高的雷达要装在机身下方视野开阔的位置不要被起落架、脚架、云台挡住光路。它需要垂直向下或者允许一定的俯仰安装角但必须进飞控标定。更关键的是激光雷达不能装在正对电机下洗气流的位置虽然激光不怕风但安装支架的振动会让数据震荡。朝前避障的雷达装在机头最前端保证前方没有遮挡。注意雷达视场角很窄它只能感测激光打出去那个点。如果你装在机头旁边飞机偏航15度雷达已经瞄向侧面了避障就变成了“墙在正前方它却说前方净空”这很危险。所以朝向要尽量与飞控航向轴平行安装后做一个角度校准。还有一个很多人超载却忽略的点供电余量。TFmini-i-CAN工作电流约几十到上百毫安看起来不多但Pixhawk CAN口输出的5V是从飞控主电源稳压出来的通常同时要给GPS、接收机、CAN陀螺仪供电。如果你再加两颗雷达很容易让飞控上的5V稳压器过热。所以我的做法是雷达电源专门用一个独立的5V降压模块从锂电池取电地线和飞控共地即可。3. 接线实操把雷达挂到CAN总线上看着复杂其实就4根线3.1 引脚定义与对接关系TFmini-i-CAN的引脚定义并不统一不同批次线色会有差异。拿到手先看丝印和说明书不要凭颜色想当然。通用的四根线含义是电源正极、电源地、CAN_H、CAN_L。Pixhawk CAN口也对应有这几根接线关系如下TFmini-i-CANPixhawk CAN口说明5V电源正不建议从飞控取电接独立5V模块共地即可GND电源地GND必须和飞控共地CAN_HCAN_H信号高CAN_LCAN_L信号低如果你买的时候附带了雷达专用连接线那头通常是已经定义好的直接往飞控CAN口插大概率能用。但我的经验是转接线和飞控CAN口因品牌不同针脚排列经常不兼容。我自己的做法是买那种带杜邦端子或JST的CAN线对照两边丝印重新压线。第一次压线确实麻烦但压完后你会非常清楚每一根线去了哪里排查故障时心里不虚。3.2 为什么必须共地不共地会出什么妖事CAN信号是差分传输理论上抗干扰能力很强但它再强也要求通信双方参考同一个“地”电位。如果不把雷达电源地线和飞控电源地线连在一起CAN_H和CAN_L只是两边的信号线悬空比较可能会出现两个问题一是总线上信号电压差超过收发器容忍范围丢包率极高二是为短路埋下隐患一旦某一边电位偏移芯片发热甚至烧掉。实际接线时把雷达地线接到独立5V模块的地同时这个地也接到飞控上的GND引脚。等于整个无人机的电源地、飞控地、雷达地都汇到一个点。建议在分电板附近做星型接地不要让雷达地经过大电流回路之后再绕回飞控。3.3 终端电阻两个120欧姆为什么变成60欧姆CAN总线规范要求在总线两端各接一个120欧姆终端电阻作用是消除信号反射。如果你飞控和雷达是整条总线的两头那么总线两端都有120欧电阻才对用万用表量CAN_H和CAN_L之间应该大约60欧姆。如果量出来只有120欧姆说明只有一端有电阻如果量出来非常小且接近0说明有地方短路了。但有个坑很多飞控的CAN口内置了终端电阻有些雷达模块也内置了终端电阻。如果两边都有内置你再额外接一个总线上可能并联出60欧以下甚至40欧会影响信号。我的建议是先把飞控和雷达看作两个节点用万用表量默认阻抗。如果已经是60欧左右什么也不用加如果是120欧就额外在一端并联一个120欧电阻。这里我吃过亏当时无论怎么配总线就是报错后来把雷达外壳拆开发现模块上有一个120欧的焊盘是默认焊死的飞控那边还有一个120欧两个并联后万用表测量40欧信号反射得一塌糊涂。后来我把飞控端内置终端电阻的短接帽拔掉才恢复正常。所以在接线前先量终端电阻一定比装好后再量轻松。3.4 电源和信号线布线的几个习惯经验上CAN线要和电机动力线保持至少10厘米以上的距离如果机架小实在拉不开就使用带屏蔽层的双绞线屏蔽层单端接地。激光雷达在高频测量时数据波动本身很小但如果CAN线贴着电调输出线走实测会出现距离值每隔几百毫秒跳一下。另外插接件一定要打胶或者上扎带防脱。飞行中一个端子松动比雷达坏掉还难查。我习惯在CAN线两端各绕一圈并打个活结靠线材本身受力而不是插头受力。完工后通电前用万用表量一遍电源端电压是否5VCAN_H对CAN_L是否60欧CAN_H对地是否有短路。三步都过了再通电。4. 固件和参数配置让飞控“认识”这把尺子4.1 先选固件ArduPilot是折腾雷达最顺的TFmini-i-CAN可以配合ArduPilot和PX4但在中文社区、资料丰富程度、参数可调性上ArduPilot明显更适合这个场景。Mission Planner地面站对DroneCAN设备的支持也直观。我自己用的是ArduPilot Copter 4.1以上固件因为4.1以后对CAN测距和避障的处理更成熟。刷固件的流程不展开Mission Planner顶部“安装固件”界面选择对应的Pixhawk板子保持默认参数即可。刷完固件后第一件事不是插雷达而是先进“全部参数表”搜索CAN_P确认CAN驱动的使能参数是否存在。如果没有CAN_P开头的参数说明固件没编译CAN支持换个完整版固件重新刷。4.2 把TFmini-i-CAN切成飞控认识的DroneCAN协议这是整套教程最容易被卡住的一步。TFmini-i-CAN原厂出厂协议可能是北醒私有CAN协议ArduPilot不能直接识别。要让飞控认识它通常需要把雷达输出协议切成DroneCAN。方法是用USB-CAN转换器把雷达连到电脑打开北醒官方调试上位机不同批次工具名字略有差异在CAN参数配置里把工作模式或协议类型改成DroneCAN波特率一般设1Mbps保存并断电重启。这里要提醒不是所有TFmini-i-CAN版本都能刷成DroneCAN早期个别批次的固件只支持私有协议和简单广播协议。买之前建议向北醒官方客服确认“我这版支不支持DroneCAN”或者买的时候直接说“我要接Pixhawk用”。如果实在不支持那就只能走串口版方案了。切换协议成功后把雷达接到Pixhawk的CAN口上电后在Mission Planner的MAVLink消息里能看到一串CAN节点信息说明飞控已经和雷达握手成功。4.3 RangeFinder参数配置表接下来要设置测距仪参数。在Mission Planner“全部参数表”里搜索RNGFND1按下面这张表设置朝下定高的那颗参数名推荐值含义RNGFND1_TYPE24DroneCAN测距仪RNGFND1_ORIENT2传感器朝下RNGFND1_MIN_CM10最小测量距离0.1米RNGFND1_MAX_CM1200最大测量距离12米RNGFND1_GNDCLEAR100飞控到地面的安装高度单位厘米RNGFND1_SCALING1.0数据缩放系数RNGFND1_OFFSET0数据偏移补偿注意RNGFND1_ORIENT的数值方向0通常是前方2是下方这个值如果错了飞控会把“距离地面1米”理解成“前方1米”避障和定高逻辑全乱。朝前避障的那颗雷达建议设置成RNGFND2_TYPE同样为24方向0即可。虽然避障逻辑不一定只用RNGFND但让飞控先把两个雷达都当测距仪录入后续避障模块才有数据源。4.4 定高和避障逻辑的粗调思路定高方面参数写完后在飞行模式里选择Loiter或AltHold飞控会自动开始融合距离传感器低空高度曲线会明显平滑。避障方面ArduPilot近几版提供了多个避障途径但最直接的是利用“Proximity”近距传感器接口再配合AVOID_ENABLE参数。不过不同版本差异较大我不建议一上来就调避障雷区先把两颗雷达的距离值确认准确、稳定再来开避障。避障能做什么动作取决于你的飞行模式Loiter模式支持水平速度限制和避障刹车AltHold模式下只有定高没有水平定位避障效果会打折扣。所以想做自动避障至少要在GPS信号好的室外或者室内光流模块辅助下使用Loiter模式。设置避障触发距离时我建议从2米开始先把动作设置成减速而不是急刹一点点试。直接设成0.5米雷达视场又窄根本来不及刹车等于没避。4.5 如果飞控扫不到雷达问题大概率出在哪扫不到雷达时不要先怀疑雷达坏了大概率是这几个原因协议没切成DroneCAN、波特率不匹配、终端电阻不对、CAN_H和CAN_L接反了。其中接反了的现象特别气人表面看电压正常但数据就是出不来。用万用表量两根线无法判断正反最稳的办法是交换CAN_H和CAN_L重新上电测试。另外如果飞控有两个CAN口试一下另一个口有些飞控的CAN2口默认没有使能。5. 标定与实测让数据从“能看”到“能用”5.1 地面测试第一步先量桌子和地板的距离雷达参数写好后不要立刻起飞。先把飞机放在一个已知高度的桌子上桌面离地比如0.8米看Mission Planner里的RNGFND1输出是不是大约0.8米。不是的话先排除数据单位问题。TFmini-i-CAN通常输出厘米飞控内部统一换算成厘米如果数值差很多倍多半是协议解析里的单单位没对。如果输出距离和实际相差一个固定值比如始终偏大5厘米就把这个值填进RNGFND1_OFFSET注意正负号实际距离小于所示距离说明传感器零点偏高需要负补偿相反则正补偿。有人为了省事直接改SCALING这不太对SCALING是斜率缩放不是零点偏移除非传感器输出线性程度有问题否则别乱动。5.2 数据跳变怎么治滤波和安装位置一起查雷达在光滑白色墙面、浅色地面、阳光下会出现个别跳变点正常。先用Mission Planner的日志或MAVLink Inspector记录一两分钟数据看跳变频率和幅度。如果偶发且恢复快可以接受如果频繁从1米跳到7米再跳回很可能是光路被什么东西周期性遮挡比如螺旋桨影子扫过。也可能是雷达供电电压不稳先检查电源。ArduPilot里可以考虑开滤波但不要用重滤波把真实距离变化也滤没了。我的经验是先保证机械安装稳定电源干净再考虑用什么均值滤波。很多新手反着来滤波拉满数据是平滑了但避障反应也慢了这是本末倒置。5.3 从桌面测试到系留测试桌面验证通过后上电但不起飞手持飞机慢慢倾斜、上下移动观察距离值响应是否及时。我建议做“系留测试”用一根结实的线把飞机轻轻拴住解锁后油门推到刚好离地10厘米左右看飞控定高是否稳定。这个过程不要在人头顶做也建议带上护目镜毕竟旋翼机不是玩具。系留测试过了之后找一片开阔草地GPS星数足够先正常起飞到3米左右切Loiter观察高度保持情况。如果高度上下波动超过30厘米回到地面检查雷达数据是否有偏低、偏高的趋势。只要距离数据稳定定高基本不会差太多因为飞控融合激光雷达后低空高度会收敛得比较干净。5.4 避障测试要保守、要分步避障测试最容易出事所以我把节奏放得很慢。第一步拆掉螺旋桨手持飞机在三米外对准一面墙慢速向前推观察地面站里有没有距离值变化以及日志里避障模块有没有输出限制指令。真正的自动避障必须体现在日志的“障碍物检测标志”或速度限制值上不是雷达数据在变就代表避障生效。第二步装上螺旋桨但在开阔场地、周围无人的情况下测试。把避障触发距离设成5米飞机切Loiter慢慢推杆向障碍物靠近看飞机是否在触发距离附近自动减速或停下。如果飞机继续前冲立即切回自稳模式接管油门这也说明你的避障模块没生效先别继续回去查Proximity数据。最后再逐步把触发距离改小到实际需要的3米、2米。6. 我踩过的坑和数据异常排查清单6.1 最典型的故障现象和检查顺序故障现象优先检查项补充说明完全没数据CAN_H/CAN_L是否接反协议是否DroneCAN交换CAN线再试距离值是0雷达是否处于异常模式供电是否足够用上位机看原始数据距离值固定不变雷达视场是否被遮挡光路可能被脚架挡住安装位置重新评估距离值周期性跳变电源波动、CAN线靠近动力线独立供电、换屏蔽线飞控日志中数据时有时无终端电阻、波特率、CAN总线连接松动量终端电阻、重压线室内正常室外异常阳光下强光干扰、草地反射弱调整安装角度适当提高最大距离6.2 我踩得最深的一个坑把私有CAN协议当成DroneCAN用第一次把TFmini-i-CAN接到Pixhawk我在Mission Planner里看到CAN设备但完全识别不了雷达。折腾了整整一个下午刷固件、改参数、换CAN口都没用。后来用USB-CAN转换器接雷达抓报文一看雷达发出的是一帧帧私有CAN数据ArduPilot根本不认。所以我把这一步写成了第4.2节就是为了让大家少走这个弯路。后来和北醒的技术支持确认他们有针对Pixhawk的DroneCAN固件方案。如果你的雷达批次较老可能需要先升级雷达固件再切换协议。这里我建议买的时候直接选带“Pixhawk适配固件”的版本省心很多。6.3 关于“定高稳了”的一个清醒认识雷达定高不是万能药。它在地面平坦的场地上非常稳但如果底下是长草、灌木、水面、起伏地形激光打到的目标一直在变高度数据必然会抖动。所以雷达定高最适合的场景是相对平坦的低空飞行和室内。如果你想越野飞行还是老老实实把气压计、GPS、雷达数据都融合好不要把宝全押在雷达上。另外朝下雷达在大姿态角飞行时会失效。当飞机倾斜超过雷达视场角度激光打到斜前方而不是正下方测出的距离会比实际高度大。很多飞手飞航线大倾角时发现定高突然抽风就是这个原因。正确做法是给雷达定高设定一个适应范围或者在飞控里禁用大姿态角时的雷达高度校正。6.4 我现在的日常检查习惯装好这套系统后我每次起飞前花三十秒做三件事一是看Mission Planner里两个RNGFND数值是否正常二是拿一个硬纸板在雷达前方晃几下确认避障雷达响应三是拿万用表量一下雷达供电电压如果低于4.8V我就不会飞。还有每次脚架或护板拆装后都要重新确认雷达光路没有被遮挡因为靠近护板的雷达特别容易被机械结构“悄悄挡住”从外部看不出异常数据却已经出了问题。这套“CAN雷达PixHawk”的方案我已经飞了大半年说实话它不能让你把无人机当成自动驾驶汽车来用它就是一双有限的眼睛帮你看到正前方和正下方。但就在这有限的视角里它让飞控从“盲飞”变成了“有参照地飞”低空定高的信心和避障的安全冗余是实实在在的。如果你也打算动手装一定把第4.2节的协议切换和第3.3节的终端电阻处理好这两个位置是绝大部分新手的拦路虎。
阅读完成 · 觉得有帮助?
咨询建站