Skip to content

npu-ius-lab/Gazebo-Models

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

适用于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, PX4 Gazebo Plugin SuiteRealsense_Ros_Gazebo

  • 3DGEMS 是一个包含 270 多个 3D 模型,用于在 Gazebo 仿真中进行机器人应用的数据集。但是,在数据集官网下载的模型大多有问题(模型文件中的名称标签不符合XML语法,比如包含了空格),导致无法直接调用或报错。本仓库已经基本修复了这些错误。

  • PX4 Gazebo Plugin Suite 已经被原生集成到了PX4-Autopilot固件中,因此编译时会直接生成相关文件。但是为了应用的方便,本仓库将这些自带的模型与第三方的模型进行了分类与集成,便于查看和调用。

  • Realsense_Ros_Gazebo 此项目源于Intel Realsense实感相机为Gazebo开发的插件,此项目的作者将官方的xacro模型文件导出为了sdf文件,并给出了配置深度相机仿真的相关教程(虽然应用了这位作者的模型,但我不建议参照他的教程进行配置,比较麻烦且略显凌乱。我会在下面说明如何配置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仿真(三)环境配置PX4从放弃到精通(二):ubuntu18.04配置px4编译环境及mavros环境两篇教程进行配置。

以上教程基本适用于各版本的PX4环境编译,但是在高版本固件中,gazebo仿真的功能包路径发生了变化。具体说来是:

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/sitl_gazebo

更改为了:

export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic

请注意更改~/.bashrc文件的路径。

gazebo需要使用显卡驱动,否则在加载大型场景和相机插件时会很卡。请按照Gazebo贼卡,使用GPU加速重装显卡驱动无效解决方法Gazebo GPU加速【gzserver running in GPU】等教程配置。

使用方法

执行删除和覆盖操作之前,最好先备份
进行以下步骤之前,需要确保你已经成功执行过make px4_sitl gazebo命令,并且能找到PX4-Autopilot/build文件夹存在。
如无特别说明,下面教程中的文件和文件夹都位于PX4-Autopilot/中。

1. 下载本仓库到任一文件夹:

git clone https://gitee.com/Invocatory_Weiyang/gazebo-models.git

2. 将本仓库modelsworlds文件夹覆盖到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,找到这一行:

export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:${SRC_DIR}/Tools/simulation/gazebo-classic/sitl_gazebo-classic/models

在下面添加:

source ${SRC_DIR}/Tools/simulation/gazebo-classic/sitl_gazebo-classic/setup_models.bash

6. 将本仓库中source下的libgazebo_ros_openni_kinect.solibrealsense_gazebo_plugin.so插件移动到build/px4_sitl_default/build_gazebo-classic文件夹下。

7. 模型现在已经配置完毕,现在可以启动它了。下面将要启动一个在bayland场景中搭载前视、下视双目相机的四旋翼无人机solo进行仿真。

打开launch/mavros_posix_sitl.launch文件,找到这一段代码:

    <!-- vehicle model and world -->
    <arg name="est" default="ekf2"/>
    <arg name="vehicle" default="iris"/>
    <arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/empty.world"/>
    <arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/Vehicles/$(arg vehicle)/$(arg vehicle).sdf"/>

将其修改为:

    <!-- vehicle model and world -->
    <arg name="est" default="ekf2"/>
    <arg name="vehicle" default="solo"/>
    <arg name="my_camera" default="solo_with_frontward_downward_D435i"/>
    <arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/09_baylands.world"/>
    <arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/Vehicles/$(arg my_camera)/model.sdf"/>

然后保存退出。打开终端,执行如下命令:

roslaunch px4 mavros_posix_sitl.launch

启动时可能会报一些关于spawn service的错误,请耐心等待。如果过长时间仍未加载完成,可能是gazebo自动联网搜索模型了。可以尝试在~/.bashrc中加上:

export GAZEBO_MODEL_DATABASE_URI=""

也许有帮助。如果正确启动,应当出现了如下的场景。

你可以新开一个终端,输入rqt_image_view命令,此时就能看到两个双目摄像机发送的图像数据了。

你可以将刚才更改的launch文件中的my_cameraworld参数进行修改,改为你喜欢的机型和世界文件。我已经在world文件夹中预置了一些好看和实用的模型,标记为01-12,你可以选择使用。

虽然my_camera参数叫这个名字,但是为它加载的模型必须是载具模型,而不能是单个的相机模型(换句话说,相机模型必须挂载到载具上)。 另外,不能直接替换vehicle的参数值来更改飞机模型,因为这个参数值是用来告诉启动文件“机型”是什么的。

8. 如果你想要移动场景内的模型,则可配置我的移动插件move_car.py 。(其实它可以移动任何模型,但是移动车辆看起来比较真实,所以取了这个名字)

首先,将sources文件夹下的move_car.py脚本移动到Tools/simulation/gazebo-classic/sitl_gazebo-classic/scripts中,右击它,属性-权限,勾选允许文件作为程序执行;
然后,打开上一级文件夹下的package.xml,将以下内容复制到一堆<run_depend>...(大约在60多行)的后面:

    <exec_depend>rospy</exec_depend>
    <exec_depend>gazebo_msgs</exec_depend>
    <exec_depend>std_msgs</exec_depend>

接着,打开文件夹下的CMakeLists.txt,将以下内容复制到## Install ##部分的最后:

catkin_install_python(PROGRAMS scripts/move_car.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

最后,在文件夹内执行:

catkin build

脚本就可以正常启动了。
执行步骤7中的命令打开Gazebo,然后新启动一个终端,输入:

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上测试正常。

About

备份已配置的gazebo模型与世界文件。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published