做自主导航的小车,最绕不开的一道坎就是组装。前面几篇我们聊了整车设计、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和导航时,底气会足不少。祝组装顺利,跑图不漂。