Hi everyone!
We open-sourced today the autonomy stack for quadrotors we use in the Vijay Kumar Lab at the University of Pennsylvania. Check out the code at GitHub - KumarRobotics/kr_autonomous_flight: Autonomous flight system for aerial robots.
We use this stack in our quadrotors for fully autonomous flight in GPS-denied conditions. The stack is battle-tested: the initial revisions were developed for the FLA program, and we recently used it for long under-canopy flights in forest-like environments: Large-scale Autonomous Flight with Real-time Semantic SLAM under Dense Forest Canopy - YouTube.
Our code is composed of the following modules:
-
Estimation: we run Stereo-MSCKF (GitHub - KumarRobotics/msckf_vio: Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight) using the Open Vision Computer 3 (GitHub - osrf/ovc: the Open Vision Computer), an Open Robotics project. This is a killer combination! The VIO is stable in very challenging conditions (when features are not static, or we have fast changes in exposure). We use multicam_calibration (GitHub - KumarRobotics/multicam_calibration) and Kalibr (GitHub - ethz-asl/kalibr: The Kalibr visual-inertial calibration toolbox) for camera calibration.
-
Mapping and Planning: we implemented both a global mapper and a local mapper. We use a 3D Lidar for this. We plan the trajectory in the local map using motion primitives (GitHub - KumarRobotics/mpl_ros: A ROS wrapper for trajectory planning based on motion primitives) and the global trajectory using JPS (GitHub - KumarRobotics/jps3d: A C++ implementation of Jump Point Search on both 2D and 3D maps). This combination allows for smooth and aggressive flights as all our local paths are dynamically feasible for our quad.
-
Controller: we rely on a geometric controller presented in kr_mav_control for the position control loop to calculate the desired orientation and thrust for the robot. We also released this piece of software recently GitHub - KumarRobotics/kr_mav_control: Code for quadrotor control! A Pixhawk 4 running PX4 is used for the attitude control loop to calculate the low-level commands.
-
Simulation: our code can run in Gazebo (disabling the perception modules). We went to a great extent to make the code simple to run!
Note on hardware: we run the whole stack onboard our Falcon 4 platform. The Falcon 4 features the following sensor stack: NUC 10 with i7-10710U processor, OVC 3 with VN100-T IMU, Ouster OS1-64 Lidar, Pixhawk 4, ZED-F9P (used for ground truth when we have GPS). The autonomy stack can be adapted to use different sensors. It has a 30-min flight time with sensors and the onboard computer running.
Any comments, questions, and feedback are greatly appreciated! And yes, we are planning to move to ROS2