PX4飞控Gazebo仿真去除asphalt沥青地面
环境:
Ubuntu :20.04 LTS
PX4 :1.13.0
在使用PX4飞控进行仿真测试时,默认的Gazebo仿真环境通常会包含一个沥青地面(asphalt plane)。然而,在某些特定测试场景下,我们可能希望去除这一默认地面,以便测试无人机在不同环境下的表现,或者为了减少仿真中不必要的资源消耗。本文将介绍如何在Gazebo仿真中去除默认的沥青地面。
在PX4的Gazebo仿真环境中,地面模型的加载是通过引用世界文件(.world)中的模型URI来实现的。在默认情况下,posix_sitl.launch脚本会调用empty.world文件作为仿真环境的世界文件。
<?xml version="1.0"?>
<launch>
<!-- Posix SITL environment launch script -->
<!-- launches 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/empty.world"/>
<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/$(arg vehicle)/$(arg vehicle).sdf"/>
<env name="PX4_SIM_MODEL" value="$(arg vehicle)" />
<env name="PX4_ESTIMATOR" value="$(arg est)" />
<!-- 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"/>
<!-- PX4 configs -->
<arg name="interactive" default="true"/>
<!-- PX4 SITL -->
<arg unless="$(arg interactive)" name="px4_command_arg1" value="-d"/>
<arg if="$(arg interactive)" name="px4_command_arg1" value=""/>
<node name="sitl" pkg="px4" type="px4" output="screen"
args="$(find px4)/build/px4_sitl_default/etc -s etc/init.d-posix/rcS $(arg px4_command_arg1)" required="true"/>
<!-- Gazebo sim -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="gui" value="$(arg gui)"/>
<arg name="world_name" value="$(arg world)"/>
<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>
<!-- gazebo model -->
<node name="$(anon vehicle_spawn)" pkg="gazebo_ros" type="spawn_model" output="screen" args="-sdf -file $(arg sdf) -model $(arg vehicle) -x $(arg x) -y $(arg y) -z $(arg z) -R $(arg R) -P $(arg P) -Y $(arg Y)"/>
</launch>
posix_sitl.launch脚本调用了empty.world文件。
<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/empty.world"/>
文件位置在Firmware/Tools/sitl_gazebo/worlds/empty.world这里。
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default">
<!-- A global light source -->
<include>
<uri>model://sun</uri>
</include>
<!-- A ground plane -->
<include>
<uri>model://ground_plane</uri>
</include>
<include>
<uri>model://asphalt_plane</uri>
</include>
<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>
</world>
</sdf>
上面的代码中,标签引用了多个模型,其中model://asphalt_plane正是我们需要去除的地面模型。为了去除这个默认的沥青地面,我们只需要去除这三行代码。
<include>
<uri>model://asphalt_plane</uri>
</include>
删除这三行代码后,保存文件。
重新启动Gazebo后,你应该能够看到仿真环境中原本的沥青地面已被移除