资讯详情

gazebo 直接获取传感器数据_仿真器--gazebo+px4

转载自:https://blog.csdn.net/weixin_39611546/article/details/111637741

传感器数据直接获取_仿真器--

weixin_39611546 2020-11-22 08:49:58 85 收藏 1

文章标签 传感器数据直接获取

版权

贴上最近做的总结只代表个人经验。如有错误,请多指教

虽然没有环境airsim那么真实,但不得不说,官网教程维护的很好,它更容易理解和掌握。以下是我在安装和使用时参考的主要教程:

仿真 - Amov-wiki 0.0.1 文档amov-wiki.readthedocs.io

f40eec0ba845344cdb300ef25253033f.png

Introduction · Developer Guidedev..io

https://github.com/mavlink/mavros/blob/master/mavros/README.md#installationgithub.com : Tutorialsgazebosim.org 连接到ROS | 中文维基fantasyjxf.gitbooks.io

安装过程主要参考链接1,配置环境Ubuntu16.04 9 ros kinetic,安装过程中的主要问题如下。

问题1:系统本身就带来了ros原生的7.但是后来配置好了,发现一直无法视化,一些奇怪的库报错了。google后将7卸载重装9后解决。

问题2:git submodule update --init --recursive安装慢,建议挂代理下载。

问题3:黑屏问题,https://bitbucket.org/osrf/_models/downloads/在这里下载各种model,放到~/./models下

问题4:mavros的geographiclib图书馆存在问题。建议在工作空间安装源码并运行mavros即可。

与模拟器相比,模拟器仍然很容易理解ue4 airsim开发过程要简单得多(毕竟)ue4是为游戏开发的,项目要大得多),我理解主要的开发环境是world了,在.world可以在文件中配置环境信息和各种信息model信息。而model我们需要插入环境中的模型,具体的配置是由.sdf由文件等相关文件决定,自行编写定制非常方便。若要操控model,就需要编写plugin控制,都是cpp配置好脚本sdf中的<plugin/>后在其中的Load在函数中写下控制过程。

环境启动:安装后,Firmware输入文件夹make posix_sitl_default 即可启动仿真。

此时可见world只有飞机和地形图,链接5.2提到可以change 此时的默认world,在Tools/sitl_/worlds中修改iris.world便于开发。

参考链接4的building editor,建立室内环境保护标准model然后添加模型Tools/sitl_/models中。如下图所示:

之后修改iris.world文件中的<uri>model://asphalt_plane</uri>地形图,以及插入

<include> <uri>model://indoor</uri> <pose>2.55 0.09 0 0 0 0</pose> </include>

刚写好的model即可。

下一步是编写移动物体,参考链接4Category: Build a Robot有两种方法可以编写教程world移动物体在中间。

第一种方法:加入plugin控制物体(如教程中激光雷达的闭环旋转),外部程序可与模拟器一起使用communication的,本身的机制是server-client类似于ros,模拟器中的物体信息可以publish我们可以编写脚本订阅它的信息,然后使用这些信息进行其他上层规划(当然,以后可以使用更直接的信息)-ros来免去编写communication脚本这一步)。

第二种方法:适用于8 ,免去了编写plugin过程,直接在.world模型中加入<actor/>,设置好waypoint可以方便地满足运动类型简单的需求。同时,如果需要复杂的闭环trajectory可以添加actor的plugin来实现。

在world移动柱加入如下:

   <actor name="animated_cylinder">       <link name="box_link">         <visual name="visual">            <geometry>                <cylinder>                  <radius>0.2</radius>                  <length>2</length>                </cylinder>            </geometry>            <material>               <script>                  <uri>file://media/materials/scripts/.material</uri>                  <name>/Red</name>               </script>            </material>         </visual>       </link>       <script>         <loop>true</loop>         <auto_start>true</auto_start>         <trajectory id="0" type="square">            <waypoint>               <time>0.0</time>               <pose>-1 -2.4 1 0 0 0</pose>            </waypoint>            <waypoint>               <time>0.6</time>               <pose>-1 -1.2 1 0 0 0</pose>            </waypoint>            <waypoint>               <time>1.2</time>               <pose>-1 0 1 0 0 0</pose>            </waypoint>            <waypoint>               <time>1.8</time>               <pose>-1 1.2 1 0 0 0</pose>            </waypoint>            <waypoint>               <time>2.4</time>               <pose>-1 2.4 1 0 0 0</ose>
           </waypoint>
           <waypoint>
              <time>3</time>
              <pose>-1 1.2 1 0 0 0</pose>
           </waypoint>
           <waypoint>
              <time>3.6</time>
              <pose>-1 0 1 0 0 0</pose>
           </waypoint>
           <waypoint>
              <time>4.2</time>
              <pose>-1 -1.2 1 0 0 0</pose>
           </waypoint>
           <waypoint>
              <time>4.8</time>
              <pose>-1 -2.4 1 0 0 0</pose>
           </waypoint>
        </trajectory>
      </script>
    </actor>

和mavros结合使用,可以很方便我们在ros中拿到无人机当前的各种信息,以此来进行后续的算法开发。.launch可以链接子网内和本地的端口,以此拿到数据。

mavros的框图如下:

 

在正常的启动过程中,我们先是启动然后启动mavros。

make posix_sitl_default 
#然后启动mavros拿到数据
roslaunch mavros .launch fcu_url:="udp://:14540@127.0.0.1:14557"

这样我们通过rostopic可以看到相应的话题了。但是这里的mavros只是针对的,也就是所有的话题信息中并没有world中其他机器人的信息,例如刚刚添加的移动柱子。

除了mavros,本身就提供了将server的话题包装好发到roscore的-ros-pkgs包。

roslaunch _ros empty_world.launch
#我们可以拿到 world中的所有信息。

如果想要修改仿真,使其能够将额外的传感器信息直接发布到ROS主题,例如 ROS激光传感器信息,那么必须通过适当的ROS包装器来启动,不能直接使用make posix_sitl_default 来进行启动,否则本身无法连接到ros上。通过以下指令实现:

cd <Firmware_clone>
make posix_sitl_default 
source ~/catkin_ws/devel/setup.bash    # (optional)
source Tools/setup_.bash $(pwd) $(pwd)/build/_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/sitl_
roslaunch  posix_sitl.launch
#这几步就是source相应的环境,方便模型能够被找到,然后wrap了empty_world.launch以及
的相应配置。

这一步运行完,实际上是在空的world中实现了ros和配置。

可以使用mavros_posix_sitl.launch同时启动mavros:

cd <Firmware_clone>
make posix_sitl_default 
source ~/catkin_ws/devel/setup.bash    # (optional)
source Tools/setup_.bash $(pwd) $(pwd)/build/_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/sitl_
roslaunch  mavros_posix_sitl.launch 
#wrap了empty_world.launch以及的相应配置和mavros的启动。

这时在launch中修改world配置即可实现所需要的环境:

<arg name="world" default="$(find mavlink_sitl_)/worlds/iris.world"/>

 

 

标签: 310激光传感器nx

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台