gazebo下如何爲px4的仿真環境繪製自己的世界模型

前言:這幾天同學在做畢設,是關於四旋翼通過掃描二維碼進行定點降落,需要在仿真環境下放置二維碼以及給四旋翼加裝攝像頭,我也正好通過這個機會學習一下。

注意:世界模型和對象模型不一樣,對象模型指你的仿真控制對象,比如是四旋翼還是固定翼還是無人車。修改對象模型需要修改對應的sdf文件,我這篇博客指針對世界模型,也就是環境模型!!!


一、如何搭建自己的世界環境

我們打開gazebo,是一個空的世界,在px4的源碼下,它提供了幾個寫好的環境模型:/home/zouxu/src_3/Firmware/Tools/sitl_gazebo/worlds

在這裏插入圖片描述我們可以發現這些世界模型都是以.world結尾的!!!!所以我們自己在爲px4的仿真環境繪製自己的世界模型後,也要以.world結尾的形式保存在這裏,

明白上面的之後我們就可以開始了:

1.打開gazebo:

sudo gazebo

2.點擊左邊的insert插入你需要的模型,比如地面、障礙物等等

3.構建好之後點擊保存,保存到/home/zouxu/src_3/Firmware/Tools/sitl_gazebo/worlds裏面,命名爲myworld.world,注意一定要以.world結尾

4.此時保存好的世界模型還不能直接使用,因爲我們構建的世界模型裏面沒有加入物理特性,因此我們打開寫好的empty.world,將裏面的physics標籤複製過去替代myworld.world裏的physics標籤。下面就是empty.world裏面的physics標籤內容:

<physics name='default_physics' default='0' type='ode'>
      <gravity>0 0 -9.8066</gravity>
      <ode>
        <solver>
          <type>quick</type>
          <iters>10</iters>
          <sor>1.3</sor>
          <use_dynamic_moi_rescaling>0</use_dynamic_moi_rescaling>
        </solver>
        <constraints>
          <cfm>0</cfm>
          <erp>0.2</erp>
          <contact_max_correcting_vel>100</contact_max_correcting_vel>
          <contact_surface_layer>0.001</contact_surface_layer>
        </constraints>
      </ode>
      <max_step_size>0.004</max_step_size>
      <real_time_factor>1</real_time_factor>
      <real_time_update_rate>250</real_time_update_rate>
      <magnetic_field>6.0e-6 2.3e-5 -4.2e-5</magnetic_field>
    </physics>

5.這樣就可以用了,我們只需修改launch文件即可,這裏比如修改mavros_posix_sitl.launch,裏面的內容:

<?xml version="1.0"?>
<launch>
    <!-- MAVROS posix SITL environment launch script -->
    <!-- launches MAVROS, PX4 SITL, Gazebo environment, and spawns vehicle -->
    <!-- vehicle pose -->
    <arg name="x" default="0"/>
    <arg name="y" default="0"/>
    <arg name="z" default="0"/>
    <arg name="R" default="0"/>
    <arg name="P" default="0"/>
    <arg name="Y" default="0"/>
    <!-- vehicle model and world -->
    <arg name="est" default="ekf2"/>
    <arg name="vehicle" default="iris"/>
    <arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/myworld.world"/>
    <arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>

    <!-- gazebo configs -->
    <arg name="gui" default="true"/>
    <arg name="debug" default="false"/>
    <arg name="verbose" default="false"/>
    <arg name="paused" default="false"/>
    <arg name="respawn_gazebo" default="false"/>
    <!-- MAVROS configs -->
    <arg name="fcu_url" default="udp://:14540@localhost:14557"/>
    <arg name="respawn_mavros" default="false"/>
    <!-- PX4 configs -->
    <arg name="interactive" default="true"/>
    <!-- PX4 SITL and Gazebo -->
    <include file="$(find px4)/launch/posix_sitl.launch">
        <arg name="x" value="$(arg x)"/>
        <arg name="y" value="$(arg y)"/>
        <arg name="z" value="$(arg z)"/>
        <arg name="R" value="$(arg R)"/>
        <arg name="P" value="$(arg P)"/>
        <arg name="Y" value="$(arg Y)"/>
        <arg name="world" value="$(arg world)"/>
        <arg name="vehicle" value="$(arg vehicle)"/>
        <arg name="sdf" value="$(arg sdf)"/>
        <arg name="gui" value="$(arg gui)"/>
        <arg name="interactive" value="$(arg interactive)"/>
        <arg name="debug" value="$(arg debug)"/>
        <arg name="verbose" value="$(arg verbose)"/>
        <arg name="paused" value="$(arg paused)"/>
        <arg name="respawn_gazebo" value="$(arg respawn_gazebo)"/>
    </include>
    <!-- MAVROS -->
    <include file="$(find mavros)/launch/px4.launch">
        <!-- GCS link is provided by SITL -->
        <arg name="gcs_url" value=""/>
        <arg name="fcu_url" value="$(arg fcu_url)"/>
        <arg name="respawn_mavros" value="$(arg respawn_mavros)"/>
    </include>
</launch>

我們需要將裏面的<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/myworld.world"/>標籤內容改爲我們寫的世界的名稱即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章