ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

自研四足机器人跟随功能实战:从3D打印底盘到感知控制闭环

自研四足机器人跟随功能实战:从3D打印底盘到感知控制闭环 我第一次把“自研四足本体的跟随功能演示”写进任务清单时心里想得其实很简单上一套目标检测锁定一个人把人的位置换算成左右转向和前进速度四足跟上就行。真到动手调试才发现这个项目的难点从来不在“认出目标”而在“让一个会晃动、会打滑、有执行延迟的机械身体跟住一个速度不恒定、方向和步伐随时会变的人”。跟随演示里那几十秒画面真正代表的是感知、状态估计、步态控制和执行反馈这条完整链条没有断。这个判断决定了整篇文章的结构。我不会只讲怎么训练一个检测器也不会只贴一张电机配置表。我更想从一次真实的自研机器人工程复盘出发把四足跟随功能从本体搭建、3D打印结构、传感器安装再到目标跟踪、运动映射、现场调参和稳态维护讲清楚。很多内容看起来不复杂但每一条都可能决定你的演示是“能看”还是“能稳定复现”。1. 别把跟随当成一个算法题它是一条完整的系统闭环1.1 跟随演示背后真正的任务链一个看起来简单的“人走机器跟”背后其实是一条至少包含五个环节的链路。第一个环节是目标感知。四足机器人需要先知道自己要跟的到底是哪个人。如果场景里只有一个人问题不大一旦背景里有其他人走动或者目标转身、弯腰、被桌腿短暂挡住检测器能否稳定输出同一个目标会直接影响后面的行为。第二个环节是坐标变换。检测模型输出的往往只是目标在图像里的像素位置比如检测框的中心点这并不等于目标在机器人坐标系里的真实位置。要把“人出现在画面左下角”转换为“人在我的左前方 0.8 米处”通常需要深度相机提供距离或者用激光雷达提供平面坐标。更严谨的做法是标定相机和机器人基座之间的外参把像素坐标转换到以机身为原点的坐标系。第三个环节是目标保持。同一帧里认出人只是第一步。连续视频流里人可能移动、转身、被遮挡四足机器人自身的姿态也在晃动所以要有追踪机制让机器人知道这几帧里的目标仍然是同一个人而不是反复重新匹配。很多入门方案省略这一步结果就是目标稍微被挡一下就丢失或者机器人“换人”跟错对象。第四个环节是运动决策。拿到目标在机体坐标里的方位和距离后要决定机器人应该怎么动。后退太慢会被撞上冲太快可能撞到人左右转向目标在画面边缘时应较慢中心附近时应更温和。这里既涉及 PID 控制器的设计也涉及速度限幅和输出平滑。第五个环节是步态执行。四足机器人不是把线速度指令发给轮子就能立刻完成。步态控制器需要处理支撑相和摆动相还要保证机身在行进中的平衡。如果你在机器人的躯干上额外加载了视觉模组和工控机重心变化会直接反映在关节电流和倾斜角度里步态层必然要先满足稳定性的硬条件再谈跟随精度。1.2 只会“目标跟踪”做不出可看的演示我见过不少项目把精力全部放在提高检测网络的 mAP 上认为只要人能一直被框住跟随就是水到渠成的事。实际把网络接到四足机上跑很快就暴露几个此前没想过的问题检测帧率不够高或者算法在机载算力上处理一帧需要 200 毫秒以上那么机器人看到的目标位置已经滞后于真实位置在速度稍快时它会始终处于“猛追刚才的位置”的状态看起来要么僵硬地大步冲要么着急地来回转向。目标坐标虽然准确但控制周期不匹配。视觉输出往往是 10Hz 到 30Hz关节控制却通常在 200Hz 到 1000Hz。两者之间如果没有插值、没有限幅底层收到的指令会出现跳变机器人就会表现为电机噪声大、机身抖动、转向过度。更隐蔽的问题是“输出与实际动作方向不一致”。你计算的目标方位是相机坐标系下的但如果相机安装有倾角或检测框中心和真实人体位置有偏置机器人会误以为目标偏向某一侧于是持续地左右扭动。跟随功能演示本质上不是在验证某一块算法好不好而是在验证设计者能不能把五个环节顺畅缝合在一起。这也是为什么愿意花时间做完整系统集成的人往往比只埋在一个检测模型里更容易跑通一个可看的 demo。2. 自研四足本体先用 3D 打印把机械底盘做扎实跟随功能要在“自研四足本体”上跑起来说明这套机器人不是直接买来的量产整机而是自己设计或组装的。近几年的一个现实变化是3D 打印让四足机器人的本体制作门槛显著下降。2.1 3D 打印机架是起步选择但它有边界一个人用 3D 打印制作四足机器人的主要优势是迭代快。今天设计了一版大腿连杆打印出来发现孔位强度不够改一版可能只需要一个晚上。对于本体验证阶段这种快速迭代非常宝贵。相对常见的做法是用 FDM 打印机打出大腿、小腿、髋部连接件和躯干框架再用铝型材或碳纤维板补强关键承力位置。关节电机可以直接安装在打印件里或者用打印件把电机固定到机架上。设计时需要预留穿线空间和传感器面板位否则后续安装深度相机和运算板卡时会很被动。但边界也要讲清楚3D 打印件在受拉或受冲击的位置容易沿层纹断开长期转动摩擦会导致轴孔配合变松温度稍高的室内或阳光下PLA 材料还可能出现软化变形。如果只是室内跟随演示多数打印件够用如果要做频繁剧烈的跑步步态或户外测试建议把受力件更换为碳板或 CNC 部件或者至少增加金属嵌件、轴承座和锁紧螺母。我在机械结构上会特别关注肩髋部位的轴承安装。四足机器人的腿在运动过程中髋关节承受的侧向力和转动扭矩最复杂如果轴孔材质太软几次磕碰后就会出现虚位即使算法完全正确关节间隙也会使机器人看起来蹒跚不定。跟随演示容易暴露这种机械问题因为你要的是“顺着人的路线走”而不是在平整地面上原地小跑。2.2 控制与计算架构要尽量分清楚职责自研四足的常见控制架构是两层上层是机载计算单元比如 Jetson 系列或 NUC负责视觉感知、目标追踪、全局状态判断和速度规划下层是运动控制板比如基于 STM32、ESP32 或专用舵机控制板负责步态执行、关节位置闭环、IMU 姿态解算以及和底层电机的实时通信。两层划分的意义在于实时性。视觉目标检测天然有较高的算力占用但并不是每一步都必须等它完成。运动控制层应当在本地以稳定高频运行即使上层偶尔掉帧它也要继续保持平衡而不能因为延迟就掉在地上。简单说底层要稳上层可以慢。设计通信协议时我会把上层发送给底层的指令压缩成简单明确的控制帧比如前进速度、转向速度、期望姿态和停止命令。跟随算法要做的是把目标位置转化成这些字段而不是直接干预关节角度。2.3 传感器安装决定后面一半坑为跟随功能选择感知传感器时使用深度相机是成本和人机交互平衡较好的方案。它既能提供彩色图像供检测模型使用又能输出深度图用来估算人与机器人之间的距离。安装位置一般放在机身正前方尽量低矮一些减少机器人抬头或低头时视野朝天的概率。安装稳定极其重要。不要只靠双面胶或快拆结构把相机固定在打印件上因为机器人运动时的高频振动会让相机角度慢慢偏移。一次简单的碰撞就可能把外参完全改变机器人的“正前方”就不再对应相机的中心方向。若没有及时复检跟随精度会莫名其妙下降而很难想到是机箱和相机安装歪了。另外还要给相机留出足够的散热空间。深度相机和机载计算单元在长时间运行时发热量不小。如果打印的机壳过密封温度一高视觉算法可能触发降频表现为“跑了一会儿后开始卡顿人离得越来越近却没反应”。跟随演示通常有连续走动时长要求散热问题在我看过的自研项目里尤其常见。对雷达、IMU、急停按钮这些传感设备也要一起做走线规划。正式演示中容易出现的“看着看着突然失灵”原因往往不是算法崩溃而是一根杜邦线在腿部运动中被拉扯脱落或者接插件松动导致 IMU 数据跳零。四足本体内部本身就是充满振动的环境所以连接器防松、线缆留余量、关键信号做冗余或超时保护都要从第一天就考虑。3. 感知、速度映射与步态控制跟随功能的主干链路怎么接如果机械层面已经能稳定小跑和转向接下来就要把跟随链路逐步接起来。这里的核心问题不是“检测准不准”而是“目标位置如何变成一条平滑、可靠的机器人运动指令”。3.1 先学会把目标位置转换成相对坐标视觉模块输出的原始检测框只包含目标的图像位置坐标但它缺少距离信息。使用深度相机后可以通过目标框中心或脚底区域对应的深度值估算目标在当前深度坐标系下的三维位置。再经过相机外参变换就能得到目标在机器人躯干坐标系中的横向偏移量 dx、纵向距离 dy 和高度信息 dh。有一种常见的工程简化是不对准身体中心点而是让机器人跟踪目标和自身连线的方向角。这样只要把图像中心到目标框中心的像素偏差换算成一个左右转向比例值同时把目标框的宽度或深度值换算成前进速度参考值。这个简化思路适合作为初版验证但要注意它的局限目标站在画面偏远位置时转向响应会很急目标从画面一侧快速移动到另一侧时控制量变化可能超过机器人能够安全执行的极限。所以我更倾向于在相对坐标基础上做运动规划。首先对目标的 dx 和 dy 进行滤波丢掉跳变和突变然后设定一个“期望跟随距离”区间比如 0.8 到 1.2 米。如果目标距离大于上限机器人前进小于下限机器人后退或停止在区间内维持当前速度。转向量则根据 dx 设定一个死区dx 很小说明目标正对前方机器人可以保持直行偏得越多转向出力越大但必须限制最大转向速度。3.2 目标丢失与重新找回比持续识别更重要跟随演示一个非常容易被忽视的场景是目标被短暂遮挡。真正像样的演示里不应该只安排人一直在空旷场地直线走。那就要求系统能接受“追踪中断”这件事并为它设定明确的行为策略。推荐的状态机设计大致是当前状态是“已锁定”每个有效帧都会刷新一个计数器若连续 0.5 到 1 秒没有检测到目标进入“丢失预警”状态机器人不是立即急停而是降低速度原地小幅度旋转向上一帧目标消失的方向搜索若超过设定的超时时间比如 3 到 5 秒仍然找不到目标进入“停止等待”或“安全返回”状态。这里的原则是不能因为目标短暂离开画面就让机器人高速冲向未知区域也不能因为一次丢失就立刻停死导致重心失衡。要让“重找”不盲目可以在目标追踪模块中维护上一帧目标位置和历史运动方向。机器人丢失目标后判断上一刻目标是向左走还是向右走优先向那个方向转动搜索而不是在 360 度范围里乱晃。我在调试时最喜欢把目标跟踪状态机的可视化画面切出来左侧是彩色图画着检测框右侧打印目标坐标、滤波后坐标、当前状态、期望速度值。看数据流向远好过读一堆不完整的 log。3.3 不直接拿误差怼 PID先做平滑和限幅初学者拿到误差后最常见的冲动是直接用一个 PID 控制器算出输出速度。结果跟随项目调起来特别痛苦减速时有顿挫转向时有甩尾。原因很简单视觉信号本身带噪声目标框的抖动会被 PID 放大四足步态在执行速度指令时又需要过渡时间越激进的控制越容易让步态失去稳定性。我的习惯是在控制力和底层执行之间加至少三个限制。第一个是平滑滤波。对目标位置做低通滤波或滑动平均避免单帧检测框跳变引起速度指令剧烈变化。第二个是速度限幅。设置前进最大速度、后退最大速度和最大转向速度。这里要在调试界面可视化显示限幅是否总是被顶到上限。如果经常顶到上限说明控制增益太小或者目标速度确实超过了机器人机械能力如果从不到上限则说明算法输出过于保守机器人反应会显得迟钝。第三个是加速度限制。与其让目标距离误差直接产生当前速度不如维护一个“期望速度”变量让当前速度以固定斜率逼近期望速度。这样机器人启动时不会突然窜出去停止时也不会猛然刹车。跟随体验的很大一部分不是来自最终速度多精确而是来自速度过渡自然不突兀。3.4 步态层是最后一道闸门不是简单执行器四足机器人的价值在于它可以跟人走也可以跨越障碍、上下台阶。但自研本体的步态控制在跟随场景中要做到的最重要事情并不复杂按前进速度指令稳定地迈腿同时在转向时让机身的横滚和俯仰保持在可接受范围。调试前不应该直接在完整跟随状态下调步态参数。先用遥控器或测试脚本让机器人以固定前进速度跑一段确认不同速度下没有明显的震颤、幅度衰减或侧滑再单独测试原地转向速度和左右转向一致性反复确认左右两个方向的转动不是一边快一边慢。我见过不少跟随异常最后排查下来根本不是目标跟踪问题而是机器人左转速度天然比右转慢 20%视觉控制闭环自然难以收敛。步态层还要收住“上层错误”。当目标距离突变上层给出快速后退指令步态层如果只是机械执行可能导致机器人失去平衡。更稳妥的工程做法是步态层在收到超出安全范围的速度指令时主动将指令钳制到步态允许的边界内并向上层返回一个“达到执行边界”的标志。这种做法看似简单却能让整个系统多一层保护。4. 把一次演示跑出观赏性按阶段压流程许多四足项目在模拟器里或桌面测试中表现良好一到真实演示就失败。因为真实场景涉及光照变化、地面摩擦、障碍物、行人不确定性还有机器人自身机械振动造成的传感器噪声。演示不是算法“走个过场”而是对整个系统进行边界控制后的稳定输出。4.1 不要在真实场景里一边试一边改一个靠谱的演示筹备应该有明确的阶段性目标。第一阶段是“感知层验证”。在电脑端或机载端只跑视觉模块不接运动控制。让人站在机器人前方不同距离、不同角度观察检测框是否稳定、深度值是否可靠、目标坐标变换是否合理。在这个阶段把相机视野中距离过远、过近、逆光、暗光的情况都测一遍确认哪些是系统能接受的工作边界。第二阶段是“开环运动验证”。把机器人固定悬空或放在低速跑步台上先用遥控或脚本让它执行若干速度指令记录关节角度和姿态数据确认底盘执行速度时没有异常噪声、抖动或关节限位碰撞。这一步可以先不开启自动跟随只验证运动层是干净的。第三阶段是“静态目标跟随”。让目标人站在机器人前方机器人不主动前进只做转向和前后小幅调整使人保持在画面中央且距离稳定。这个阶段主要验证目标定位、速度映射和运动控制闭环是否顺畅。第四阶段才是“动态行走跟随”。人在直线路径上慢速走动机器人保持一个安全距离跟随随后逐步加入转向、加减速、短暂遮挡等增强演示场景的现实感。正式演示前再完整走两遍固定路线确认光照、地面、障碍物不会踩到机器人感知与机械能力的边界之外。4.2 每个阶段都要有明确验收标准不少团队拿到演示任务后就连续调一整天谁也不知道做到什么程度算“可以”。我在筹备里更偏好给验收项打分每期调试结束前过一遍检查表。检查项无需非常复杂关键是具体、可测量。验收项通过标准检查方式检测稳定度人在 3 米内左右移动时检测框不出现超过 10 帧连续丢失看视频回放或检测可视化日志距离估计在 0.6 米至 2.5 米范围内距离估计误差不至于让跟随指令频繁超限用卷尺量真值比对左右转向一致性相同方向盘信号下左右转动机身速度差值小于 10%查速度日志或看旋转圈数跟停过程目标停止后机器人在 1 到 2 米距离内完成停止无明显前冲录视频 查速度指令遮挡恢复目标被遮挡 2 秒后重新出现机器人能在原地附近找回目标人为挡住摄像头散热和连续运行连续运行 10 分钟算力单元不严重降频无过热停机测温或监控频率需要说明的是这些数值在每个团队里可以不同关键是把“演示中必须不失败的环节”先量化。如果连目标停止后机器人能不能平稳停下都没测过正式演示时一旦人回头或停留机器人就可能因速度规划不够平滑而撞上人。4.3 演示前最后一边检查的是输入不是输出正式演示前我最容易忘记但最不应该忘的不是模型权重不是控制参数而是相机镜头上有没有灰尘或指纹电池电量是否足够支撑两次完整跑动机载计算单元存储空间是否满了外接显示器线会不会妨碍腿部运动。这些因素听起来很初级但它们实际导致系统异常的频率比算法 bug 更高。另外建议在命令行或启动脚本里增加一个“健康检查”信息输出开机后自动打印传感器状态、相机帧率、底盘反馈、目标检测模型加载情况。没有这个前置健康检查你很难判断错误到底来自相机初始化失败还是机器人底盘没有上电。5. 跟随异常排查先处理数据再怀疑算法即使系统设计得再完善现场也可能出现各种意外。这里给一套通用排查链路它几乎适用于所有自研机器人的感知—控制联合调试场景。5.1 按现象归类不要按情绪定位我发现开发者最容易犯的错是看到机器人不跟随就一头钻进模型的准确率里。实际上很多失败发生在传感器未正确启动、坐标变换方向写反、底层通信掉线等环节。按现象先归类会更高效。现象优先怀疑链路次要怀疑链路机器人完全不动上层程序未运行、控制接口通信断开底层急停触发、运动控制板未收到指令机器人只转身但不大步接近目标距离滤波失误、期望距离区间设置偏大前进速度被上层限幅到接近 0机器人抖动明显目标位置滤波不足、控制频率太低步态速度过渡太激进、关节存在机械虚位目标偶尔丢失后无法找回追踪状态机超时太短、搜索方向错误目标检测在该场景下确实误检率偏高跟随过程中突然急停视觉超时导致上层错误触发“停止”状态电源电压跌落触发低压保护先判断“故障发生在哪一层”很关键。我喜欢把日志打印分成三层视觉层输出目标和坐标数据规划层输出滤波坐标和期望速度执行层输出实际速度指令与关节反馈。哪个层长时间没有新数据问题就在那个层哪一层的数据和上一层不一致问题就在转换或通信环节。5.2 最常见的几个误判点第一是视觉帧率并不等于控制刷新率。有些人看见画面看起来很流畅就默认控制闭环也很流畅。实际上检测算法可能需要多线程排队真正影响坐标输出的是从相机到算法到发布结果的总延迟。判断延迟时用一个人为快速挥手的动作去观察可视化目标位置是否明显拖尾再结合时间戳排查。第二是坐标系方向。相机坐标系的 x 轴到底朝左还是朝右y 轴面向哪里不同驱动库或不同安装方式下有很大差别。很多调试了半天才发现错误仅仅是横向误差乘了 -1机器人一直在朝目标的反方向转。第三是“零漂”和“噪声”对跟随闭环的影响。如果 IMU 的陀螺仪存在零漂又没有做稳健校准机器人在直行时实际轨迹会逐渐向右偏。这种缓慢的航线偏差很容易被视觉反馈纠正但会造成机器人不断左右修正的“蛇行”效果。跟随演示想要体现直线效果就需要对视觉引导路径和里程计进行融合或至少给偏航角做定期归零校准。5.3 长期稳定要靠日志不能靠肉眼遇到偶发问题最忌讳的是只盯着屏幕重试期待现场出现一次复现。合理的调试方法是在每次运行开始时记录一份完整日志包含每一帧的时间戳、目标检测是否有输出、目标坐标值、滤波后的坐标、期望速度、当前速度、底层反馈、IMU姿态和异常标志位。录制演示视频时同步展示日志时间戳就能在后期复盘时精确定位是哪一秒、哪一层出了问题。实际项目里使用 rosbag 一类工具录制完整话题会是常用的做法。如果团队没有搭建 ROS也可以自己写一个循环记录本地 CSV 或 JSON 文件的轻量模块关键在于数据字段要统一、时间戳要严格按开机时间递增。没有时间戳的数据在排查问题时很难判断是“传输延迟”还是“逻辑顺序错误”。6. 从演示到长期可用还得补上工程化与安全边界跟随演示能让一个项目在公开场合获得不错的展示效果但它和长期可用的四足机器人产品之间还有相当一段工程化距离。6.1 明确这个方案适合谁不适合谁自研四足本体的跟随功能天然比较适合作学习教育平台帮助学生理解机械设计、步态规划、感知融合和状态机控制的完整流程也比较适合作低成本巡检或室内跟随配送的原理验证在固定场景、受控光照下人能走的多慢机器人就可以多稳地跟着。它并不适合直接部署在开放环境、高速场景或高安全性要求的场景。户外强光下深度相机和检测网络的有效性会大幅下降目标速度过快机器人视觉延迟和执行延迟无法保证安全距离野外地面不平、楼梯和斜坡单纯靠视觉导航跟随没有可靠应对策略。即便只是做演示也要在人流较多的公开场地特别注意急停按钮的位置和操作者的视线始终为人留出安全通道。6.2 真正该补的不是更多模型而是更多兜底长期使用一个跟随系统最重要的能力不是“更高概率地认出人”而是“不知道目标在哪时仍然保持安全”。机器人在走廊里跟丢目标应当优先原地等待而不是继续向前找在楼梯口跟丢应当立即停止而不是往前试探在人群密集区重新搜索目标应当低速旋转并避让可能的行人而不是把身边任意移动的人当成原目标。为达成这种兜底需要加入至少几项工程措施全向障碍物检测比如在前向安装激光雷达或超声传感器当目标与机器人之间突然出现物体时优先减速或停止安全急停通道不用经过上层视觉算法而是由底层独立监控关键距离和紧急按钮丢失策略表明确不同场景下丢目标后的行为。这些能力一时半会很难在演示视频中看见却决定了方案能不能从“实验室一次跑通”走向“连续多天可靠运行”。我始终认为这类系统的成熟标志并不仅是它跟得多准而是它在失控前有多少层自主保护。6.3 借助 3D 打印和模块化继续迭代从演示走向长期维护的过程中3D 打印依然有它的价值。打印件适合快速调整传感器支架换个更大的相机也不需要重做整个机架也适合制作队里的调试夹具、通讯面板以及各种奇形怪状的走线卡扣。对四足本体这种高度定制、用量少的硬件来说3D 打印是自研与迭代不可绕过的工具。但也要接受它的局限批量一致性和结构寿命仍远不如开模或 CNC 加工。若要进入长期运行建议逐步把容易疲劳、承力大、与电机直接连接的部件替换成金属件打印件则保留在躯干外壳、传感器支架和装饰性保护件层面。这样一来机器在迭代中可能更趋近于稳定。6.4 关于“跟随”这类功能的最终判断四足本体里“跟随人”看起来是一种很本能的能力但实现本身涉及的控制层次比其他移动平台更复杂。它让开发者直接面对移动机器人最核心的课题如何把不确定的外部感知映射到一组既要保持稳定、又要主动运动的关节指令里去。真正把这条链路想通之后你会得到的不只是一段演示视频而是一套排查系统问题的工程方法。这套方法可以迁移到避障、巡检、人机协作甚至任何需要自主移动的机器人项目中。如果现在有人准备开始做自研四足跟随我最想给的建议很短先把机器人在原地小跑稳再谈目标锁定先用遥控器把底盘状态跑糙再接视觉闭环先按离线数据把流程理顺再考虑在线演示。许多看来是 AI 不够强的问题走到最后往往都落在“系统还没有立稳”这一件事上。
返回列表