gazebo 直接获取传感器数据_仿真器--gazebo+px4
时间:2022-09-19 09:00:00
转载自:https://blog.csdn.net/weixin_39611546/article/details/111637741
gazebo 传感器数据直接获取_仿真器--gazebo px4
weixin_39611546 2020-11-22 08:49:58 85 收藏 1
版权
贴上最近做的gazebo和px4总结只代表个人经验。如有错误,请多指教
虽然没有环境airsim那么真实,但不得不说,gazebo和px4官网教程维护的很好,gazebo它更容易理解和掌握。以下是我在安装和使用时参考的主要教程:
Gazebo仿真 - Amov-wiki 0.0.1 文档amov-wiki.readthedocs.io
Introduction · PX4 Developer Guidedev.px4.io
https://github.com/mavlink/mavros/blob/master/mavros/README.md#installationgithub.com Gazebo : Tutorialsgazebosim.org 连接到ROS | PX4中文维基fantasyjxf.gitbooks.io
一、安装
安装过程主要参考链接1,配置环境Ubuntu16.04 gazebo9 ros kinetic,安装过程中的主要问题如下。
问题1:系统本身就带来了ros原生的gazebo7.但是后来配置好了,发现一直无法视化,一些奇怪的库报错了。google后将gazebo7卸载重装gazebo9后解决。
问题2:git submodule update --init --recursive安装慢,建议挂代理下载。
问题3:gazebo黑屏问题,https://bitbucket.org/osrf/gazebo_models/downloads/在这里下载各种model,放到~/.gazebo/models下
问题4:mavros的geographiclib图书馆存在问题。建议在工作空间安装源码并运行mavros即可。
二、gazebo理解
gazebo与模拟器相比,模拟器仍然很容易理解ue4 airsim开发过程要简单得多(毕竟)ue4是为游戏开发的,项目要大得多),我理解gazebo主要的开发环境是world了,在.world可以在文件中配置环境信息和各种信息model信息。而model我们需要插入环境中的模型,具体的配置是由.sdf由文件等相关文件决定,自行编写定制非常方便。若要操控model,就需要编写plugin控制,都是cpp配置好脚本sdf中的
px4环境启动:安装后,Firmware输入文件夹make posix_sitl_default gazebo即可启动gazebo的px4仿真。
此时可见world只有飞机和地形图,链接5.2提到可以change 此时的默认world,在Tools/sitl_gazebo/worlds中修改iris.world便于开发。
三、环境建设
参考链接4的building editor,建立室内环境保护标准model然后添加模型Tools/sitl_gazebo/models中。如下图所示:
之后修改iris.world文件中的
model://indoor 2.55 0.09 0 0 0 0
刚写好的model即可。
下一步是编写移动物体,参考链接4Category: Build a Robot有两种方法可以编写教程world移动物体在中间。
第一种方法:加入plugin控制物体(如教程中激光雷达的闭环旋转),外部程序可与模拟器一起使用communication的,gazebo本身的机制是server-client类似于ros,模拟器中的物体信息可以publish我们可以编写脚本订阅它的信息,然后使用这些信息进行其他上层规划(当然,以后可以使用更直接的信息)gazebo-ros来免去编写communication脚本这一步)。
第二种方法:适用于gazebo8 ,免去了编写plugin过程,直接在.world模型中加入
在world移动柱加入如下:
0.2 2
四、connect to ros
px4和mavros结合使用,可以很方便我们在ros中拿到无人机当前的各种信息,以此来进行后续的算法开发。px4.launch可以链接子网内和本地的端口,以此拿到数据。
PX4 communicates with the simulator (e.g. Gazebo) to receive sensor data from the simulated world and send motor and actuator values. It communicates with the GCS and an Offboard API (e.g. ROS) to send telemetry from the simulated environment and receive commands.
mavros的框图如下:
在正常的启动过程中,我们先是启动px4的gazebo然后启动mavros。
make posix_sitl_default gazebo
#然后启动mavros拿到数据
roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14557"
这样我们通过rostopic可以看到相应的话题了。但是这里的mavros只是针对px4的,也就是所有的话题信息中并没有world中其他机器人的信息,例如刚刚添加的移动柱子。
除了mavros,gazebo本身就提供了将server的话题包装好发到roscore的gazebo-ros-pkgs包。
roslaunch gazebo_ros empty_world.launch
#我们可以拿到gazebo world中的所有信息。
如果想要修改Gazebo仿真,使其能够将额外的传感器信息直接发布到ROS主题,例如Gazebo ROS激光传感器信息,那么必须通过适当的ROS包装器来启动Gazebo,不能直接使用make posix_sitl_default gazebo来进行启动,否则gazebo本身无法连接到ros上。通过以下指令实现:
cd
make posix_sitl_default
source ~/catkin_ws/devel/setup.bash # (optional)
source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/sitl_gazebo
roslaunch px4 posix_sitl.launch
#这几步就是source相应的环境,方便模型能够被找到,然后wrap了empty_world.launch以及px4
的相应配置。
这一步运行完,实际上是在空的world中实现了ros和px4配置。
可以使用mavros_posix_sitl.launch同时启动mavros:
cd
make posix_sitl_default
source ~/catkin_ws/devel/setup.bash # (optional)
source Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/sitl_gazebo
roslaunch px4 mavros_posix_sitl.launch
#wrap了empty_world.launch以及px4的相应配置和mavros的启动。
这时在launch中修改world配置即可实现所需要的环境: