【AhaRobot】:千元级开源双臂移动操作机器人——具身AI的低成本硬件落地范式

AhaRobot:千元级开源双臂移动操作机器人------具身AI的低成本硬件落地范式

论文信息

标题 :AhaRobot: A Low-Cost Open-Source Bimanual Mobile Manipulator for Embodied AI

会议 :arXiv preprint (cs.RO) 2026

单位 :天津大学智能与计算学部

代码https://aha-robot.github.io

论文https://arxiv.org/pdf/2503.10070.pdf


一、引言:具身AI的卡脖子问题,居然是硬件太贵?

聊到具身智能,大家张口闭口都是大模型、VLA、扩散策略,好像算法已经无敌了,就等落地。但真实情况是:99%的研究者连真实机器人都摸不起

就拿火遍全网的Mobile ALOHA来说,一套下来三万多美元,折合人民币二十多万,普通实验室买一套都得咬牙,个人开发者更是想都别想。更别说TIAGo这种工业级平台,二十万欧元起步,那不是科研工具,是奢侈品。

硬件贵带来的直接后果就是:大家都窝在仿真里卷算法,一到真实世界就拉胯。毕竟仿真环境再真实,也模拟不出真实世界里的摩擦、间隙、零件公差这些"脏东西",算法迁移到真机上直接水土不服。

那能不能把移动操作机器人的价格打下来?天津大学的团队就干了这件事------他们做出了AhaRobot ,一套完整的双臂移动操作机器人,硬件成本只要1000美元(约7000人民币),连Mobile ALOHA的十五分之一都不到。加一块RTX 4060的车载电脑,全套下来也才2000美元,普通人攒一攒也能玩得起。

图1 AhaRobot系统整体概览

出处:原文Figure 1

解读:左半部分是机器人硬件本体,包含升降滑轨、双臂、移动底盘、多视角相机;右半部分是RoboPilot遥操作工作站,靠手柄和脚踏就能远程控制;下方展示了它能完成的日常任务,从抓取盒子、开冰箱到扫地全覆盖。

更绝的是,他们还配套做了一套RoboPilot遥操作方案,整套外设只要50美元,不用VR头盔、不用外骨骼,普通摄像头加个多面体手柄就能远程操控,精度能到3毫米。普通人坐在电脑前,就能给机器人录演示数据,完美解决了具身AI的数据采集痛点。

这篇文章我们就从头到尾拆解这套方案:怎么用白菜价零件做出能用的机械臂?怎么靠算法优化弥补硬件精度的不足?50美元的遥操作方案是怎么实现毫米级精度的?


二、硬件系统:用消费级零件,拼出专业级工作空间

整个机器人的设计思路非常明确:能省则省,但核心体验不能打折扣。最终目标是用1000美元预算,实现和几万块平台差不多的工作能力------能移动、能双臂协作、能够到地面、能操作桌面物品。

2.1 整体形态设计:三大核心创新

传统机械臂贵,很大程度是贵在肩肘关节的大扭矩电机上------要扛着整个手臂的重力,还要保证精度,电机价格自然下不来。AhaRobot用三个巧妙的结构设计,直接绕开了这个痛点:

1)皮带升降滑轨:用一维升降替代肩部关节

与其让手臂自己扛着重力上下抬,不如直接把整个上半身装在滑轨上,靠皮带传动升降。这样手臂只需要在水平面上运动,重力完全由滑轨承担,关节电机就不用选大扭矩的,成本直接砍一大截。

通俗解释:这就像装修用的升降脚手架,工人站在架子上上下移动,不用自己爬梯子。机器人的手臂就是工人,升降滑轨就是脚手架,分工明确,效率高还省钱。

升降行程达到1250mm,从地面到桌面的高度全覆盖,既能蹲下来捡地上的玩具,也能伸手按高处的电梯按钮,这是很多桌面机械臂做不到的。

2)SCARA式水平臂:彻底卸掉重力负担

手臂采用水平布置的SCARA结构,所有关节都在水平面旋转,完全不受重力弯矩的影响。这样哪怕用十几美元的廉价舵机,也能带动不小的负载,待机的时候手臂还能收折到身体两侧,占地特别小,过门、转弯都不容易撞。

单臂最大负载1.5kg,工作半径750mm,日常拿个杯子、开个冰箱完全够用。

3)双电机关节:两个便宜电机,顶一个高精度电机

廉价舵机最大的问题就是齿轮间隙大,转的时候哐哐响,定位精度差。AhaRobot的每个关节都装了两个电机,输出轴硬连在一起,靠控制算法给两个电机加反向偏置扭矩,让齿轮始终贴紧一侧,直接把间隙给消掉了。这部分我们后面控制章节详细讲。

2.2 移动底盘:差速驱动,零半径转弯

底盘用双轮差速驱动,前面两个无刷电机,后面一个万向轮,能原地转圈,转弯清扫半径只有50cm,在家里窄过道也能灵活穿梭。底盘用铝型材搭建,不用CNC加工,买回来拧螺丝就能组装,进一步压缩成本。

2.3 传感与计算配置

  • 视觉:头顶一个云台相机看全局,两个手腕各装一个相机做近距离抓取,都是640×360分辨率、30帧,够用不浪费;
  • 本体感知:每个关节都带4096线的磁编码器,底盘电机带霍尔传感器,升降滑轨有光电开关做零点复位;
  • 计算:可选Mini-ITX主板(i5-12700KF + RTX4060,约800美元),或者更便宜的Jetson板,整套系统跑ROS 2 Humble,用ESP32做底层电机控制,ODrive驱动底盘无刷电机;
  • 供电:24V锂电池给电机供电,户外电源给电脑供电,满电能跑4-5小时,完全脱线运行。

2.4 和同类平台的横向对比

光说便宜没用,我们看看它和主流平台的能力对比:

表1 不同机器人平台参数对比

出处:原文Table I

机器人平台 价格 双臂 移动底盘 能够到地面 开源 自由度
Mobile Aloha $32,000 × 16
Hello Robot Stretch $24,950 × × 7
DROID ≈$27,000 × × × 8
AgileX COBOT ≈$30,000 × × 16
TIAGo >$200,000 × × 12
AhaRobot $1,000-2,000 16

解读:AhaRobot是所有平台里唯一一个同时满足双臂、移动、可达地面、全开源四个条件的,价格却只有其他平台的十几甚至几十分之一。除了负载和绝对精度不如工业级平台,日常家用场景的能力完全覆盖。

核心硬件参数汇总:

表2 AhaRobot核心参数

出处:原文Table II

参数类别 数值
单臂负载 1.5 kg
整机重量 51 kg
整机尺寸 550×500×1550 mm
夹爪最大开合 120 mm
平面最大工作半径 750 mm
Z轴升降行程 1250 mm
续航 4-5 小时
最小转弯半径 0(原地旋转)
转弯清扫半径 500 mm

通俗解释:这就像汽车圈的"五菱宏光",价格便宜、能拉能跑、坏了好修,虽然跑不过超跑,但日常干活是真好用,能让更多人用得起。


三、双关节控制系统:用算法弥补硬件短板

便宜硬件天然有两个硬伤:齿轮间隙大、静摩擦严重。如果直接用普通PID控制,要么抖个不停,要么小幅度动不了,根本做不了精细活。AhaRobot的控制团队专门做了两套优化方案,硬生生把廉价电机的控制精度拉到了能用的水平。

图2 双关节控制系统框图

出处:原文Figure 2

解读:整个控制回路包含梯形轨迹规划、P控制器、双电机反向偏置消间隙、电机抖动静摩擦补偿几个模块,靠软件算法把廉价硬件的性能拉满。

3.1 双电机反向驱动:消除齿轮间隙

齿轮传动天生就有间隙,正转反转切换的时候会有空程,就像老自行车的脚蹬子,倒踩半圈才吃上力。放到机械臂上,就会导致定位不准、来回震荡。

AhaRobot的解法很巧妙:每个关节装两个电机,输出轴硬连在一起,给两个电机加一个反向的偏置电压,让两个齿轮始终分别贴在齿槽的两个面上,间隙自然就没了。

核心公式:双电机控制量分配

{u1=uo+ubu2=uo−ub \left\{ \begin{array}{l} u_1 = u_o + u_b \\ u_2 = u_o - u_b \end{array} \right. {u1=uo+ubu2=uo−ub

符号解释:

  • u1u_1u1:1号电机的最终控制电压
  • u2u_2u2:2号电机的最终控制电压
  • uou_ouo:PID控制器输出的总控制量,也就是关节需要的总驱动力
  • ubu_bub:偏置电压,用来给两个电机施加反向的预紧力,始终保持齿轮贴合

通俗解释:这就像两个人一起拉一根绳子,一个往左拉一点,一个往右拉一点,绳子始终绷得紧紧的,没有松垮的余地。等要往某个方向动的时候,只要一边加力、一边减力就行,全程不会有空隙。

实际效果对比非常明显:关掉消间隙功能的时候,关节到目标位置会来回震荡;打开之后,稳稳停在目标点,几乎没有超调。

图3 不同控制策略下的系统响应

出处:原文Figure 3

解读:左图是方波跟踪,虚线是关掉消间隙的情况,目标切换时震荡明显;实线打开后非常平稳。右图是阶梯波跟踪,关掉摩擦补偿的时候,小幅度指令根本动不起来;打开后能精准跟上每一个小台阶。

3.2 电机抖动法:搞定静摩擦

廉价电机的静摩擦力很大,就像生锈的合页,得用很大劲才能启动,动起来之后又突然变滑。表现在控制上就是:误差小的时候电机转不动,误差攒大了电机一动又冲过了头,永远有稳态误差。

传统解法是加积分项,但积分需要积累时间,而且控制频率不高的时候效果很差。AhaRobot用了一个简单粗暴但有效的办法:给控制量加一个高频抖动的前馈项,让电机一直在微震动,始终处于"临界启动"状态,静摩擦直接就被绕过了。

摩擦模型的经典公式是这样的:

τf={τssgn(q˙)+τvq˙,if q˙≠0τe,if q˙=0 and ∣τe∣<τsτssgn(τe),otherwise \tau_f= \begin{cases} \tau_s \text{sgn}(\dot{q})+\tau_v \dot{q}, & \text{if } \dot{q} \neq 0 \\ \tau_e, & \text{if } \dot{q}=0 \text{ and } |\tau_e|<\tau_s \\ \tau_s \text{sgn}(\tau_e), & \text{otherwise} \end{cases} τf=⎩ ⎨ ⎧τssgn(q˙)+τvq˙,τe,τssgn(τe),if q˙=0if q˙=0 and ∣τe∣<τsotherwise

符号解释:

  • τf\tau_fτf:总摩擦力矩
  • τs\tau_sτs:最大静摩擦力矩,也就是启动需要克服的最大阻力
  • τv\tau_vτv:粘滞摩擦系数,速度越快,粘滞摩擦越大
  • q˙\dot{q}q˙:关节角速度
  • sgn(⋅)\text{sgn}(\cdot)sgn(⋅):符号函数,正数返回1,负数返回-1
  • τe\tau_eτe:外部驱动力矩

通俗解释:摩擦力就像一道门槛,力气不够大就推不动门。电机抖动法就是让电机一直在门口小幅度晃,不用每次都从零开始攒力气,轻轻一推就能动起来。

从实验结果看,关掉抖动补偿的时候,0.175度的小台阶指令,电机完全没反应;打开之后,每一个小台阶都能精准跟上,微操作能力直接拉满。


四、RoboPilot:50美元打造专业级遥操作方案

有了机器人还不够,具身AI需要大量演示数据来训练模仿学习模型。怎么高效录数据?传统方案要么是几万块的外骨骼/主从臂,要么是VR头盔,戴半小时头就晕,根本没法长时间工作。

AhaRobot配套的RoboPilot 方案,把遥操作的成本直接打到了50美元,而且支持完全远程操作,坐在办公室就能控制实验室里的机器人录数据。

图4 RoboPilot遥操作工作站

出处:原文Figure 4

解读:整套设备就是两个多面体手柄、四个脚踏板、一个普通摄像头。手柄控制双臂位姿,脚踏分两种模式:操作模式控制夹爪和升降,行走模式控制底盘前后左右移动。

4.1 26面标记手柄:解决姿态模糊的痛点

用视觉做遥操作,最常见的做法是在立方体上贴AprilTag码,靠PnP算法算6自由度位姿。但立方体有个致命问题:当标记面和摄像头平行的时候,位姿解算会模糊,数据突然跳一下,机器人就跟着抖一下,特别影响操作。

AhaRobot的解法很有创意:不用立方体,用26面体 。不管你怎么转手柄,摄像头始终能看到至少三个不在同一平面的标记,位姿解算永远稳定。

图5 不同手柄的跟踪精度对比

出处:原文Figure 5

解读:蓝色是普通6面立方体,误差波动非常大,经常出现尖峰;橙色是26面体,误差平稳得多,几乎没有跳变。

量化对比结果:

表3 多面体手柄精度量化对比

出处:原文Table III

类型 平均旋转误差 平均平移误差
6面立方体 5.391° 9.9 mm
26面体(本文) 1.094°(下降80%) 2.1 mm(下降79%)

解读:换了个多面体形状,精度直接提升了4-5倍,平均定位误差2.1毫米,完全满足日常抓取的精度要求,而成本几乎没增加------就是3D打印个外壳的事。

4.2 脚踏双模控制:解放双手,全身协调

光有手柄不够,移动底盘、夹爪开合、升降滑轨这些功能,总不能用键盘按,操作起来太割裂。RoboPilot用四个脚踏板,设计了两套模式,一键切换:

  • 操作模式:两个脚踏分别控制左右夹爪开合,另外两个控制升降滑轨上下;
  • 行走模式:四个脚踏对应底盘前后左右移动,就像玩赛车游戏。

操作的时候,手负责精细的双臂动作,脚负责移动身体和调整高度,和人干活的逻辑一模一样,上手特别快。而且夹爪可以锁定,移动的时候不会掉东西。

4.3 网页端远程操控:跨网络也能玩

整个遥操作客户端是网页版的,不用装软件:

  • 手柄位姿解算全在浏览器本地跑,用WebAssembly + OpenCV.js,数据不经过服务器,隐私有保障;
  • 机器人的三路画面用WebRTC实时传输,延迟很低;
  • 手柄、脚踏、键盘指令也通过WebRTC数据通道回传给机器人。

也就是说,只要有网,你在海南都能控制天津的机器人录数据,完全不用守在机器旁边。

4.4 长时序任务实测:远程送咖啡、加热寿司

为了测试这套系统的极限,研究者做了两个超复杂的长时序任务:

  1. 送咖啡任务:机器人从2楼实验室出发,走过长廊、转过拐角,取咖啡,按电梯,坐电梯到3楼,开门,把咖啡送到目标房间。全程移动距离超过200米,完全远程操作。
  2. 加热寿司任务 :机器人降低高度,打开冰箱下层门,拿出寿司,升高到桌面高度,双手配合打开微波炉,把寿司放进去,关门,最后回去关上冰箱门。

图6 超长时序远程遥操作任务

出处:原文Figure 6

解读:左列是送咖啡任务,跨楼层、长距离,考验移动和交互能力;右列是加热寿司任务,高低落差大,需要双臂配合,考验操作精度。这两个任务放在以前,得专业操作员戴VR设备守在现场才能做,现在靠一套50美元的外设就能远程完成。
有趣案例:这就像以前开远程挖掘机,得专门的操作员坐在特制驾驶室里,一套设备几十万。现在好了,普通人用游戏手柄加脚踏就能远程操控机器人干活,未来甚至可以搞"众包录数据"------全世界的人都能上线给机器人演示任务,数据量起来了,具身大模型才能训得更好。


五、实验验证:便宜归便宜,干活是真靠谱

光说参数没用,是骡子是马拉出来遛遛。研究者做了三类实验,全方位验证这套系统的实用性。

5.1 遥操作效率对比:比主流方案快30%

找了三组人,分别用RoboPilot、3D鼠标、主从臂三种方案做同样的三个任务,记录成功率和完成时间:

  • 任务1:把盘子放进碗架
  • 任务2:开抽屉,把橡皮放进去
  • 任务3:把试管插到试管架上

表5 不同遥操作方案的任务性能对比

出处:原文Table V

任务名称 RoboPilot SpaceMouse Leader-Follower
成功率 耗时(s) 成功率 耗时(s) 成功率 耗时(s)
放盘子进碗架 100% 36.62 44.4% 47.31 100% 57.35
开抽屉放橡皮 100% 72.60 100% 83.95 100% 82.69
插试管 100% 26.44 100% 44.87 100% 55.94
平均 100% 45.22 81.5% 58.71 100% 65.33

解读:

  1. RoboPilot平均耗时比主从臂快了30%,比3D鼠标快了23%,操作效率最高;
  2. 3D鼠标在第一个任务上成功率暴跌,因为视角切换的时候坐标系容易搞混,操作者容易晕;
  3. 主从臂虽然成功率也满,但经常碰到奇异位姿,得手动调整,特别费时间。

结论很明确:这套50美元的方案,操作体验和效率,比几千几万的方案还要好。

5.2 模仿学习验证:练完就能自主干活

硬件最终还是要服务算法的。研究者用RoboPilot录了演示数据,用ACT算法训练了模仿学习模型,测试机器人能不能自主完成任务。

一共三个任务,从简单到复杂:

  1. 搬盒子:找到盒子,抓起来,搬到指定区域放下
  2. 插笔:拿起笔,拿起杯子,把笔插进杯子里,放回桌面
  3. 收玩具:找到地上的玩具,捡起来,走到桌子边,放进收纳盒

图7 遥操作任务演示

出处:原文Figure 7

解读:左边是放碗架任务,右边是插试管任务,都是典型的精细操作场景。

图8 模仿学习任务拆解

出处:原文Figure 8

解读:每个任务都包含多个子步骤,有的需要调整高度,有的需要全身移动,不是简单的桌面抓取。

测试结果:

表4 模仿学习任务成功率

出处:原文Table IV

任务名称 子步骤 成功率
搬盒子 拿起盒子 10/10
移动到目标区 10/10
放下离开 10/10
插笔 拿起笔 6/10
拿起杯子 6/10
插笔入杯 8/10
放回桌面 7/10
收玩具 找到玩具 7/10
捡起玩具 7/10
移动到桌边 7/10
放进收纳盒 7/10

解读:简单的搬盒子任务成功率100%,说明基础抓取和移动完全没问题;插笔和收玩具稍低,主要是因为杯子太轻容易碰倒、底盘移动精度有限,属于廉价硬件的正常局限。

这里还有个很有意思的细节:底盘控制用速度控制的话,训练出来的策略根本跑不起来,因为演示数据里速度波动太大,有很多尖峰。换成位置控制之后,学习稳定性直接拉满。

图9 不同底盘控制方式的成功率对比

出处:原文Figure 9

解读:速度控制训练的策略,在移动步骤直接崩了,成功率为0;位置控制就很稳,每一步都有不错的成功率。这也给大家提了个醒:做移动操作模仿学习,底盘用位置控制比速度控制好训得多。


六、核心代码实现

6.1 双电机消间隙控制核心代码

python 复制代码
import time

class DualMotorJoint:
    def __init__(self, motor1, motor2, bias_voltage=0.3):
        self.motor1 = motor1  # 电机1实例
        self.motor2 = motor2  # 电机2实例
        self.bias_voltage = bias_voltage  # 反向偏置电压,消除间隙
        self.kp = 2.0  # P控制器增益
    
    def position_control(self, target_pos, current_pos):
        """
        双电机位置控制,带消间隙偏置
        target_pos: 目标角度
        current_pos: 当前反馈角度
        """
        # 计算位置误差
        error = target_pos - current_pos
        # P控制器输出总控制量
        u_o = self.kp * error
        
        # 分配到两个电机,加反向偏置
        u1 = u_o + self.bias_voltage
        u2 = u_o - self.bias_voltage
        
        # 限幅,防止电压超标
        u1 = max(-12.0, min(12.0, u1))
        u2 = max(-12.0, min(12.0, u2))
        
        # 下发控制指令
        self.motor1.set_voltage(u1)
        self.motor2.set_voltage(u2)
    
    def add_dither(self, u_o, t, dither_amp=0.1, dither_freq=10):
        """
        叠加抖动信号,克服静摩擦
        u_o: 原始控制量
        t: 当前时间
        dither_amp: 抖动幅度
        dither_freq: 抖动频率
        """
        import math
        dither = dither_amp * math.sin(2 * math.pi * dither_freq * t)
        return u_o + dither

6.2 AprilTag 6自由度位姿解算核心代码

python 复制代码
import cv2
import numpy as np

def estimate_pose_from_tag(corners, tag_size, camera_matrix, dist_coeffs):
    """
    从单个AprilTag的角点解算6自由度位姿
    corners: 检测到的标签四个角点像素坐标
    tag_size: 标签实际物理尺寸(米)
    camera_matrix: 相机内参矩阵
    dist_coeffs: 畸变系数
    """
    # 标签在物体坐标系的3D点
    half = tag_size / 2.0
    object_points = np.array([
        [-half, -half, 0],
        [ half, -half, 0],
        [ half,  half, 0],
        [-half,  half, 0]
    ], dtype=np.float32)
    
    # 角点像素坐标
    image_points = corners.astype(np.float32)
    
    # PnP解算位姿
    success, rvec, tvec = cv2.solvePnP(
        object_points, image_points, camera_matrix, dist_coeffs
    )
    
    # 旋转向量转旋转矩阵
    R, _ = cv2.Rodrigues(rvec)
    
    # 组装成4x4变换矩阵
    pose = np.eye(4)
    pose[:3, :3] = R
    pose[:3, 3] = tvec.flatten()
    
    return pose  # 相机到标签的变换矩阵

6.3 基于ACT的模仿学习训练极简代码

python 复制代码
import torch
from lerobot.policies import ACTPolicy
from torch.utils.data import DataLoader

# 假设已经用AhaRobot采集好数据集
dataset = AhaRobotDataset(data_dir="pick_box_demos")
dataloader = DataLoader(dataset, batch_size=8, shuffle=True)

# 初始化ACT策略
policy = ACTPolicy(
    state_dim=18,      # 机器人状态维度:关节+夹爪+底盘
    action_dim=18,     # 动作维度
    hidden_dim=512,
    n_heads=8,
    n_layers=4,
    chunk_size=100,
    camera_num=3       # 头顶+左右腕共3路相机
)
optimizer = torch.optim.Adam(policy.parameters(), lr=1e-4)

# 训练循环
policy.train()
for epoch in range(50):
    total_loss = 0
    for batch in dataloader:
        images = batch["images"]  # [B, 3, 3, H, W] 批次、相机数、通道、高、宽
        state = batch["state"]    # [B, 18]
        action = batch["action"]  # [B, chunk_size, 18]
        
        # 前向计算损失
        loss = policy.compute_loss({"images": images, "state": state}, action)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        total_loss += loss.item()
    
    print(f"Epoch {epoch}, Loss: {total_loss / len(dataloader):.4f}")

七、总结与展望

AhaRobot这篇工作最让人兴奋的点,不是做出了什么性能逆天的机器人,而是它把具身AI的入场门槛拉到了前所未有的低度

以前做真实机器人研究,得有几十万的设备预算,普通高校、小团队根本玩不起;现在一万多块钱就能攒一套完整的双臂移动机器人,学生在宿舍都能搞具身智能研究。再加上低成本的远程遥操作方案,未来甚至可以像众包标注数据一样,让大量普通人参与给机器人录演示,彻底解决具身AI的数据荒。

当然它也不是完美的,论文自己也坦诚了几个局限:

  1. 整机还是偏重,51公斤,搬起来费劲,而且没有碰撞检测,撞一下容易坏;
  2. 视觉遥操作还是有延迟,特别高速动态的任务不好做,得靠软件优化继续降延迟;
  3. 负载和绝对精度还是不如工业级平台,只能做日常家用场景,干不了重工业的活。

但这些都不影响它的意义------就像当年的个人电脑,刚出来的时候性能远不如大型机,但它让每个人都能用得起,最终才催生了整个互联网时代。当足够多的人能摸得到真实机器人、能贡献数据和算法的时候,具身智能的爆发才真正有了土壤。