260329

按照 Gazebo 的官方教程,我们最好是先从 UI 的认识开始。

先通过:

gz sim shapes.sdf

来打开一个 Gazebo 的基础场景吧。

然后,我们就可以开始利用 Gazebo 的官方教程来了解一下这个 UI 了...吗?

似乎是不太行,我想了想,这和游戏差不多,就自己瞎折腾探索一下好了。

玩的过程里有个要避雷的点是,track一个物体后是没有显式的 untrack的选项的,需要点按一下 esc即可摆脱追踪。

以及,这个 UI 确实是好简陋...

通过和 AI 的沟通我了解到,这个 UI 确实是有点过于简陋和原始了。

因此,Gazebo 这个东西对我来说则主要方向为:会用仿真做实验、做项目、搭系统。

定位就很像一个单纯的观察窗口。

而非精通这玩意的 UI。

在大致了解了这个东西的 UI 是个什么东西后,我觉得可以进行后面的工作——写 SDF 了。

因此我们接下来就通过代码和 CLI 来达到我们的目的。

接下来就来创建我们的包吧,我们打算这样来组织我们的目录:

KiBotOne/
├── src/
│   ├── kibot_one_sim/
│   ├── kibot_one_control/
│   └── kibot_one_interfaces/
├── build/
├── install/
├── log/
└── README.md

其中,kibot_one_sim放我们的仿真资源包,如一系列的 sdf文件和 toml或 yaml文件等。

然后,kibot_one_control 里放我们实际的 ROS2 机器人的代码,相当于是:ROS2 控制与业务逻辑包。

最后是 kibot_one_interfaces,字面意思,接口,由于我们的控制代码是使用 python 写的,而接口只能放在 C++包中,因此我们需要单独创建这样的一个接口包。

在创建好这些目录后,我们就可以进行初始化了。

我们可以在根目录下通过:

uv init --python 3.12.3

来初始化这样的一个 python 项目。

然后通过:

uv venv .venv --python 3.12.3

来创建我们指定 python 版本的 python 虚拟环境。

我们 python 版本指定的是 3.12.3,这是因为我们目前的 ROS2 Jazzy 支持的 python 版本就是 3.12.3。

同时,我们需要手动添加下面的依赖:

catkin-pkg
empy
lark
numpy

通过添加这四个依赖才能保证我们的 python 代码可以正常通过 colcon构建。

然后通过下面的命令创建我们的 kibot_one_sim包:

ros2 pkg create --build-type ament_cmake --license Apache-2.0 kibot_one_sim --description "仿真资源包"

然后通过下面的命令来创建我们的 kibot_one_control 包:

ros2 pkg create kibot_one_control --build-type ament_python --license Apache-2.0 --dependencies rclpy geometry_msgs rclpy --description "机器人核心逻辑"

然后通过下面的命令来创建我们的 kibot_one_interface 包:

ros2 pkg create --build-type ament_cmake --license Apache-2.0 kibot_one_interface --description "接口包"

至此,我们就初始化完成了我们的三个包。