前言:這幾天同學在做畢設,是關於四旋翼通過掃描二維碼進行定點降落,需要在仿真環境下放置二維碼以及給四旋翼加裝攝像頭,我也正好通過這個機會學習一下。
注意:世界模型和對象模型不一樣,對象模型指你的仿真控制對象,比如是四旋翼還是固定翼還是無人車。修改對象模型需要修改對應的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"/>
標籤內容改爲我們寫的世界的名稱即可。