mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-09 22:49:53 +08:00
Start gazebo-classic and gz-harmonic
This commit is contained in:
@@ -135,8 +135,8 @@
|
|||||||
<header/>
|
<header/>
|
||||||
<makefile target="nps">
|
<makefile target="nps">
|
||||||
<raw>
|
<raw>
|
||||||
nps.CXXFLAGS += $(shell pkg-config gazebo --cflags)
|
nps.CXXFLAGS += $(shell pkg-config gz-sim8 --cflags)
|
||||||
nps.LDFLAGS += $(shell pkg-config gazebo --libs)
|
nps.LDFLAGS += $(shell pkg-config gz-sim8 --libs)
|
||||||
|
|
||||||
<!-- OpenCV for video debugging -->
|
<!-- OpenCV for video debugging -->
|
||||||
NPS_DEBUG_VIDEO ?= 0
|
NPS_DEBUG_VIDEO ?= 0
|
||||||
|
|||||||
@@ -0,0 +1,152 @@
|
|||||||
|
<!DOCTYPE module SYSTEM "module.dtd">
|
||||||
|
|
||||||
|
<module name="fdm_gazebo" dir="fdm">
|
||||||
|
<doc>
|
||||||
|
<description>
|
||||||
|
Gazebo backend for NPS simulator
|
||||||
|
NPS doc: http://wiki.paparazziuav.org/wiki/NPS
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
1. Make sure gazebo 9 is installed. (sudo apt-get install gazebo9 libgazebo9-dev)
|
||||||
|
2. Prepare the Gazebo world and model:
|
||||||
|
1. Prepare the UAV model (see conf/simulator/gazebo/models/ardrone/):
|
||||||
|
- Place the aircraft model in the conf/simulator/gazebo/models/
|
||||||
|
folder, this folder is added to Gazebo's search path when NPS is
|
||||||
|
launched.
|
||||||
|
- Gazebo uses a Front, Left, Up coordinate system for aircraft, so
|
||||||
|
make sure the +x axis points forwards.
|
||||||
|
- 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'.
|
||||||
|
- Camera links should have the name specified in .dev_name in the
|
||||||
|
corresponding video_config_t struct, see sw/airborne/boards/pc_sim.h
|
||||||
|
and sw/airborne/modules/computer_vision/video_thread_nps.c.
|
||||||
|
2. Prepare the world (see conf/simulator/gazebo/worlds/ardrone.world).
|
||||||
|
Pay attention to the following:
|
||||||
|
- The real-time update rate should be set to zero, as this is
|
||||||
|
already handled by Paparazzi:
|
||||||
|
@code{.xml}
|
||||||
|
<physics type="ode">
|
||||||
|
<max_step_size>0.001</max_step_size>
|
||||||
|
<real_time_update_rate>0</real_time_update_rate><!-- Handled by Paparazzi! -->
|
||||||
|
</physics>
|
||||||
|
@endcode
|
||||||
|
- Spherical coordinates should be provided for navigation.
|
||||||
|
At this moment, there is an issue where Gazebo incorrectly
|
||||||
|
uses a WSU coordinate system instead of ENU. This can be fixed
|
||||||
|
by setting the heading to 180 degrees as shown below:
|
||||||
|
@code{.xml}
|
||||||
|
<spherical_coordinates>
|
||||||
|
<surface_model>EARTH_WGS84</surface_model>
|
||||||
|
<latitude_deg>51.9906</latitude_deg>
|
||||||
|
<longitude_deg>4.37679</longitude_deg>
|
||||||
|
<elevation>0</elevation>
|
||||||
|
<heading_deg>180</heading_deg><!-- Temporary fix for issue https://bitbucket.org/osrf/gazebo/issues/2022/default-sphericalcoordinates-frame-should -->
|
||||||
|
</spherical_coordinates>
|
||||||
|
@endcode
|
||||||
|
3. Prepare the airframe file (see examples/ardrone2_gazebo.xml):
|
||||||
|
1. Select Gazebo as the FDM (Flight Dynamics Model)
|
||||||
|
@code{.xml}
|
||||||
|
<target name="nps" board="pc">
|
||||||
|
<module name="fdm" type="gazebo"/>
|
||||||
|
</target>
|
||||||
|
@endcode
|
||||||
|
2. Include the gazebo defines for the vehicle:
|
||||||
|
@code{.xml}
|
||||||
|
<section name="SIMULATOR" prefix="NPS_">
|
||||||
|
...
|
||||||
|
</section>
|
||||||
|
<include href="conf/simulator/gazebo/airframes/ardrone2.xml"/>
|
||||||
|
@endcode
|
||||||
|
- If conf/simulator/gazebo/airframes does not contain an xml for the
|
||||||
|
vehicle model, it should be created with the following contents:
|
||||||
|
1. Actuator thrusts and torques
|
||||||
|
@code{.xml}
|
||||||
|
<!DOCTYPE airframe SYSTEM "../../../airframes/airframe.dtd">
|
||||||
|
|
||||||
|
<airframe>
|
||||||
|
<section name="SIMULATOR" prefix="NPS_">
|
||||||
|
<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[]"/>
|
||||||
|
...
|
||||||
|
</section>
|
||||||
|
</airframe>
|
||||||
|
@endcode
|
||||||
|
The thrusts and torques are expressed in SI units (N, Nm) and should
|
||||||
|
be in the same order as the ACTUATOR_NAMES defined in the airframe file.
|
||||||
|
The torque direction is determined automatically from the motor mixing.
|
||||||
|
2. (Optional) Add actuator dynamics to the SIMULATOR section:
|
||||||
|
@code{.xml}
|
||||||
|
<section name="SIMULATOR" prefix="NPS_">
|
||||||
|
...
|
||||||
|
<define name="ACTUATOR_TIME_CONSTANTS" value="0.02, 0.02, 0.02, 0.02" type="float[]"/>
|
||||||
|
<define name="ACTUATOR_MAX_ANGULAR_MOMENTUM" value="0.19, 0.19, 0.19, 0.19" type="float[]"/>
|
||||||
|
...
|
||||||
|
</section>
|
||||||
|
@endcode
|
||||||
|
Actuator time constants can be provided without specifying the
|
||||||
|
actuator's maximum angular momentum. If the maximum angular momentum
|
||||||
|
is provided as well, it is used to calculate the rotor spin-up torque.
|
||||||
|
3. In the same section, bypass the AHRS and INS as these are not
|
||||||
|
supported yet:
|
||||||
|
@code{.xml}
|
||||||
|
<section name="SIMULATOR" prefix="NPS_">
|
||||||
|
...
|
||||||
|
<define name="BYPASS_AHRS" value="1"/>
|
||||||
|
<define name="BYPASS_INS" value="1"/>
|
||||||
|
...
|
||||||
|
</section>
|
||||||
|
@endcode
|
||||||
|
|
||||||
|
4. If required, enable video thread simulation:
|
||||||
|
@code{.xml}
|
||||||
|
<section name="SIMULATOR" prefix="NPS_">
|
||||||
|
...
|
||||||
|
<define name="SIMULATE_VIDEO" value="1"/>
|
||||||
|
...
|
||||||
|
</section>
|
||||||
|
@endcode
|
||||||
|
5. Set the aircraft model in the xml file:
|
||||||
|
@code{.xml}
|
||||||
|
<section name="SIMULATOR" prefix="NPS_">
|
||||||
|
...
|
||||||
|
<define name="GAZEBO_AC_NAME" value="my_uav"/>
|
||||||
|
</section>
|
||||||
|
@endcode
|
||||||
|
3. 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
|
||||||
|
selected as the target. To fix this, add nps to the target attribute
|
||||||
|
in the module xml, e.g.:
|
||||||
|
@code{.xml}
|
||||||
|
<makefile target="ap|nps">
|
||||||
|
@endcode
|
||||||
|
4. The simulation environment is set in the flight plan file:
|
||||||
|
@code{.xml}
|
||||||
|
<flight_plan ...>
|
||||||
|
<header>
|
||||||
|
...
|
||||||
|
#define NPS_GAZEBO_WORLD "my.world"
|
||||||
|
</header>
|
||||||
|
...
|
||||||
|
</flight_plan>
|
||||||
|
@endcode
|
||||||
|
</description>
|
||||||
|
<configure name="NPS_DEBUG_VIDEO" value="0|1" description="show window with video for debugging"/>
|
||||||
|
</doc>
|
||||||
|
<header/>
|
||||||
|
<makefile target="nps">
|
||||||
|
<raw>
|
||||||
|
nps.CXXFLAGS += $(shell pkg-config gazebo --cflags)
|
||||||
|
nps.LDFLAGS += $(shell pkg-config gazebo --libs)
|
||||||
|
|
||||||
|
<!-- OpenCV for video debugging -->
|
||||||
|
NPS_DEBUG_VIDEO ?= 0
|
||||||
|
ifeq (,$(findstring $(NPS_DEBUG_VIDEO),0 FALSE))
|
||||||
|
nps.CXXFLAGS += -DNPS_DEBUG_VIDEO
|
||||||
|
nps.CXXFLAGS += $(shell pkg-config opencv)
|
||||||
|
nps.LDFLAGS += -lopencv_imgproc -lopencv_highgui -lopencv_core
|
||||||
|
endif
|
||||||
|
</raw>
|
||||||
|
<file name="nps_fdm_gazebo.cpp" dir="nps"/>
|
||||||
|
</makefile>
|
||||||
|
</module>
|
||||||
|
|
||||||
+484
-644
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user