史上最全`Mobile ALOHA项目: 低成本双臂移动操作机器人`论文和代码实现分析和讲解

史上最全Mobile ALOHA项目: 低成本双臂移动操作机器人论文和代码实现分析和讲解

首先,我的系列原创教程Unleashing Robotics: Mastering Quaternion Kinematics with Python - (原创系列教程)还在继续,今天先插个我特别感兴趣的论文的技术分析和讲解,这个项目也在中文互联网大火的了一段时间。

同样本篇文章禁止转载,主要是为了有不同见解的同学可以方便联系我,我的邮箱 fanzexuan135@163.com

教授的讲座,年初农历新年假期回老家闲来无事,在B站翻译并上传了Chelsea Finn最新的讲座,感兴趣的捧个场点个赞。
大火斯坦福服务机器人ALOHA团队教授Chelsea Finn MIT讲座-Robot Learning
正文开始:

1. 项目概览

Mobile ALOHA是一个低成本、模块化的双臂移动操作机器人系统,包含创新的硬件设计和端到端模仿学习算法。它的目标是实现家庭和办公场景中的自主机器人辅助,如整理房间、烹饪、清洁等。

1.1 硬件系统

  • 双臂机器人ALOHA固定在自主移动底座上,配有机载电源与计算单元,实现了完全自主的移动操作。
  • 创新的全身遥操作方式:人直接背驱动机器人底座采集数据,直观高效。
  • 模块化可拆卸的结构设计方便运输与维护。
  • 整个系统造价约3.2万美元,远低于商用双臂移动机器人。

1.2 软件算法

  • 端到端模仿学习:将静态双臂操作数据与少量新采集的移动双臂操作数据协同训练,大幅提升模仿学习性能。
  • 该方法在ACT、Diffusion Policy、VINN等多种SOTA模仿学习算法上都取得了显著效果提升,展现了很好的普适性。
  • 在真实家庭和办公场景中执行了一系列复杂的双臂移动操作任务,如擦拭、做饭、开关橱柜、乘电梯等,展现出该系统的实用性。

2. 硬件系统设计

2.1 双臂机器人本体

项目采用了ALOHA双臂机器人作为操作本体。ALOHA每个手臂有6个自由度,末端带一个并联抓手。手臂采用了模块化、线缆驱动的设计,运动灵活且易于维护。两个手臂呈现人体手臂的自然姿态,有利于操作和扩大工作空间。

2.2 移动底座

ALOHA安装在一个全向轮式移动底座上,底盘采用了直径较大的Mecanum轮,机动性好,同时可以在底部安装配重提高稳定性。整个移动机器人系统可以在室内环境灵活移动。

2.3 机载供电与计算

为实现完全的自主作业,Mobile ALOHA搭载了大容量电池组和高性能工控机。电池组可提供数小时的续航能力。工控机配备英伟达3070Ti显卡,可以运行实时的视觉感知、运动规划、模仿学习等算法。

2.4 全身遥操作界面

项目设计了一种创新的全身遥操作方式来采集示教数据。操作者背部与机器人底座直接相连,通过前后左右移动自己的身体,就可以驱动机器人底座运动。同时,操作者的双手分别控制ALOHA两个机械臂的运动。这种方式简单直观,且提供了一定的力反馈。相比游戏手柄等其他遥操作界面,该方法可以实现手臂、底座的协同控制,获得更自然流畅的示教数据。

3. 端到端模仿学习

3.1 问题建模

在Mobile ALOHA项目中,模仿学习的目标是让机器人通过模仿人类专家的示教,学会执行各种双臂移动操作任务。这可以建模为一个马尔可夫决策过程(MDP):

  • 状态空间 S \mathcal{S} S:机器人关节角度、速度等本体感知和RGB图像、深度图等视觉观测。
  • 动作空间 A \mathcal{A} A:14维的机械臂关节角度和2维的底座线速度、角速度。
  • 转移函数 P \mathcal{P} P:机器人动力学模型和环境动力学模型,隐式地建模了状态之间的因果关系。
  • 奖励函数 R \mathcal{R} R:人类专家的示教轨迹可以视作隐式地指定了奖励函数,即认为专家轨迹在当前奖励函数下是最优的。

模仿学习的优化目标是学习一个策略 π θ ( a t ∣ s t ) \pi_{\theta}(\mathbf{a}_t|\mathbf{s}_t) πθ(atst)去拟合专家策略 π ∗ ( a t ∣ s t ) \pi^{*}(\mathbf{a}_t|\mathbf{s}_t) π(atst)。用极大似然估计来刻画这一目标:
max ⁡ θ E ( s t , a t ) ∼ π ∗ [ log ⁡ π θ ( a t ∣ s t ) ] \max_{\theta} \mathbb{E}_{(\mathbf{s}_{t},\mathbf{a}_{t})\sim\pi^{*}} [\log \pi_{\theta}(\mathbf{a}_t|\mathbf{s}_t)] θmaxE(st,at)π[logπθ(atst)]

其中 ( s t , a t ) (\mathbf{s}_t,\mathbf{a}_t) (st,at)为专家轨迹的状态-动作对。为了解决这一优化问题,需要设计合适的策略网络结构、损失函数和训练方法。项目尝试了多种SOTA模仿学习算法。

3.2 行为克隆(Behavior Cloning)

最简单的模仿学习方法是行为克隆,即用监督学习拟合专家的策略。策略网络以状态 s t \mathbf{s}_t st为输入,输出一个参数化的动作分布如高斯分布 π θ ( a t ∣ s t ) = N ( a t ∣ μ θ ( s t ) ,   σ θ 2 ( s t ) ) \pi_{\theta}(\mathbf{a}_t|\mathbf{s}_t)=\mathcal{N}(\mathbf{a}_t|\mu_{\theta}(\mathbf{s}_t),\,\sigma^{2}_{\theta}(\mathbf{s}_t)) πθ(atst)=N(atμθ(st),σθ2(st))

用最大似然估计可以得到优化目标:
L ( θ ) = ∑ t ∥ μ θ ( s t ) − a t ∥ 2 \mathcal{L}(\theta)=\sum_{t}\Vert \mu_{\theta}(\mathbf{s}_t)-\mathbf{a}_{t} \Vert^{2} L(θ)=tμθ(st)at2
即最小化策略网络输出的动作均值与专家动作之间的均方误差。

论文使用的CNNMLP策略网络就是这种思路,以ResNet18作为视觉Backbone提取图像特征,然后与机器人本体状态拼接,经过MLP输出预测的动作。网络可以端到端训练。

行为克隆的一个问题是难以处理长时间步的任务,因为小误差会随着时间步累积。一种改进是引入自回归机制,即在下一时刻的状态输入中加入上一时刻的动作输出,让网络考虑历史轨迹。

# CNNMLP策略网络定义
class CNNMLPPolicy(nn.Module):
    def __init__(self, args_override):
        super().__init__()
        model, optimizer = build_CNNMLP_model_and_optimizer(args_override)
        self.model = model # decoder
        self.optimizer = optimizer

    def __call__(self, qpos, image, actions=None, is_pad=None):
        env_state = None # TODO
        normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406],
                                         std=[0.229, 0.224, 0.225])
        image = normalize(image)
        if actions is not None: # training time
            actions = actions[:, 0]  
            a_hat = self.model(qpos, image, env_state, actions)
            mse = F.mse_loss(actions, a_hat)
            loss_dict = dict()
            loss_dict['mse'] = mse
            loss_dict['loss'] = loss_dict['mse']
            return loss_dict
        else: # inference time 
            a_hat = self.model(qpos, image, env_state) # no action, sample from prior
            return a_hat

3.3 GenerativeAdversarial Imitation Learning (GAIL)

GAIL将模仿学习问题转化为生成对抗学习,即训练一个生成器(策略网络)去生成与专家轨迹相似的状态-动作对,同时训练一个判别器去区分生成的轨迹和专家轨迹。

生成器 π θ \pi_{\theta} πθ以状态为输入,输出动作的概率分布。判别器 D ϕ D_{\phi} Dϕ以状态-动作对为输入,输出一个标量表示状态-动作对来自专家轨迹的概率。训练过程通过最小化如下的目标函数实现博弈:

min ⁡ θ max ⁡ ϕ E π θ [ log ⁡ ( D ϕ ( s , a ) ) ] + E π ∗ [ log ⁡ ( 1 − D ϕ ( s , a ) ) ] − λ H ( π θ ) \min_{\theta} \max_{\phi} \mathbb{E}_{\pi_{\theta}}[\log(D_{\phi}(\mathbf{s},\mathbf{a}))] + \mathbb{E}_{\pi^{*}}[\log(1-D_{\phi}(\mathbf{s},\mathbf{a}))] - \lambda H(\pi_{\theta}) θminϕmaxEπθ[log(Dϕ(s,a))]+Eπ[log(1Dϕ(s,a))]λH(πθ)

其中 H ( ⋅ ) H(\cdot) H()为策略的熵,是一个正则项。在实现时需要解决高维、连续动作空间的问题,通常采用某种形式的信任区域策略优化(TRPO)算法交替更新生成器和判别器。

GAIL利用了专家数据的隐式信息,不需要直接拟合动作,能更好处理多峰、高维动作分布。但是它需要与环境交互收集数据,针对Mobile ALOHA这样的实机环境代价较高。

# GAIL训练流程伪代码
Initialize generator pi_theta and discriminator D_phi
Initialize replay buffer B with expert trajectories

for i = 1, 2, ..., max_iter do:  
    # Generator update  
    Collect trajectories tau_i using pi_theta  
    Compute H(pi_theta)
    G_loss = E(log(D_phi(s,a))) - lambda*H(pi_theta)
    Update pi_theta via TRPO to minimize G_loss
    Add tau_i to B  
    # Discriminator update
    Sample state-action pairs (s, a) from B  
    Sample state-action pairs (s_e, a_e) from expert trajectories
    Compute D_loss = - (E(log D(s_e,a_e)) + E(log(1-D(s,a))))
    Update D_phi to minimize D_loss via SGD 
end for

3.4 Soft Q Imitation Learning (SQIL)

SQIL结合了模仿学习和强化学习,它学习专家策略同时也能进行探索。具体来说,它将模仿学习问题转化为一个稀疏奖励的强化学习问题,即专家轨迹的每个状态-动作对都有+1奖励,其他为0。这避免了对奖励函数的人工设计。

SQIL用Soft Actor-Critic (SAC)算法来解这个RL问题。SAC学习两个Q函数 Q ϕ 1 , Q ϕ 2 Q_{\phi_1},Q_{\phi_2} Qϕ1,Qϕ2来评估策略,以及一个策略网络 π θ \pi_{\theta} πθ。训练目标是最大化期望奖励和策略熵的和:
J π ( θ ) = E s t , a t ∼ π θ [ r ( s t , a t ) + α H ( π θ ( ⋅ ∣ s t ) ) ] J_{\pi}(\theta)=\mathbb{E}_{\mathbf{s}_{t},\mathbf{a}_{t}\sim\pi_{\theta}}[r(\mathbf{s}_{t},\mathbf{a}_{t})+\alpha H(\pi_{\theta}(\cdot|\mathbf{s}_{t}))] Jπ(θ)=Est,atπθ[r(st,at)+αH(πθ(st))]

而Q函数的训练目标是最小化Bellman误差:
J Q ( ϕ i ) = E s t , a t [ ( Q ϕ i ( s t , a t ) − ( r ( s t , a t ) + γ V ϕ ‾ ( s t + 1 ) ) ) 2 ] J_{Q}(\phi_i)=\mathbb{E}_{\mathbf{s}_{t},\mathbf{a}_{t}}[(Q_{\phi_i}(\mathbf{s}_{t},\mathbf{a}_{t})-(r(\mathbf{s}_{t},\mathbf{a}_{t})+\gamma V_{\overline{\phi}}(\mathbf{s}_{t+1})))^2] JQ(ϕi)=Est,at[(Qϕi(st,at)(r(st,at)+γVϕ(st+1)))2]

其中值函数 V ϕ ‾ V_{\overline{\phi}} Vϕ定义为状态下两个Q函数的最小值再减去策略熵。策略、Q函数、值函数轮流优化直到收敛。SAC在连续控制任务上表现优异,结合专家数据后能进一步提升采样效率。

SQIL需要与环境交互,但它允许策略偏离专家数据分布进行探索,对环境动力学的建模更鲁棒。

3.5 Adversarial Contrastive Tuning (ACT)

ACT引入了对比学习的思想来解决分布偏移问题。它不直接拟合动作,而是学习一个隐空间,使得专家数据在隐空间聚集、非专家数据发散。

策略网络包含一个编码器 f θ e n c f_{\theta_{enc}} fθenc和一个解码器 π θ d e c \pi_{\theta_{dec}} πθdec。编码器将状态映射到隐空间 z t = f θ e n c ( s t ) \mathbf{z}_t=f_{\theta_{enc}}(\mathbf{s}_t) zt=fθe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值