想象你是一名新飞行员。直接上真机练习?一次失误就可能机毁人亡,燃油和维修费用更是惊人。全世界航空公司的答案都一样:先在飞行模拟舱里练。模拟舱逼真地还原驾驶舱、天气和机场跑道,你可以在里面放心大胆地犯错——摔多少次都不心疼,因为飞机本身只是电脑里的一堆像素。练够几百小时,你才有资格坐进真机驾驶舱。 Webots 做的正是同样的事,只不过服务对象不是飞行员,而是机器人开发者。它是一款开源免费的 3D 仿真平台:你在电脑里搭一个虚拟世界,放入一辆轮式机器人,给它装上“眼睛”(距离传感器)和“腿”(电机),然后编写控制程序——所有行为都可以在仿真世界里实时上演。撞墙?重来。算法太激进?重来。零成本,无限次重来。等你把控制程序调得足够可靠,再把它搬到实体机器人身上。 这篇文章将带你完成一次完整的“模拟舱之旅”:认识 Webots 的整体面貌,搭建仿真场景,配置机器人模型,编写控制器代码,运行与调试仿真,理解传感器如何感知世界,最后聊聊如何把仿真成果迁移到真机。

岗位关联

掌握 Webots,你就能在没有真机的情况下完成机器人算法的开发与调试,把硬件调试成本降到几乎为零——这是机器人工程师最核心的工程能力之一。

目录
  1. 可视化演示
  2. 仿真器概览
  3. 场景搭建
  4. 机器人配置
  5. 控制器编程
  6. 仿真运行
  7. 传感器感知
  8. 真机迁移
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示中心极限定理:无论原始分布如何,样本均值的分布随着样本量增大趋近于正态分布。

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

中心极限定理(均匀分布) 从均匀分布U(0,1)中反复抽取样本量为n的样本,计算样本均值 红色曲线为理论正态分布N(μ,σ²/n),直方图随采样增加趋近该曲线 X̄~N(μ,σ²/n) 样本量越大,样本均值分布越接近正态分布

仿真器概览

一位新飞行员第一次走进价值数千万的飞行模拟舱时,教官会这样介绍:这台设备复刻了驾驶舱的一切,脚下是液压系统模拟颠簸,窗外是投影模拟的机场,你在这里随便摔飞机,成本只是电费。Webots 就是机器人世界的这台“模拟舱”——只不过它把液压和投影换成了物理引擎和 3D 渲染,把空客 A320 换成了差速小车、机械臂和人形机器人。

Webots 是 Web + Robots 的组合词,一个开源免费的机器人 3D 仿真平台。它内置了 ODE 物理引擎——一个确保“虚拟世界遵守现实规律”的规则引擎:物体会因重力下落,相撞会反弹,轮子与地面之间会有摩擦力。你在虚拟环境里测试的每一次前进、转弯、抓取,都在模拟真实物理过程。

仿真世界如何让时间“流动”?靠的是固定时间步长。真空中时间连续,计算机里只能一格一格地走。Webots 每推进一个步长,就完成一轮物理碰撞求解、传感器数据刷新和控制器代码执行。步长通常取 32 毫秒,对应约 31 赫兹的仿真频率:

模拟舱的“帧率”越高,画面越接近真实;Webots 的步长越小,仿真越细腻,但计算压力也越大。理解了这个权衡,你就明白了仿真工程师为什么总是反复权衡精度与速度。

Δt=1f\displaystyle \Delta t = \frac{1}{f}
步长是“两帧之间的间隔”,频率是“一秒钟多少帧”,两者互为倒数。
  1. 仿真步长 Δt仿真世界每推进一格所对应的真实时间长度,Webots 中常见取值为 32 毫秒。
    Δt=1f\displaystyle \Delta t = \frac{1}{f}
  2. 仿真频率 f一秒内仿真正推进的步数,单位赫兹(Hz),反映仿真世界的“刷新速率”。
    f=1Δtf = \frac{1}{\Delta t}
  3. 步长与频率互为倒数步长越小,频率越高,每个周期内要计算的物理量越多,CPU 负载越大。
    Δt×f=1\Delta t \times f = 1

场景搭建

模拟舱的机场不是凭空出现的。为了让飞行员练出“在羽田机场落地”的手感,工程师需要按真实地图建模跑道、灯光、塔台。Webots 里同理,第一步就是搭建虚拟训练场,官方称之为“世界”(World),文件后缀是 .wbt。

一个 .wbt 文件用文本描述了场景里的一切:地面的大小、墙壁的位置、障碍物的形状、光源的颜色。最简单的创建方式是像搭积木一样在 3D 视口里右键添加节点、拖拽摆放,Webots 会把位置信息保存成文本。物体的摆放位置用三维坐标描述——(x, y, z) 三个数字告诉机器人“教室的门在哪里、桌角在哪里”。

场景中每个物体不仅有形状,还有物理属性:质量、弹性、摩擦力。这些属性的重中之重是重力。只要打开重力开关,任何没有支撑的物体会加速下落:

模拟舱的机场布局决定了训练的科目——在狭窄走廊里避障和在开阔仓库里巡航,需要的技能完全不同。场景搭得越贴近真实任务,仿真训练的“手感”才越值钱。

F=m×g\displaystyle F = m \times g
重力等于物体的质量乘以重力加速度,质量越大,往下拽的力越大。
  1. 力 F物体受到的重力大小,单位牛顿(N),是物体与其他物体碰撞、接触时相互作用的源头。
    F=m×g\displaystyle F = m \times g
  2. 质量 m物体的“分量”,单位千克(kg)。质量越大,同样加速度下需要的力越大。
    m=Fgm = \frac{F}{g}
  3. 重力加速度 gWebots 中默认取 9.81 米/秒²,与真实地球一致,做月球任务时可以改成 1.62。
    g=9.81 m/s2g = 9.81 \text{ m/s}^2

机器人配置

模拟舱能“换机型”:A320 的操纵杆和 747 的完全不同。Webots 内置了大量机器人模型——差速驱动机器人、四足机器人、机械臂、人形机器人。选哪种机型,取决于你想训练什么任务。

在场景树中右键添加一个机器人节点,就能把它放进虚拟训练场。机器人的配置核心是它的“骨架”:车体(Body)是躯干,轮子和关节是执行器(相当于飞机舵面),传感器是感觉器官。这些零件在场景树中层层嵌套,构成一个完整的机器人描述。

最经典的小车是差速驱动机器人:左右两个轮子独立驱动,没有第三个导向轮。它怎么转弯?靠左右轮速度差。这个原理可以用两个式子在一条公式里说明白:

理解了差速模型,你就掌握了这类机器人控制的底层逻辑——以后你说“让它转个弯”,本质上是在说“让左右轮速度产生一个差值”。这和飞行员明白“压下操纵杆就是改变升降舵偏角”是同一个道理。

v=vL+vR2,ω=vR−vLl\displaystyle v = \frac{v_L + v_R}{2}, \quad \omega = \frac{v_R - v_L}{l}
左右轮平均速度决定车子跑多快,左右轮速度差除以轮距决定车子转多急。
  1. 线速度 v机器人整体的“前进速度”,单位米/秒,等于左右轮速度的平均值。
    v=vL+vR2\displaystyle v = \frac{v_L + v_R}{2}
  2. 角速度 ω机器人“自转的快慢”,单位弧度/秒,由左右轮速差产生,差得越大转得越猛。
    ω=vR−vLl\displaystyle \omega = \frac{v_R - v_L}{l}
  3. 轮距 l 与特例左右轮之间的水平距离。当左右轮同速同向时,角速度为零,机器人直线前进。
    vL=vR⇒ω=0v_L = v_R \Rightarrow \omega = 0

控制器编程

现代客机大多有自动驾驶系统:飞控计算机不断读入空速、航向、高度,算出舵面指令,让飞机沿着计划航线飞行。机器人的控制器就是它的“自动驾驶系统”——一个独立程序,循环执行“读传感器 → 做决策 → 发指令”三步。

Webots 控制器可以用 C、C++、Python、Java 或 MATLAB 编写,通过 Webots API 与仿真世界交互:getDevice() 获取设备对象,getValue() 读取传感器读数,setVelocity() 设置电机速度。最外层是一个 while 循环,不断调用 robot.step(stepSize) 等待世界推进。

一个最常见的控制目标是让机器人保持与前方障碍物的安全距离。最简单的策略是比例控制——把“误差”(期望距离减当前距离)乘以一个放大系数,当作速度指令:

在模拟舱里,飞行员可以反复试不同的自动驾驶参数,直到手感合适。机器人工程师在 Webots 里调整 k_p,本质上是同一件事:在“不用真机”的前提下,把自动驾驶程序调出可靠的手感。

v(t)=kp×e(t)\displaystyle v(t) = k_p \times e(t)
离目标越远,给的速度越猛;越接近目标,动作越轻柔——就像教练教你倒车入库时“离得远就多打,离得近就微调”。
  1. 控制量 v(t)电机当前时刻的速度指令,是控制器的最终输出,单位弧度/秒或米/秒。
    v(t)=kp×e(t)\displaystyle v(t) = k_p \times e(t)
  2. 误差 e(t)期望值减去当前测量值,比如期望距离 0.5 米减传感器读数 0.3 米,误差就是 0.2 米。
    e(t)=dtarget−dcurrente(t) = d_{target} - d_{current}
  3. 比例系数 k_p可调参数,决定控制器对误差有多“敏感”。k_p 太小反应迟钝,太大容易震荡。
    v∝ev \propto e

仿真运行

教官坐在模拟舱外面,透过屏幕监视飞行员的每一个操作。Webots 的主工具栏就是教官的控制台:播放、暂停、单步、速度调节。你既可以全速观看机器人表演,也可以一帧一帧检查它每一步的决策。

仿真运行的核心是理解“时间比率”。Webots 允许以 1 倍速、2 倍速甚至 100 倍速运行仿真,也可以低于实时速度运行。这个快慢用实时因子(RTF)来衡量:

监视窗口是教官的“仪表盘翻页器”。在 Robot 监视窗口里,你能实时查看每个传感器的读数、每个执行器的输出,甚至能点击场景里的物体查看物理状态。遇到诡异的 bug,就把速度调到 0.1 倍速,一帧帧观察问题出在感知、决策还是执行环节。

RTF=tsimtreal\displaystyle RTF = \frac{t_{sim}}{t_{real}}
实时因子是“仿真世界里过了一个小时,真实世界过了几分钟”的倍数。大于 1 表示快进,小于 1 表示慢放。
  1. 仿真时间 t_sim仿真世界内部累计流逝的时间,由步长乘以步数得到。
    RTF=tsimtreal\displaystyle RTF = \frac{t_{sim}}{t_{real}}
  2. 真实时间 t_real你手机秒表实际走过的时间,是衡量“仿真跑多快”的参照系。
    tsim=n×Δtt_{sim} = n \times \Delta t
  3. 实时因子 RTF两者之比。RTF=2 表示仿真比钟表快一倍,适合长时段算法测试;RTF<1 适合观察高频传感器的细微变化。

传感器感知

飞行员不会把脑袋伸出驾驶舱去看跑道,他靠的是仪表盘:高度表看高度,空速表看速度,雷达看附近飞机。Webots 机器人没有“眼睛长在车身外”的直觉,它的一切感知都来自传感器——这些传感器就是它的仪表盘。

Webots 提供几十种传感器:距离传感器测前方障碍物远近,摄像头获取图像,GPS 定位坐标,IMU 感知自身姿态。控制器通过统一的 API 读取数据:距离传感器调用 getValue(),摄像头调用 getImage()。每种传感器的读数都需要“翻译”成有物理意义的量。

以最常见的超声波距离传感器为例,它的原理是发出声波、等待反射。声波速度约 340 米/秒,障碍物的距离就是声速乘以往返时间的一半:

仪表盘的读数不是终点,判断才是。机器人用“读数小于安全距离”这个简单逻辑触发避障——就像飞行员看到高度表低于安全高度就立刻拉起操纵杆。感知的价值,最终体现在“基于感知的决策”上。

d=c×techo2\displaystyle d = \frac{c \times t_{echo}}{2}
声波从发出到返回,走了一个来回。总路程除以 2,才是单程距离。
  1. 距离 d传感器到最近障碍物的距离,单位米,是避障算法的直接输入。
    d=c×techo2\displaystyle d = \frac{c \times t_{echo}}{2}
  2. 信号速度 c信号在介质中的传播速度,超声波在空气中约 340 米/秒,激光雷达则接近光速。
    c≈340 m/sc \approx 340 \text{ m/s}
  3. 往返时间 t_echo信号从发出到遇到障碍物反射回来的时长,除以 2 是为了把往返距离折成单程。
    techo=2dct_{echo} = \frac{2d}{c}

真机迁移

第一次执飞真机的机长会发现:操纵杆比特训舱里更沉,仪表延迟也不一样。但他的手不会抖,因为模拟舱已经教会了他“该怎么反应”。Webots 的价值就是给你建立这份“肌肉记忆”——然后你需要做的,是化解“模拟与真实”之间的细微差异。

从仿真到真机,最忌讳的就是把控制器代码直接复制到真机上。差异无处不在:仿真里的轮子直径是名义值,真机的轮子可能磨损了 1 毫米;仿真电机响应理想化,真机电机有死区、有延迟。经验做法是“标定”:用一组速度指令测试真机实际速度,拟合出映射关系。

这种映射通常是一条直线,用斜率和偏移两个参数描述:

从模拟舱毕业,不等于可以无照驾驶,但有了仿真积累的算法逻辑和标定方法,你能让真机在较短时间内跑出可靠表现。模拟舱帮你提前排掉了一大批坑,剩下的,就是享受真机带来的真实手感。

vreal=k×vsim+b\displaystyle v_{real} = k \times v_{sim} + b
仿真里下发的速度指令,到真机上实际执行的速度,两者往往近似一条直线。标定就是找到 k 和 b。
  1. 仿真指令 v_sim控制器在 Webots 里发送的速度指令,是理想化的输入值。
    vreal=k×vsim+b\displaystyle v_{real} = k \times v_{sim} + b
  2. 真机速度 v_real真车上实际测得的速度,通常用编码器或光电测速获得。
    vreal=f(vsim)v_{real} = f(v_{sim})
  3. 增益 k 与偏置 bk 反映电机响应的放大程度,b 反映死区或零漂。标定即让机器人跑几组速度,用最小二乘法解出 k 与 b。
    k=ΔvrealΔvsimk = \frac{\Delta v_{real}}{\Delta v_{sim}}

AI 应用场景

无人配送车算法的室内预验证

阶段:算法开发与验证

解决的问题:传统方式每次改路径规划算法都要搭建实体场地、安排人员防护,测试成本高、周期长。Webots 相当于把“测试跑道”搬进了模拟舱,改完代码立刻回放,安全又省钱。

具体案例:某医院配送机器人团队在 Webots 中导入医院走廊 CAD 图,搭建带人形障碍物的虚拟场景,自动回放 5000 次测试,定位到 3 处碰撞 bug,修复后才进行真机验证,整体调试周期缩短约 60%。

高校机器人课程教学实训

阶段:教学实训与能力评估

解决的问题:真机数量少、学生上机时间不足,每人一台“模拟舱”是成本最低的解决方案。仿真环境还能一键重置,让每个学生都能反复练习。

具体案例:一门 32 学时的《智能机器人》课程,学生在 Webots 中完成壁障小车、循线小车、机械臂抓取等 6 个实验,期末直接在仿真环境中考核,人均上机时间提升 3 倍。

机械臂抓取视觉模型的数据预训练

阶段:数据生成与模型预训练

解决的问题:训练视觉抓取模型需要大量带标注图像,真机采图成本极高。Webots 的虚拟摄像头可批量生成带深度信息的图像,相当于在模拟舱里“批量拍摄训练照片”。

具体案例:用 Webots 搭建机械臂工作台,自动切换光照、物体位置、相机角度,生成 2 万张“仿真照片”用于预训练视觉模型,再用少量真机数据微调,显著减少人工标注成本。

Python 演示

python95 行
import math TIME_STEP = 32          # 仿真步长(毫秒)MAX_SPEED = 6.28        # 最大轮速(弧度/秒)WHEEL_RADIUS = 0.08     # 车轮半径(米)WHEEL_BASE = 0.16       # 左右轮间距(米)SAFE_DISTANCE = 0.3     # 安全距离(米)  class MockMotor:    """模拟 Webots 的电机设备"""    def __init__(self, name):        self.name = name        self.speed = 0.0     def set_position(self, position):        pass     def set_velocity(self, speed):        self.speed = speed  class MockDistanceSensor:    """模拟 Webots 的距离传感器"""    def __init__(self, name):        self.name = name        self.clock = 0.0     def enable(self, period_ms):        pass     def get_value(self):        self.clock += 0.1        if self.clock < 6.0:            return max(0.2, 0.8 - 0.1 * self.clock)        return 0.5  class MockRobot:    """模拟 Webots 的 Robot 控制器基类"""    def __init__(self):        self.x = 0.0        self.y = 0.0        self.theta = 0.0        self.left_speed = 0.0        self.right_speed = 0.0        self.devices = {}     def get_device(self, name):        if name not in self.devices:            if "sensor" in name:                self.devices[name] = MockDistanceSensor(name)            else:                self.devices[name] = MockMotor(name)        return self.devices[name]     def step(self, time_step_ms):        dt = time_step_ms / 1000.0        v = WHEEL_RADIUS * (self.left_speed + self.right_speed) / 2.0        omega = WHEEL_RADIUS * (self.right_speed - self.left_speed) / WHEEL_BASE        self.x += v * math.cos(self.theta) * dt        self.y += v * math.sin(self.theta) * dt        self.theta += omega * dt        return 0  def main():    robot = MockRobot()    left_motor = robot.get_device("left wheel motor")    right_motor = robot.get_device("right wheel motor")    front_sensor = robot.get_device("front distance sensor")     left_motor.set_position(float("inf"))    right_motor.set_position(float("inf"))    front_sensor.enable(TIME_STEP)     for i in range(100):        distance = front_sensor.get_value()        if distance < SAFE_DISTANCE:            robot.left_speed = 0.2 * MAX_SPEED            robot.right_speed = 0.8 * MAX_SPEED        else:            robot.left_speed = 0.5 * MAX_SPEED            robot.right_speed = 0.5 * MAX_SPEED         left_motor.set_velocity(robot.left_speed)        right_motor.set_velocity(robot.right_speed)        robot.step(TIME_STEP)         if i % 10 == 0:            print(f"step={i:3d} x={robot.x:.2f} y={robot.y:.2f} theta={robot.theta:.2f}")  if __name__ == "__main__":    main()
目的:用模拟类复现 Webots 控制器的核心逻辑,演示差速驱动机器人“读传感器 → 决策 → 驱动电机”的完整闭环,可直接运行观察避障过程。
  1. v = WHEEL_RADIUS * (self.left_speed + self.right_speed) / 2.0用左右轮平均速度乘以轮半径,得到机器人整体的前进速度,对应差速模型的线速度公式。
  2. omega = WHEEL_RADIUS * (self.right_speed - self.left_speed) / WHEEL_BASE轮速差除以轮距得到自转角速度,是机器人转向行为的数学根源。
  3. if distance < SAFE_DISTANCE:控制器读传感器后做决策:小于安全距离就触发避障逻辑。
  4. robot.left_speed = 0.2 * MAX_SPEED避障时让右轮快、左轮慢,机器人向左侧转向绕过障碍。
  5. left_motor.set_velocity(robot.left_speed)把计算好的速度指令写入电机设备,相当于自动驾驶系统推动操纵杆。
  6. robot.step(TIME_STEP)仿真时钟推进一个步长,物理世界更新位置,然后进入下一个控制周期。

常见误区

误区在 Webots 里我的算法跑得好好的,拿到真机上应该也能完美运行,最多改改端口设置。

正解仿真器是真实世界的“近似”,不是复印机。Webots 的物理引擎用数值方法近似真实动力学,传感器默认没有噪声、没有安装误差。真机上轮子打滑、电机响应延迟、环境光干扰等仿真中不存在的问题都会冒出来。正确做法是把仿真用于验证“算法逻辑是否正确”,再通过“仿真 + 真机”两级测试,真机测试不可省略。

为何常见:人在投入大量时间调通仿真代码后,容易把“看起来相似”当成“完全相同”,产生“它已经没问题了”的错觉。

误区仿真步长设得越小,仿真越精确,效果一定越好,所以我把步长设成 1ms。

正解步长小确实更精确,但代价是计算量成倍增加:步长减半,每秒物理计算和传感器更新的次数翻倍,仿真速度明显变慢。Webots 默认 32ms 对大多数教学和验证场景足够。只有模拟高速碰撞、高频控制等场景时才需要更小的步长。与其盲目追求精度,不如用监视窗口观察是否有抖动或穿透现象。

为何常见:“更精细就更好”是常见直觉。很多人没有意识到仿真器每一步都在做大量数值计算,工业界真正追求的是“够用的精度”而非“极限的精度”。

误区距离传感器返回 0.42 米,那真实世界的传感器也应该返回 0.42 米,根本不需要考虑噪声。

正解Webots 默认的传感器模型是“理想化”的——只有手动开启噪声属性后,读数才接近真实硬件。真机传感器受环境光、表面材质、温漂等因素影响,同一位置多次读数也可能不同。在仿真验证阶段,建议主动给传感器加上噪声和量化误差,让算法在“不完美的输入”下也能稳定工作。

为何常见:仿真画面太逼真,容易让人忘记背后是数学近似,加上默认无噪声,初学者意识不到“理想读数”本身就是一个简化假设。

误区控制器代码在 Webots 里调好了,直接复制到树莓派里,机器人就应该能跑。

正解至少需要三步适配:一是标定,确定真机实际速度与仿真速度指令之间的映射关系(线性模型 v = kv + b 中的 k 和 b);二是更换驱动层,把 Webots API 调用换成真实电机驱动库;三是调整安全参数,比如避障距离从仿真里的 0.3 米改到真机需要的 0.5 米。仿真培养的是“算法逻辑”,真机需要的是“逻辑 + 适配”。

为何常见:Webots 的控制器代码从形态上就是普通 Python/C 程序,看起来和单片机程序没区别,让人误以为平台差异只是换一台电脑运行。

面试题

Q1. Webots 是一款什么样的软件?

单选题 · easy

  • A.三维建模工具
  • B.机器人仿真平台← 正确答案
  • C.机器人操作系统
  • D.单片机开发环境

答案:B。Webots 的定位是仿真器,就像飞行模拟舱专门用来训练飞行员。三维建模有 Blender,机器人操作系统有 ROS,单片机开发有 Keil,这些都不是 Webots 的职责。

Q2. Webots 中仿真按什么基本单位推进?

单选题 · easy

  • A.仿真步长← 正确答案
  • B.实时分钟
  • C.网络帧数
  • D.随机间隔

答案:A。仿真世界里没有自然流动的时间,只有一格一格的“仿真步长”,如 32ms。如同电影一秒由 24 帧组成,Webots 一秒钟由约 31 个步长组成。选项 B、C、D 都不是 Webots 的时间推进机制。

Q3. 仿真步长取 32ms 时,仿真频率约为多少?

单选题 · mid

  • A.16 赫兹
  • B.31 赫兹← 正确答案
  • C.64 赫兹
  • D.100 赫兹

答案:B。频率是步长的倒数:1 ÷ 0.032 = 31.25Hz。步长像电影的两帧间隔,频率像每秒帧数,两者互为倒数。16Hz 对应 62.5ms,64Hz 对应 15.6ms,都与 32ms 对不上。

Q4. 差速机器人左右轮同速同向运动时,机器人会怎样?

单选题 · mid

  • A.原地打转
  • B.直线前进← 正确答案
  • C.向后倒退
  • D.左右摆动

答案:B。差速模型的核心是“左右轮速度差产生转向”。同速同向时速度差为零,角速度 ω = 0,机器人只能直线前进,就像独木舟双桨同速同方向划水,船不会偏航。

Q5. Webots 场景中物体摆放位置用什么描述?

单选题 · mid

  • A.仿真步长
  • B.三维坐标← 正确答案
  • C.颜色数值
  • D.贴图名称

答案:B。场景树中每个物体节点都有 translation 属性,用 (x, y, z) 三维坐标描述它在虚拟世界中的位置,类似用经纬度标注教室里的每张课桌。步长是时间概念,颜色和贴图是外观属性,都不负责定位。

Q6. 比例控制中误差变大时,控制量会怎样?

单选题 · easy

  • A.随之变大← 正确答案
  • B.随之变小
  • C.保持不变
  • D.突然归零

答案:A。比例控制的核心是“误差驱动”:v = kp × e,误差越大控制量越猛。好比倒车入库时离目标线越远,方向盘打得越多;误差为零时控制量也为零,车子稳稳停住。

Q7. 实时因子 RTF 大于 1 表示什么?

单选题 · hard

  • A.仿真慢于真实
  • B.仿真快于真实← 正确答案
  • C.两者完全同步
  • D.仿真已经崩溃

答案:B。RTF = 仿真时间 ÷ 真实时间。RTF > 1 意味着仿真世界的时间走得比秒表快,模拟舱像按了快进键,适合快速跑长时段测试。RTF = 1 才是完全同步,RTF < 1 是慢放。

Q8. Webots 中常见的传感器类型有哪些?

多选题 · mid

  • A.距离传感器← 正确答案
  • B.摄像头模块← 正确答案
  • C.GPS 定位器← 正确答案
  • D.燃油计量表

答案:ABC。Webots 传感器库包括距离传感器(相当于触觉)、摄像头(视觉)、GPS(空间感),这些都是机器人感知世界的“仪表盘”。燃油计量表是燃油车的专属,机器人不吃油,自然用不到。

Q9. 从 Webots 仿真迁移到真机时,通常需要考虑哪些问题?

多选题 · mid

  • A.硬件差异适配← 正确答案
  • B.参数重新标定← 正确答案
  • C.传感器噪声处理← 正确答案
  • D.无需任何调整

答案:ABC。真机和仿真不是孪生兄弟。轮子直径误差、电机死区、传感器噪声在真机上真实存在,需要逐一适配校准。把仿真代码直接搬到真机,相当于让模拟舱毕业生不经过带飞就独自执飞,风险极高。

Q10. 关于 Webots 仿真,下列说法正确的有?

多选题 · hard

  • A.物理引擎是真实世界的近似模型← 正确答案
  • B.默认传感器读数理想无噪声← 正确答案
  • C.仿真通过后无需真机测试
  • D.时间步长越小计算开销越大← 正确答案

答案:ABD。物理引擎将碰撞、摩擦简化为数学模型,所以 A 正确。未开启噪声参数时传感器读数理想化,B 正确。步长越小每秒计算的帧数越多,D 正确。仿真再逼真也只是近似,C 违背了“仿真不能替代真机测试”的基本原则。