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 "接口包"
至此,我们就初始化完成了我们的三个包。