news 2026/10/4 1:49:47

Webots R2025a 版本全解析:Heron USV 新机器人、W3D 格式与 Supervisor PROTO 内省 API

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Webots R2025a 版本全解析:Heron USV 新机器人、W3D 格式与 Supervisor PROTO 内省 API
  • 科研
  • 自动驾驶
  • 物理引擎

【免费下载链接】webots

Webots Robot Simulator

项目地址:https://gitcode.com/gh_mirrors/web/webots
点击查看免费下载

本篇文章以 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 一并推进的还有两件事:

  1. 移除 VRML 支持:PROTO 字段声明中的vrmlField被w3dField取代(见上文 WbParser.cpp 的关键字表),导出流程因此更干净、更统一;
  2. 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 实例的引用。典型的使用链路是:

  1. 通过wb_supervisor_node_get_proto(WbNodeRef node)从场景树中的节点拿到WbProtoRef;
  2. 用wb_supervisor_proto_get_number_of_fields()枚举字段数量、wb_supervisor_proto_get_field()/_by_index()按名或按索引取得内部字段句柄;
  3. 对返回的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,移除 VRMLWbWriter.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 14changelog-r2025.md

对于正在使用 Webots 的开发者而言,R2025a 的升级重点是三件事:将场景导出链路迁移到 W3D(尤其是 web 动画与流式传输场景)、将 Supervisor 控制器的get_proto_*调用改名为get_base_node_*并善用新的 PROTO 内省 API,以及跟随 ROS 生态向 ROS 2 迁移。完整的问题清单与全部改动细节,请随时回到 R2025 Change Log 查阅。

  • 科研
  • 自动驾驶
  • 物理引擎

【免费下载链接】webots

Webots Robot Simulator

项目地址:https://gitcode.com/gh_mirrors/web/webots
点击查看免费下载

相关推荐

上一篇:WALDO高分辨率图像检测:分块处理与拼接技术
下一篇:使用 launchd 在 macOS 上后台常驻运行 Syncthing:LaunchAgent 配置全指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 1:49:41

Linux内核reset通用框架:功耗子系统中的确定性复位保障

1. 项目概述:为什么“reset通用框架”是功耗子系统里最常被忽略的硬骨头在Linux内核开发圈里,一提到功耗子系统(PM subsystem),大家本能想到的是cpuidle、cpufreq、runtime PM这些高频词——它们出现在面试题里、写在驱…

作者头像 李华
网站建设 2026/10/4 1:48:23

AI-Native IP研发流程:从Spec到RTL的自动化实践与避坑指南

1. 从一份规格书到能跑通的电路,中间到底隔着什么做数字芯片这行的朋友大概都有体会:拿到一份 IP 规格书(Spec)的那一刻,心里是清楚的——功能、接口、时序、寄存器映射,白纸黑字写得明明白白。但从这份 Sp…

作者头像 李华
网站建设 2026/10/4 1:48:16

【电机驱动】使用Jetson Orin NX实现与电机的通信

一开始计划打算直接使用Jetson ORIN NX上的CAN实现与电机的通信,但是在调试的过程中发现ORIN上的CAN使用会存在问题。为了加速开发,后面使用了一块STM32H7的板子实现电机数据的收发,再通过串口与ORIN实现通信。CAN通讯实现(失败&a…

作者头像 李华
网站建设 2026/10/4 1:47:31

U9客开中UI插件开发过程中碰到有一个坑

U9系统太大了,不可避免会发生一些隐含的重大BUG。今天碰到一个这样的问题,在请购单列表上做了一个【模拟提交】的按钮,目的是取代原来的【提交】按钮,目的是可以加上个性化需要的防呆措施,实现客制化的目的。效果如下图…

作者头像 李华
网站建设 2026/10/4 1:47:14

《计算机网络第5版》课后答案怎么用?严伟潘爱民版复习避坑指南

简介:《计算机网络》第5版严伟、潘爱民译本的课后答案,定位为计算机专业学生、考研者及自学者的习题辅导资料,覆盖教材第一章至第二章课后习题,帮助核对解题过程、理解网络核心原理。内含1个doc文档,压缩包仅733KB&…

作者头像 李华
网站建设 2026/10/4 1:46:51

奇诺多面体在虚拟电厂聚合调控中的应用与Python实现

简介:一份基于奇诺多面体的虚拟电厂分布式资源广域聚合调控方法复现资源,面向智能电网、能源管理与优化控制研究人员,以及关注分布式资源聚合的学者。内容以Python完整可运行代码及逐段解释为主线,涵盖奇诺多面体类定义与顶点计算…

作者头像 李华