Set Gazebo world in flight plan (#2172)

* update documentation
* include flight_plan.h in nps_fdm_gazebo.cpp
This commit is contained in:
Tom van Dijk
2017-11-15 15:51:19 +01:00
committed by Gautier Hattenberger
parent 3f10a79d51
commit 85c2b23c9f
2 changed files with 94 additions and 68 deletions
+46 -21
View File
@@ -9,29 +9,32 @@
Usage: Usage:
1. Make sure gazebo 7 or 8 is installed. (sudo apt-get install gazebo8 libgazebo8-dev) 1. Make sure gazebo 7 or 8 is installed. (sudo apt-get install gazebo8 libgazebo8-dev)
2. Prepare the Gazebo world and model: 2. Prepare the Gazebo world and model:
a) Prepare the UAV model (see conf/simulator/gazebo/models/ardrone/): 1. Prepare the UAV model (see conf/simulator/gazebo/models/ardrone/):
Place the aircraft model in the conf/simulator/gazebo/models/ - Place the aircraft model in the conf/simulator/gazebo/models/
folder, this folder is added to Gazebo's search path when NPS is folder, this folder is added to Gazebo's search path when NPS is
launched. launched.
Gazebo uses a Front, Left, Up coordinate system for aircraft, so - Gazebo uses a Front, Left, Up coordinate system for aircraft, so
make sure the +x axis points forwards. make sure the +x axis points forwards.
The model should include a link for each motor with the same names - The model should include a link for each motor with the same names
as those listed in NPS_ACTUATOR_NAMES (see below), e.g. 'nw_motor'. as those listed in NPS_ACTUATOR_NAMES (see below), e.g. 'nw_motor'.
Camera links should have the name specified in .dev_name in the - Camera links should have the name specified in .dev_name in the
corresponding video_config_t struct, see sw/airborne/boards/pc_sim.h corresponding video_config_t struct, see sw/airborne/boards/pc_sim.h
and sw/airborne/modules/computer_vision/video_thread_nps.c. and sw/airborne/modules/computer_vision/video_thread_nps.c.
b) Prepare the world (see conf/simulator/gazebo/worlds/ardrone.world). 2. Prepare the world (see conf/simulator/gazebo/worlds/ardrone.world).
Pay attention to the following: Pay attention to the following:
The real-time update rate should be set to zero, as this is - The real-time update rate should be set to zero, as this is
already handled by Paparazzi: already handled by Paparazzi:
@code{.xml}
<physics type="ode"> <physics type="ode">
<max_step_size>0.001</max_step_size> <max_step_size>0.001</max_step_size>
<real_time_update_rate>0</real_time_update_rate><!-- Handled by Paparazzi! --> <real_time_update_rate>0</real_time_update_rate><!-- Handled by Paparazzi! -->
</physics> </physics>
Spherical coordinates should be provided for navigation. @endcode
- Spherical coordinates should be provided for navigation.
At this moment, there is an issue where Gazebo incorrectly At this moment, there is an issue where Gazebo incorrectly
uses a WSU coordinate system instead of ENU. This can be fixed uses a WSU coordinate system instead of ENU. This can be fixed
by setting the heading to 180 degrees as shown below: by setting the heading to 180 degrees as shown below:
@code{.xml}
<spherical_coordinates> <spherical_coordinates>
<surface_model>EARTH_WGS84</surface_model> <surface_model>EARTH_WGS84</surface_model>
<latitude_deg>51.9906</latitude_deg> <latitude_deg>51.9906</latitude_deg>
@@ -39,45 +42,67 @@
<elevation>0</elevation> <elevation>0</elevation>
<heading_deg>180</heading_deg><!-- Temporary fix for issue https://bitbucket.org/osrf/gazebo/issues/2022/default-sphericalcoordinates-frame-should --> <heading_deg>180</heading_deg><!-- Temporary fix for issue https://bitbucket.org/osrf/gazebo/issues/2022/default-sphericalcoordinates-frame-should -->
</spherical_coordinates> </spherical_coordinates>
@endcode
3. Prepare the airframe file (see examples/ardrone2_gazebo.xml): 3. Prepare the airframe file (see examples/ardrone2_gazebo.xml):
a) Select Gazebo as the FDM (Flight Dynamics Model) 1. Select Gazebo as the FDM (Flight Dynamics Model)
@code{.xml}
<target name="nps" board="pc"> <target name="nps" board="pc">
<module name="fdm" type="gazebo"/> <module name="fdm" type="gazebo"/>
</target> </target>
b) Add actuator thrusts and torques to the SIMULATOR section: @endcode
2. Add actuator thrusts and torques to the SIMULATOR section:
@code{.xml}
<section name="SIMULATOR" prefix="NPS_"> <section name="SIMULATOR" prefix="NPS_">
<define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/> <define name="ACTUATOR_NAMES" value="nw_motor, ne_motor, se_motor, sw_motor" type="string[]"/>
<define name="ACTUATOR_THRUSTS" value="1.55, 1.55, 1.55, 1.55" type="float[]"/> <define name="ACTUATOR_THRUSTS" value="1.55, 1.55, 1.55, 1.55" type="float[]"/>
<define name="ACTUATOR_TORQUES" value="0.155, -0.155, 0.155, -0.155" type="float[]"/> <define name="ACTUATOR_TORQUES" value="0.155, -0.155, 0.155, -0.155" type="float[]"/>
... ...
<section> <section>
@endcode
The thrusts and torques are expressed in SI units (N, Nm) and should The thrusts and torques are expressed in SI units (N, Nm) and should
be in the same order as the ACTUATOR_NAMES. be in the same order as the ACTUATOR_NAMES.
c) In the same section, bypass the AHRS and INS as these are not 3. In the same section, bypass the AHRS and INS as these are not
supported yet: supported yet:
@code{.xml}
<section name="SIMULATOR" prefix="NPS_"> <section name="SIMULATOR" prefix="NPS_">
... ...
<define name="BYPASS_AHRS" value="1"/> <define name="BYPASS_AHRS" value="1"/>
<define name="BYPASS_INS" value="1"/> <define name="BYPASS_INS" value="1"/>
... ...
<section> </section>
d) If required, enable video thread simulation: @endcode
4. If required, enable video thread simulation:
@code{.xml}
<section name="SIMULATOR" prefix="NPS_"> <section name="SIMULATOR" prefix="NPS_">
... ...
<define name="SIMULATE_VIDEO" value="1"/> <define name="SIMULATE_VIDEO" value="1"/>
... ...
<section> </section>
e) If required, specify the Gazebo world and aircraft name: @endcode
5. If required, set the aircraft model in the airframe file:
@code{.xml}
<section name="SIMULATOR" prefix="NPS_"> <section name="SIMULATOR" prefix="NPS_">
... ...
<define name="GAZEBO_WORLD" value="my_world.world"/>
<define name="GAZEBO_AC_NAME" value="my_uav"/> <define name="GAZEBO_AC_NAME" value="my_uav"/>
<section> </section>
4. Make sure all included modules work with nps. At the moment, most of @endcode
6. Make sure all included modules work with nps. At the moment, most of
the modules that depend on video_thread are only built when ap is the modules that depend on video_thread are only built when ap is
selected as the target. As a quick fix, try to remove the target selected as the target. To fix this, add nps to the target attribute
attribute from the makefile element in the module xml, e.g.: in the module xml, e.g.:
<makefile target="ap"> ---> <makefile> @code{.xml}
<makefile target="ap|nps">
@endcode
4. If required, set the simulation environment in the flight plan file:
@code{.xml}
<flight_plan ...>
<header>
...
#define NPS_GAZEBO_WORLD "my.world"
</header>
...
<flight_plan>
@endcode
</description> </description>
</doc> </doc>
<header/> <header/>
+1
View File
@@ -51,6 +51,7 @@ extern "C" {
#include "nps_autopilot.h" #include "nps_autopilot.h"
#include "generated/airframe.h" #include "generated/airframe.h"
#include "generated/flight_plan.h"
#include "autopilot.h" #include "autopilot.h"
#include "math/pprz_isa.h" #include "math/pprz_isa.h"