This package includes an implementation of the RA-L submission of "Safe Low-Altitude Navigation in Steep Terrain with Fixed-Wing Aerial Vehicles". The implementation includes a global planner based on a RRT* in the Dubins Airplane space enabling low altitude navigation for fixed wing vehicles in steep terrain.
ROS 2 support of the package can be found in the ros2 branch. The implementation supports ROS 2 Humble.
If you find this package useful in an academic context, please consider citing the paper
- J. Lim, F. Achermann, R. Girod, N. Lawrance and R. Siegwart, "Safe Low-Altitude Navigation in Steep Terrain With Fixed-Wing Aerial Vehicles," in IEEE Robotics and Automation Letters, vol. 9, no. 5, pp. 4599-4606, May 2024, doi: 10.1109/LRA.2024.3368800 . [paper] [video]
@article{lim2024safe,
title={Safe Low-Altitude Navigation in Steep Terrain With Fixed-Wing Aerial Vehicles},
author={Lim, Jaeyoung and Achermann, Florian and Girod, Rik and Lawrance, Nicholas and Siegwart, Roland},
journal={IEEE Robotics and Automation Letters},
year={2024},
volume={9},
number={5},
pages={4599-4606},
doi={10.1109/LRA.2024.3368800}}
If your operating system doesn't support ROS 1 noetic, docker is a great alternative.
First, create the image, with the build context at the root of this repo
docker build --file docker/Dockerfile --tag terrain-navigation-ros1 .
You can see the image exists:
docker images
>>> REPOSITORY TAG IMAGE ID CREATED SIZE
>>> terrain-navigation-ros1 latest 5565f845ab4f 2 weeks ago 774MB
Next, run the image, mounting in the source into a workspace. All the dependencies are now installed.
docker run --network=host -it -v $(pwd):/root/catkin_ws/src/terrain-navigation -w /root/catkin_ws terrain-navigation-ros1 bash
Configure the catkin workspace
catkin config --extend "/opt/ros/noetic"
catkin config --merge-devel
For dependencies that do not have binaries available, pull them in using rosinstall.
wstool init src src/terrain-navigation/dependencies.rosinstall
wstool update -t src -j4
For dependencies available through binaries, use rosdep. This package depends on GDAL to read georeferenced images and GeoTIFF files.
apt update
rosdep update
source /opt/ros/noetic/setup.bash
rosdep install --from-paths src --ignore-src -y
Build the package
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release -DCATKIN_ENABLE_TESTING=False
catkin build -j$(nproc) -l$(nproc) terrain_navigation_ros
In order to run the examples, build the terrain_planner_benchmark
package.
catkin build terrain_planner_benchmark
Run a simple planning example:
roslaunch terrain_planner_benchmark test_ompl_rrt_circle.launch
To setup PX4, clone the ETHZ ASL PX4 autopilot project The setup instructions can be found in the documentation for the latest dependencies.
For Ubuntu 20.04+ROS noetic with Gazebo classic:
git clone https://github.com/ethz-asl/ethzasl_fw_px4.git --branch pr-hinwil-testing --recursive
cd ..
cd ethzasl_fw_px4
bash ./Tools/setup/ubuntu.sh
make px4_sitl gazebo
Do source the relevant environment variables before launching terrain navigation. For instance, for Ubuntu 20.04 + ROS Noetic + Gazebo classic:
px4_dir=~/ethzasl_fw_px4
source $px4_dir/Tools/simulation/gazebo/setup_gazebo.bash $px4_dir $px4_dir/build/px4_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$px4_dir
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$px4_dir/Tools/simulation/gazebo/sitl_gazebo
export GAZEBO_PLUGIN_PATH=$GAZEBO_PLUGIN_PATH:/usr/lib/x86_64-linux-gnu/gazebo-11/plugins
Note: The path for gazebo may vary for a different version of Gazebo, update GAZEBO_PLUGIN_PATH
as well as ROS_PACKAGE_PATH
accordingly.
The default launch file can be run as the following command.
roslaunch terrain_navigation_ros test_terrain_planner.launch
You can use QGroundcontrol to configure and fly the vehicle. Get the vehicle flying, and plan a mission to fly!
Once the vehicle is flying in a loiter, plan a mission, engage the planner and fly through the rviz UI (Video: https://youtu.be/EJWyGSqaKb4)