- 科研
- 自动驾驶
- 物理引擎
【免费下载链接】webots
Webots Robot Simulator
本篇文章以 Webots 官方 R2025a 发布说明(docs/blog/Webots-2025-a-release.md)为主体,结合当前开源仓库中的源码、头文件与示例世界,系统梳理该版本的核心升级:新增 Clearpath Heron USV 机器人、用 W3D 格式取代 X3D 的导出体系、Supervisor API 对 PROTO 内部字段的内省能力,以及 ROS/ROS 2 生态的策略调整。读完本文,你将掌握 R2025a 新增 API 的用法与改名规则、W3D 在源码中的落地路径,以及如何在File > Open Sample World中快速体验新机器人。
版本背景与总体定位
Webots R2025a 于 2025 年 1 月 31 日发布,是 Webots 开源机器人仿真器在 2025 年的第一个主版本。官方发布说明将其定位为"新特性 + 改进 + 缺陷修复"的综合性版本,官方文档同时强调:本文只呈现主要新特性,完整变更清单请以 Change Log(R2025) 为准。
从 R2025 Change Log 可以看到,R2025a 的实际改动范围远不止发布说明中的几条,还包括:
- 移除 Ubuntu 20.04 "Focal Fossa" 支持,新增 Ubuntu 24.04 "Noble Numbat" 支持;
- 移除 macOS 11 "Big Sur" 支持,新增 macOS 14 "Sonoma" 支持;
- 移除 Lua 作为 PROTO 脚本语言的支持(#6642);
- 新增
indirectFieldAccess标签,允许在 PROTO 模板中不引用具体字段而直接使用fields变量; - 新增粮仓(silo)与田间水渠(field ditch)模型;
- 改进旋转式 Lidar 的图像范围、提升 box-plane 碰撞的精度与速度等。
因此,阅读本文时建议把发布说明当作"导览地图",把 Change Log 当作"完整索引",两者配合使用。
新机器人:Clearpath Heron USV
R2025a 在机器人库中新增了 Clearpath Robotics 的Heron USV(Unmanned Surface Vehicle,无人水面艇)模型。Heron 是一种双体船式(双 hull)水面机器人,适用于湖泊、港口等水域环境的水文测量、环境采样与巡逻任务。
在仓库中,该机器人位于 projects/robots/clearpath/heron/,其核心组成包括:
- PROTO 定义:Heron.proto,封装了船体、推进器、传感器等完整节点层级;
- 控制器:heron_usv_controller,用于控制推进与航行;
- 示例世界:ocean.wbt 与 swarm.wbt,分别演示单艇航行与多艇编队(swarm)场景。
如何快速体验
启动 Webots 后,通过菜单File > Open Sample World > ocean.wbt或File > Open Sample World > swarm.wbt即可加载 Heron 的演示世界:
ocean.wbt:单艘 Heron 在海洋环境中航行的基础演示;swarm.wbt:多艘 Heron 协同运行的编队演示,适合研究水面机器人的群体行为。
进阶说明:从 R2025b 看 Heron 的持续演进
在 R2025b 的 Change Log 中可以看到,Heron 的immersionProperties字段在后续版本中改为"可导出"——即用户可以在不修改 PROTO 源文件的前提下,直接在世界文件中覆盖该字段来调整浮力/浸没物理参数。这说明 Heron 模型不仅是一个静态外观模型,其水面物理行为参数也是可配置的,为船舶运动学与浮力仿真研究提供了切入点。
引入 W3D 格式:统一 Webots / WebotsJS / webots.cloud 的导出体系
R2025a 最核心的技术变更,是用全新的W3D 格式取代沿用多年的X3D 格式,用以简化仿真工作流。这一更新使 Webots、WebotsJS 与 webots.cloud 三端保持一致,为传感器、执行器、视觉组件等各类元素提供了统一且一致的导出系统。
W3D 在源码中的落地
从源码可以清晰地看到 W3D 已经深度融入导出管线:
- 写出器(Writer):WbWriter.cpp 中,
WbWriter根据文件扩展名识别格式:当文件名以.w3d结尾时,mType被设置为W3D,并有isW3d()查询接口(见 WbWriter.hpp); - 解析器(Parser):WbParser.cpp 在解析 PROTO 字段声明时,接受的关键字列表扩展为
field、unconnectedField、w3dField与hiddenField; - 语言关键字表:WbLanguage.cpp 中同样登记了
w3dField,替换了旧的关键字vrmlField; - Web 流式服务器:WbW3dStreamingServer.cpp 直接以
.w3d为传输格式向客户端发送节点与世界内容("Streaming server: Client set mode to W3D."),其代码注释明确指出PROTO 参数节点不会被导出到 W3D 或传输给 webots.min.js,这是理解 W3D 导出边界的关键细节; - 场景导出:WbWorld.cpp 在导出场景时将
.html后缀替换为.w3d,并注明"只有 W3D 导出器依赖 OpenGL 数据"。
对外可见的变化:web 动画中的.w3d
W3D 同样体现在文档化的 web 动画工作流中。web-animation.md 中,data-scene属性与scene键所引用的 3D 场景文件名已从.x3d变为.w3d,例如scene: name of the .w3d file。这意味着:如果你在 R2025a 及之后版本中导出 web 动画或使用 WebotsJS 播放场景,看到的将是一份.w3d文件,而不是旧的.x3d文件。
配套变更:移除 VRML 支持、Surveyor 升级
与 W3D 一并推进的还有两件事:
- 移除 VRML 支持:PROTO 字段声明中的
vrmlField被w3dField取代(见上文 WbParser.cpp 的关键字表),导出流程因此更干净、更统一; - Surveyor 机器人增强:发布说明指出 Surveyor 机器人新增了履带(tracks)并更新了控制器。仓库证据在 SurveyorSrv1.proto:其中定义了
DEF LEFT Track、DEF RIGHT_TRACK Track及多组TrackWheel节点,控制器同步更新为 surveyor.c。你可以在File > Open Sample World > srv-1.wbt(srv-1.wbt)中验证履带运动效果。
迁移提示:如果你此前维护过基于
.x3d或vrmlField的旧工作流,升级到 R2025a 后需要将场景导出与 PROTO 字段声明同步迁移到 W3D 语法。
Supervisor API 增强:直接内省 PROTO 内部字段
R2025a 对Supervisor API做了一项重要增强:现在可以直接访问 PROTO 层级结构中的内部字段,无需先将 PROTO 展开为基本节点即可进行内省与操控。这项能力对需要"程序化调试复杂 PROTO 结构"的开发者尤其有价值。
新增函数与头文件证据
在控制器 C 头文件 supervisor.h 中,可以看到完整的 PROTO 内省 API 家族:
// PROTO introspection const char *wb_supervisor_proto_get_type_name(WbProtoRef proto); bool wb_supervisor_proto_is_derived(WbProtoRef proto); WbProtoRef wb_supervisor_proto_get_parent(WbProtoRef proto); WbFieldRef wb_supervisor_proto_get_field(WbProtoRef proto, const char *field_name); WbFieldRef wb_supervisor_proto_get_field_by_index(WbProtoRef proto, int index); int wb_supervisor_proto_get_number_of_fields(WbProtoRef proto);配套新增的WbProtoRef类型(supervisor.h)用于持有对 PROTO 实例的引用。典型的使用链路是:
- 通过
wb_supervisor_node_get_proto(WbNodeRef node)从场景树中的节点拿到WbProtoRef; - 用
wb_supervisor_proto_get_number_of_fields()枚举字段数量、wb_supervisor_proto_get_field()/_by_index()按名或按索引取得内部字段句柄; - 对返回的
WbFieldRef复用既有的wb_supervisor_field_get_*/wb_supervisor_field_set_*系列函数完成读取与修改。
API 改名:wb_supervisor_node_get_proto_*→wb_supervisor_node_get_base_node_*
为了提升命名清晰度,R2025a 对既有 API 进行了重命名(详见 R2025 Change Log):
wb_supervisor_node_get_proto_*系列改名为wb_supervisor_node_get_base_node_*;- ROS 服务中
supervisor_node_get_field_*的proto参数改名为queryBaseNode。
新命名已在头文件中生效,例如 supervisor.h:
WbFieldRef wb_supervisor_node_get_base_node_field(WbNodeRef node, const char *field_name); WbFieldRef wb_supervisor_node_get_base_node_field_by_index(WbNodeRef node, int index); int wb_supervisor_node_get_number_of_base_node_fields(WbNodeRef node);官方发布说明强调,这一改名"将现有控制器的影响降到最低"——控制器代码只需把旧函数名机械替换为新函数名即可,调用约定不变。此外 R2025a 还修复了wb_supervisor_node_get_number_of_fields在 MATLAB 中的方法签名问题,并修复了以错误方式通过 Supervisor API 访问 PROTO 节点时导致崩溃的问题(改为给出更好的警告,见 changelog-r2025.md)。
配套新能力
除内省函数外,R2025a 还新增了"查询场景树中与 PROTO 内部字段对应的字段"的能力,以及indirectFieldAccess标签(允许 PROTO 模板中不引用具体字段而使用fields变量)。这些特性叠加后,Supervisor 控制器可以从"黑盒式地驱动 PROTO 参数"升级为"结构化地遍历、发现并修改嵌套 PROTO 的任意内部参数",大幅简化复杂 PROTO 的仿真控制与调试流程。
ROS 与 ROS 2:迁移 ROS 2、新增 Jazzy 支持与新演示
R2025a 是 ROS 生态策略调整的重要版本。
策略调整:告别 ROS 1,拥抱 ROS 2
webots_ros包弃用:由于 ROS 1 Noetic 将于 2025 年 5 月到达 End of Life(EOL),官方强烈建议用户迁移到 ROS 2;- Docker 兜底方案:仍需要 ROS 1 支持的用户,官方提供基于 Docker 的解决方案,可在
webots_ros仓库的docker分支获取(对应仓库位于本镜像的 projects/robots 生态之外,需单独拉取); - ROS 2 版本矩阵变化:R2025a新增支持 ROS 2 Jazzy Jalisco,同时停止支持 ROS 2 Iron Irwini,保证与最新 ROS 2 开发进展的兼容性。
从 R2025 Change Log 还可确认:R2025a 已正式移除 ROS 1 支持。
新演示:Husarion ROSbot 系列
Husarion ROSbot 与 ROSbot XL演示展示了面向自主导航与科研的通用机器人平台,核心亮点是演示了robot_localization包在 Webots 中的**传感器融合(sensor fusion)**用法。
在仓库中,Husarion 机器人模型位于 projects/robots/husarion/,其 PROTO 与示例世界文件(含.dae网格、.proto定义与两个.wbt世界)可作为学习该演示的配套资料。
新演示:Crazyflie 无人机
Crazyflie是 Bitcraze 推出的轻量、敏捷室内探索无人机。该演示展示了使用 Webots ROS 2 插件实现 PID 控制的完整流程,是学习 ROS 2 驱动仿真空心无人机控制的典型样例。
对应的 Bitcraze 机器人模型位于 projects/robots/bitcraze/,包含crazyflie相关 PROTO、控制器与示例世界。
安装与获取方式
这两个演示包在 ROS 2 同步后,可通过下列包名安装:
ros-${ROS_DISTRO}-webots-ros2-crazyflie ros-${ROS_DISTRO}-webots-ros2-husarion其中${ROS_DISTRO}替换为你实际使用的 ROS 2 发行版(如jazzy)。完整变更细节请查阅webots_ros2包自身的 CHANGELOG(仓库中未内置该文件,需从 ROS 2 包源获取)。
额外亮点:系统兼容性与体验优化
R2025a 的系统兼容性矩阵更新如下:
| 系统 | 变化 |
|---|---|
| Ubuntu | 新增 24.04 "Noble Numbat" 支持;移除 20.04 "Focal Fossa" |
| macOS | 新增 14 "Sonoma" 支持;移除 11 "Big Sur" |
这与 changelog-r2025.md 中的记录完全一致。如果你正运行旧版系统,升级前请确认当前发行版仍在支持矩阵内。
其他值得关注的体验优化(来自 R2025 Change Log):
- 显示与设备:改进旋转式 Lidar 的图像范围;新增粮仓与田间水渠模型;
- 物理引擎:提升 box-plane 碰撞的速度与精度,并修复了碰撞可视化框的坐标错误;
- 场景树与编辑器:修复非法世界文件导致的崩溃、修复 PROTO 转换为基础节点时
TrackWheel字段值丢失的问题; - 稳定性:修复 Speaker 相对路径在外部控制器下失效、雷达多目标数据在 Python 下获取失败、
supervisor_export_image在--minimize --no-rendering模式下不可用等多个缺陷。
致谢与社区
R2025a 包含来自社区大量贡献者的工作,包括 Abdulrasheed Fawole、Adrián Matejov、Andreas Merkle、Anthony Welte、Benjamin Délèze、Darko Lukić、Olivier Michel、Stefania Pedrazzi、Yannick Goumaz 等(完整名单见 Webots-2025-a-release.md 原文)。Webots 的开发同时获得 OpenDR、OPTIMA、SimGait 等欧洲研究项目的部分支持。
总结:R2025a 带来的关键升级路径
| 主题 | R2025a 关键动作 | 仓库证据 |
|---|---|---|
| 新机器人 | 新增 Clearpath Heron USV 及 ocean/swarm 演示世界 | Heron.proto、ocean.wbt |
| 格式体系 | X3D → W3D,vrmlField→w3dField,移除 VRML | WbWriter.cpp、WbParser.cpp |
| Supervisor API | 新增 PROTO 内省函数与WbProtoRef;get_proto_*改名get_base_node_* | supervisor.h、supervisor.h |
| ROS 生态 | 移除 ROS 1;新增 ROS 2 Jazzy、停止 Iron;新增 Crazyflie/Husarion 演示 | changelog-r2025.md |
| 系统支持 | 新增 Ubuntu 24.04 与 macOS 14 | changelog-r2025.md |
对于正在使用 Webots 的开发者而言,R2025a 的升级重点是三件事:将场景导出链路迁移到 W3D(尤其是 web 动画与流式传输场景)、将 Supervisor 控制器的get_proto_*调用改名为get_base_node_*并善用新的 PROTO 内省 API,以及跟随 ROS 生态向 ROS 2 迁移。完整的问题清单与全部改动细节,请随时回到 R2025 Change Log 查阅。
- 科研
- 自动驾驶
- 物理引擎
【免费下载链接】webots
Webots Robot Simulator
相关推荐
Webots机器人仿真教程:创建你的第一个PROTO原型
Webots机器人仿真教程:创建你的第一个PROTO原型 前言 在机器人仿真开发中,我们经常需要重复使用相同的机器人模型。Webots提供的PROTO机制可以让
科研自动驾驶物理引擎开启机器人仿真新纪元:Webots全栈开发深度解析
开启机器人仿真新纪元:Webots全栈开发深度解析 想象一下,你站在一个虚拟实验室中,眼前是各种形态的机器人——从灵巧的工业机械臂到智能的自动驾驶汽车,它们都在
科研自动驾驶物理引擎a-picture-is-worth-a-1000-words项目离线同步技术:IndexedDB与Service Worker
a picture is worth a 1000 words项目离线同步技术:IndexedDB与Service Worker 你是否遇到过这样的困扰:在没有
科研自动驾驶物理引擎
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考