您好,Gazebo 社区
2022 年 4 月,我们宣布退出 “Ignition”,改用 “Gazebo”。本迁移指南将帮助您在自己的软件包中执行必要的更改,幸运的是,它不会像从 Gazebo Classic 迁移那样麻烦!
那么,实际情况如何呢?总而言之:
这些更改是在
这意味着用户迁移的大部分工作将涉及文件名、目录和源代码的智能查找和替换。如果您需要跟踪为支持核心库迁移而做出的任何更改,也可以查看 GitHub 上的跟踪问题。
本节仅概述了所做的不同改动,如需更详细的 tick-tocks 列表,请参阅各个核心库软件仓库中的迁移文件:
此外,本迁移指南后续章节中的迁移指针也能帮助您准备好软件包并使用 Gazebo。
一般来说,如果您使用的是 Harmonic,由于堆栈中编写了明确的滴答计时逻辑,您仍然可以使用 Ignition 对应程序或 Gazebo 对应程序来处理大多数事情。需要注意的是,使用 Ignition 对应程序通常会引发报废警告。
以下的 Tick-tocks 均已实现,但并非所有 Tick-tocks 都会发出弃用警告。这些 tick-tocks 要么以别名的形式实现,要么以某种重定向机制(如符号链接、目录重定向、源代码中的字符串替换)来替代 Gazebo 对应的目标。
此外,在源代码中,大多数 tick-tocks 都会有相关注释,说明它们已被弃用,或者有一个 GZ_DEPRECATED()
宏调用。
ignition.math.XXX
→ gz.math.XXX
ignition::gazebo::XXX
→ gz::sim::XXX
ignition.msgs.XXX
→ gz.msgs.XXX
, ignition/msgs/header.proto
→ gz/msgs/header.proto
IgnitionFormatter
→ GzFormatter
include/ignition
→ include/gz
ignition::gazebo::systems::LiftDrag
→ gz::sim::systems::LiftDrag
libignition-gazebo-buoyancy-engine-system.so
→ libgz-sim-buoyancy-engine-system.so
lib
和 .so
前缀和后缀!
libignition-gazebo-buoyancy-engine-system.so
→ gz-sim-buoyancy-engine-system
C++
宏
IGN_PARTITION
→ GZ_PARTITION
ign_find_package()
→ gz_find_package()
NO_IGNITION_PREFIX
→ NO_PROJECT_PREFIX
IgnOGRE2_FOUND
→ GzOGRE2_FOUND
tick-tocked
的,但下游库中使用的大多数 CMake 变量都是gz_find_package()
找到的 CMake 软件包
gz_find_package(IgnCURL)
→ gz_find_package(GzCURL)
libignition-cmake3-dev
→ libgz-cmake3-dev
IGN_GAZEBO_RESOURCE_PATH
→ GZ_SIM_RESOURCE_PATH
ign
→ gz
, ign gazebo
→ gz sim
IgnSpinBox
→ GzSpinBox
/ignition/XXX
→ /gz/XXX
/gazebo
不会迁移到 /sim
ignitionrobotics
→ gazebosim
, ign-cmake
→ gz-cmake
ignition-tooling
→ gazebo-tooling
ignitionrobotics.org
→ gazebosim.org
→
ignition:type
有一些例外情况是硬性规定的,这意味着您必须使用 Gazebo 对应程序。使用 Ignition 对应程序很可能会导致编译或其他方面的中断(除非只是文档上的改动)。
ignition/math
→ gz/math
install/share/ignition
→ install/share/gz
IgnUtils.cmake
→ GzUtils.cmake
ignition-utils2
→ gz-utils2
IGN_TRANSPORT_VER
→ GZ_TRANSPORT_VER
sim.ign
→ sim.gzlaunch
,
~/.ignition/gui/log
→ ~/.gz/gui/log
~/.ignition/gazebo/plugins
)https://fuel.ignitionrobotics.org
~/.ignition/fuel
→ ~/.gz/fuel
Ignition Gazebo
→ Gazebo Sim
ign.js
→ gz.js
此外,任何属于 Gazebo 核心库内部且未在下游库中使用的内容(如头文件保护、私有头文件或源代码、测试、文档)都会被硬锁定。
有一小部分内容没有迁移,主要是出于向后兼容的原因(如支持 Fortress)。
ign-cmake2
https://osrf-migration.github.io/ignition-gh-pages
X-Ign-Resource-Version
、IgnitionFuelTools
以下迁移指南仅是如何迁移软件包的指南和建议,应涵盖大多数一般情况。
请牢记将所有 Ignition 对应程序(IGN
、Ign
、Ignition
、 ign
、ignition
)替换为 Gazebo 对应程序(GZ
、Gz
、gz
)的总体目标。
以下做法可能会有很大帮助
此外,如果您是从源代码构建 Gazebo 协议栈,则应进行干净、全新的重建和安装。删除 build
和 install
目录,然后使用 --merge-install
运行联编。
大部分迁移工作主要是查找与 Ignition 相关的术语,并将其替换为与 Gazebo 相关的术语。
不过,有很多边缘情况会导致难以创建脚本来处理迁移(导致错误或 bug),因此在建议迁移步骤之前,最好先了解其中的一些情况。
不区分大小写
IGNITION_ADD_PLUGIN
→ gz_ADD_PLUGIN
贪心匹配
Align
→ Algz
,unsigned
→ unsgzed
,signal
→ sgzal
不将 "gazebo "迁移到 “sim”
ign-gazebo
→ gz-gazebo
(应为 gz-sim
)在 ignition 前匹配 ign
ignition-cmake3
→ gzition-cmake3
迁移不应迁移的库
ignition-cmake2
→ gz-cmake2
语法
已存在的配置文件不会被覆盖,因此如果你想使用旧的配置文件或在自定义位置有一个配置文件,你可能需要手动迁移配置文件中的 Ignition 对应引用,让它们指向相应的对应文件。
ignition::gazebo::systems::Physics
插件。你可能会遇到弃用警告,因为该引用尚未迁移。由于安装空间发生了变化,如果你有涉及 ignition
的硬编码位置,可能需要将它们迁移到 gz
按顺序执行各个部分的步骤非常重要!这些步骤通常从具体到一般。
迁移文件和文件引用
ign(ition)?[_|-]gazebo
模式(不区分大小写)相匹配的文件和目录,并将 ign / ignition
适当迁移到 gz
,将 gazebo
迁移到 sim
。ign / ignition
的文件和目录(不区分大小写),并将它们移至 gz
,同时匹配大小写CMakeLists.txt
文件(以及它们在源文件中的引用!)中:
Find: IGN(ITION)?_GAZEBO
Replace: GZ_SIM
Find: ign(ition)?_gazebo
Replace: gz_sim
Find: IGN(ITION)?_
Replace: GZ_
Find: ign(ition)?_
Replace: gz_
Find: include\(Ign
Replace: include(Gz
Find: include\(ign
Replace: include(gz
Find: gz_find_package\(ign-
Replace: gz_find_package(gz-
Find: gz_find_package\(Ign(ition)?
Replace: gz_find_package(Gz-
Find: ignition-gazebo
Replace: gz-sim
Find: ignition-
Replace: gz-
注意:CMake 参数有时会渗透到源文件中,因此请确保也对它们进行了适当的迁移。
Find: IGN(ITION)?_GAZEBO
Replace: GZ_SIM
Find: ign(ition)?_gazebo
Replace: gz_sim
Find: IGN(ITION)?_
Replace: GZ_
Find: ign(ition)?_
Replace: gz_
对于环境变量,可以使用与宏相同的方法,但要注意环境变量中存储的值!(例如路径)。
此外,日志宏也已迁移!迁移任何用途!
ignerr
-> gzerr
ignwarn
-> gzwarn
ignmsg
-> gzmsg
igndbg
-> gzdbg
ignlog
-> gzlog
ignLogInit
-> gzLogInit
ignLogClose
-> gzLogClose
ignLogDirectory
-> gzLogDirectory
在 .sdf 文件中:
Find: <ignition
Replace: <gz
Find: </ignition
Replace: </gz
Find: ignition:
Replace: gz:
举几个例子:
即使插件的文件名去除了 lib
和 .so
,插件查找器也能找到它们。
在 .sdf
文件和源文件(如 .cc
)中:
Find: (lib)?ign(ition)?-gazebo([^. ]*)\.so
Replace: gz-sim\3
Find: (lib)?ign(ition)?([^. ]*)\.so
Replace: gz\3
Find: ignition::gazebo
Replace: gz::sim
Find: ignition::
Replace: gz::
在 Python 文件中(如 .py
)
Find: ignition.gazebo
Replace: gz.sim
Find: ignition.
Replace: gz.
在 Ruby 文件(如 .i
、.rb
)中
Find: ign(ition)?/
Replace: gz/
在您的信息定义中在您的消息定义中
Find: ign(ition)?\.gazebo
Replace: gz.sim
Find: ign(ition)?/gazebo
Replace: gz/sim
Find: ign(ition)?\.
Replace: gz.
Find: ign(ition)?/
Replace: gz/
到处扫查(特别注意审查这些内容!)。
Find: #include\s*([<"])ign(ition)?/gazebo
Replace: #include \1gz/sim
Find: #include\s*([<"])ign(ition)?/
Replace: #include \1gz/
// Note: You should be wary of the IGNITION GAZEBO case for the following
// and adjust accordingly
Find: #([^\s]*)\s+(.*)IGN(?:ITION)?_(.*)_(H+)_(.*)$
Replace: #$1 $2GZ_$3_$4_$5
Find: #endif\s*// GZ(.*)_H
Replace: #endif // GZ$1_H
Find: namespace\s*ignition
Replace: namespace gz
Find: namespace\s*gazebo
Replace: namespace sim
Find: ignition::gazebo
Replace: gz::sim
Find: Ignition::Gazebo
Replace: Gz::Sim
Find: ignition::
Replace: gz::
Find: Ignition::
Replace: Gz::
您可能需要手动检查:
还要注意,某些 gazebo 实例(通常作为 API 的一部分)需要使用 sim 来代替。
您曾经使用过的地方:
ign gazebo shapes.sdf
现在您应该使用
gz sim shapes.sdf
注意,"gazebo
"动词已被弃用。
为了支持同时安装 Harmonic
和 Fortress
,Harmonic
将不安装 ign CLI
可执行文件(和 gazebo verb
)。这意味着除非同时安装 Fortress
和 Harmonic
,否则 CLI
的使用必须进行迁移。使用 gz
代替 ign
,使用 sim
代替 gazebo
。
你可以在 ~/.bashrc
文件中添加以下脚本,将任何 ign
调用重定向到 gz
,这样就不必迁移所有脚本(仍在使用 ign
),不过还是建议进行迁移。
ign() {
if which ign &> /dev/null; then
$(which ign) "$@"
else
if which gz &> /dev/null; then
echo "[DEPRECATED] ign is deprecated! Please use gz instead!"
if [ "$1" = "gazebo" ]; then
echo "[DEPRECATED] The gazebo verb is deprecated! Please use sim instead!"
shift
$(which gz) sim "$@"
else
$(which gz) "$@"
fi
else
echo "[ERROR] It seems like you don't have Gazebo installed!"
return 1
fi
fi
}
如果您有任何遗留问题或错误迁移的实例,这些内容可能有助于进行双重检查
应根据具体情况进行匹配。
gz-gazebo
gzition
gz
\.ign(ition)?
ign(ition)?[-_]
本节将详细介绍其他一些与 Gazebo 相关的软件包所发生的变化。
ros_ign
已更名为 ros_gz
。所有对 ign
或 ignition
的内部引用(Gazebo 的预览 Harmonic 版本不依赖这些引用)都已迁移。
如果想使用自定义模拟版本或模拟参数运行 ros_gz
演示,请使用 gz_version
和 gz_args
启动参数。使用 ign_version
启动参数还需要明确设置 ign_args
启动参数。