零:写在前面
写这篇文章,两个目的。
第一,给自己半年的从0到1做一次复盘。
第二,给想做机械臂的普通人一点参考。不是给科班生看的技术文章------不讲URDF怎么定义、雅可比矩阵怎么推。只讲一件事:一个base在厦门、出差6次48天、连URDF是什么都不知道的软件人,怎么一个人把行李搬运机械臂的整套软件系统跑通了。
这半年,AI帮了我大忙------但也给了不少错误答案。一个外行怎么判断AI说的对不对?这个话题,可能比你想象的重要。
一:学了1个月,我跑去跟公司说"我能搞定"
2024年11月之前,我在做行李抓取位姿算法,对控制机器人是天边的事。
2024年5月,公司启动行李搬运项目,同事搞了半年,不理想。高管想法很直接:招有经验的机器人工程师,项目从头开始。
我当时在干嘛?我在搞闸机。11月,直属领导让我转来熟悉机械臂控制,学moveit2。
公司需要就是工作,我抱着"先看看这东西到底是什么"的心态,花了一个月:搭环境、读文档、跑仿真、看MoveIt2教程。一台远程服务器,一个Ubuntu系统,一个AI------看不懂的贴给AI问"这是什么",遇到报错把error贴过去让它解释。
一个月后,我对技术栈有了一个初步判断:ROS2生态成熟,MoveIt2有完整的仿真链路,Gazebo能跑机械臂模型。软件侧这条路走得通。
于是我做了一个决定。跑去跟公司说:我有把握搞定机械臂操作的软件部分。
说这话的时候,我连真机都没摸过。
我不知道仿真和真机的差异有多大,对接一个机械臂厂商需要近1个月,Gazebo新版和旧版控制器不兼容。更不知道四个月后会连续加班到凌晨,只为赶4月26号的节点。
初生牛犊不怕虎。不是因为它勇敢,是因为它没看见虎有多大。
二:仿真跑通了,真机跑不通
公司同事写过一个demo(rwarm_ws),能在Gazebo仿真里跑通抓取放置流程------虚拟世界里看起来像模像样。但在真机上跑不了。
我拿它当起点。一个文件一个文件读代码,搞清MTC任务构造怎么把"拾取"和"放置"串起来,控制器的配置逻辑是什么。配合MoveIt2官方教程和examples,来回对照着啃。大概三周,把核心逻辑吃透了。
然后在仿真里反复跑:改参数,换规划器,对比RRTConnect和LazyPRMstar的轨迹质量,测试TRAC-IK比KDL快多少。仿真里一切正常,规划路径合理,碰撞检测也没问题。我当时甚至觉得:诶,好像也没传说中那么难?
后来才知道,"仿真跑通"和"真机能跑"之间,隔的东西比想象的多得多。
仿真不会告诉你ros2_control和新版Gazebo硬件接口不兼容。仿真不会告诉你不同品牌的SDK接口完全不一样,换机器人就得重新适配控制器。仿真更不会告诉你真机有"碰撞保护性停止"------你的代码在仿真里飞快,到了真机上安全机制直接锁定系统。
仿真像个驾校模拟器。你能学会踩油门、打方向、过S弯。但上路之后才发现,模拟器没教你怎么应对突然冲出来的电动车。
真正让我意识到"上路了"的,是选定了节卡Zu 18之后。
三:把模糊目标拆成确定性问题
起步阶段花了很多时间在仿真上,不是无用功。仿真阶段最大的价值,不是"跑通了一个demo",而是帮我对整个建立了概念。
"行李搬运"这四个字,一开始对我来说就是个巨大的模糊目标。我甚至不知道从哪里问问题。但仿真跑下来后,逐渐能拆开了:
- 行李在哪?→ 相机标定 + 点云 + 行李检测 + 抓取位姿估计
- 怎么规划路径?→ 环境建模 + 碰撞检测 + MeshLab简化模型
- 怎么抓怎么放?→ MTC任务构造 + 求解器选择(KDL vs TRAC-IK vs IKFast)
- 行李怎么堆垛?→ 对行李建模,建立堆垛模型 (算法同事提供)
- 仿真怎么切真机?→ ros2_control + 厂商SDK适配 + 控制器参数调试
这中间,每冒出一个问题,我的第一反应就是把问题抛给AI。AI不一定每次都答对,但它帮我在几分钟内建立起对新概念的基本认知------然后我带着这个认知去看官方文档、翻GitHub issue、搜ROS Discourse。
这半年我的学习节奏固定下来了:遇到新概念→问AI建立认知→看官方文档做交叉验证→写代码跑测试→跑不通再回去问AI。 这个循环,比任何"系统学习路径"都高效。
跨入完全陌生的领域,第一个里程碑不是"做出能用的东西",而是"知道有哪些问题需要解决"。
四:AI是个好导游,但不是好地图
AI帮了我大忙。但这个"帮忙"不是很多人想象的那样------AI写好了代码,我复制粘贴就完事。不是。真正有用的是:AI帮我缩小了搜索空间。
刚接触MoveIt2的运动规划器时,面前摆着OMPL二十几种算法、CHOMP、STOMP------怎么选?问AI,几分钟就理清了框架:RRTConnect快但不渐进最优,LazyPRMstar渐进最优但慢几倍,CHOMP能加约束但规划时间长。带着这个框架再去看官方文档和benchmark,效率完全不一样。
但AI也经常给我错误答案。
一个外行,怎么判断AI说的对不对? 这半年我摸出了几条办法:
第一,AI的答案必须有官方文档或GitHub issue交叉验证。 找不到出处的答案就是不可靠的。
第二,优先相信跑通的代码,不是AI说的"应该可以"。 工程问题上,现实世界永远是对的。
第三,同一个问题问不同AI模型。 两个答案不一样,说明AI也不确定,你得自己搞清楚。
第四,社区论坛比AI更可靠------但AI能帮你找到它们。 ROS Discourse、Robotics Stack Exchange上的回答经过真实项目检验。AI的价值是帮你知道该用什么关键词去搜。
AI是好导游,能帮你快速到达一个地方。但它不是好地图------真正的路,是你自己一步步踩出来的。
五:真机对接------隔着一整个深圳
硬件在深圳,我在厦门。每次真机调试都要出差。半年下来,出差6次,累计48天。
选定节卡Zu 18后,真正的工作开始。
从ROS1迁移到ROS2。节卡官方SDK是ROS1版本,要移植到ROS2------驱动层重写,控制器接口适配moveit2框架,仿真模型重新配置。一步就花了一周多。
仿真跑通了,该上真机了。飞到深圳,第一次把代码部署到真实机器人上。然后问题挨个来:
速度问题。 moveit2设速度scale为0.2,机械臂频繁报错------仿真里设多少都正常,真机上反而出问题。根本原因是SDK移动接口和moveit2控制频率不匹配,仿真世界里没有"接口失效"这回事。
安全的代价。 碰撞保护性停止是个安全机制,检测异常就强制锁定系统。但在调试阶段这玩意频繁触发------代码没问题,速度参数稍大它就停。停了必须重连,一上午调不了几次。
节奏问题。 用APP移动机械臂从一个位姿到另一个位姿,居然要5秒。按这个速度,搬一次行李要15秒以上,对真实场景太慢了。加速又触发前面的问题。平衡速度和稳定性,来来回回调了很多次。
这些都不是技术上最难的问题。但它们是真正消耗时间的问题。
对接节卡一个品牌,从移植SDK到稳定运行,实际用了约1个月。 而我最初的计划里只留了1-2周。
节卡的技术支持一直很配合,有问题能很快拉通。真正的问题在于:仿真和真机的差距,比我预估的大了一个数量级。 仿真里跑通了,真机上总有你没想到的事------通讯协议、PID参数、机械臂物理限制------每一个都要花时间定位和修复。而每次需要真机验证时,就得从厦门飞到深圳。
六:4月26日------计划永远赶不上变化
3月初我制定了一份开发计划,表格列得清清楚楚:ROS1迁移到ROS2,4天;控制器真机测试,2天;抓取任务测试,2天;手眼标定,2天......
回头看,计划的问题不是"不够详细",而是它假设每一步都能顺利走通。
真实情况呢?
新增了三个功能需求------展示大屏、平板APP、PLC外设控制(地轨移动、真空吸盘、行李滚筒、安全激光雷达)。完全不在原计划里。
手眼标定比预想复杂------到了现场发现相机支架都没准备好。行李检测和抓取位姿集成,每一步都有意料之外的坑:相机要连两路,点云精度要反复调,抓取点计算逻辑要适配不同行李。
4月下旬出差深圳,目标很明确:4月26号,完整行李搬运流程要跑通。
那段时间:整天在实验室调试整个系统,基本都10点后下班。出现问题→定位→修复→验证,这个循环一天转好几轮。记得,行李能搬运后,偶尔会出现moveit2规划轨迹报碰撞,但是从Rviz上看,无明显碰撞,前后调了3天,中间甚至怀疑moveit2有问题。因为系统测试中还有其他bug要修复,在修复其他bug后,就排查这个问题,最终发现moveit2报碰撞是对,是因为抓取位姿的处理有问题:z轴旋转180° 采用yaw+180,正确做法:绕 z 轴旋转 180° 后,ZYX欧拉角的变换规则为:(a** ′,b′,c′)*= (a+180°,−b,−c)。
4月26号,跑通了。
不完美。抓取成功率不够高,偶尔规划会失败。但流程闭环了:相机识别行李→计算抓取位姿→机械臂规划路径→抓取→放置→回到初始位姿→等下一个行李。
跑通了,但不是终点。 之后又做了半个月稳定性测试。5月16日,系统才正式向投资人开放。
现在回看3月那份计划书,最大的价值不是"指导执行",而是逼着我动手前把整个链条在脑子里走了一遍。 计划在执行第一周就过时了,但做计划这件事仍然值得做------它让你在偏离计划时,知道自己偏离了多远,下一步该往哪走。
七:半年,一个人,几点心得
回头看,这半年没有任何一个单点是高不可攀的。ROS2有完整文档,MoveIt2有丰富教程,节卡有技术支持,遇到问题有社区和AI。没有哪个门槛真的过不去。
真正难的是:很多事情只有上手做了,才知道是什么样。 看再多资料,只要没在真机上跑过,你就不知道仿真和真机的差距,你就不知道对接一个品牌要留多少时间,你就不知道哪些看起来很简单的事最消耗精力。
五条心得,是一个过来人的复盘:
1. 先跑起来,再谈精通。
第一个月别试图理解一切。不知道URDF标签干嘛的?先照着教程把模型跑起来。信心来自看见东西在动,不是看懂了原理。
2. 把模糊问题拆成确定性问题。
"搬行李"没法执行。"从A点抓取到B点,规划时间从2s降到0.8s"------可以操作。能写清到这个程度的问题,已经解决了一半。
3. 真机对接时间,至少按2倍预估。
仿真跑通只完成30%。剩70%在真机上,且这70%的大部份时间不是"写代码"而是"定位问题"。"顺利"在这个领域是一种意外,不是常态。
4. AI是好导游,不是好地图。
用它加速学习、建立新概念的认知框架------这是它擅长的。但重要的技术决策、要上真机的每一行代码,必须用官方文档和实际测试来验证。
5. 没看见虎有多大,反而是幸运。
如果2024年11月就知道后面要学多少东西、飞多少次深圳、加多少天班------我不会主动请缨说"我能搞定"。但也正是因为不知道,所以去了。去了之后发现:那些看起来很吓人的东西,拆开来,一件一件做,也就做完了。
八:写在最后
半年前,一个连URDF都不知道的软件人,在一台连ROS2都没装的服务器前,敲下第一个ros2 run。
半年后,行李搬运机械臂在展厅里连续运行。
中间发生了很多。在仿真里跑了无数条规划轨迹。对着看不懂的C++代码一行行问AI。在深圳实验室,因为碰撞保护反复重连机器人,调PID调到不知道哪组最优。半夜改完代码,第二天早上看到机械臂按预期运动时的那种感觉。
然后呢?然后就继续往前走了。
初生牛犊不怕虎。等真的看见了虎长什么样,你已经站在它面前了。那时候只有一件事可以做------往前走。
如果你也想做机械臂,或者你也有一个"完全不懂但想试试"的领域------先迈第一步吧。装个ROS2,跑个仿真demo,让机械臂动起来。
这一步花不了你一周。做完了,你自己就知道答案了。
重新写文章,专注于AI领域,如AI原生、AI工具、AI赋能等,主阵地是公众号,欢迎关注。