
1. 从地面到高空具身智能的边界正在被重新定义过去两年具身智能这个词被反复提及但大多数讨论都集中在人形机器人、四足机器狗、轮式底盘这些“贴地运行”的形态上。大家默认了一个前提具身智能的载体得有地面支撑得靠轮子或足式结构去移动。但IROS 2026上出现的一个方向把这个默认前提直接掀翻了——给无人机装上机械臂让它在空中完成“拧螺栓”这类接触式操作任务。这个方向为什么值得单独拿出来聊因为它解决的是一个非常具体的痛点高空场景下的精细作业目前几乎全靠人工吊篮、脚手架或者大型工程机械来完成。风电塔筒的螺栓紧固、高压输电线路的异物清除、桥梁底部的高空检测与维修、大型钢结构的高空装配这些场景的共同特点是——人上去危险、大型设备进去困难、纯视觉无人机只能看不能动。而“无人机机械臂”这个组合恰好卡在了一个能力空白的生态位上它能飞到人不容易到达的位置还能用机械臂去施加力、去接触、去操作。我关注这个方向有一段时间了从早期的“无人机挂个钩子”到现在的“六轴机械臂飞控协同”技术栈的复杂度至少翻了三个量级。这不是简单地把两个成熟系统拼在一起——无人机是欠驱动系统机械臂是强耦合系统两者叠加之后整个动力学模型会变得极其复杂。你动一下机械臂无人机的重心就偏了无人机一偏机械臂末端的位置就跟着漂。这种耦合关系是地面机械臂完全不需要考虑的问题。这篇文章适合谁看如果你在做无人机飞控、机械臂控制、ROS系统集成或者你正在找一个有足够技术纵深、又还没被做烂的具身智能方向那这篇内容应该能给你一些参考。我会从系统架构、核心难点、实操路径、常见坑这几个维度把这个方向拆开来讲。不是论文综述是一个从业者视角的工程笔记。2. 系统架构拆解为什么“无人机机械臂”不是简单拼接2.1 两个欠驱动系统的耦合难题先把这个系统的基本构成说清楚。一台多旋翼无人机本质上是一个欠驱动系统——六个自由度位置xyz姿态roll/pitch/yaw但只有四个独立控制输入四个电机的转速。你没法同时独立控制所有自由度位置和姿态之间是耦合的。这是飞控领域的基础常识。机械臂呢一台六轴机械臂在基座固定的情况下是全额驱动系统六个关节对应六个自由度末端位姿可以独立控制。但一旦把基座从“固定”变成“浮动”情况就完全变了。机械臂运动产生的反作用力和力矩会直接作用到无人机机体上改变无人机的姿态和位置。而无人机为了维持稳定飞控会不断调整电机转速去补偿——这个补偿过程又会影响机械臂末端的绝对位置。这就形成了一个闭环耦合机械臂动→无人机偏→飞控补→机械臂末端漂→机械臂再调→无人机再偏。如果你把两个系统的控制回路独立设计不加协调整个系统会震荡甚至发散。我见过不少早期尝试无人机悬停还行机械臂一展开就翻车根本原因就在这里。2.2 三种主流架构方案对比目前工程上能走通的架构大致分三类各有取舍。架构类型核心思路优势劣势适用场景分离式控制飞控和机械臂各自独立机械臂运动时飞控只做姿态稳定实现简单改造成本低末端精度差动态响应慢慢速、大容差任务协调式控制统一动力学模型飞控和机械臂联合求解控制量精度高动态性能好建模复杂算力要求高接触式精细作业分层式控制上层规划末端轨迹下层飞控机械臂各自跟踪折中方案工程可落地层间接口设计复杂多数实际项目分离式控制是最容易上手的。你买一台现成的无人机下面挂一个轻量机械臂机械臂用自己的控制器无人机飞控只负责把姿态稳住。这种方案在机械臂运动缓慢、任务容差大的场景下能用比如空中抓取一个比较大的物体。但一旦涉及“拧螺栓”这种需要精确对位和力矩控制的任务分离式就力不从心了。协调式控制是学术圈的主流方向。把无人机和机械臂视为一个统一的浮动基座机械臂系统建立完整的动力学方程然后设计统一的控制器。理论上最优但实际工程中光是要准确辨识无人机的惯量矩阵和机械臂的动力学参数就够一个团队忙上几个月。而且算力需求大机载计算机得足够强。分层式控制是我个人比较看好的工程路线。上层用一个任务规划器根据视觉信息生成机械臂末端的期望轨迹下层把这条轨迹分解成无人机的位置调整指令和机械臂的关节运动指令两者通过一个协调器来分配。这样既避免了完整耦合建模的复杂度又能保证末端精度。关键是接口清晰方便模块化开发和调试。2.3 硬件选型的核心约束硬件选型这块有几个硬约束必须先想清楚。载重与续航的平衡。机械臂本身有重量加上末端执行器、视觉模块、机载计算机整机重量会大幅增加。一台典型的六轴机械臂自重可能在2-5公斤末端执行器再加0.5-1公斤。这意味着无人机的最大起飞重量至少要留出5-8公斤的余量给任务载荷。而多旋翼的续航和载重是强耦合的——载重增加续航急剧下降。我算过一笔账一台最大起飞重量25公斤的八旋翼空载续航可能40分钟挂上5公斤载荷后可能只剩15-20分钟。所以任务规划时必须把“飞到作业点作业时间返航”三段电量都算进去留足安全余量。机械臂的刚重比。空中机械臂不能用地面上那种重型工业臂得选轻量化、高刚度的方案。碳纤维连杆、谐波减速器、无框力矩电机这些是常见选择。但轻量化之后刚度会下降末端在受力时容易变形。拧螺栓需要施加扭矩这个反作用力会让机械臂产生弹性变形影响对位精度。所以机械臂的结构设计要在刚度和重量之间找平衡点不能一味求轻。飞控的接口能力。普通消费级飞控的接口和算力基本没法支撑这种应用。你需要飞控能接收外部的位置/速度指令能输出高频的姿态和位置反馈最好还能支持外部控制器的直接力矩指令。PX4和ArduPilot在这方面相对开放但也要做不少二次开发。另外无人机和机械臂之间的通信延迟要尽可能低串口或CAN总线比无线连接可靠得多。注意机械臂的供电和无人机的供电最好分开走。机械臂电机启动瞬间的电流冲击如果和飞控共用一路电源可能导致飞控电压跌落甚至重启。我见过一次因为共用电源导致空中飞控重启的案例后果很严重。3. 核心难点突破从悬停到接触式作业的关键技术3.1 浮动基座下的末端精度控制这是整个系统最核心的难点。地面机械臂的末端精度可以做到毫米级甚至更高因为基座是固定的。但空中机械臂的基座在不停运动即使飞控把无人机悬停得再稳也会有厘米级的漂移。这个漂移直接传递到机械臂末端导致对位失败。解决思路分两个层面。第一个层面是“稳基座”——通过飞控的精确位置控制把无人机的漂移压到最小。这需要好的GPS/RTK定位或者室内环境下的动捕系统。视觉定位也可以但刷新率和精度要够。第二个层面是“补漂移”——在机械臂的控制回路里引入无人机的位置和姿态反馈实时补偿基座运动带来的末端偏差。这相当于给机械臂加了一个“前馈”通道在无人机漂移发生的瞬间就开始补偿而不是等末端位置偏了再纠正。实际操作中这两个层面要同时做。我试过只做第一个层面无人机悬停精度做到±5厘米但机械臂末端在展开状态下这个5厘米的基座漂移会被放大到10-15厘米根本没法对螺栓孔。加上第二个层面的补偿后末端精度能压到±2厘米以内基本满足粗对位需求。精对位还需要视觉伺服来引导。3.2 接触瞬间的力控与柔顺策略拧螺栓这个动作本质上是一个接触式操作任务。机械臂末端要先去“找”螺栓头然后套筒要对准再施加扭矩。这个过程涉及三个关键阶段接近、接触、施力。接近阶段相对简单视觉引导机械臂末端移动到螺栓附近。但接触瞬间就麻烦了。无人机在悬停时位置会有小幅震荡如果机械臂以刚性位置控制去接触螺栓这个震荡会导致末端和螺栓之间产生碰撞力轻则对不准重则损坏末端或把无人机推偏。所以接触阶段必须引入柔顺控制。常见做法是给机械臂的末端加一个柔顺机构比如弹簧或弹性材料吸收接触瞬间的冲击。更高级的做法是用阻抗控制让机械臂末端表现得像一个弹簧-阻尼系统接触力越大末端退让越多。这样即使无人机有漂移末端也能“软着陆”到螺栓上。施力阶段是拧螺栓的核心。你需要施加一个绕螺栓轴线的扭矩同时保持末端在螺栓轴线方向上的压力。这个扭矩的反作用力会传递到无人机上导致无人机绕yaw轴旋转。飞控必须能感知到这个旋转趋势并主动补偿。这里有个技巧在拧螺栓之前先让无人机稍微倾斜一个角度利用重力的分量来抵消一部分反作用扭矩。这个角度需要根据扭矩大小和无人机质量来算我一般会留20%-30%的余量剩下的靠飞控动态补偿。3.3 视觉感知与对位引导视觉系统在这个任务里承担两个角色一是远距离引导无人机飞到作业点附近二是近距离引导机械臂末端精确对位。远距离引导相对成熟用视觉SLAM或者已知目标的视觉定位都可以。关键是刷新率和鲁棒性。高空环境光照变化大风会导致无人机晃动视觉算法要能跟上。我一般会用光流特征点融合的方案在GPS信号好的时候用GPS信号差的时候切视觉。近距离对位是难点。螺栓头可能只有几厘米大小机械臂末端要精确套上去。这里用眼在手上eye-in-hand的配置比较合适相机装在机械臂末端附近随着机械臂运动相机能近距离观察螺栓。但相机离得近视野就窄需要先粗对位再精对位。粗对位用无人机的位置调整精对位用机械臂的关节微调。视觉伺服的控制律设计也有讲究。基于位置的视觉伺服PBVS和基于图像的视觉伺服IBVS各有优劣。PBVS在笛卡尔空间规划轨迹直观但需要精确的相机标定和深度信息。IBVS直接在图像空间控制对标定误差不敏感但容易陷入局部极小值。实际项目中我倾向于用IBVS做精对位因为螺栓头的图像特征比较明显IBVS能直接利用这些特征。实操心得视觉对位时不要追求一次到位。先让机械臂末端移动到螺栓上方5-10厘米处悬停一下让无人机和机械臂都稳定下来再缓慢下降接触。这个“悬停-稳定-下降”的节奏能大幅提高对位成功率。4. 实操路径从仿真到实机的完整流程4.1 仿真环境搭建GazeboMoveIt2飞控SITL直接上实机调这个系统成本高、风险大。合理的路径是先在仿真里把控制逻辑跑通再迁移到实机。仿真环境的核心是三部分无人机模型、机械臂模型、以及两者的联合控制接口。无人机可以用PX4的SITL软件在环仿真在Gazebo里加载一个多旋翼模型。机械臂可以用MoveIt2来配置加载URDF模型。关键是把两者放到同一个Gazebo世界里并且让它们能互相感知。具体操作上先在Gazebo里创建一个世界文件包含一个多旋翼模型和一个机械臂模型。机械臂的基座要固定在无人机的机体上这需要在URDF里把机械臂的base_link和无人机的base_link用固定关节连接起来。然后配置MoveIt2让机械臂的运动规划能考虑到基座的运动。这一步比较绕因为MoveIt2默认假设基座是固定的。你需要用MoveIt2的“浮动基座”支持或者自己写一个节点把无人机的位置姿态实时发布到TF树里让MoveIt2能感知到基座在动。飞控这边PX4的SITL可以接收外部的位置指令。你可以写一个ROS节点订阅机械臂末端的期望位置反算出无人机需要移动到的位置然后发给PX4。同时PX4的姿态和位置反馈要发布到ROS里供机械臂控制器使用。这个仿真环境搭起来大概需要几天时间但一旦跑通后面调控制参数就快多了。我建议先用一个简单的任务验证让无人机悬停机械臂末端画一个圆。如果末端轨迹能跟踪上说明基座补偿和协调控制的基本框架是对的。4.2 实机集成通信、供电与安全机制仿真跑通之后实机集成是另一个坎。这里有几个必须做好的事情。通信架构。机载计算机和飞控之间用串口或CAN总线通信延迟低、可靠。机载计算机和机械臂控制器之间看机械臂的接口EtherCAT或CANopen比较常见。所有通信链路都要做心跳检测一旦超时系统要进入安全状态——无人机悬停机械臂收回。供电设计。前面提过机械臂和飞控最好分开供电。如果必须共用电池至少要在电源线上加足够的滤波电容并且机械臂电机的驱动器要有软启动功能避免上电瞬间的电流冲击。电池的放电倍率要留足余量机械臂峰值电流可能很大。安全机制。空中作业安全是第一位的。必须设计好几层保护第一层是软件限位机械臂的关节角度、末端力、无人机的位置和姿态都设软限位超限就触发保护第二层是硬件急停地面站有一个物理按钮按下后无人机和机械臂同时断电或进入悬停第三层是失效保护通信中断、电量低、传感器故障等情况下的自动返航或降落逻辑。我个人的经验是第一次实机测试不要装机械臂先让无人机挂一个和机械臂等重的配重飞一遍任务剖面验证载重和续航。然后再装机械臂但机械臂先不运动只做静态搭载测试。最后才逐步放开机械臂的运动范围。这个过程急不得每一步都要确认稳定了再往下走。4.3 参数整定从飞控到机械臂的联合调试参数整定是这个项目里最耗时的环节。飞控有飞控的参数机械臂有机械臂的参数两者耦合之后还要调协调器的参数。飞控这边重点调位置环和姿态环的增益。位置环的带宽不能太高否则机械臂运动引起的扰动会被放大。姿态环的带宽可以适当高一些保证无人机能快速响应机械臂的反作用力。我一般会把位置环的带宽设在机械臂运动频率的1/3到1/2避免共振。机械臂这边关节控制器的刚度和阻尼要调。刚度太高接触时冲击大刚度太低末端精度差。一个实用的方法是在自由空间运动时用高刚度在接触阶段切换到低刚度力控。这个切换逻辑要平滑不能突变。协调器的参数主要是无人机位置调整和机械臂关节运动之间的权重分配。如果无人机位置调整太快会引入震荡太慢末端跟踪不上。我一般会先固定机械臂的参数调无人机的响应速度找到一个不震荡的最快响应然后再微调机械臂的参数去匹配。注意参数整定一定要在仿真里先做一轮把大致范围确定下来。实机上直接从仿真参数开始小步调整。每次只调一个参数调完做多次重复测试确认稳定了再调下一个。我见过有人一次调好几个参数结果系统震荡根本分不清是哪个参数的问题。5. 常见问题与排查技巧实录5.1 无人机震荡与机械臂抖动的联合排查这是最常见的问题。现象是无人机和机械臂同时出现高频抖动幅度不大但持续存在。排查思路是从源头开始逐级隔离。先断开机械臂的控制信号让机械臂保持固定姿态只让无人机悬停。如果无人机不抖了说明问题在机械臂的控制回路或者两者的耦合。如果无人机还抖说明飞控本身的参数有问题先调飞控。确认飞控没问题后接上机械臂但让机械臂做慢速运动。如果慢速不抖快速抖说明是频率耦合。检查机械臂的运动频率是否接近无人机的某个固有频率。如果是要么改变机械臂的运动规划避开这个频率要么调整飞控的滤波器参数把共振峰压下去。如果慢速也抖检查通信延迟。用示波器或者高精度的时间戳测量从机械臂发出位置指令到无人机开始响应的时间差。如果延迟超过50毫秒协调控制的效果会大打折扣。优化通信链路或者降低控制频率来匹配延迟。5.2 接触式作业中的力控失稳与对策拧螺栓时如果力控参数没调好会出现两种失稳一种是力振荡末端在螺栓上反复弹跳另一种是力发散接触力越来越大直到触发保护。力振荡通常是阻抗控制的阻尼不够。增大阻尼系数或者降低刚度系数让末端“软”一点。但太软了又对不准需要折中。我一般会先用一个中等刚度、高阻尼的参数接触稳定后再慢慢降阻尼、提刚度。力发散比较危险通常是力反馈的符号搞反了或者力传感器的标定有问题。先检查力传感器的读数方向是否正确——施加压力时读数应该是正的。如果符号反了控制器会正反馈力越来越大。另外力传感器的零漂也要注意每次上电前重新标定零点。还有一个容易被忽略的点无人机的姿态控制会引入额外的力。当机械臂施加扭矩时无人机为了保持姿态会调整电机转速这个调整会产生一个侧向力传递到机械臂末端。如果这个侧向力没有被补偿会干扰力控。解决办法是在力控回路里加入无人机姿态的反馈提前补偿这个侧向力。5.3 通信延迟与丢包的应急处理空中作业通信延迟和丢包是必须面对的现实。我的做法是设计一个“降级模式”当通信延迟超过阈值时系统自动从协调控制切换到分离控制无人机只做位置保持机械臂停止运动或收回。当通信恢复后再平滑切回协调控制。丢包的处理类似。每个控制周期都带一个序列号接收端检测到丢包就保持上一帧的控制量同时触发一个短时的预测补偿。如果连续丢包超过一定数量进入降级模式。地面站这边要有一个实时的通信质量显示让操作手知道当前链路的状态。我一般会显示延迟、丢包率、信号强度三个指标。操作手根据这些指标决定是否继续任务。实操心得通信链路的备份很重要。主链路用有线或近距离无线备份链路用另一套独立的无线模块。两套链路同时工作接收端做冗余仲裁。这样即使一套链路出问题另一套还能撑住。5.4 常见问题速查表现象可能原因排查方法解决措施无人机悬停时高频抖动飞控姿态环增益过高降低姿态环P增益观察抖动是否减弱重新整定飞控姿态环机械臂运动时无人机明显偏移协调器权重分配不当检查无人机位置调整的响应速度降低无人机位置环带宽或增大机械臂运动平滑度接触时力振荡阻抗控制阻尼不足增大阻尼系数观察振荡是否衰减调整阻抗参数增加阻尼末端对位精度差基座漂移补偿不足检查无人机位置反馈是否引入机械臂控制回路加入前馈补偿提高视觉伺服频率通信中断后系统失控缺少降级模式模拟通信中断观察系统行为设计降级模式通信中断时自动切换电池续航不足载重过大或电池老化测量实际载重和电池放电曲线减轻载荷更换高倍率电池6. 这个方向后续还能怎么扩展把“无人机机械臂”这个系统跑通之后能扩展的方向其实很多。最直接的是多机协作——两台或更多无人机各自带机械臂协同搬运一个大型构件或者一台负责固定、一台负责拧螺栓。这就涉及到多机通信、任务分配、协同控制等更复杂的问题。另一个方向是自主性提升。目前的操作还需要人在回路里做决策比如选择哪个螺栓、什么时候接触。后续可以引入更强的视觉感知和任务规划让系统自主识别螺栓、自主规划路径、自主完成拧紧动作。这就接近真正的“具身智能”了——感知、决策、行动一体化。还有一个偏工程的方向是任务专用化。不是做一个通用的空中机械臂而是针对特定场景做专用设计。比如风电螺栓紧固就专门优化对位和扭矩控制桥梁检测就专门优化视觉和路径规划。专用化能降低系统复杂度提高可靠性更容易落地。我自己在这个方向上踩过的最大坑是早期太追求“通用性”想把系统做得什么都能干结果什么都干不好。后来聚焦到一个具体任务上把对位精度和力控稳定性做到极致反而更容易出成果。如果你也在做类似的方向建议先选一个容差大、风险低的场景切入比如空中抓取一个系留物体跑通全流程后再逐步增加难度。