0. 引言

当我们谈论具身智能时,脑海中浮现的往往是波士顿动力的机器狗、特斯拉的人形机器人,或是各类工业机械臂。然而,一个国民级导航应用高德地图,却在这个赛道上取得了令人瞩目的成绩。高德推出的 ABot 全栈具身技术体系,不仅在 CVPR 2026 Video World Model Workshop 国际挑战赛中超越谷歌和英伟达,更在 WorldArena 全球排行榜上夺得第一名,横扫具身智能领域 15 项 SOTA 指标

在这里插入图片描述

在这里插入图片描述

这并非偶然的跨界尝试,而是一次深思熟虑的技术升维。高德从"为人类导航"升级到"为机器人构建物理世界操作系统",其背后的技术逻辑值得深入剖析。本文将从数据基础、模型架构、训练方法到实际应用,全面解读高德如何利用地图时代积累的核心能力,在具身智能领域实现技术突破。

在这里插入图片描述

1. 技术体系概览:三层架构构建完整闭环

高德 ABot 采用了从底层到应用层的全栈技术架构,这种设计理念确保了从数据生产到实际部署的完整闭环。整个体系分为三个核心层次,形成了一个自洽的技术生态系统。

在这里插入图片描述

1.1 数据层:ABot-World 可交互世界模型

这是整个体系的基石,包含两大核心引擎。ABot-3DGS 作为"数字孪生工厂",负责将真实世界的物理空间转化为可编程的训练环境;ABot-PhysWorld 作为"物理思维引擎",确保生成的数据符合真实物理规律。这一层解决的是具身智能最根本的问题:如何让机器人理解真实物理世界的运作规律。

数据层的核心价值在于构建了一个可交互、可验证、可扩展的虚拟物理世界。与传统的静态数据集不同,ABot-World 能够根据机器人的动作实时生成反馈,形成闭环的交互式学习环境。这种动态数据生成能力,使得模型能够在无限多样的场景中进行训练,而不受真实世界数据采集成本的限制。

在这里插入图片描述

1.2 模型层:导航与执行双基座模型

在数据层之上,高德构建了两个专门化的基座模型。ABot-N 导航基座模型专注于路径规划和空间理解,能够处理从室外到室内的跨场景导航任务;ABot-M 执行基座模型则负责具体的动作生成和控制,将高层指令转化为精确的关节控制信号。这种分工明确的设计,使得系统能够同时处理宏观的导航决策和微观的动作执行,避免了端到端模型在复杂任务中的性能瓶颈。

双基座模型的设计理念源于人类认知系统的分层处理机制。导航模型类似于人类的空间认知系统,负责"去哪里"的决策;执行模型类似于运动控制系统,负责"怎么去"的实现。这种分层设计不仅提高了模型的可解释性,也使得系统能够更灵活地适应不同的机器人平台和任务需求。

在这里插入图片描述

1.3 应用层:ABot-Claw 机器人操作系统

最上层是面向实际应用的操作系统,它将底层的模型能力封装成易于调用的接口,支持不同形态的机器人快速接入。ABot-Claw 提供了统一的 API 规范,使得开发者无需深入了解底层模型的实现细节,就能够快速构建具身智能应用。这种设计理念类似于 Android 系统对移动设备的支持,降低了具身智能应用的开发门槛,加速了技术的产业化进程。

在这里插入图片描述

2. 核心突破:从视觉渲染到物理推演的范式转变

2.1 传统方法的困境

当前主流的世界模型大多基于视觉渲染范式,其核心目标是生成"看起来像"的视频内容。这些模型通过学习大量视频数据中的像素分布,能够生成视觉上逼真的画面。然而,这种方法存在致命缺陷:它们只关注表面的视觉相似性,而忽略了物理世界的内在规律。

具体表现为三类典型错误:物体穿透现象(机械臂直接穿过桌面)、无接触抓取(夹爪未接触物体就完成了抓取)、反重力运动(物体悬浮在空中)。这些违反物理常识的行为,使得模型生成的数据无法用于训练真实的机器人系统。即使视觉效果再逼真,一旦部署到实际环境中,机器人也会因为学习了错误的物理关系而频繁失败。

传统视觉渲染模型的根本问题在于,它们将视频生成视为一个纯粹的像素预测问题,而非物理状态演化问题。模型学习的是"什么样的像素序列在统计上更可能出现",而不是"物体在物理规律约束下应该如何运动"。这种方法论上的偏差,导致生成的视频虽然在视觉上连贯,但在物理上却是荒谬的。

2.2 高德的解决方案:可微分物理引擎

高德 ABot-PhysWorld 采用了完全不同的技术路线,实现了从"视觉渲染范式"向"可微分物理引擎范式"的根本性迁移。这个 140 亿参数的 Diffusion Transformer 模型,其核心创新在于将物理规律嵌入到生成过程中。

在这里插入图片描述

模型的输出不再是简单的像素矩阵,而是包含质量、接触力场、惯性张量的可微分物理状态快照。每一帧画面都对应着一个完整的物理状态描述,包括物体的位置、速度、加速度,以及相互之间的作用力。这种设计使得模型能够进行真正的物理推演,而不是表面的视觉模拟。

以下是 ABot-PhysWorld 的实际推理代码,展示了如何加载模型并生成物理一致的视频:

#!/usr/bin/env python3
"""
ABot-PhysWorld 推理脚本
基于 Wan2.1-I2V-14B-480P 模型的图像到视频生成
"""
import torch
from PIL import Image
from diffsynth import save_video
from diffsynth.pipelines.wan_video_new import WanVideoPipeline, ModelConfig
from diffsynth.models.utils import load_state_dict

# ModelScope 模型标识
MODELSCOPE_MODEL_ID = "amap_cvlab/Abot-PhysWorld"
CHECKPOINT_FILENAME = "step-2400.safetensors"

def load_pipeline(device="cuda"):
    """加载 Wan2.1-I2V-14B-480P 基础流水线"""
    print("正在加载 Wan2.1-I2V-14B-480P 基础模型...")
    pipe = WanVideoPipeline.from_pretrained(
        torch_dtype=torch.bfloat16,
        device=device,
        model_configs=[
            # DiT 扩散模型(140亿参数)
            ModelConfig(
                model_id="Wan-AI/Wan2.1-I2V-14B-480P",
                origin_file_pattern="diffusion_pytorch_model*.safetensors",
                offload_device="cpu",
            ),
            # T5 文本编码器
            ModelConfig(
                model_id="Wan-AI/Wan2.1-I2V-14B-480P",
                origin_file_pattern="models_t5_umt5-xxl-enc-bf16.pth",
                offload_device="cpu",
            ),
            # VAE 视频编码器
            ModelConfig(
                model_id="Wan-AI/Wan2.1-I2V-14B-480P",
                origin_file_pattern="Wan2.1_VAE.pth",
                offload_device="cpu",
            ),
            # CLIP 图像编码器
            ModelConfig(
                model_id="Wan-AI/Wan2.1-I2V-14B-480P",
                origin_file_pattern="models_clip_open-clip-xlm-roberta-large-vit-huge-14.pth",
                offload_device="cpu",
            ),
        ],
    )
    return pipe

def load_checkpoint(pipe, checkpoint_path):
    """加载 ABot-PhysWorld 微调检查点"""
    print(f"正在加载 ABot-PhysWorld 检查点: {checkpoint_path}")
    checkpoint_state_dict = load_state_dict(checkpoint_path)
    print(f"  检查点包含 {len(checkpoint_state_dict)} 个参数键")

    # 加载到 DiT 模型中
    missing_keys, unexpected_keys = pipe.dit.load_state_dict(
        checkpoint_state_dict, strict=False
    )
    print(f"  已加载 - 缺失键: {len(missing_keys)}, 意外键: {len(unexpected_keys)}")

def generate_video(
    pipe,
    input_image,
    prompt,
    negative_prompt="静态,细节模糊不清,最差质量,低质量,畸形的",
    height=480,
    width=832,
    num_frames=81,
    num_inference_steps=50,
    cfg_scale=5.0,
    seed=0,
    tiled=True,
):
    """从输入图像和文本提示生成视频"""
    if input_image.size != (width, height):
        input_image = input_image.resize((width, height), Image.Resampling.LANCZOS)

    # 调用流水线生成视频
    video = pipe(
        prompt=prompt,
        negative_prompt=negative_prompt,
        input_image=input_image,
        height=height,
        width=width,
        num_frames=num_frames,
        num_inference_steps=num_inference_steps,
        cfg_scale=cfg_scale,
        seed=seed,
        tiled=tiled,
    )
    return video

这段代码展示了 ABot-PhysWorld 的核心架构:140 亿参数的 DiT(Diffusion Transformer)模型作为物理推理引擎,配合 T5 文本编码器理解任务指令,VAE 编码器处理视频特征,CLIP 图像编码器提取视觉语义。整个流水线使用 bfloat16 混合精度训练,支持 CPU offload 机制以优化显存使用。

在这里插入图片描述

这种物理优先的设计带来了三个关键优势。首先是动作可控性,给定一个动作指令(如"下降 5 厘米、夹爪闭合"),模型能够精准计算出接下来会发生什么,而不是依靠"猜测"。其次是零样本泛化能力,即使遇到从未见过的物体或机器人,模型也能根据质量、摩擦、惯性等通用物理规律做出合理判断。最后是物理合规性,生成的每一帧都严格遵守牛顿力学定律,杜绝了低级物理错误。

3. 数据生产:从真实世界到训练材料的完整流程

3.1 ABot-3DGS:可编程的数字孪生工厂

传统的机器人训练数据采集方式面临三大困境:成本高昂(需要大量人力和设备)、效率低下(采集速度远跟不上需求)、覆盖不全(难以覆盖长尾场景)。高德通过 ABot-3DGS 系统性地解决了这些问题。

该系统以高德积累的厘米级城市、道路、室内空间数据为基础,结合前沿的 3D Gaussian Splatting 技术,构建可编程的数字孪生空间。关键在于"可编程"三个字,这意味着数据生产不再受制于物理世界的采集条件。任意视角、光照条件、遮挡状态都可以通过编程直接生成,机器人形态也能灵活切换,不同执行体之间的差异被系统性抹平。

在这里插入图片描述

更重要的是,这套体系能够系统性补齐长尾交互场景。通过大规模组合与仿真,那些机器人容易"翻车"的极端情况、突发干扰都能提前构造出来,最终将场景覆盖率推到 99%。这意味着模型在训练阶段就已经"见过"并"练过"了绝大多数可能出现的情况,大幅降低了实际部署时的失败率。

数据生产的三步流程:

第一步是"翻译",将原始数据转换成机器可读的多模态 Clip。以骑车经过路口为例,高德记录的不只是一张静态图片,而是一整套结构化信息:路口的视觉外观(图像)、红绿灯的空间位置(坐标)、当前的交通状态(红灯或绿灯)、行为意图(直行或转弯),以及周围的动态元素(行人、车辆)。所有信息打包形成一个完整的 Clip,而高德手中拥有千万级规模的此类数据。

第二步是"重建",利用这些多模态 Clip 重建三维场景。ABot-3DGS 能够将路口、街道、商场等地方重建成万级规模的 3D 真实场景。由于前一步获取的信息自带物理规则和空间逻辑,重建出的数字场景也都是"活"的,每个物体都被赋予了质量、摩擦系数等物理属性,从一开始就构成一个可计算、可干预的物理环境。

第三步是"Run",将机器人放入重建的场景中实际运行。通过编程改变参数(如调整物体质量、地面摩擦系数),可以模拟各种不同的物理条件。机器人在这些场景中走一遍、做一遍,千万级训练轨迹数据就这样批量生成。这种方法的效率远超传统的人工采集,且数据质量更高、覆盖面更广。

3.2 ABot-PhysWorld:物理思维引擎的训练策略

有了大规模的场景数据,下一个挑战是如何让模型真正"懂物理"。ABot-PhysWorld 基于 140 亿参数的 Diffusion Transformer 架构,通过三个维度的创新实现了物理对齐。

以下是 ABot-PhysWorld 的实际训练代码,展示了如何进行全参数微调:

#!/usr/bin/env python3
"""
ABot-PhysWorld 训练脚本
全参数 SFT 训练 Wan2.1-I2V-14B-480P 模型
"""
import torch
from diffsynth import load_state_dict
from diffsynth.pipelines.wan_video_new import WanVideoPipeline, ModelConfig
from diffsynth.trainers.utils import DiffusionTrainingModule

class WanTrainingModule(DiffusionTrainingModule):
    """Wan2.1-I2V-14B 视频生成模型的训练模块"""

    def __init__(
        self,
        model_paths=None,
        trainable_models=None,
        use_gradient_checkpointing=True,
        save_encoded_cache=False,
        encoded_cache_dir=None,
        skip_vae=False,
        skip_text_encoder=False,
        realtime_text_encode=False,
        max_timestep_boundary=1.0,
        min_timestep_boundary=0.0,
    ):
        super().__init__()

        # 实时文本编码模式:保持文本编码器加载
        if realtime_text_encode and skip_text_encoder:
            print("=" * 60)
            print("警告: realtime_text_encode=True 但 skip_text_encoder=True")
            print("  实时文本编码需要文本编码器,禁用 skip_text_encoder")
            print("=" * 60)
            skip_text_encoder = False

        # 解析模型配置
        model_configs = self.parse_model_configs(
            model_paths, enable_fp8_training=False
        )

        # 过滤掉需要跳过的模型(用于缓存训练)
        if skip_vae or skip_text_encoder:
            filtered_configs = []
            skipped_models = []

            for config in model_configs:
                pattern = config.origin_file_pattern if hasattr(config, 'origin_file_pattern') else ""

                if skip_vae and "VAE" in pattern:
                    skipped_models.append(f"VAE ({pattern})")
                    continue
                if skip_text_encoder and ("t5" in pattern.lower() or "text" in pattern.lower()):
                    skipped_models.append(f"TextEncoder ({pattern})")
                    continue

                filtered_configs.append(config)

            if skipped_models:
                print("=" * 60)
                print("[缓存训练模式] 跳过以下模型以节省显存:")
                for model in skipped_models:
                    print(f"   - {model}")
                print("=" * 60)

            model_configs = filtered_configs

        # 加载模型
        self.pipe = WanVideoPipeline.from_pretrained(
            torch_dtype=torch.bfloat16,
            device="cpu",
            model_configs=model_configs,
        )

        # 设置训练模式
        self.switch_pipe_to_training_mode(
            self.pipe,
            trainable_models,
            enable_fp8_training=False,
        )

        # 存储配置
        self.use_gradient_checkpointing = use_gradient_checkpointing
        self.max_timestep_boundary = max_timestep_boundary
        self.min_timestep_boundary = min_timestep_boundary

        # 编码缓存配置
        self.save_encoded_cache = save_encoded_cache
        self.encoded_cache_dir = encoded_cache_dir
        self.cache_index = {}

        if self.save_encoded_cache and self.encoded_cache_dir:
            from pathlib import Path
            Path(self.encoded_cache_dir).mkdir(parents=True, exist_ok=True)
            print(f"编码缓存模式已启用,保存目录: {self.encoded_cache_dir}")

        self.skip_vae = skip_vae
        self.skip_text_encoder = skip_text_encoder
        self.realtime_text_encode = realtime_text_encode

        if self.realtime_text_encode:
            print("=" * 60)
            print("[实时文本编码模式] 已启用:")
            print("   - 使用缓存的视频特征 (input_latents, y, clip_feature)")
            print("   - 从 JSONL 读取新提示词并实时编码文本")
            print("   - 使用场景: 视频不变,但标注重新标注")
            print("=" * 60)

这段代码展示了 ABot-PhysWorld 训练的核心特性:

  1. 全参数微调(Full-parameter SFT):不同于 LoRA 等参数高效方法,ABot-PhysWorld 对 140 亿参数进行全量训练,确保模型能够深度学习物理规律。

  2. DeepSpeed ZeRO-2 分布式训练:通过 Accelerate 框架集成 DeepSpeed,支持多 GPU 并行训练,优化显存使用。

  3. 编码特征缓存:支持保存和加载 VAE、T5、CLIP 的编码结果,大幅加速训练过程。对于视频不变但标注更新的场景,可以跳过视频编码,只重新编码文本。

  4. 实时文本编码模式:当视频特征已缓存时,可以动态读取新的文本提示词并实时编码,适用于数据标注迭代优化的场景。

  5. 梯度检查点(Gradient Checkpointing):通过重计算中间激活值来节省显存,使得在有限的硬件资源下也能训练大模型。

数据层面:四层级物理语义结构

高德精选了 300 万条真实操作视频,采用 VLM(视觉语言模型)和 LLM(大语言模型)双阶段标注,构建了四层级物理语义结构。这种标注方式不仅告诉模型"发生了什么",更重要的是解释"为什么发生"。

**宏观层(意图)**使用自然语言描述整体任务目标,如"抓取并放置苹果"。这一层提供了任务的高层语义理解,帮助模型建立目标导向的认知。通过理解任务意图,模型能够在执行过程中保持目标一致性,避免出现动作正确但目标偏离的情况。

**中观层(动作序列)**采用动词-名词短语序列表示,如"接近→抓握→提起→移动→释放"。这种结构化表示将复杂任务分解为可执行的原子动作,便于模型学习动作之间的因果关系。每个动作都有明确的前置条件和后置效果,形成了一个完整的动作链。

**微观层(轨迹细节)**记录笛卡尔轨迹、相对运动、夹爪状态等精确信息,如"末端沿 Z 轴下降 5cm,夹爪闭合至 20mm"。这一层提供了动作执行的具体参数,确保模型能够生成精确的控制指令。这些精确的数值信息是实现高精度操作的关键。

**场景层(物理关系)**描述接触、支撑、包含关系及任务结果,如"苹果与桌面接触,被夹爪稳固抓握,成功放置于袋中"。这一层明确了物体之间的物理交互关系,是物理推理的关键。通过学习这些物理关系,模型能够理解动作如何改变物体的状态。

# 四层级物理语义标注示例
annotation = {
    'macro': {
        'intent': '抓取并放置苹果',
        'goal': '将苹果从桌面移动到袋子中'
    },
    'meso': {
        'action_sequence': [
            {'action': 'approach', 'target': 'apple'},
            {'action': 'grasp', 'target': 'apple'},
            {'action': 'lift', 'height': 0.1},
            {'action': 'move', 'destination': 'bag'},
            {'action': 'release', 'target': 'apple'}
        ]
    },
    'micro': {
        'trajectory': [
            {'time': 0.0, 'position': [0.3, 0.2, 0.5], 'gripper': 'open'},
            {'time': 1.0, 'position': [0.3, 0.2, 0.45], 'gripper': 'closing'},
            {'time': 2.0, 'position': [0.3, 0.2, 0.45], 'gripper': 'closed'},
            {'time': 3.0, 'position': [0.3, 0.2, 0.55], 'gripper': 'closed'},
            # ... 更多轨迹点
        ]
    },
    'scene': {
        'physical_relations': [
            {'type': 'contact', 'objects': ['apple', 'table'], 'time': 0.0},
            {'type': 'grasp', 'objects': ['gripper', 'apple'], 'time': 2.0},
            {'type': 'support', 'objects': ['gripper', 'apple'], 'time': 3.0},
            {'type': 'contain', 'objects': ['bag', 'apple'], 'time': 5.0}
        ],
        'task_result': 'success'
    }
}

训练层面:物理判别机制取代像素优化

传统的**最大似然估计(MLE)**方法只关心"画面对不对",通过最小化预测帧与真实帧之间的像素差异来优化模型。这种方法的问题在于,像素相似并不等于物理正确。一个物体可能在视觉上看起来很真实,但其运动轨迹却违反了物理定律。

高德引入了物理判别机制,将优化目标从"像素相似度"转向"物理一致性"。该机制包含两个核心组件:

Proposer 模块负责根据当前任务生成物理规则清单。对于抓取任务,它会列出"夹爪必须接触物体才能抓取"、“物体受重力作用会下落”、"刚体不能相互穿透"等规则。这些规则来自物理学的基本定律,是不可违反的硬约束。Proposer 的设计基于物理引擎的约束求解器,能够自动推导出任务相关的物理约束。

Scorer 模块对模型生成的多个候选结果逐帧打分。它会检查每一帧是否违反了 Proposer 列出的物理规则,物理正确的帧获得高分,违反物理的帧被扣分。这种评分机制确保了模型学习的是真实的物理规律,而不是表面的视觉模式。Scorer 使用可微分的物理仿真器来计算物理一致性得分。

在此基础上,高德采用 Diffusion-DPO(Direct Preference Optimization)强化学习方法,将物理判别的结果作为奖励信号。物理正确的生成结果获得正向奖励,物理错误的结果受到惩罚。经过反复训练,模型自然学会了"什么动作不违反物理",从根源上消除了低级物理错误。这种方法避免了传统强化学习中的值函数估计问题,直接优化策略的偏好排序。

# 物理判别机制实现示例
class PhysicsDiscriminator:
    def __init__(self):
        self.proposer = PhysicsProposer()  # 生成物理规则
        self.scorer = PhysicsScorer()  # 评分模块

    def generate_physics_checklist(self, task_description):
        """Proposer:生成物理规则清单"""
        checklist = []
        if 'grasp' in task_description:
            checklist.append({
                'rule': 'contact_before_grasp',
                'description': '夹爪必须接触物体才能抓取',
                'check': lambda frame: self.check_contact(frame, 'gripper', 'object')
            })
            checklist.append({
                'rule': 'no_penetration',
                'description': '夹爪不能穿透物体',
                'check': lambda frame: not self.check_penetration(frame)
            })
        if 'lift' in task_description:
            checklist.append({
                'rule': 'gravity_effect',
                'description': '物体受重力作用',
                'check': lambda frame: self.check_gravity(frame)
            })
        return checklist

    def score_generated_video(self, video_frames, checklist):
        """Scorer:对生成的视频评分"""
        scores = []
        for frame in video_frames:
            frame_score = 0
            for rule in checklist:
                if rule['check'](frame):
                    frame_score += 1.0  # 符合物理规则
                else:
                    frame_score -= 1.0  # 违反物理规则
            scores.append(frame_score)
        return np.mean(scores)

# Diffusion-DPO 训练流程
def train_with_physics_dpo(model, dataset):
    for batch in dataset:
        # 生成多个候选结果
        candidates = model.generate_multiple(batch, num_candidates=4)

        # 物理判别评分
        checklist = discriminator.generate_physics_checklist(batch['task'])
        scores = [discriminator.score_generated_video(c, checklist)
                  for c in candidates]

        # 选择最佳和最差候选
        best_idx = np.argmax(scores)
        worst_idx = np.argmin(scores)

        # DPO 损失:增大最佳候选概率,降低最差候选概率
        loss = -log_prob(candidates[best_idx]) + log_prob(candidates[worst_idx])
        loss.backward()
        optimizer.step()

输出层面:可微分物理状态与动作条件化推演

ABot-PhysWorld 的每一帧输出不仅包含像素信息,更重要的是包含完整的物理状态描述。这种设计支持"动作条件化推演",即给定一个动作指令,模型能够精准计算出未来的物理状态变化。

这种能力带来了零样本泛化的可能。当遇到从未见过的物体或机器人时,模型不需要重新训练,而是根据物体的质量、摩擦系数、惯性等通用物理属性,直接推演出合理的交互结果。这是因为物理定律是普适的,不依赖于具体的物体形态。

在这里插入图片描述

3.3 闭环进化:从预测到执行的自我修正

ABot-World 不是一个静态模型,而是具备自我修正能力的认知基座。它支持完整的 VLA(Vision-Language-Action)闭环:预测→执行→反馈→自我修正。

具体工作流程如下:机器人根据 ABot-World 的推演结果生成动作计划,在真实环境中执行该计划,传感器记录实际执行结果,将预测与实际的误差回传给模型。模型根据这个误差信号自动调整内部参数,使得下次预测更加精准。

举例来说,机器人根据模型推演去抓取一个杯子,预测显示夹爪闭合到 15mm 就能稳固抓取。但实际执行中,由于杯子表面比预期更光滑,夹爪在 15mm 时发生了滑脱。这个失败信号立即回传给 ABot-PhysWorld,模型识别出是摩擦系数估计偏高,自动调整该类表面的摩擦参数。下次遇到类似光滑表面时,模型会预测需要更大的夹持力或更小的夹爪开度。

这种自生长、自修正、自适应的能力,意味着机器人不再完全依赖人类演示,而是能够在真实环境中持续进化。随着交互次数的增加,模型对物理世界的理解会越来越准确,这正是 AGI 时代机器人应有的"操作系统级"能力。

# VLA 闭环自我修正机制
class VLAClosedLoop:
    def __init__(self, world_model, robot):
        self.world_model = world_model
        self.robot = robot
        self.experience_buffer = []

    def execute_with_feedback(self, task):
        # 1. 预测阶段
        predicted_trajectory = self.world_model.predict(
            current_observation=self.robot.get_observation(),
            task_description=task
        )

        # 2. 执行阶段
        actual_trajectory = self.robot.execute(predicted_trajectory)

        # 3. 反馈阶段
        execution_result = self.robot.get_execution_result()
        prediction_error = self.compute_error(
            predicted_trajectory,
            actual_trajectory
        )

        # 4. 自我修正阶段
        if execution_result['success'] == False:
            # 分析失败原因
            failure_analysis = self.analyze_failure(
                predicted_trajectory,
                actual_trajectory,
                execution_result
            )

            # 更新物理参数
            if failure_analysis['type'] == 'friction_mismatch':
                self.world_model.update_friction_model(
                    object_type=execution_result['object'],
                    new_friction=failure_analysis['estimated_friction']
                )
            elif failure_analysis['type'] == 'mass_mismatch':
                self.world_model.update_mass_model(
                    object_type=execution_result['object'],
                    new_mass=failure_analysis['estimated_mass']
                )

            # 存储经验用于后续学习
            self.experience_buffer.append({
                'prediction': predicted_trajectory,
                'actual': actual_trajectory,
                'error': prediction_error,
                'correction': failure_analysis
            })

        return execution_result

    def continuous_improvement(self):
        """基于累积经验持续改进模型"""
        if len(self.experience_buffer) >= batch_size:
            batch = sample(self.experience_buffer, batch_size)
            self.world_model.fine_tune(batch)
            self.experience_buffer.clear()

4. 实际应用:从实验室到真实世界

4.1 导盲机器狗:精准导航的实战验证

北京亦庄机器人半马活动中,高德展示了搭载 ABot 系统的四足机器狗,它能够帮助盲人朋友走出家门,实现精准导航。这个应用场景完美体现了高德技术的实用价值,也是具身智能从实验室走向真实世界的重要里程碑。

导盲任务对导航精度要求极高。机器狗不仅要规划出一条可行路径,还要实时感知环境变化(行人、车辆、障碍物),做出安全决策。更重要的是,它要理解城市环境的语义信息:人行横道在哪里、红绿灯状态如何、哪里有台阶需要提醒。这些看似简单的任务,对机器人来说却是巨大的挑战。

高德的 POI 数据和语义地图在这里发挥了关键作用。机器狗知道"前方 20 米是人行横道,当前红灯,需要等待",而不是简单地"前方有障碍物,停止"。这种语义理解能力,使得机器狗的行为更符合人类的预期,用户体验也更好。导盲机器狗的成功部署,证明了 ABot 系统在复杂真实环境中的可靠性和实用性。

在这里插入图片描述

4.2 室内外无缝衔接:BridgeNav 解决最后一公里

高德还推出了 BridgeNav 框架,专门解决从室外到室内的"最后一公里"导航问题。这是一个长期被忽视但极其重要的场景:外卖配送、快递投递、机器人接待等应用,都需要机器人从室外街道精确进入建筑物内部。

在这里插入图片描述

传统方法依赖精确的 GPS 坐标或预先构建的语义地图,但这些信息在实际场景中往往不可用或不准确。GPS 精度通常只能到 5-10 米,无法指导机器人找到具体的入口。而预先构建语义地图成本高昂,且难以应对环境变化。每次建筑物装修、店铺更换,地图就需要重新采集,维护成本极高。

BridgeNav 采用纯视觉驱动的方法,机器人只需要自车视角的观测图像和简单的文字指令(如"去星巴克"),就能完成从室外到室内的导航。系统包含三个核心模块:

潜在意图推断模块(Latent Intention Inference):根据机器人与目标的距离,动态调整注意力焦点。远距离时关注全局图像与指令的匹配,判断目标是否在视野内;中距离时锁定显眼的标志物(如招牌),确定行进方向;近距离时精确定位入口或门,避免"临门找不到门"的尴尬。这种分层注意力机制模拟了人类导航的认知过程。

光流引导的动态感知模块(Optical Flow Guided Perception):让机器人理解"自己动一下,眼前的画面会怎么变"。通过轻量级光流估计网络 RAFT 计算连续帧之间的密集光流场,筛选出受运动影响最大的区域进行重点学习。这种"想象未来"的能力,帮助机器人提前预判,减少导航偏差。动态感知使得机器人能够在移动中持续优化路径。

轨迹条件视频生成(Trajectory-Conditioned Video Generation):为了解决训练数据噪声大的问题,BridgeNav 采用生成式扩散模型合成物理对齐的数据。先用单目几何估计构建局部占用网格,用 A 算法*规划无障碍路径,再用扩散模型生成符合物理约束的视频序列。这种方法生成的数据质量高、覆盖面广,有效补充了真实数据的不足。

# BridgeNav 核心模块实现
class BridgeNav:
    def __init__(self):
        self.intention_module = LatentIntentionInference()
        self.perception_module = OpticalFlowGuidedPerception()
        self.multimodal_llm = Qwen2_5_VL_3B()

    def navigate(self, observation, instruction):
        """执行导航决策"""
        # 1. 潜在意图推断:确定当前应该关注什么
        salient_regions = self.intention_module.infer(
            observation,
            instruction,
            distance_to_target=self.estimate_distance(observation, instruction)
        )

        # 2. 动态感知:预测运动对视觉的影响
        future_changes = self.perception_module.predict_changes(
            current_observation=observation,
            candidate_actions=self.generate_candidate_actions()
        )

        # 3. 多模态融合:整合视觉、语言、动作信息
        decision = self.multimodal_llm.decide(
            visual_tokens=self.encode_visual(observation, salient_regions),
            language_tokens=self.encode_language(instruction),
            dynamic_tokens=future_changes
        )

        return decision['waypoints']

    def estimate_distance(self, observation, instruction):
        """估计与目标的距离,用于调整注意力策略"""
        target_in_view = self.detect_target(observation, instruction)
        if not target_in_view:
            return 'far'  # 目标不在视野内

        target_size = target_in_view['bbox_area'] / observation.size
        if target_size > 0.3:
            return 'near'  # 目标占据大部分视野
        elif target_size > 0.1:
            return 'medium'  # 目标清晰可见
        else:
            return 'far'  # 目标较小

class LatentIntentionInference:
    def infer(self, observation, instruction, distance_to_target):
        """根据距离动态调整注意力"""
        if distance_to_target == 'far':
            # 远距离:关注全局匹配
            return self.global_matching(observation, instruction)
        elif distance_to_target == 'medium':
            # 中距离:关注标志物(招牌)
            return self.detect_signage(observation, instruction)
        else:
            # 近距离:关注入口
            return self.detect_entrance(observation, instruction)

在 BridgeNav 数据集上的实验表明,该方法在成功率和路径效率上都显著优于现有基线方法。更重要的是,它不依赖任何外部先验信息,具有很强的实用性。

4.3 跨机器人平台泛化:真正的零样本能力

ABot-PhysWorld 最令人印象深刻的能力是跨机器人平台的零样本泛化。在 EZS-Bench 基准测试中,模型面对的是完全未见过的机器人形态、任务类型和场景组合。

例如,模型在训练时只见过单臂 Franka 机器人抓取刚性物体,但在测试时需要控制双臂机器人折叠毛巾。这涉及到完全不同的运动学结构(单臂 vs 双臂)、物体属性(刚性 vs 柔性)和任务逻辑(抓取 vs 折叠)。传统方法在这种情况下几乎完全失效,因为它们学习的是特定机器人-任务组合的模式,而不是通用的物理规律。

ABot-PhysWorld 却能够生成物理合理的折叠动作序列:两个机械臂协调运动,避免碰撞;毛巾在抓取点产生真实的形变;折叠过程中保持接触,没有穿透或悬浮。这是因为模型理解了布料的柔性力学双臂协调的约束条件、以及折叠任务的物理本质

类似的零样本能力在多个场景中得到验证:

可变形物体操作:双臂折叠毛巾,布料形变真实,双臂运动协调流畅。模型理解了柔性材料的应力-应变关系,能够预测布料在不同抓取点的形变模式。

精细操作:堆叠杯子、搭建积木、放置刀具,不同形状、重量、摩擦系数的物体都能正确处理。模型能够根据物体的物理属性调整抓取力度和放置策略。

铰接物体交互:打开柜门,正确施加旋转力矩,运动遵循铰链约束。模型理解了旋转关节的运动学约束,能够生成符合约束的轨迹。

流体交互:双臂倒水,倾斜角度和时机控制准确,液体转移过程视觉连贯。虽然流体模拟极其复杂,但模型学会了液体流动的基本规律。

清洁任务:擦拭污渍,保持工具与表面接触,系统性覆盖目标区域。模型理解了接触力的维持和路径规划的策略。

多场景泛化:在不同背景、光照、物体变化下,稳定完成水果分拣任务。模型的物理推理能力不受视觉外观变化的干扰。

这些能力的实现,依赖于模型对物理规律的深刻理解。它不是记忆训练数据中的具体案例,而是学会了质量、惯性、摩擦、弹性等物理属性如何影响物体的运动。这种通用的物理知识,可以迁移到任何新的机器人-任务-场景组合中,这才是真正的智能。

5. ABot-Claw:统一的机器人操作系统

当前具身智能系统面临一个结构性断层VLA(视觉-语言-动作)架构赋予机器人强大的感知与直觉响应能力,但其开环特性长期记忆建模的缺失,使其难以应对复杂长程任务。引入 System 2 认知机制的代理框架虽能改进规划与推理,却多运行于封闭沙箱,依赖预定义工具集,缺乏对真实系统的直接控制。

阿里巴巴 AMAP CV Lab 推出的 ABot-Claw,以 OpenClaw 本地化运行时为基础执行核心,通过三项关键技术整合,构建从高层意图到低层动作的端到端闭环,形成可在开放动态环境中持续学习、适应与进化的具身智能框架。

…详情请参照古月居

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐