Based on the ROS2 Navigation Framework and System this is an attempt at building non-planar navigation stack. The primary differences are:
- All navigation is done using a speed dependent polar histogram around the robot. This is achieved by mainaining a dome of varying size around the robot that is informed from an octomap. This replaces the costmap as used in the ROS2 Navigation Framework.
- All planners and controllers are 3D spactially enabled. This allows the drone the fly over or under an obstacle, rather than the long way around.
- This packages still does not use Lifecycle Nodes. One day...
All coding was started from scratch, but I referrenced a lot of the work done by the contributors to the ROS2 Navigation Framework and System. Where appropriate I retained all licenase agreements. I do believe this effort is in the spirit of open source code. Please feel free to copy, use and alter my code. If you sell it, please consider me.
The navigation server depends on the BehaviourTree.CPP library
All mapping activities is done using the Octomap server.
sudo apt-get install ros-foxy-octomap-server
The map can be initiated through a file upload at startup, an empty map can be populated by providing a pointcloud publisher, or both. This allows for SLAM capability.
The costmap is built on a matrix leveraging the Eigen libraries. Eigen is a lightweight C++ template library for linear algebra.
sudo apt-get install libeigen3-dev
This is still a work in progress. This code has flown in a simulator using the Regulated Pure Pursuit Controller. The code has not flown in real life yet. (18/11/2022)