This project contains ROS 2 packages for simulating models controlled by ArduPilot SITL with DDS support in Gazebo.
The project is adapted from the ros_gz_project_template
project.
-
ardupilot_gz_description
- Contains the SDFormat description of the simulated system. -
ardupilot_gz_gazebo
- Contains Gazebo specific code such as system plugins. -
ardupilot_gz_application
- Contains ROS 2 specific code and configuration. -
ardupilot_gz_bringup
- Contains launch files and high level utilities.
- Install ROS 2 Humble
- Install Gazebo Garden
- Follow the
Installing Build Dependencies
section ofAP_DDS
's README - Install Wave Sim. Only needed to run the blueboat model.
mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src
cd ~/ros2_ws/src
wget https://raw.githubusercontent.com/ArduPilot/ardupilot_gz/main/ros2_gz.repos
vcs import --recursive < ros2_gz.repos
export GZ_VERSION=garden
cd ~/ros2_ws
source /opt/ros/humble/setup.bash
sudo apt update
rosdep update
rosdep install --rosdistro $ROS_DISTRO --from-paths src -i -r -y
cd ~/ros2_ws
colcon build --cmake-args -DBUILD_TESTING=ON
source ./install/setup.bash
colcon test --packages-select ardupilot_sitl ardupilot_dds_tests ardupilot_gazebo ardupilot_gz_applications ardupilot_gz_description ardupilot_gz_gazebo ardupilot_gz_bringup
colcon test-result --all --verbose
source ~/ros2_ws/install/setup.sh
ros2 launch ardupilot_gz_bringup iris_runway.launch.py rviz:=true use_gz_tf:=true
mavproxy.py --master udp:127.0.0.1:14550 --console --map
$ ros2 topic list
/ap/battery/battery0
/ap/clock
/ap/navsat/navsat0
/ap/tf_static
/clicked_point
/clock
/goal_pose
/initialpose
/iris/odometry
/joint_states
/parameter_events
/robot_description
/rosout
/tf
/tf_static
Here's a list of all the additional use cases from this repository:
This simulation has an iris copter equipped with a 360 degrees 2d lidar in a maze world.
ros2 launch ardupilot_gz_bringup iris_maze.launch.py rviz:=true use_gz_tf:=true
This simulation includes a skid-steer rover equipped with a 2d lidar in a playpen world.
ros2 launch ardupilot_gz_bringup wildthumper_playpen.launch.py rviz:=true use_gz_tf:=true
ros_gz
has a dependency on gps_msgs
included in
git clone https://github.com/swri-robotics/gps_umd.git -b ros2-devel
When building from source add COLCON_IGNORE
to gpsd_client
as
this package is not required and will not build on macOS.
On macOS the robot_state_publisher
node cannot load the
sdformat_urdf_plugin
plugin unless the extension is changed:
cd ./install/sdformat_urdf/lib
ln -s libsdformat_urdf_plugin.so libsdformat_urdf_plugin.dylib
The sdformat_urdf
plugin requires the <uri>
element to use
the package://
prefix for a resource to be located by RViz. At present
this requires the models to be edited.
All occurrences of
`model://{model_name}`
must be replaced with
`package://{package_name}/models/{model_name}`
The sdformat_urdf
plugin uses the sdformat13
libraries to parse the
model description which relies on the environment variable
SDF_PATH
to resolve model resources. This is usually set in gz-sim7
,
however when using the plugins standalone, for instance in the bring-up
launch files, SDF_PATH
must be set otherwise the plugin will not resolve
the models and their dependencies.
source ~/ros2_ws/install/setup.sh
export SDF_PATH=$GZ_SIM_RESOURCE_PATH
This is assigned in the iris.launch.py
file as SDF_PATH
is not usually set
by the ament
environment hooks.