# Gazebo Models
**Repository Path**: st0726/gazebo-models
## Basic Information
- **Project Name**: Gazebo Models
- **Description**: 备份已配置的gazebo模型与世界文件。
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: for-new-px4
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-11-18
- **Last Updated**: 2025-11-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 适用于Gazebo仿真的模型与世界文件
本仓库收集了适用于Gazebo仿真的诸多模型文件,包括场景、物件、载具、世界文件等。主要应用于PX4与Gazebo的联合仿真。
>如果你只是使用Gazebo,或者使用的是其他与Gazebo联动的软件包,自行为Gazebo配置环境变量即可。
此外,本仓库还开发了一个Python小插件,通过键盘控制场景内的模型移动,可以同时控制位置与偏航角,便于进行跟踪、打击等算法的仿真实验。
在Ubuntu 20.04 + Gazebo 11 + PX4 v1.11.3/v1.15.0下验证通过。
**此分支是为新版本PX4固件(高于v1.13.0)准备的!**
如果你正在使用旧版本固件,请切换到for-old-px4分支上。
## 声明
本仓库的模型来源为[3DGEMS](https://data.nvision2.eecs.yorku.ca/3DGEMS/), [PX4 Gazebo Plugin Suite](https://github.com/PX4/PX4-SITL_gazebo-classic/tree/main)与[Realsense_Ros_Gazebo](https://gitee.com/nie_xun/realsense_ros_gazebo)。
- **3DGEMS**
是一个包含 270 多个 3D 模型,用于在 Gazebo 仿真中进行机器人应用的数据集。但是,在数据集官网下载的模型大多有问题(模型文件中的名称标签不符合XML语法,比如包含了空格),导致无法直接调用或报错。本仓库已经基本修复了这些错误。
- **PX4 Gazebo Plugin Suite**
已经被原生集成到了PX4-Autopilot固件中,因此编译时会直接生成相关文件。但是为了应用的方便,本仓库将这些自带的模型与第三方的模型进行了分类与集成,便于查看和调用。
- **Realsense_Ros_Gazebo**
此项目源于Intel Realsense实感相机为Gazebo开发的插件,此项目的作者将官方的xacro模型文件导出为了sdf文件,并给出了配置深度相机仿真的[相关教程](https://blog.csdn.net/weixin_41469272/article/details/117919845)(虽然应用了这位作者的模型,但我不建议参照他的教程进行配置,比较麻烦且略显凌乱。我会在下面说明如何配置Realsense相机,如D435i)。
## 简介
本仓库涵盖了大部分仿真场景,且已完成了四旋翼无人机在室内外场景利用双目深度相机D435i进行定位与规划的仿真实验。你也可以根据自己的需要编辑模型文件与世界文件进行仿真。
涵盖的模型种类如下:
- Cameras:相机:单目、双目、深度相机等。
- Decoration:装饰:相框、灯具、钟表、花瓶等。
- Earthquake:地震:模拟废墟环境的物体,如破碎的花瓶、餐具和碎片。
- Electronics:电子设备:如计算机、笔记本电脑等电子设备型号。
- Environments:环境:地板、房间、户外场景等。
- Experiment:实验:用于载具实验的道具,如标靶,棋盘格等。
- Food:食品:各种食品,如汽水瓶、糖果和甜甜圈。
- Furniture:家具:沙发、桌子、书桌、椅子等。
- Kitchen:厨房:杯子、盘子和瓶子。
- Miscellaneous:杂项:人物、地板、植物、垃圾桶等。
- Outdoors:户外:户外建筑、道路、装饰等。
- Robots:机器人:不同型号的机器人及其关节。
- Sensors:传感器:GPS、雷达、声呐等传感器。
- Shapes:形状:不同颜色的圆柱、立方体和球体等。
- Stationery:文具:包括钢笔、书籍和文件。
- Tools:工具:工具箱、锤子和锥形桶等。
- Traffic:交通:车辆模型、桥梁等。
- Vehicles:载具:可以控制并仿真的模型,如无人机、无人船、无人车等。
除`Vehicles`以外,其他模型一般都作为场景内的装饰。
世界文件`.world`本质上是调用模型和贴图组合场景而得的,你也可以用以上模型组成自己的世界文件并导出。本仓库也预设了很多世界文件以供使用。
此外,作者还编写了一个Python脚本用于控制模型在世界中移动,本质上是调用了Gazebo的话题`'gazebo/set_model_state`以高频率更新模型的位置而实现移动的效果。
控制逻辑已经经过验证,可以实现较为连续流畅的移动,还能够偏转物体的方向(即偏航角)。
## 前提条件
请确保已经完成了PX4固件的编译与ROS、MAVROS的安装,并能够在gazebo中生成无人机模型。具体说来,如果你能够启动`roslaunch px4 mavros_posix_sitl.launch`,则环境正常。
如果还没有配置好PX4编译环境,请参照[Ubuntu20.04+ROS1+PX4+Gazebo仿真(三)环境配置](https://www.bilibili.com/opus/934654041226477571)和[PX4从放弃到精通(二):ubuntu18.04配置px4编译环境及mavros环境](https://blog.csdn.net/qq_38768959/article/details/106041494?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167361309116782425683823%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167361309116782425683823&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-4-106041494-null-null.blog_rank_default&utm_term=gazebo&spm=1018.2226.3001.4450)两篇教程进行配置。
>以上教程基本适用于各版本的PX4环境编译,但是在高版本固件中,gazebo仿真的功能包路径发生了变化。具体说来是:
>```bash
>export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/sitl_gazebo
>```
>更改为了:
>```bash
>export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic
>```
>请注意更改~/.bashrc文件的路径。
gazebo需要使用显卡驱动,否则在加载大型场景和相机插件时会很卡。请按照[Gazebo贼卡,使用GPU加速重装显卡驱动无效解决方法](https://blog.csdn.net/weixin_63843256/article/details/145191913)和[Gazebo GPU加速【gzserver running in GPU】](https://blog.csdn.net/qq_38853759/article/details/132522471)等教程配置。
## 使用方法
执行删除和覆盖操作之前,**最好先备份**!
进行以下步骤之前,需要确保你已经成功执行过`make px4_sitl gazebo`命令,并且能找到`PX4-Autopilot/build`文件夹存在。
如无特别说明,下面教程中的文件和文件夹都位于`PX4-Autopilot/`中。
**1**. 下载本仓库到任一文件夹:
```bash
git clone https://gitee.com/Invocatory_Weiyang/gazebo-models.git
```
**2**. 将本仓库`models`和`worlds`文件夹覆盖到`Tools/simulation/gazebo-classic/sitl_gazebo-classic`下的同名文件夹。需要先删除原有的文件夹,然后再将本仓库中的同名文件夹粘贴进去。不能直接合并,有可能报错。
**3**. 用本仓库中`source`下的`CMakeLists.txt`替换掉`Tools/simulation/gazebo-classic/sitl_gazebo-classic`中的同名文件。
**4**. 将本仓库中的`setup_models.bash`复制到`Tools/simulation/gazebo-classic/sitl_gazebo-classic`中。
>除非你了解环境变量的配置方法,否则不要移动这个文件的位置。
**5**. 打开`Tools/simulation/gazebo-classic/setup_gazebo.bash`,找到这一行:
```bash
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:${SRC_DIR}/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models
```
在下面添加:
```bash
source ${SRC_DIR}/Tools/simulation/gazebo-classic/sitl_gazebo-classic/setup_models.bash
```
**6**. 将本仓库中`source`下的`libgazebo_ros_openni_kinect.so`和`librealsense_gazebo_plugin.so`插件移动到`build/px4_sitl_default/build_gazebo-classic`文件夹下。
**7**. 模型现在已经配置完毕,现在可以启动它了。下面将要启动一个在bayland场景中搭载前视、下视双目相机的四旋翼无人机solo进行仿真。
打开`launch/mavros_posix_sitl.launch`文件,找到这一段代码:
```xml
```
将其修改为:
```xml
```
然后保存退出。打开终端,执行如下命令:
```bash
roslaunch px4 mavros_posix_sitl.launch
```
启动时可能会报一些关于`spawn service`的错误,请耐心等待。如果过长时间仍未加载完成,可能是gazebo自动联网搜索模型了。可以尝试在`~/.bashrc`中加上:
```bash
export GAZEBO_MODEL_DATABASE_URI=""
```
也许有帮助。如果正确启动,应当出现了如下的场景。

你可以新开一个终端,输入`rqt_image_view`命令,此时就能看到两个双目摄像机发送的图像数据了。
你可以将刚才更改的`launch`文件中的`my_camera`和`world`参数进行修改,改为你喜欢的机型和世界文件。我已经在`world`文件夹中预置了一些好看和实用的模型,标记为01-12,你可以选择使用。
>虽然`my_camera`参数叫这个名字,但是为它加载的模型必须是**载具模型**,而不能是单个的相机模型(换句话说,相机模型必须挂载到载具上)。
另外,不能直接替换`vehicle`的参数值来更改飞机模型,因为这个参数值是用来告诉启动文件“机型”是什么的。
**8**. 如果你想要移动场景内的模型,则可配置我的**移动插件**`move_car.py` 。(其实它可以移动任何模型,但是移动车辆看起来比较真实,所以取了这个名字)
首先,将`sources`文件夹下的`move_car.py`脚本移动到`Tools/simulation/gazebo-classic/sitl_gazebo-classic/scripts`中,右击它,属性-权限,勾选允许文件作为程序执行;
然后,打开上一级文件夹下的`package.xml`,将以下内容复制到一堆`...`(大约在60多行)的后面:
```xml
rospy
gazebo_msgs
std_msgs
```
接着,打开文件夹下的`CMakeLists.txt`,将以下内容复制到`## Install ##`部分的最后:
```cmake
catkin_install_python(PROGRAMS scripts/move_car.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
```
最后,在文件夹内执行:
```bash
catkin build
```
脚本就可以正常启动了。
执行步骤7中的命令打开Gazebo,然后新启动一个终端,输入:
```bash
rosrun mavlink_sitl_gazebo move_car.py
```
你应该能见到如下的界面:

现在可以尝试按下键盘上的WASD键,使模型前进、后退、转向。
按键逻辑是控制物体速度和角度的,即只要你按一次W或者S键模型就会运动,多按几次就会运动的快一些;只要你按一次A或者D键模型就会转向,多按几次就多转几下。模型始终朝着当前偏航角指向的方向运动。
如果需要物体停下,按数字0。
如果需要退出,按两次Ctrl+C。
## 已知问题
本仓库尚有以下Bug未解决。
**1. 部分模型缺失三维文件,导致无法插入。**
我无法解决这个问题,因为本质上该仓库只是收集了一些模型并进行修复、验证。
**2. Realsense双目相机同时插入两个时,只有一个在工作。**
表现为不同的`image_raw`话题上发布了相同的图像。猜测是`librealsense_gazebo_plugin.so`插件的问题,但无法解决。
暂时可行的解决方法是,给另一个双目相机加载`libgazebo_ros_openni_kinect.so`插件,这样两个不同的插件独立工作,问题解决。但此插件不能发布双目话题,只有深度话题,因此如果是需要两个双目图像的应用场景就不能使用了。
>你可能会发现,`depth_camera`模型加载的插件也是上面这个插件。如果你使用这个模型仿真,深度图可能会有问题,疑似是sdf写的有缺陷。推荐使用作者配置的`realsense_camera_2`。
**3. 配置本仓库后,使用`make px4_sitl gazebo`命令加载时会报错。**
表现为:
```
[Err] [InsertModelWidget.cc:403] Missing model.config for model ...
```
不影响编译通过,但用此方式打开gazebo时会加载不出任何模型。初步推断是更改路径导致的错误,但找不到解决方法。你可以使用`roslaunch`启动gazebo,没有任何影响。
**4. PX4 v1.11.3版本的固件自带的GPS插件无法加载。**
表现为PX4无法收到GPS信息,Gazebo中也看不到GPS插件被正确加载。目前不确定是本人偶发的现象还是该版本固件内置的GPS插件的问题。在v1.15.0上测试正常。