本仓库收集了适用于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 Suite与Realsense_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.git2. 将本仓库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,找到这一行:
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.bash6. 将本仓库中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文件,找到这一段代码:
<!-- 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_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,将以下内容复制到一堆<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上测试正常。
