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 长时序任务实测:远程送咖啡、加热寿司
为了测试这套系统的极限,研究者做了两个超复杂的长时序任务:
- 送咖啡任务:机器人从2楼实验室出发,走过长廊、转过拐角,取咖啡,按电梯,坐电梯到3楼,开门,把咖啡送到目标房间。全程移动距离超过200米,完全远程操作。
- 加热寿司任务 :机器人降低高度,打开冰箱下层门,拿出寿司,升高到桌面高度,双手配合打开微波炉,把寿司放进去,关门,最后回去关上冰箱门。

图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 |
解读:
- RoboPilot平均耗时比主从臂快了30%,比3D鼠标快了23%,操作效率最高;
- 3D鼠标在第一个任务上成功率暴跌,因为视角切换的时候坐标系容易搞混,操作者容易晕;
- 主从臂虽然成功率也满,但经常碰到奇异位姿,得手动调整,特别费时间。
结论很明确:这套50美元的方案,操作体验和效率,比几千几万的方案还要好。
5.2 模仿学习验证:练完就能自主干活
硬件最终还是要服务算法的。研究者用RoboPilot录了演示数据,用ACT算法训练了模仿学习模型,测试机器人能不能自主完成任务。
一共三个任务,从简单到复杂:
- 搬盒子:找到盒子,抓起来,搬到指定区域放下
- 插笔:拿起笔,拿起杯子,把笔插进杯子里,放回桌面
- 收玩具:找到地上的玩具,捡起来,走到桌子边,放进收纳盒

图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的数据荒。
当然它也不是完美的,论文自己也坦诚了几个局限:
- 整机还是偏重,51公斤,搬起来费劲,而且没有碰撞检测,撞一下容易坏;
- 视觉遥操作还是有延迟,特别高速动态的任务不好做,得靠软件优化继续降延迟;
- 负载和绝对精度还是不如工业级平台,只能做日常家用场景,干不了重工业的活。
但这些都不影响它的意义------就像当年的个人电脑,刚出来的时候性能远不如大型机,但它让每个人都能用得起,最终才催生了整个互联网时代。当足够多的人能摸得到真实机器人、能贡献数据和算法的时候,具身智能的爆发才真正有了土壤。