你有没有在游乐场的驾驶模拟器上开过车?那台机器有方向盘、油门、刹车,屏幕上是逼真的城市街道。你在里面狂飙、漂移、撞护栏,玩得不亦乐乎。然后你信心满满地坐进真车,一脚油门下去——熄火了。 为什么?因为模拟器里的方向盘没有手感反馈,油门响应是假的,撞车不会真的心疼。这种“游戏厅开得好,上路就抓瞎”的尴尬,正是机器人领域最头疼的问题:我们在仿真环境里训练一个AI策略,它表现得堪称完美,可一旦部署到真实机器人身上,立刻变得笨手笨脚。这个虚拟与现实之间的鸿沟,业内叫reality gap(现实差距)。 MuJoCo就是那座横跨鸿沟的桥梁。它是DeepMind开源的物理引擎,像一个超级逼真的驾驶模拟器,能精确模拟机器人每个关节的受力、摩擦、碰撞。而Sim2Real(Simulation to Reality,从仿真到现实)则是一整套方法论,告诉我们怎么在模拟器里练出一个“真·老司机”,而不是只会打游戏的“键盘车神”。 这篇文章,我们就用“驾校练车”这个再熟悉不过的故事,把MuJoCo和Sim2Real的来龙去脉讲清楚。从物理引擎的建模原理,到现实差距怎么弥合,再到域随机化这个“驾校教练的终极教学法”,最后给你一套从仿真走向实车的完整作战地图。

岗位关联

如果你正在做具身智能或机器人研究,掌握MuJoCo与Sim2Real就是打通“仿真训练”与“真实部署”的关键技能。这是从学术Demo走向产品落地的必修课,也是具身智能岗位面试中几乎必考的核心知识。

目录
  1. 可视化演示
  2. 物理仿真原理
  3. 刚体建模方法
  4. 力矩控制核心
  5. Sim2Real迁移
  6. 域随机化策略
  7. 部署最佳实践
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示MuJoCo物理引擎的接触力学与关节约束仿真,以及Sim2Real迁移流程:仿真训练、域随机化到真实部署,支持双模式切换。

本节配有交互动效(进入视口后自动加载,约 3KB)。

物理仿真:接触力学与关节约束 软接触模型通过凸优化求解惩罚力 法向力F_n与摩擦力f实时计算 F_contact = K·penetration + D·velocity MuJoCo采用软接触不强制硬约束,支持快速求解。

物理仿真原理

还记得游乐园里那台驾驶模拟器的方向盘吗?你打半圈,车轮就转了;踩下油门,屏幕里的速度表就飙升。但你有没有想过——为什么方向盘打半圈,轮子正好转那个角度?为什么油门踩到底,加速度是那个值而不是别的?因为模拟器里有一套物理规则在背后精确计算:你给油门,引擎就输出扭矩,扭矩克服摩擦驱动车轮,车轮滚动带着车身前进。这就是MuJoCo做的事:在虚拟世界里充当物理规则的执行者。

MuJoCo(Multi-Joint dynamics with Contact,多关节接触动力学)的底层是牛顿力学。想象一辆车在坡道上,它受到三个力:重力把车往下拉,地面的支持力往上顶,还有摩擦力阻止它滑动。MuJoCo的工作就是把这些力全部算清楚,然后告诉机器人每个关节应该怎么动。

MuJoCo最大的亮点在于接触与摩擦建模。它的接触模型不是简单的“撞上就弹开”,而是用软接触模型模拟真实接触的微小形变和能量损耗,这就保证了机器人手指捏起一个鸡蛋时,不会像铁钳子一样把它捏碎。

M(q)q¨+C(q,q˙)=τ+JTλ\displaystyle \mathbf{M}(\mathbf{q})\ddot{\mathbf{q}} + \mathbf{C}(\mathbf{q}, \dot{\mathbf{q}}) = \boldsymbol{\tau} + \mathbf{J}^T \boldsymbol{\lambda}
这是多体动力学方程,通俗说就是“每个关节的加速度,等于外力(驱动力+接触力)除以惯性”。它告诉你一个关节在给定力的作用下会加速多少。
  1. 质量矩阵$\mathbf{M}(\mathbf{q})$ 是质量矩阵,描述系统各处“多重”。就像开车载重不同,同样的油门加速快慢不同。
  2. 科氏力与离心力$\mathbf{C}(\mathbf{q}, \dot{\mathbf{q}})$ 是科氏力和离心力的合力项,在高速旋转时显著。好比弯道过弯时的离心力。
  3. 广义驱动力$\boldsymbol{\tau}$ 是施加在关节上的力矩,来自电机或执行器,相当于发动机输出的扭矩。
  4. 接触力作用$\mathbf{J}^T \boldsymbol{\lambda}$ 是接触力映射到关节空间的结果,代表地面/墙壁等对机器人的反作用力。
mermaid7 行
graph LR    A[质量与外力] --> B[F=ma 计算加速度]    B --> C[积分得到速度]    C --> D[再积分得到位置]    D --> E[检测碰撞与接触]    E --> F[更新接触力]    F --> B

刚体建模方法

在驾校里,教练第一节课教你调座椅、后视镜,找到适合自己的驾驶姿势。类似地,MuJoCo的第一步也是帮机器人建立“身体”——在仿真环境里定义机器人的每个部件。你可以把整个机器人想象成一串乐高积木:底盘是一个长方体,机械臂是几根圆柱,关节是连接它们的铰链。

在MuJoCo中,每个部件就是一个刚体(Rigid Body),你需要告诉它三样东西:自由度(关节能往哪个方向动)、惯性参数(这块积木有多重、重心在哪)、碰撞体(它的边界长什么样)。这三者缺一不可——就好比开车时,你要知道自己身体的姿势(自由度)、体重重心(惯性),以及车与周围物体的距离(碰撞)。

以机械臂为例,它的每个旋转关节就是一个自由度。如果机器人有6个关节,那它就有6个自由度(DOF)。这意味着任何时刻,机器人的姿态都可以用6个角度值来描述。为了模拟它,MuJoCo需要用户配置每个关节的关节轴、限位、摩擦系数,以及每个连杆的质量与转动惯量。

惯性参数是决定“这个部件有多难被推动”的量。同样的力推一个空纸箱和推一个装满书的木箱,加速度完全不同。这就好比坐在保时捷和坐在大卡车里踩油门,身体推背感完全不同——惯性参数不够准确,仿真中的动作就会和现实中的机器人严重偏离。

DOF=6×Nbase+∑j=1Jdj\displaystyle \text{DOF} = 6 \times N_{\text{base}} + \sum_{j=1}^{J} d_j
自由度公式。通俗理解:一个物体在三维空间中本来只有6种独立运动方式(3个平移+3个旋转),加上每个关节贡献的自由度,就是整个系统的自由度总数。
  1. 基座自由度$6 \times N_{\text{base}}$ 表示机器人基座在空间中自由的运动方式数,比如空中无人机有6个自由度,地面机器人通常被约束。
  2. 关节自由度累加$\sum_{j=1}^{J} d_j$ 是把所有关节的自由度加起来,旋转关节贡献1个自由度,滑动关节也贡献1个。

力矩控制核心

学开车最难的是什么?不是踩油门,而是“油门踩多深”——方向盘回正、离合缓抬、油门轻踩,这些精细操作的本质都是力矩控制。机器人的每个关节都需要精确控制输出力矩,力量太小转不动,太大又会撞坏东西。MuJoCo为这个问题提供了一套精细的控制接口。

当你训练一个机器人行走策略时,神经网络的输出通常不是“关节要转到多少度”,而是关节要输出多大的力矩。MuJoCo提供了一个内置的PD控制器(比例-微分控制器),它的作用就像一个灵活的教练员:你告诉他“膝盖应该弯到30度”,他会根据当前误差(差多少)和变化速度(弯得太快还是太慢)来调整施加的力矩。

MuJoCo的力矩控制接口还提供了前馈力矩选项——神经网络不光从反馈中学习,还能直接输出一个基础力矩。这就像老司机过弯时,不是等车偏了再修方向,而是提前预判、提前给油。这种“前馈+反馈”的组合控制,是Sim2Real中提升迁移成功率的重要手段。

τ=kp(qtarget−qcurrent)−kdq˙\displaystyle \tau = k_p (q_{\text{target}} - q_{\text{current}}) - k_d \dot{q}
这是PD控制公式,可以理解为“现在差多少就施加多大的力,同时根据正在接近目标的速度来缓冲”。就像你把手伸向一杯水,近了就减速发力,防止碰倒它。
  1. 比例项$k_p (q_{\text{target}} - q_{\text{current}})$ 是“误差放大镜”,角度差越大,施加力越大。好比教练看到你方向偏了10度,就用力纠正,偏5度则轻打。
  2. 微分项$-k_d \dot{q}$ 是“速度阻尼器”,当关节运动速度过快时,它会反向减小力矩,防止超调。就像你看到前方障碍物的距离在快速缩短,本能地开始轻踩刹车。
  3. 增益调节$k_p$ 和 $k_d$ 是需要手动调的参数,$k_p$ 太大容易震荡,$k_d$ 太大则运动迟钝。

Sim2Real迁移

在游戏厅里你是秋名山车神,坐进真车却战战兢兢——为什么?因为手感不对。方向盘的回正力矩、刹车的软硬、油门踏板的行程,游戏里和真车里全都不一样。这就是机器人的reality gap(现实差距):仿真里的物理参数和真实环境永远存在偏差,电机响应有延迟、摩擦系数有误差、摄像头看到的画面有噪点。

弥合这道鸿沟,有两种思路。第一种是系统辨识(System Identification):精确测量真实机器人的各项参数,然后把它们“灌入”仿真环境,让仿真越来越像现实。这就像驾校教练让你先熟悉真车的方向盘手感,记住它的精确参数。第二种是鲁棒性训练(Robustness Training):既然仿真永远不可能完美,那就让策略本身“皮实”起来——在各种各样的仿真条件下训练,让机器人适应各种偏差。

系统辨识是最直觉的做法:拿尺子量,拿秤称,把精确的摩擦曲线、电机延迟时间全部测出来填入仿真。但问题是,真实世界的参数太多了,还随温度、磨损变化——今天测好的摩擦系数,明天机器人电池电压下降就变了。这就像你在干燥路面试出了刹车距离,下了雨天就又不准了。

所以更主流的Sim2Real策略是“两手抓”:先做基本的系统辨识,保证仿真接近真实,再用鲁棒性训练兜底,让策略在参数偏移时仍然稳定工作。

域随机化策略

既然现实世界变化莫测,那干脆让仿真世界也“乱”起来吧!这就是域随机化(Domain Randomization)的思想——你不再费尽心思让仿真和现实一模一样,而是让仿真变成“万花筒”:有时候摩擦系数大,有时候小;有时候地面纹理粗糙,有时候光滑;有时候光照强,有时候暗。在这样的“混乱”中训练出来的策略,就像在各种路况下都开过车的老司机,在真实环境里自然游刃有余。

域随机化的核心在于随机化范围的设定。范围太小,相当于只在晴天练车,遇到下雨就抓瞎;范围太大,训练难度激增,策略可能在极端参数下完全学不到有效动作。最好的做法是参考经验法则:随机范围应覆盖真实世界参数的可能分布。比如摩擦力系数在0.3到1.0之间随机,光照强度在0.5到1.5倍之间波动。

物理参数随机化是MuJoCo的强项。你可以实时修改仿真中的质量、摩擦系数、关节阻尼、电机力度,甚至重力加速度(模拟月球表面行走?)。这就像驾校教练在不同天气、不同路况下带你练车——雪地、山路、夜间,每个场景都是真实世界的可能变体。

视觉随机化则针对感知层面:在仿真中随机改变物体的颜色、纹理、光照方向、摄像头噪点。假设你想让机器人学会抓取红色的杯子,如果只在固定光照下训练,换一个灯光场景可能就抓不到了。但你在训练时把颜色从浅红到深红、从亮光到暗光全部随机化,策略就会学到“杯子”的本质特征,而不是光照的偶然特性。

部署最佳实践

练了好几个月的车,终于要上真实马路了。该怎么平稳过渡,不做“马路杀手”?这就是部署阶段的最佳实践问题。直接一脚油门冲上真马路?不,聪明的做法是渐进迁移。

第一步,在纯仿真环境里验证策略的泛化能力——用域随机化模拟各种极端情况。第二步,在“仿真+真实”混合环境中测试:给真实机器人拍照,把真实图像叠入仿真场景(这叫Sim-to-Real数据混合),让策略先“见见”真实世界的素材。第三步,先在简单场景、低速条件下测试真机,像新手上路先在空旷路段练车一样。

真机部署后,必须建立数据反馈闭环。真实机器人的每一次运动数据,都应该回流到仿真环境中,校正仿真的参数偏差——这就像新司机每一次犯的错误,都应该让驾校教练知道,从而改进教学模式。具体而言,可以用真实轨迹数据反推更准确的摩擦模型、电机延迟模型,再更新到仿真器中。

最后是持续迭代评估:每次算法的更新、每次真机测试的结果,都要沉淀到评估指标中。如果策略在真实环境中表现不佳,定位原因——是感知问题、控制问题还是动力学模型偏差过大?逐步缩小仿真与真实的偏差,构建一个“仿真训练→真机测试→数据反馈→仿真修正”的闭环。这个循环一圈圈转下去,你的机器人会越来越像一个真正熟悉各种路况的老司机。

AI 应用场景

仓库分拣机器人的Sim2Real落地

阶段:策略训练与部署迁移

解决的问题:传统方式需要在真实仓库中手工收集大量抓取数据,成本高、效率低,而且一旦货物种类变化就要重新采集。通过MuJoCo仿真训练+域随机化,机器人可以在虚拟仓库中抓取数百万次,策略天然适应不同尺寸、材质、光照条件下的货物。

具体案例:某电商仓储机器人团队使用MuJoCo搭建数字孪生仓库,随机化货物的形状(方盒、圆柱、软袋)、摩擦系数(光滑塑料、粗糙纸箱)、光照强度(明暗交替)。训练出的抓取策略直接部署到真实机械臂上,零微调即达到85%的抓取成功率,经过一轮真机数据反馈后提升至94%。

四足机器人复杂地形行走

阶段:策略鲁棒性训练

解决的问题:在现实中让四足机器人尝试各种复杂地形(石子路、泥地、斜坡)既危险又耗时。域随机化可以模拟“万花筒”般的地形参数,让机器人在仿真中踩遍千山万水。

具体案例:某高校机器人实验室在MuJoCo中构建了包含碎石、湿滑、陡坡等要素的训练环境,随机化地面摩擦系数(0.2~1.2)、斜坡角度(0°~30°)、机器人本体质量(±20%)。训练后的步态策略在真实户外环境中一次通过,且对负载变化表现出良好鲁棒性。

Python 演示

python61 行
import numpy as npimport mujoco # 创建仿真环境(假设已有四足机器人模型文件)model_path = "quadruped.xml"model = mujoco.MjModel.from_xml_path(model_path)data = mujoco.MjData(model) # 设置随机种子,保证实验可重复np.random.seed(42)  def randomize_domain(model, data):    """域随机化:在每次 episode 开始时随机修改物理参数"""    # 随机化地面摩擦系数(原值 1.0,范围 0.2~1.5)    friction_range = (0.2, 1.5)    model.geom_friction[0, 0] = np.random.uniform(*friction_range)    # 随机化关节阻尼(原值 1.0,范围 0.5~2.0)    damping_range = (0.5, 2.0)    model.dof_damping[:] = np.random.uniform(*damping_range)    # 随机化机器人本体质量(偏移 ±20%)    mass_scale = np.random.uniform(0.8, 1.2)    model.body_mass[:] *= mass_scale  def run_episode(max_steps=1000):    """运行一个 episode,模拟机器人行走"""    mujoco.mj_resetData(model, data)    randomize_domain(model, data)    total_reward = 0    target_velocity = 1.0  # 目标速度 m/s     for step in range(max_steps):        # 简单的速度跟踪控制器:根据当前速度误差输出关节力矩        current_vel = data.qvel[0]  # 基座 x 方向速度        action = np.clip(            (target_velocity - current_vel) * 2.0,            -1.0,            1.0,        )        data.ctrl[:] = action        mujoco.mj_step(model, data)         # 奖励:速度接近目标值加分,姿态倾斜扣分        reward = -abs(current_vel - target_velocity)        reward -= abs(data.qpos[3]) * 0.5  # 横滚角惩罚        total_reward += reward         if abs(data.qpos[2]) < 0.2:  # 摔倒检测            break     return total_reward  if __name__ == "__main__":    print("=== 域随机化训练演示 ===")    n_episodes = 5    for ep in range(n_episodes):        score = run_episode()        print(f"Episode {ep + 1}: reward = {score:.2f}")    print("演示完成:每个 episode 在不同物理参数下运行")
目的:展示了MuJoCo仿真的标准流程——加载模型、域随机化物理参数、步进仿真、收集奖励。这是Sim2Real训练循环的最小原型,实际强化学习训练只需在此基础上叠加策略网络和优化器。
  1. model = mujoco.MjModel.from_xml_path(model_path)从XML文件加载MuJoCo模型,XML定义了机器人的刚体、关节和碰撞体。
  2. randomize_domain(model, data)核心的域随机化函数,每次重建环境时随机修改摩擦系数、阻尼和质量,让策略适应不同“手感”。
  3. model.geom_friction[0, 0] = np.random.uniform(*friction_range)直接修改仿真中地面几何体的摩擦系数,范围覆盖从冰面到粗糙路面。
  4. data.ctrl[:] = action设置关节力矩控制器输入,这是神经网络策略与MuJoCo物理引擎交互的接口。
  5. mujoco.mj_step(model, data)推进仿真一步,MuJoCo内部完成所有接触计算、动力学积分。

常见误区

误区“既然要迁移到真实世界,那仿真就一定要100%精确,所有物理参数都要和现实一模一样。”

正解追求绝对精度既不现实也没必要。即使世界上最精确的仿真也无法完全复刻真实世界的复杂性和随机性(温度、磨损、噪声无处不在)。Sim2Real的核心思想是通过域随机化和鲁棒性训练,让策略在“近似正确”的仿真中学会应对“各种偏差”,而不是在“精确复制”的仿真中死记硬背。就像驾校练车不是复刻每一条真实马路,而是让你在各种路况下都积累手感。

为何常见:直觉上会觉得模拟越像真的,迁移越容易,但忽略了真实世界本身的不确定性。这种思维是工程思维而非科研思维,把仿真当成了“副本”而不是“训练场”。

误区“MuJoCo就是个物理引擎,主要用来算关节角度和运动轨迹,做视觉感知得用别的工具。”

正解MuJoCo内置了完整的渲染能力,可以输出RGB图像、深度图、分割图,还支持接入光线追踪渲染器(如MuJoCo Menagerie和mujoco_render)。很多Sim2Real工作直接在MuJoCo中同时完成物理仿真和视觉渲染,加上视觉域随机化,就能端到端训练机器人操作策略。它不只是运动学工具箱,而是“物理+视觉+控制”三位一体的平台。

为何常见:早期MuJoCo的视觉渲染能力较弱,很多教程和旧文章主要强调其动力学计算。加上人们习惯性地把“物理引擎”和“游戏引擎”类比,忽视了它在渲染侧的进化。

误区“域随机化嘛,简单,把模型里所有能改的参数全部加上随机范围,越大越多样,训练出来的策略越鲁棒。”

正解盲目扩大随机范围会带来两个问题:一是训练难度指数级上升,策略可能在极端参数组合下完全无法学到有效行为;二是随机分布如果在关键物理参数(如重力、电机力矩上限)上偏离真实太多,策略会在真机上表现怪异。正确的做法是“调研真实参数空间,再设定覆盖该空间的随机范围”,就像驾校教练不会带你在百米悬崖边练车——虽然极端情况也存在,但没有代表性。

为何常见:把“多样性”误解为“丰富性”,忽略了机器学习中“数据分布与目标分布匹配”的基本原则。域随机化的目标不是“尽可能乱”,而是“覆盖真实世界的可能变化”。

误区“Sim2Real就是迁移学习在机器人中的应用,把仿真中学到的特征迁移到真实环境。”

正解Sim2Real的范畴远超迁移学习。迁移学习处理的是“特征分布不同”,而Sim2Real面临的是领域差异——物理规律、控制接口、传感器噪声全部不同。Sim2Real方法论融合了系统辨识、域随机化、仿真校准、渐进部署等多种技术,是一个完整的工程闭环,而非单一的算法思想。它更像是“从驾校模拟器到真实道路的整套教学体系”,而迁移学习只是其中的一项技巧。

为何常见:Sim2Real名称中的“Real“和迁移学习中的”目标域”容易让人产生类比联想。但这种浅层类比忽略了Sim2Real对物理引擎精度、控制频率、传感器仿真等工程层面的深度依赖。

误区“MuJoCo里跑得好,部署到真机上应该没问题。如果不行,说明仿真精度不够。”

正解即使使用了域随机化,仿真到真机的直接部署(zero-shot transfer)在复杂任务上仍然有很大风险。最佳实践是先做渐进部署——在受控条件下测试(低速、简单场景),收集真机数据反馈到仿真中微调参数,再迭代部署。这就好比新司机拿到驾照后,还得先在空旷路段、雨雪天、夜间逐步积累真实驾驶经验,而不是直接冲上晚高峰高速。

为何常见:很多初学者被“端到端零样本迁移”等研究论文吸引,忽略了那些工作的任务特殊性(如简单抓取、单步操作)和背后的巨量工程投入。对于复杂连续控制任务,零样本迁移仍是一个开放性难题。

面试题

Q1. MuJoCo的"MuJoCo"名称含义是什么?

单选题 · easy

  • A.Multi-Joint dynamics with Contact(多关节接触动力学)← 正确答案
  • B.Multi-Joint Control with Collision(多关节碰撞控制)
  • C.Modular Joint Coordination(模块化关节协调)
  • D.Multi-Joint Optimization for Control(多关节控制优化)

答案:A。MuJoCo的全称是Multi-Joint dynamics with Contact,强调其核心能力是处理多关节系统的动力学和接触问题。它就是机器人的“驾校模拟器”的引擎,重点在动力学和接触仿真。

Q2. 在多体动力学方程 $\mathbf{M}\ddot{\mathbf{q}} + \mathbf{C} = \boldsymbol{\tau} + \mathbf{J}^T\boldsymbol{\lambda}$ 中,$\boldsymbol{\tau}$ 表示什么?

单选题 · mid

  • A.接触力矩阵
  • B.关节驱动力矩向量← 正确答案
  • C.重力加速度
  • D.质量矩阵

答案:B。$\boldsymbol{\tau}$ 是广义驱动力矩向量,表示施加在关节上的电机力矩。就像开车时的发动机扭矩,是主动力。接触力是另一项 $\mathbf{J}^T\boldsymbol{\lambda}$ 表示的,质量矩阵是 $\mathbf{M}$。

Q3. 在MuJoCo中构建一个机器人模型,需要定义以下哪些内容?

多选题 · mid

  • A.刚体的质量与惯性参数← 正确答案
  • B.关节的自由度与运动范围← 正确答案
  • C.碰撞体的几何形状← 正确答案
  • D.神经网络的权重参数

答案:ABC。MuJoCo建模需要定义刚体属性(质量、惯性)、关节属性(自由度、限位)和碰撞体(几何形状),这些像驾校里“车身的重量分布、方向盘的操作范围、车辆的外廓尺寸”。神经网络权重是训练得到的,不属于物理建模范畴。

Q4. 在PD控制公式 $\tau = k_p e - k_d \dot{q}$ 中,$k_d$ 的作用是什么?

单选题 · mid

  • A.放大位置误差的修正力度
  • B.抑制关节速度过快导致的震荡← 正确答案
  • C.增加系统的稳态精度
  • D.补偿重力带来的偏移

答案:B。$k_d$ 是微分增益,作用于关节角速度 $\dot{q}$,起到阻尼作用,防止关节运动速度过快引起超调震荡。就像你看到杯子里水快满了,会本能地放慢倒水速度——这就是“微分项”在起作用。

Q5. 为什么“直接用最精确的系统辨识来消除reality gap”在实践中并不可行?

单选题 · hard

  • A.因为系统辨识的数学理论不成熟
  • B.因为真实世界参数太多且随环境变化← 正确答案
  • C.因为MuJoCo不支持高精度参数配置
  • D.因为精确仿真会导致训练过拟合到仿真细节

答案:B。真实机器人系统包含大量参数(摩擦、阻尼、延迟、刚度等),且随温度、电压、磨损实时变化。今天测得的参数明天就失效,穷举式精确辨识不可行。正确思路是用域随机化让策略适应参数的不确定性,就像老司机适应各种天气而不只依赖特定路况。

Q6. 域随机化通常会随机化哪些类型的参数?

多选题 · easy

  • A.物理动力学参数(摩擦系数、质量)← 正确答案
  • B.视觉渲染参数(光照、纹理、颜色)← 正确答案
  • C.机器人的关节结构
  • D.控制器的频率增益

答案:AB。域随机化主要覆盖物理参数(摩擦、质量、阻尼)和视觉参数(光照、纹理),前者影响“手感”,后者影响“视觉感知”。关节结构是模型定义,通常不随机化;控制频率与增益属于策略本身,也不会在环境域中随机。

Q7. Sim2Real中最核心的挑战是什么?

单选题 · mid

  • A.仿真速度太慢无法大规模训练
  • B.仿真与真实环境之间存在不可消除的领域差异← 正确答案
  • C.MuJoCo无法模拟视觉传感器
  • D.物理引擎无法计算接触力

答案:B。Sim2Real的本质挑战是reality gap——仿真永远无法完美复刻真实世界的复杂性。车辆驾驶模拟器做得再好,方向盘的力反馈、座椅的震动、车轮的侧滑感都无法完全还原。解决思路是拥抱这种差异而非追求完全消除。

Q8. 关于PD控制器和强化学习策略的关系,哪些说法是正确的?

多选题 · mid

  • A.PD控制器可以用来平滑强化学习策略输出的力矩信号← 正确答案
  • B.MuJoCo内置的PD控制器可跟踪目标关节角度← 正确答案
  • C.强化学习策略通常直接输出关节力矩← 正确答案
  • D.PD控制完全替代强化学习

答案:ABC。在MuJoCo中,强化学习策略可以输出目标角度,由内置PD控制器转换为力矩;也可以直接用策略网络输出力矩。PD控制器提供平滑和稳定性,不是“替代”强化学习,而是互补组件——正如驾校教练既教踩油门,也教用刹车缓降速度。

Q9. 以下哪项是渐进式Sim2Real部署的正确步骤?

单选题 · easy

  • A.仿真训练完成后直接全速跑真机
  • B.先低速简单场景测试,逐步增加复杂度← 正确答案
  • C.跳过仿真只在真机上训练
  • D.先更换硬件再测试代码

答案:B。渐进式部署强调“先在简单可控条件下测试,逐步增加难度”——先低速、短距离、无障碍,再逐步增加速度与复杂度。这就像新司机拿到驾照后先走空旷路段,再逐步上高速和复杂市区。

Q10. 在利用真实机器人反馈数据修正仿真模型的过程中,可能涉及哪些操作?

多选题 · hard

  • A.用真实轨迹数据反推更准确的摩擦系数← 正确答案
  • B.更新电机延迟时间常数← 正确答案
  • C.调整视觉渲染的光照强度← 正确答案
  • D.修改机器人身上的Wi-Fi天线位置

答案:ABC。真机反馈可以校准物理参数(摩擦系数)、控制参数(电机延迟)和视觉参数(光照模型),这些都是仿真“手感”和“视觉”差异的主要来源。而Wi-Fi天线位置与物理仿真无关,不在校正范围内。