This ROS package hosts a lightweight global planner for the MuSHR system. It is intended to be runnable on any MuSHR car, along with the rest of the MuSHR stack. It uses a lazy A* planner implementation. Search based methods have two parts - first, the planning problem and environment must be represented by a graph, and then the graph must be searched from a starting point to a goal. For this implementation, we use a Roadmap (see roadmap.py) to represent an environment on which we can find valid Dubins paths (see dubins.py). We use a sampler (samplers.py) and a problem definition (problems.py) to help construct and reason about this roadmap. Within search.py, we use the Networkx A* solver to find a shortest path through our roadmap. Additionally, we optimize our path with shortcutting the final path we have if possible.
The following tutorial goes through installing/running the car.
Make sure you install our fork of networkx onto your system (our fork has a tiny modification which determines if there is no solution more efficiently, it is a pending pull request). If you already have networkx installed, you should uninstall it first and reinstall the forked version. Note if you do not have it installed, skip the uninstall step:
pip uninstall networkx
pip install git+https://github.com/brianhou/networkx.git
Clone this repo into ~/catkin_ws/src
If you're on our docker image, you should be good to go! If not, make sure you have these common ROS dependencies: tf2_ros
, std_msg
, nav_msg
, visualization_msg
, and geometry_msg
. Also, make sure you have the Python libraries matplotlib
and numpy
as well.
Topic | Type | Description |
---|---|---|
/path_topic |
geometry_msgs/Path | The trajectory computed by the planner. |
Topic | Type | Description |
---|---|---|
/map |
nav_msgs/OccupancyGrid | Uses the provided occupancy grid as the graph for planning. |
/goal_topic |
geometry_msgs/PoseStamped | Goal to compute path to. |
/start_topic |
geometry_msgs/PoseStamped | Starting location of the path being computed. |