Jetty 版本发布说明

Gazebo 团队很高兴地宣布 Gazebo 第 10 个主版本发布,代号 Jetty!Jetty 是一个长期支持(LTS)版本,拥有更长的支持周期——确切地说,支持到 2031 年 5 月。
以下是 Gazebo Jetty 所有新功能的概览:
我们创建了一个逼真的仓库环境,用于展示 Jetty 的最新功能。这个免费、可下载的演示包含货架和一辆用于装卸货物的自主叉车,并附带一个 Open-RMF 演示。

在 Ionic 之前,Gazebo 一直使用 ZeroMQ(0MQ)作为主要的消息传输协议。Gazebo 现在支持 Zenoh 作为替代的传输实现,提供更好的发现机制、互操作性和性能。启用方式:设置环境变量 export GZ_TRANSPORT_IMPLEMENTATION=zenoh。这使得 Gazebo 能够利用 Zenoh 的特性,更无缝地与 ROS 2 Jazzy 以及其他使用 Zenoh 的系统集成。
根据社区反馈,我们新增了一篇完整教程,介绍如何使用 Gazebo Jetty 和 Stable Baselines3 Python 库 进行强化学习。教程将带领你训练强化学习控制器,使安装在机器人小车上的倒立摆保持平衡。Stable Baselines3 只是起点,有经验的开发者可以在此基础上将其他强化学习框架集成到 Gazebo 中。

ROS 社区成员 构建了一套标准仿真接口,旨在提高机器人代码在不同仿真器之间的可移植性。这套标准接口让 ROS 开发者能够根据开发需求,快速便捷地在不同仿真器之间切换。

占用栅格(Occupancy Grid)是机器人用于路径规划的简单 2D 地图。Nav2 等开源导航框架利用这些地图为机器人实现安全导航。现在可以通过 /scan_image 话题并运行以下命令,轻松从 Gazebo 导出占用栅格地图:
gz topic -t /start_exploration -m gz.msgs.Boolean -p 'data: true'

以前,SDFormat 中的 inertial/@auto 属性要求指定物体密度才能自动计算惯性参数。现在可以在 SDFormat 中直接指定物体质量,Gazebo 会自动计算密度和惯性参数!

Qt 是 Gazebo 使用的跨平台 GUI 子系统。我们已升级到最新版本 Qt6——Qt 5 已于 2025 年 5 月 26 日停止支持,因此升级势在必行。此次升级涉及整个 Gazebo 项目中的数百个文件,工作量不小。Gazebo 插件开发者需要将 GUI 插件升级到 Qt6 以保持兼容性。 我们准备了 一份 Gazebo 插件 Qt 迁移指南,帮助开发者更新插件。

我们为 gz-sim 新增了 LookupWheelSlip 系统,它使用 8 位 RGB 查找图来动态调整材质的摩擦参数。该功能可将纹理图像中的特定颜色映射到特定的摩擦值。想在仿真地面添加油渍?只需在纹理图像上绘制油渍区域,并设置所需的摩擦值即可。

我们改进了 gz 工具的工作方式,使调试应用程序更容易,同时改善了对 Windows 和 MacOS 的跨平台支持。为此,我们不再使用基于 Ruby 的 CLI 加载库,改回加载独立应用程序。
我们改进了 Gazebo 从 Fuel(我们的在线模型仓库) 下载模型的方式。模型现在可以在后台并行下载,使 Gazebo 仿真启动更快,资源下载更高效。
包名中包含主版本号是为了允许两个不同版本的 Gazebo 并排安装。虽然这对某些用户有帮助,但给必须定期更新这些版本号的开发者带来了不少麻烦。我们已取消这种做法,使 Gazebo 更易于维护,也方便包开发者使用。
Bazel 模块迁移
Section titled “Bazel 模块迁移”我们已将 gz 包从传统的 Bazel workspace 设置迁移到新的 Bazel 模块系统(Bzlmod)。作为这项工作的一部分,DARTSim、Bullet、FreeImage、Assimp 等关键第三方依赖已打包并发布到 Bazel Central Registry(BCR)。所有 Jetty 和 Ionic 版本的库均已上传到 BCR。

贡献者与支持者
Section titled “贡献者与支持者”特别感谢在 Jetty 测试与教程派对(Jetty Test and Tutorial Party)期间通过审查教程帮助完成此次 Gazebo 发布的社区成员。我们的 Jetty 测试与教程派对 成果颇为可观,很高兴看到这么多新贡献者!这次教程派对举办得非常成功——有 25 名参与者帮助测试 Jetty 版本,使我们能够:
- 关闭 388 个 Issue,占我们 Issue 总数的 68%
- 关闭 148 个 Ubuntu 工单中的 148 个(100%)
- 关闭 83 个 MacOS 工单中的 65 个(44%)
- 关闭 147 个 Windows 工单中的 47 个(32%)
- 关闭 128 个全平台工单中的 128 个(100%)
- 创建了 74 个 PR 来修复发现的问题!
T&T 派对的前二十名贡献者是:
| 名次 | 用户 | 积分 |
|---|---|---|
| 1 | 719.2 | |
| 2 | 410.6 | |
| 3 | 310.0 | |
| 4 | 273.6 | |
| 5 | 269.0 | |
| 6 | 234.0 | |
| 7 | 187.2 | |
| 8 | 165.6 | |
| 9 | 114.0 | |
| 10 | 111.0 | |
| 11 | 100.0 | |
| 12 | 84.4 | |
| 13 | 79.2 | |
| 14 | 76.0 | |
| 15 | 75.0 | |
| 16 | 66.0 | |
| 17 | 53.0 | |
| 18 | 45.0 | |
| 19 | 40.0 | |
| 20 | 40.0 |
我们还要感谢所有为 Jetty 做出贡献的人:
- Aarav Gupta (Amronos)
- Aaron Chong (aaronchongth)
- Abhiroop (akky20)
- Addisu Z. Taddese (azeey)
- Afereti Pama (retinfai)
- Alejandro Hernández Cordero (ahcorde)
- Alessandro Sofia (alesof)
- Alex Faxå (faximan)
- Alexis Tsogias (Zyrin)
- Alon Nusem (4lon)
- amaldev (AmalDevHaridevan)
- Ansh Chablani (anshium)
- Antoine Van Malleghem (avanmalleghem)
- Arjo Chakravarty (arjo129)
- Benjamin Perseghetti (bperseghetti)
- bill (bill997)
- Carlos Agüero (caguero)
- chcaya (chcaya)
- ChenYing Kuo (CY) (evshary)
- Ching-Hsiang Wu (TigerWuu)
- Chris (PimpMyPizza)
- Clara Berendsen (claraberendsen)
- Cristóbal Arroyo (Crola1702)
- Daisuke Nishimatsu (wep21)
- David Dorf (david-dorf)
- David Morilla Cabello (dvdmc)
- Dheeraj Deevi (dheerubhai-101)
- Dyst-0 (Dyst-0)
- efferre79 (efferre79)
- Emmanuel M (EmmanuelMess)
- erling (erlingrj)
- Ethan Holter (ethanholter)
- Fabrice Larribe (teyssieuman)
- Federico Vichachi (Federico-Vichachi)
- FmJarecki (FmJarecki)
- Gabriel Augusto (gabrielaugz)
- Gabriel Pacheco (gabrielfpacheco)
- Gaurav Kumar (GauravKumar9920)
- Gilbert Tanner (TannerGilbert)
- Gopikrishnan K (SuperGops7)
- Griffin Tabor (gftabor)
- Guilhem Saurel (nim65s)
- Gwenn Le Bihan (gwennlbh)
- Harrison Chen (chen-harrison)
- Ian Chen (iche033)
- Ignacio Vizzo (nachovizzo)
- Jasper van Brakel (SuperJappie08)
- Jenn Nguyen (jennuine)
- Jeremy Nimmer (jwnimmer-tri)
- jmackay2 (jmackay2)
- Jorge J. Perez (Blast545)
- Jose Luis Rivero (j-rivero)
- Josh Newans (joshnewans)
- Joshua J. Damanik (damanikjosh)
- Júlia Marsal Perendreu (roboticswithjulia)
- Kai Pastor (dg0yt)
- Khaled Gabr (khaledgabr77)
- Kostubh Khandelwal (exMachina316)
- Leander Stephen D’Souza (leander-dsouza)
- Leo Lin (LeoLin6)
- Luca Della Vedova (luca-della-vedova)
- Maksim Derbasov (ntfshard)
- Marcel Jacobse (mjacobse)
- Martin Pecka (peci1)
- Michael Carlstrom (InvincibleRMC)
- Michael Carroll (mjcarroll)
- Mohamed Hassan (mohamedsayed18)
- mosfet80 (mosfet80)
- muttistefano (muttistefano)
- Nate Koenig (nkoenig)
- Nathan Rogers (torn8to)
- Nguyễn Tấn Anh Khoa (kitare17)
- Nikodem (nikodemj9)
- Nizam Gifary (ngifary)
- Noa Thouard (Noa-Thouard-Nexxis)
- Oscmoar07 (XINJIANGMO)
- Patrick Roncagliolo (roncapat)
- Pravin Dangol (Pravin-Dangol)
- Qingyou Zhao (qingyouzhao)
- Rahul K.A (Rahul-K-A)
- Ramir Sultanov (sumir0)
- Rhys Mainwaring (srmainwaring)
- Rnishu (Rnishu)
- Rômulo Cerqueira (romulogcerqueira)
- Sai Aravind (saiaravind19)
- Saurabh Kamat (sauk2)
- Shady Gmira (shadygm)
- Shameek Ganguly (shameekganguly)
- Shashank (shashank1300)
- Shyam Ganatra (ganatrask)
- Sikiru O. Salau (siksal)
- Silvio Traversaro (traversaro)
- Steve Peters (scpeters)
- Tatsuro Sakaguchi (Tacha-S)
- Trushant Adeshara (trushant05)
- Udaya Prakash (udaya2899)
- Utkarsh Yenurkar (BA-Utkarsh)
- Vasily Kiniv (v-kiniv)
- Vedant Randive (Vedant87)
- VM (Vicky) Brasseur (vmbrasseur)
- WangWeiLin-MV (WangWeiLin-MV)
- Wiktor Bajor (Wiktor-99)
- Xiaochuan Ye (XueSongTap)
- Yaswanth (yaswanth1701)
- Øystein Sture (oysstu)