{"id":13651709,"url":"https://github.com/mit-acl/faster","last_synced_at":"2025-09-21T22:54:34.156Z","repository":{"id":39566493,"uuid":"232668094","full_name":"mit-acl/faster","owner":"mit-acl","description":"3D Trajectory Planner in Unknown Environments","archived":false,"fork":false,"pushed_at":"2025-03-10T22:43:56.000Z","size":112078,"stargazers_count":1050,"open_issues_count":15,"forks_count":189,"subscribers_count":27,"default_branch":"master","last_synced_at":"2025-04-22T22:41:39.837Z","etag":null,"topics":["autonomous-navigation","drone","ground-robot","path-planning","planning","trajectory-optimization","uav"],"latest_commit_sha":null,"homepage":"","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/mit-acl.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}},"created_at":"2020-01-08T21:57:52.000Z","updated_at":"2025-04-21T08:06:48.000Z","dependencies_parsed_at":"2022-07-13T09:00:29.410Z","dependency_job_id":null,"html_url":"https://github.com/mit-acl/faster","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mit-acl/faster","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Ffaster","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Ffaster/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Ffaster/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Ffaster/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mit-acl","download_url":"https://codeload.github.com/mit-acl/faster/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mit-acl%2Ffaster/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276318993,"owners_count":25621651,"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","status":"online","status_checked_at":"2025-09-21T02:00:07.055Z","response_time":72,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["autonomous-navigation","drone","ground-robot","path-planning","planning","trajectory-optimization","uav"],"created_at":"2024-08-02T02:00:51.705Z","updated_at":"2025-09-21T22:54:34.075Z","avatar_url":"https://github.com/mit-acl.png","language":"C++","readme":"# FASTER: Fast and Safe Trajectory Planner for Navigation in Unknown Environments #\n\n### **Accepted for publication in the IEEE Transactions on Robotics (T-RO)**\n\n### **Finalist to the Best Paper Award on Safety, Security, and Rescue Robotics (IROS 2019)**\n\nUAV               |  Ground Robot           | \n:-------------------------:|:-------------------------:|\n[![IROS 2019: FASTER: Fast and Safe Trajectory Planner for Flights in Unknown Environments](./faster/imgs/uav_sim.gif)](https://www.youtube.com/watch?v=fkkkgomkX10 \"IROS 2019: FASTER: Fast and Safe Trajectory Planner for Flights in Unknown Environments\")      |  [![IROS 2019: FASTER: Fast and Safe Trajectory Planner for Flights in Unknown Environments](./faster/imgs/gr_sim.gif)](https://youtu.be/L13k44-krcc \"IROS 2019: FASTER: Fast and Safe Trajectory Planner for Flights in Unknown Environments\") |  \n[![IROS 2019: FASTER: Fast and Safe Trajectory Planner for Flights in Unknown Environments](./faster/imgs/uav_hw.gif)](https://www.youtube.com/watch?v=fkkkgomkX10 \"IROS 2019: FASTER: Fast and Safe Trajectory Planner for Flights in Unknown Environments\")       |  [![IROS 2019: FASTER: Fast and Safe Trajectory Planner for Flights in Unknown Environments](./faster/imgs/gr_hw.gif)](https://www.youtube.com/watch?v=fkkkgomkX10 \"IROS 2019: FASTER: Fast and Safe Trajectory Planner for Flights in Unknown Environments\")    |  \n\n## Citation\n\nWhen using FASTER, please cite the following journal paper  ([pdf](https://arxiv.org/abs/2001.04420), [video](https://www.youtube.com/watch?v=fkkkgomkX10))\n```bibtex\n@article{tordesillas2021faster,\n  title={{FASTER}: Fast and Safe Trajectory Planner for Navigation in Unknown Environments},\n  author={Tordesillas, Jesus and How, Jonathan P},\n  journal={IEEE Transactions on Robotics},\n  year={2021},\n  publisher={IEEE}\n}\n```\n\nThe conference version is [here](https://arxiv.org/abs/1903.03558): \n```bibtex\n@inproceedings{tordesillas2019faster,\n  title={{FASTER}: Fast and Safe Trajectory Planner for Flights in Unknown Environments},\n  author={Tordesillas, Jesus and Lopez, Brett T and How, Jonathan P},\n  booktitle={2019 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},\n  year={2019},\n  organization={IEEE}\n}\n\n```\n\n\n## General Setup\nFASTER has been tested with \n* Ubuntu 16.04/ROS Kinetic  \n* Ubuntu 18.04/ROS Melodic \n\nOther ROS versions may require some minor changes, feel free to [create an issue](https://github.com/mit-acl/faster/issues) if you have any problems. The Gurobi versions tested are Gurobi 8.1, Gurobi 9.0, and Gurobi 9.1.\n\nInstall the [Gurobi Optimizer](https://www.gurobi.com/products/gurobi-optimizer/). You can test your installation typing `gurobi.sh` in the terminal. Have a look at [this section](#issues-when-installing-gurobi) if you have any issues.\n\nInstall the following dependencies:\n```\nsudo apt-get install ros-\"${ROS_DISTRO}\"-gazebo-ros-pkgs ros-\"${ROS_DISTRO}\"-mavros-msgs ros-\"${ROS_DISTRO}\"-tf2-sensor-msgs\n```\n```\npython -m pip install pyquaternion\n```\n\nCreate a workspace, and clone this repo and its dependencies:\n```\nmkdir ws \u0026\u0026 cd ws \u0026\u0026 mkdir src \u0026\u0026 cd src\ngit clone https://github.com/mit-acl/faster.git\nwstool init\nwstool merge ./faster/faster/install/faster.rosinstall\n\n```\n\nIn the following, remember (once the workspace is compiled) to add this to your `~/.bashrc`:\n```\nsource PATH_TO_YOUR_WS/devel/setup.bash\n``` \n\n### Instructions to use FASTER with an aerial robot:\n\nCompile the code:\n\n```\nwstool update -j8\ncd ..\ncatkin config -DCMAKE_BUILD_TYPE=Release\ncatkin build\n```\n\nAnd finally open 5 terminals and execute these commands:\n```\nroslaunch acl_sim start_world.launch\nroslaunch acl_sim perfect_tracker_and_sim.launch\nroslaunch global_mapper_ros global_mapper_node.launch\nroslaunch faster faster_interface.launch\nroslaunch faster faster.launch\n```\nThe blue grid shown in Rviz is the unknown space and the orange one is the occupied-known space. Now you can click `Start` in the GUI, and then, in RVIZ, press `G` (or click the option `2D Nav Goal` on the top bar of RVIZ) and click any goal for the drone. \n\n\u003e **_NOTE (TODO):_**  Right now the radius of the drone plotted in Gazebo (which comes from the `scale` field of `quadrotor_base_urdf.xacro`) does not correspond with the radius specified in `faster.yaml`. \n\n\n### Instructions to use FASTER with a ground robot:\n\n\u003e **_IMPORTANT NOTE:_**  There are some important differences on the performance of the ground robot when using the Gazebo version that comes with ROS Kinetic and the one that comes with ROS Melodic. To achieve a good tracking error (like the one shown [here](https://github.com/mit-acl/faster/blob/master/faster/imgs/gr_sim.gif)), you may have to tune the [gains of the controller](https://github.com/mit-acl/faster/blob/master/faster/scripts/goal_odom_to_cmd_vel_state.py) depending on the specific verion of ROS/Gazebo that you are using. \n\nInstall the following dependencies:\n```\nsudo apt-get install ros-\"${ROS_DISTRO}\"-control-toolbox ros-\"${ROS_DISTRO}\"-ros-control ros-\"${ROS_DISTRO}\"-robot-localization ros-\"${ROS_DISTRO}\"-lms1xx ros-\"${ROS_DISTRO}\"-interactive-marker-twist-server ros-\"${ROS_DISTRO}\"-hector-gazebo-plugins ros-\"${ROS_DISTRO}\"-move-base ros-\"${ROS_DISTRO}\"-ros-control ros-\"${ROS_DISTRO}\"-ros-controllers ros-\"${ROS_DISTRO}\"-pointgrey-camera-description ros-\"${ROS_DISTRO}\"-hardware-interface ros-\"${ROS_DISTRO}\"-message-to-tf ros-\"${ROS_DISTRO}\"-gazebo-ros-control\n```\nThen download the ground_robot-specific packages and compile the repo:\n\n```\nwstool merge ./faster/faster/install/faster_ground_robot.rosinstall\nwstool update -j8\ncd ..\ncatkin config -DCMAKE_BUILD_TYPE=Release\ncatkin build\n```\n\n\nThen, in [`faster.yaml`](https://github.com/mit-acl/faster/tree/master/faster/param), change these parameters:\n```\ndrone_radius: 0.5  #[m]\n\nz_max: 0.5         #[m] \nz_ground: -0.2\n\nv_max: 1.4         #[m/s]  \na_max: 1.4         #[m/s2] \nj_max: 5.0         #[m/s3]\n\nis_ground_robot: true  \n```\n\nAnd finally open 4 terminals and execute these commands\n```\nroslaunch faster ground_robot.launch\nroslaunch global_mapper_ros global_mapper_node.launch quad:=JA01\nroslaunch faster faster_interface.launch quad:=JA01 is_ground_robot:=true\nroslaunch faster faster.launch quad:=JA01\n```\n\nNow you can click `Start` in the GUI, and then, in RVIZ, press `G` (or click the option `2D Nav Goal` on the top bar of RVIZ) and click any goal for the ground robot. \n\n\n\n## Architecture:\n\n\n![](./faster/imgs/diagram.png) \n\nFor the aerial robot, the option 3 is provided (a perfect tracker and a Gazebo simulation to obtain the depth). To make the simulation faster, the physics engine of Gazebo is disabled using [`disable_physics.cpp`](https://gitlab.com/mit-acl/lab/acl-gazebo/-/blob/master/acl_sim/src/disable_physics.cpp) of [`acl-gazebo`](https://gitlab.com/mit-acl/lab/acl-gazebo).\n\nFor the ground robot, the option 2 is provided (a controller, and a Gazebo simulation with both dynamics and depth (using the `multi_jackal` package)\n\n## How do I use FASTER with a real robot?\nTo run the mapper, you simply need to run the node that publishes the depth image of the camera (for example using [`realsense-ros`](https://github.com/IntelRealSense/realsense-ros) if you are using an Intel RealSense camera). After launching this node, find the name of the topic of the depth image (by doing `rostopic echo`), and finally put that name on the [launch file of the mapper](https://gitlab.com/mit-acl/lab/acl-mapping/-/blob/dev/global-mapper/global_mapper_ros/launch/global_mapper_node.launch#L12). \n\nAs shown in the diagram above, the UAV should subscribe to the [Goal message](https://gitlab.com/mit-acl/fsw/snap-stack/snapstack_msgs/-/blob/46a1911faed1a5b1be479df2f969ee4e17304f29/msg/QuadGoal.msg) published by FASTER. The estimator (or the motion capture) should then publish the current state of the UAV as a [State message](https://gitlab.com/mit-acl/fsw/snap-stack/snapstack_msgs/-/blob/master/msg/State.msg). If you are using a ground robot, you need to publish a [nav_msgs/Odometry message](http://docs.ros.org/en/api/nav_msgs/html/msg/Odometry.html) (see [this](https://github.com/mit-acl/faster/blob/1baccf08908ad5a049c9e3315e577b35214ce763/faster/scripts/goal_odom_to_cmd_vel_state.py#L218)), and it will be converted directly to a [State message](https://gitlab.com/mit-acl/fsw/snap-stack/snapstack_msgs/-/blob/master/msg/State.msg).\n\n\n## Credits:\nThis package uses code from the [JPS3D](https://github.com/KumarRobotics/jps3d) and [DecompROS](https://github.com/sikang/DecompROS) repos (included in the `thirdparty` folder), so credit to them as well. \n\n\n## Issues when installing Gurobi:\n\nIf you find the error:\n```\n“gurobi_continuous.cpp:(.text.startup+0x74): undefined reference to\n`GRBModel::set(GRB_StringAttr, std::__cxx11::basic_string\u003cchar,\nstd::char_traits\u003cchar\u003e, std::allocator\u003cchar\u003e \u003e const\u0026)'”\n```\nThe solution is:\n\n```bash\ncd /opt/gurobi800/linux64/src/build  #Note that the name of the folder gurobi800 changes according to the Gurobi version\nsudo make\nsudo cp libgurobi_c++.a ../../lib/\n```\n\n## Issues with other possible errors:\n\nYou can safely ignore these terminal errors:\n* `Error in REST request` (when using ROS Melodic)\n* `[ERROR] [...]: GazeboRosControlPlugin missing \u003clegacyModeNS\u003e while using DefaultRobotHWSim, defaults to true.` (when using the ground robot)\n* `[ERROR] [...]: No p gain specified for pid.  Namespace: /gazebo_ros_control/pid_gains/front_left_wheel.` (when using the ground robot)\n","funding_links":[],"categories":["Computer Vision 🤖","Repositories"],"sub_categories":["Modules 🧩","External Repositories"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmit-acl%2Ffaster","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmit-acl%2Ffaster","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmit-acl%2Ffaster/lists"}