In preparation for the upcoming ROS aerial WG meeting in a few days, I wanted to create thread to share recent updates regarding 3D navigation for aerial.
Navigation in aerial covers a wide variety of vehicle types and environments, from small indoor quads running SLAM to larger outdoor fixed-wing platforms with reliable GPS. Many facets of aerial navigation have been widely researched and is even available in open source. Simple object avoidance is now available on consumer-grade multirotor photography platforms.
Most multirotor autopilots can support onboard waypoint planning for outdoor surveying in 2D, and some even support 3D surveying for infrastructure analysis.
For fixed-wing vehicles, navigation brings some additional challenges:
- Fixed-wing vehicles cannot stop mid-flight, so errors in algorithms can have high consequence
- Fixed-wing vehicles have fewer degrees of freedom, with limited turn radius and climb/descent angles
- Fixed-wing vehicles fly for longer distances, where the curvature of the earth can ruin flat-earth assumptions in local cartesian frames
- Fixed-wing vehicles still need to obey regulations with regard to stringent altitude limits above ground
As a result, currently available functionality puts a high load on the operator in the planning stage to account for these challenges, autopilots have a high burden to handle terrain avoidance without computational power able to guarantee a plan is feasible or safe, and thus fixed-wing vehicles are typically artificially limited in capability to ensure safety.
Despite these challenges, recent work from @Jaeyoung-Lim from the Autonomy Systems lab at ETH Zurich aims to prove 3D fixed-wing autonomy in mountainous terrain under an airspace boundary. The code has been released open-source under ROS1 with a permissible license.
- Reproduce the terrain navigation work in ROS 1 and contribute fixes as-needed
- Port everything to ROS 2
- Abstract away ties to PX1 into an autopilot-agnostic message layer
- Fly it on another fixed-wing using ArduPilot and ROS 2 to prove the abstraction
- Release binaries for terrain-navigation in ROS 2 humble
So far, we’ve contributed many improvements to reproduce the work. We have not yet gotten a full dockerized environment running to reproduce it yet, which is handy for developers using Ubuntu 22.04, but @botmayank has it running on Ubuntu 20. @srmainwaring is actively working towards the port to ROS 2. Dependencies like grid_map_geo are now available in ROS 2.
Because legal fixed-wing autonomous navigation is not a solved problem in the open-source environment, there has been great interest on this project, and there’s plenty of work to go around for those curious to help out.
Current challenges include:
- Autopilots all require specific interfaces to use them for navigation in ROS 2 which makes writing autopilot-independent algorithms difficult
- Common autopilots such as PX4 and ArduPilot do not handle multiple vertical datum standards well; instead, they expect the user to validate all components are using the same datum. When these are wrong, the user observes significant offsets and disagreement
- ROS 2 support for GPS and local datums for accuracy is still in design