Skip to content

Tools for ArduPilot ROS2 integration and testing

License

Notifications You must be signed in to change notification settings

pedro-fuoco/ardupilot_gz

 
 

Repository files navigation

ardupilot_gz

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.

Included packages

  • 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.

Prerequisites

Install

1. Create a workspace folder

mkdir -p ~/ros2_ws/src && cd ~/ros2_ws/src

2. Get the project source

cd ~/ros2_ws/src
wget https://raw.githubusercontent.com/ArduPilot/ardupilot_gz/main/ros2_gz.repos
vcs import --recursive < ros2_gz.repos

3. Set the Gazebo version to Garden:

export GZ_VERSION=garden

4. Update ROS dependencies

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

5. Build

cd ~/ros2_ws
colcon build --cmake-args -DBUILD_TESTING=ON

6. Test

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

Usage

1. Source the workspace

source ~/ros2_ws/install/setup.sh

2. Launch the simulation

ros2 launch ardupilot_gz_bringup iris_runway.launch.py

3. Launch a GCS (MAVPorxy)

mavproxy.py --console --map

4. Inspect topics

$ 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

Advanced variations

Here's a list of all the additional use cases from this repository:

1. Iris Maze

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

Notes

1. Additional dependencies

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.

2. sdformat_urdf

2.1. Library extension

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

2.3. Model URIs

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}`

2.4. SDFormat environment variables

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.

About

Tools for ArduPilot ROS2 integration and testing

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 53.9%
  • C++ 30.5%
  • CMake 14.7%
  • Shell 0.9%