Meta-planning + Fast and Safe Tracking (FaSTrack): effectively blending fast planning methods with slower, reachability-based safety guarantees for online safe trajectory planning. Please refer to our ICRA 2018 paper for technical details.
NOTE: This repository is going under a major refactor to ensure efficiency and continuing reliability. In the meantime, please check out a much more stable version of the original FaSTrack idea here.
All code in this repository is written in the Robot Operating System (ROS) framework, and as such is broken up into atomic packages that implement specific functionality. The
ros/ directory is the root workspace, and individual packages live inside the
First, make sure you have ROS installed on your system. The project was developed in Jade, but it should be compatible with anything past Hydro. Please let us know if you have any compatibility issues.
Meta-FaSTrack currently depends upon the crazyflie_clean repository, which contains drivers and utilities for the HSL's Crazyflie 2.0 testbed. We intend to remove this build dependency in the future so that
Tracking can be used more easily in other contexts. This will be part of a larger code reorganization/refactor.
- Gtest -- Google's C++ unit testing library
- Eigen -- a header-only linear algebra library for C++
- OMPL -- an open C++ library for motion planning (recommend v1.2.1 to avoid g++5 dependency)
- MATIO -- an open C library for MATLAB MAT file I/O
- FLANN -- an open source library for fast (approximate) nearest neighbors
You must begin by building and sourcing the
crazyflie_clean repository. Instructions may be found in that project's README. To build
Meta-FaSTrack, open a terminal window and navigate to the
ros/ directory. Then run:
Every time you open a new terminal, you'll have to tell ROS how to find this package. Do this by running the following command from the
Tracking includes two demos, one software and one hardware. To run the hardware demo, you will need physical hardware access. For instructions on how to set that up, please contact us. The software demo may be launched as follows. Note that these commands must be run in different terminal windows.
roslaunch meta_planner rviz.launch roslaunch meta_planner software_demo.launch
To run unit tests, type:
C++ reference materials
We attempt to adhere to the philosophy put forward in the Google C++ Style Guide. Our code is written for the reader, not the writer. We write comments liberally and use inheritance whenever it makes sense.
A few tips, tricks, and customs that you'll find throughout our code:
- Lines of code are no longer than 80 characters.
- The names of all member variables of a class end with an underscore, e.g.
- When iterating through a vector, we name the index something like
iiinstead of just
i. This makes it super easy to find and replace the iterator later.
- We use the
constspecifier whenever possible.
- We try to include optional guard statements with meaningful debug messages wherever possible. These may be toggled on/off with the
- Whenever it makes sense, we write unit tests for self-contained functionality and integration tests for dependent functions and classes. These are stored in the