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 Harmonic (recommended) or Gazebo Ionic
- Follow the
Installing Build Dependenciessection ofAP_DDS's README
mkdir -p ~/ros2_ws/srccd ~/ros2_ws
vcs import --input https://raw.githubusercontent.com/ArduPilot/ardupilot_gz/main/ros2_gz.repos --recursive srcIt is recommended to put this in your ~/.bashrc or equivalent file.
export GZ_VERSION=harmoniccd ~/ros2_ws
source /opt/ros/humble/setup.bash
sudo apt update
rosdep update
rosdep install --from-paths src --ignore-src -ycd ~/ros2_ws
colcon buildsource ./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 --verbosesource ~/ros2_ws/install/setup.shros2 launch ardupilot_gz_bringup iris_runway.launch.py rviz:=true use_gz_tf:=truemavproxy.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_staticHere'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:=trueThis 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:=trueros_gz has a dependency on gps_msgs included in
git clone https://github.com/swri-robotics/gps_umd.git -b ros2-develWhen 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.dylibThe 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_PATHThis is assigned in the iris.launch.py file as SDF_PATH is not usually set
by the ament environment hooks.