{"id":18621377,"url":"https://github.com/ethz-asl/terrain-navigation","last_synced_at":"2025-04-04T19:13:01.203Z","repository":{"id":193016033,"uuid":"677380345","full_name":"ethz-asl/terrain-navigation","owner":"ethz-asl","description":"Implementation for safe low altitude navigation in steep terrain for fixed-wing Aerial Vehicles","archived":false,"fork":false,"pushed_at":"2025-03-27T09:30:01.000Z","size":32737,"stargazers_count":151,"open_issues_count":11,"forks_count":21,"subscribers_count":10,"default_branch":"main","last_synced_at":"2025-03-28T18:17:25.085Z","etag":null,"topics":["drones","fixedwing","planning","robotics"],"latest_commit_sha":null,"homepage":"https://ieeexplore.ieee.org/abstract/document/10443502","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ethz-asl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-11T12:32:15.000Z","updated_at":"2025-03-10T11:34:04.000Z","dependencies_parsed_at":"2023-09-06T11:25:00.810Z","dependency_job_id":"e29f50cc-4430-4c50-9e10-f739119b6166","html_url":"https://github.com/ethz-asl/terrain-navigation","commit_stats":{"total_commits":483,"total_committers":6,"mean_commits":80.5,"dds":"0.020703933747411973","last_synced_commit":"df9497b9f0b09e1b5926f18e86dc97aa2d52d1cf"},"previous_names":["ethz-asl/terrain-navigation"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethz-asl%2Fterrain-navigation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethz-asl%2Fterrain-navigation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethz-asl%2Fterrain-navigation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethz-asl%2Fterrain-navigation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ethz-asl","download_url":"https://codeload.github.com/ethz-asl/terrain-navigation/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247234923,"owners_count":20905854,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["drones","fixedwing","planning","robotics"],"created_at":"2024-11-07T04:11:25.807Z","updated_at":"2025-04-04T19:13:01.142Z","avatar_url":"https://github.com/ethz-asl.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg align=\"right\" height=\"60\" src=\"https://user-images.githubusercontent.com/5248102/126074528-004a32b9-7911-486a-9e79-8b78e6e66fdc.png\"\u003e\n\n# terrain-navigation\n\n[![Build Test](https://github.com/ethz-asl/terrain-navigation/actions/workflows/build_test.yml/badge.svg)](https://github.com/ethz-asl/terrain-navigation/actions/workflows/build_test.yml)\n\nThis package includes an implementation of the RA-L submission of  \"Safe Low-Altitude Navigation in Steep Terrain with Fixed-Wing Aerial Vehicles\".\nThe 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.\n\n\u003e ROS 2 support of the package can be found in the [ros2](https://github.com/ethz-asl/terrain-navigation/tree/ros2) branch. The implementation supports ROS 2 Humble.\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/ethz-asl/terrain-navigation/assets/5248102/90e43b60-ea8c-49db-9fb3-257b145fc35c\" alt=\"overview\"\u003e\n\u003c/p\u003e\n\n## Paper and Video\nIf you find this package useful in an academic context, please consider citing the paper\n\n- 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\n. [[paper](https://ieeexplore.ieee.org/abstract/document/10443502)] [[video](https://youtu.be/7C5SsRn_L5Q?si=cMNtX16F1aFNrV8_)]\n\n```\n@article{lim2024safe,\n  title={Safe Low-Altitude Navigation in Steep Terrain With Fixed-Wing Aerial Vehicles},\n  author={Lim, Jaeyoung and Achermann, Florian and Girod, Rik and Lawrance, Nicholas and Siegwart, Roland},\n  journal={IEEE Robotics and Automation Letters},\n  year={2024},\n  volume={9},\n  number={5},\n  pages={4599-4606},\n  doi={10.1109/LRA.2024.3368800}}\n```\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/user-attachments/assets/c3723ce4-83a6-44f0-b008-bdba7c189055\" alt=\"fieldtests\"\u003e\n\u003c/p\u003e\n\n## Setup\n\n### Setting up the Build Environment using Docker\n\nIf your operating system doesn't support ROS 1 noetic, docker is a great alternative. \n\nFirst, create the image, with the build context at the root of this repo\n\n```Bash\ndocker build --file docker/Dockerfile --tag terrain-navigation-ros1 .\n```\n\nYou can see the image exists:\n```Bash\ndocker images\n\u003e\u003e\u003e REPOSITORY                TAG       IMAGE ID       CREATED        SIZE\n\u003e\u003e\u003e terrain-navigation-ros1   latest    5565f845ab4f   2 weeks ago    774MB\n```\n\nNext, run the image, mounting in the source into a workspace. All the dependencies are now installed.\n```Bash\ndocker run --network=host -it -v $(pwd):/root/catkin_ws/src/terrain-navigation -w /root/catkin_ws terrain-navigation-ros1 bash\n```\n\n### Running the Build\n\nConfigure the catkin workspace\n```Bash\ncatkin config --extend \"/opt/ros/noetic\"\ncatkin config --merge-devel\n```\n\nFor dependencies that do not have binaries available, pull them in using rosinstall.\n```Bash\nwstool init src src/terrain-navigation/dependencies.rosinstall\nwstool update -t src -j4\n```\n\nFor dependencies available through binaries, use rosdep.\nThis package depends on [GDAL](https://gdal.org/index.html) to read georeferenced images and GeoTIFF files.\n```Bash\napt update\nrosdep update\nsource /opt/ros/noetic/setup.bash\nrosdep install --from-paths src --ignore-src -y\n```\n\nBuild the package\n```Bash\ncatkin config --cmake-args -DCMAKE_BUILD_TYPE=Release -DCATKIN_ENABLE_TESTING=False\ncatkin build -j$(nproc) -l$(nproc) terrain_navigation_ros\n```\n## Running an example of the planner\nIn order to run the examples, build the `terrain_planner_benchmark` package.\n```\ncatkin build terrain_planner_benchmark\n```\nRun a simple planning example:\n```\nroslaunch terrain_planner_benchmark test_ompl_rrt_circle.launch \n```\n\n\u003cp align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/ethz-asl/terrain-navigation/assets/5248102/f630d1da-37c1-4e8d-9127-83a07ba22f45\" alt=\"example\" width=\"480\"\u003e\n\u003c/p\u003e\n\n\n## Running with PX4 SITL(Software-In-The-Loop)\n\nTo setup PX4, clone the [ETHZ ASL PX4 autopilot project](https://github.com/ethz-asl/ethzasl_fw_px4/tree/pr-hinwil-testing)\nThe setup instructions can be found in the [documentation](https://docs.px4.io/main/en/dev_setup/dev_env_linux_ubuntu.html) for the latest dependencies.\n\nFor Ubuntu 20.04+ROS noetic with Gazebo classic:\n\n```Bash\ngit clone https://github.com/ethz-asl/ethzasl_fw_px4.git --branch pr-hinwil-testing --recursive\ncd ..\ncd ethzasl_fw_px4\nbash ./Tools/setup/ubuntu.sh\n\nmake px4_sitl gazebo\n```\n\nDo source the relevant environment variables before launching terrain navigation. For instance, for Ubuntu 20.04 + ROS Noetic + Gazebo classic:\n\n```Bash\npx4_dir=~/ethzasl_fw_px4\nsource $px4_dir/Tools/simulation/gazebo/setup_gazebo.bash $px4_dir $px4_dir/build/px4_sitl_default\nexport ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$px4_dir\nexport ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$px4_dir/Tools/simulation/gazebo/sitl_gazebo\nexport GAZEBO_PLUGIN_PATH=$GAZEBO_PLUGIN_PATH:/usr/lib/x86_64-linux-gnu/gazebo-11/plugins\n```\n\n*Note*: The path for gazebo may vary for a different version of Gazebo, update `GAZEBO_PLUGIN_PATH` as well as `ROS_PACKAGE_PATH`\naccordingly.\n\n\nThe default launch file can be run as the following command.\n```Bash\nroslaunch terrain_navigation_ros test_terrain_planner.launch\n```\n\nYou can use [QGroundcontrol](http://qgroundcontrol.com/) to configure and fly the vehicle. Get the vehicle flying, and plan a mission to fly!\n\nOnce the vehicle is flying in a loiter, plan a mission, engage the planner and fly through the rviz UI (Video: https://youtu.be/EJWyGSqaKb4)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethz-asl%2Fterrain-navigation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fethz-asl%2Fterrain-navigation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethz-asl%2Fterrain-navigation/lists"}