做自主导航的小车最绕不开的一道坎就是组装。前面几篇我们聊了整车设计、SLAM建图、路径规划甚至仿真环境也跑通了但纸面上的东西终归要落到实体上。这篇直接进入“14.组装”的正题把一辆ROS小车从散件拼到能跑导航的完整过程掰开揉碎讲清楚。如果你正卡在“仿真没问题、实物一上电就抓瞎”的阶段或者刚买齐套件不知道该从哪儿下手这篇文章就是写给你的。1. 组装前的需求拆解与选型复盘1.1 从导航需求反推硬件底线组装不是把螺丝拧上那么简单先想清楚你组装出来的这辆车要完成什么任务。自主导航的核心链路是传感器采集环境数据 → 里程计推算位姿 → SLAM建图 → 路径规划 → 电机执行。这条链路里每一个环节都对硬件有硬性要求选型和组装方式都要围绕它展开。你买回家的套件如果是散的第一步不是动手而是对着物料清单做一次“需求反推”。比如激光雷达要能支撑建图至少需要测距范围覆盖你实际使用的房间大小精度上测距误差控制在厘米级里程计方面如果你不想后面导航时小车走歪就不能只用轮子转圈数推算最好加IMU做融合否则转角一大角度漂移会非常难看底盘电机则需要考虑扭矩能不能拖动整车上坡或者越障。我自己组的这辆车用的是四轮差速底盘加万向轮支撑的结构原因很简单四轮差速的里程计模型比阿克曼简单控制周期短后续算法调试成本低。如果你做的是麦克纳姆轮全向底盘也能做自主导航但要处理全向里程计的标定坑会多不少。对于新手差速底盘是最稳的入场券。1.2 组装前的物料核对与工具清单开工前先把所有零件摊开。我遇到过好几次“装到一半发现少个铜柱”或者“电机轴和轮子内径不匹配”的尴尬情况所以强烈建议先做一轮物料核对。常规ROS小车套件一般包括底盘车架铝合金或亚克力、电机四个带编码器、驱动板常见的是TB6612或者L298N、主控板树莓派或Jetson Nano等X86/ARM小板、激光雷达Delta 2A、RPLIDAR或者EAI系列、IMU模块、电池、降压模块、若干杜邦线、铜柱螺丝包。工具方面内六角扳手套装、十字螺丝刀、尖嘴钳、万用表、扎带、热缩管是刚需有条件的话电烙铁也备着后面接电池模块或者换线时经常用到。如果你收到的线材是散的务必先测通断再装车不要上车之后再排查线材问题那会非常痛苦。铜柱螺丝不要拧太死铝合金底盘尤其容易滑丝感觉阻尼变大就停手。2. 底盘与动力系统的组装细节2.1 电机安装、编码器接线与轮子校准底盘的组装是整个过程中最依赖“手感”的一环。先把四个直流减速电机固定到底盘对应的电机座上这一步注意电机线束的朝向要统一。你后面走线时如果左前轮和右后轮的线从不同方向伸出来理线会很难受而且盖板很容易压到线皮导致短路。电机输出轴装轮子时顶丝要对准电机轴的平面一侧如果电机轴是D型切割面更好顶丝不要只拧一颗成对拧紧才能保证轮子不偏心。电机装完之后必须做一件事接线前把编码器数据读出来确认方向。以常见的霍尔编码器为例A相和B相输出相位差90度电机正转时A领先B反转时反过来。如果你接错了两相中的任意一根后面跑起来会发现里程计的实际符号和预期相反。调试时可以直接写一个简单的Arduino或Python脚本读取编码器计数手动拨动轮子检查数值变化方向。这个小动作能帮你省掉后续调试里程计的一大堆折腾。轮子校准这里多说一句。四个轮子外径理论值一样但装上之后因为胎压、变形、顶丝松紧不同实际有效半径会有细微差别。这些差别会直接反映在里程计上表现为小车直线走不正、转弯圆弧不对。如果你用的是可调悬挂或软胎先把四个轮子压在同一平面上用手空转检查有没有明显的高低差。后面导航跑偏时很多问题根源都在这里而不是算法参数。2.2 驱动板和主控的电源分配思路动力系统接线的核心是“电源分离”。电机是强电设备瞬间启动电流可以到1A甚至更高如果和主控、雷达共用一路电源很容易把板子电压拉低导致重启。我的做法是电池主输出分两路。一路直接进驱动板的电机电源端另一路通过降压模块降到5V供给树莓派和其他传感器。中间不要共地共地还是要共的信号级共地必须保持否则编码器反馈的电压参考点会漂移数据读出来全是乱的。简单说电源线分开走信号地连在一起。驱动板这里我用的是TB6612FNG比L298N的效率高不少发热量小而且自带稳压输出给主控供电更干净。接线时注意VM和GND是电机电源VCC和GND是逻辑电源。如果你第一次上电发现电机不动先量这两个电压对不对别上来就怀疑代码。电机控制引脚接主控的PWM输出口编码器接口接主控的GPIO或转接板的中断引脚这部分参考具体板子的引脚映射表别想当然。电池选型方面我给这辆车配的是3S锂电11.1V四个电机带编码器满载时大概在2A到3A之间续航看使用强度。对新手最友好的配置是带保护板的锂电池组防过放防短路。有人为了省空间直接上18650电芯自己焊说实话风险不小焊接温度控制不好容易损坏电芯内部结构后面使用中发热甚至鼓包都遇到过。预算允许的话优先买带保护板、接口齐全的电调或电池模块省心很多。2.3 激光雷达和IMU的安装位置讲究传感器安装这部分看着简单其实直接影响SLAM效果。激光雷达要安装在车体的几何中心附近越低越好。装高了会让雷达扫到的都是家具下半截建图特征稀疏装偏了会让雷达坐标系和车体坐标系之间有平移量标定的时候要多算一步外参。固定方式我推荐用激光雷达自带的安装孔加上避震脚垫直接锁死在底盘上不要用双面胶跑起来震动会导致点云抖动。雷达的供电和数据线一起走。部分雷达比如RPLIDAR A系列用串口通信接主控时注意电平匹配有的型号需要USB转接板。装完通电后先转一圈看看点云是否有明显的遮挡环或者黑洞如果自己身体在雷达旁边点云里会有一大片黑这些都要装车之前排除掉。IMU的安装更讲究。惯性测量单元对振动和温度都敏感不要直接贴在底盘金属上加一块薄的泡棉胶垫再固定可以过滤高频振动。IMU的方向要和车体坐标系对齐最好用安装板或者外壳上的箭头标定方向从代码里改旋转矩阵矫正远不如物理上装正。装完之后做一次静止数据采集看看陀螺仪零偏和加速度计均值是否在合理范围。如果加速度Z轴不是9.8附近很可能是传感器斜了重新装正再做初始化。这一项很多人忽略但导航时转角发散十有八九和IMU安装有关系。3. 结构搭建中容易踩坑的机械细节3.1 重心分布对导航和建图的连锁影响车子的重心高度和位置会影响加速、刹车时的姿态变化。激光雷达装在重心上方时车身一倾斜雷达也跟着歪。同步定位与建图算法通常假设雷达是水平扫描的如果因为机械结构问题导致雷达装不平建出来的地图会出现扭曲的墙线或者重影。解决方法是把电池这种重物放在底盘最低层尽量靠中间同时雷达支架的高度不要节节攀升。如果条件允许用两个水平尺分别在车身横纵方向校准雷达平面再锁死后盖上盖。我之前碰到过一次很典型的案例一辆底盘挺结实的车导航时小车一启动激光点云就在地图上抖查了驱动、查了算法参数都没用最后发现是后轮附近的电池没有固定紧加速时电池甩动带动了整块底盘共振。把电池用魔术贴扎带固定后抖动直接消失。组装阶段你多花十分钟固定重物后面调试能省一个星期。3.2 走线规划、防拉扯与散热布局走线这块看起来是“美观问题”实际上直接影响稳定性。电机线和大电流线如果贴着IMU走电机的电磁干扰会让IMU数据出现毛刺。串口线和PWM信号线不要和电机电源线绑在一根扎带里输出给电机的大电流会产生磁场耦合轻则偶尔通信丢包重则完全收不到数据。我的走线顺序是先把电机线束从电机座孔位穿出去沿着底盘边缘走到驱动板然后把编码器线分开一小段再进主控的接口中间不要路过雷达的通信线。把所有线用扎带或者螺旋管收拢在底盘一侧留出另一侧给雷达扫描留出干净的环境。雷达正下方不要让线乱堆反射面离得太近会影响近距离测距精度。散热方面主控和驱动板不要叠放中间留至少1厘米的间隙如果长时间运行可以在底盘上开散热孔或加一个5V的小风扇对着主控吹。树莓派这类板子过热会降频导航算法跑起来卡顿体验非常糟糕。3.3 挡板、减震和固定配件的处理技巧车架的减震通常由底盘材料和螺丝连接处的缓冲垫共同完成。全金属底盘刚性高但电机振动会直接传导给传感器全塑料底盘好一些但承重和强度受限。我现在的方案是在雷达支架和底盘之间、IMU和底盘之间各加了一层3毫米厚的硅胶垫片螺丝不用上太紧让垫片有轻微形变的空间。这样的悬浮安装既能减震又不会让雷达摇晃产生姿态漂移。固定配件的处理上还有一点所有螺丝上完之后最好用记号笔做标记线。跑一段时间后发现某颗螺丝松了不用一颗颗去试直接看标记线对不齐就知道是哪个位置松动。这个方法很土但对于长时间运行的机器人非常实用。另外如果是螺纹孔在塑料件上不要反复拆装塑料一旦滑丝就没救了我一般会在第一次装的时候就在螺纹上涂一点点螺丝胶后续除非拆装不然基本不会松。4. 传感器标定与上电自检组装完成不等于能跑4.1 上电检测顺序和危险点排查组装完成后不要急着跑导航先做一次完整的上电自检顺序很重要。第一次上电前把驱动板的电机电源线断开只给主控供电确认主控正常启动系统镜像能进到桌面或者SSH能连上。然后给驱动板上电测量VM电压是否正常再用手轻轻转动车轮感受驱动板是否输出异常的锁止力。如果电机在任何代码都没跑的情况下发烫说明驱动板的使能引脚电平不对很可能电机被强制刹车了。上电检测时还要关注IMU的数据实时曲线。用“ros2 topic echo /imu/data_raw”或者“rostopic echo /imu/data_raw”看加速度和角速度是否正常跳动。如果数值不稳定、跳变幅度很大先怀疑供电或者线路屏蔽问题不要贸然改算法。雷达需要等到主控起来后串口能识别才能驱动如果是USB接口雷达插上后去看设备列表里有没有对应设备。4.2 里程计方向一致性测试的三个步骤里程计方向一致性是组装之后必须第一时间验证的项目具体三个步骤第一步静止测试。小车放在桌面上手动推它前进一段距离看里程计输出前进还是后退。第二步原地旋转测试。手动让小车原地逆时针转90度看里程计角度是增加还是减少如果符号反了改代码里的方向参数不要想着换线解决。第三步对比测试。让小车以固定PWM前进1米实际量出走的距离和里程计读数对比如果差异超过10%检查轮径参数是否写错或编码器线数是否正确。这三步做完里程计才算可用。前面编码器接线如果接错了方向这里会暴露出来如果轮子安装偏心导致有效半径变化这里也会体现为里程计增益不准。导航系统里里程计短时间漂移一点没关系但方向反了一定寸步难行。4.3 雷达数据采集与畸变检查雷达上电后先把小车稳稳放在房间中间确保周围2米范围内没有人或者大型遮挡物然后录制一段点云数据。正常点云应该是平滑的轮廓墙壁是一条连续直线柱子是一个弧线或多边形。如果点云里出现锯齿、小抖动或者重复回波可能是因为雷达固定不稳。雷达畸变最常见的两个来源一是电机振动导致雷达扫描过程中自身角度偏移这属于机械共振问题需要在雷达底部加垫片二是因为小车移动导致单帧点云前后不一致这个和雷达帧率、车速有关建图时控制车速不要过快即可。如果你用的是2D雷达检查点云高度是否和设计一致房间里桌腿、柜子底下的空隙都会反映在点云里扫描高度越高特征越少。5. 联调时常见的“组装后遗症”与排查笔记5.1 电机抖动、堵转与编码器乱跳电机加电后抖动通常是PWM频率不对或者驱动板逻辑电平不兼容导致的。PWM频率设在10kHz到20kHz之间会有较好的线性调速表现如果驱动板数据手册建议的是某个频率直接按那个设。部分驱动板对高电平的电压要求较高3.3V主控驱动5V逻辑的驱动板需要加电平转换电路否则电机表现为间歇性抖动编码器数据乱跳。用万用表量驱动板IN引脚的电压够不够高电平阈值一目了然。堵转则多发生在机械卡死或者电池压降过大时。如果小车前进途中突然停住电机发出嗡嗡声马上断电检查轮子有没有异物卡住同时用万用表量电池空载和负载电压差。压降超过0.5V电池内阻可能偏大或者电芯有问题这时候优先换电池不要硬调PID参数。5.2 建图重影、漂移的机械原因排查建图重影看着像算法问题实际很多是机械问题。先把雷达固定好静止采集一次点云看看有没有重影。静止时点云若出现重影说明雷达本身没有拧紧或者雷达扫描时抖动这时候调算法没用。解决方式是把雷达底座拆下来重新固定。静止点云正常但建图跑一段后漂移检查轮子是否打滑。地面如果是光滑瓷砖速度快的时候轮子会打滑里程计实测距离偏小地图就会出现“压缩”现象转弯时漂移更明显。解决方法是降低最大速度并给轮子换抓地更好的橡胶轮或者贴防滑纹路贴纸。另一个经常被忽略的漂移来源是IMU没做温度校准。组装完的机器人在室内外温差较大的环境切换时陀螺仪零偏会变化。如果你的车一直在恒温室内跑没问题但搬到阳台上跑就开始转圈漂移回头把IMU重新校准一遍大概率能解决。5.3 供电不足与电压跌落导致的重启循环有些车跑导航运行到一半突然重启看起来像程序崩溃实际上电源问题。导航算法触发多目标点规划时CPU负载陡增主控功耗上升同时电机启动负载增加整车的电源被拉低。解决方式有几个优先级换更高C数的电池缩短电源线线径加粗或者在主控电源输入端加大电容比如470uF到1000uF的电解电容。注意电解电容的极性不要接反正极接正极负极接地接反会直接鼓包冒烟。实际排查时用示波器或者万用表记录主控供电电压如果电压瞬间低于5V大概率是压降问题。有时候不是电池不济而是接口端子接触电阻过大电源线的XT60插头或者接线端子氧化就换成焊锡直连或压线端子重新压一遍。这属于组装时留下的隐性坑排查时要放开思路。6. 写在组装完成后的一点经验我自己的体会是组装环节最磨人的不是拧螺丝而是对“机械问题”和“软件问题”的区分。很多新手一碰到点云抖动、里程计乱跳第一反应是去读代码、调参数结果搞了两天还在原地打转。如果你每次调试前都先想一想这个问题从传感器到电机执行中间有哪些机械环节、供电环节可能造成干扰排查效率会高很多。另外一个小技巧把组装过程中的每一步拍照存档尤其是线序和安装方向。后期改接线方案或者排查问题时翻一下照片能帮你迅速回忆起哪个引脚接的是哪个功能不用每次拆开看。小车跑久了螺丝自然会有松动每两周花十分钟把底盘上的关键固定点重新拧一遍或者用指甲油代替螺丝胶补一下松动标记都是成本极低但收益很大的习惯。自主导航这种事情纸上谈兵永远不如实车跑一圈来得直观。把这篇文章里的组装细节过一遍把容易忽略的机械和电源问题提前堵住你的车真正开始跑SLAM和导航时底气会足不少。祝组装顺利跑图不漂。
阅读完成 · 觉得有帮助?