A ROS wrapper for Motion Primitive Library v1.1. Video of the original paper of "Search-based Motion Planning for Quadrotors using Linear Quadratic Minimum Time Control" has been uploaded at the follwing link: youtube.
The package is still under maintenance, the API may change occasionally, please use git log
to track the latest update.
Packages:
motion_primitive_library
: back-end for planning trajectory in various environmentsplanning_ros_msgs
: ROS msgs used in storing, visualizing and communicatingplanning_ros_utils
: ROS utils for interfacing with MPL, it also includes mapping and rviz pluginsDecompROS
: convex decomposition toolmpl_external_planner
: planner that uses thempl_test_node
: examples code for simple testing
ROS
(Indigo+)SDL
(sudo apt install -y libsdl1.2-dev libsdl-image1.2-dev
)catkin_simple
To initialize the submodule motion_primitive_library
and DecompROS
, run following commands at first:
$ cd /PATH/TO/mpl_ros
$ git submodule update --init --recursive
$ mv mpl_ros ~/catkin_ws/src
$ cd ~/catkin_ws & catkin_make_isolated -DCMAKE_BUILD_TYPE=Release
$ mv mpl_ros ~/catkin_ws/src
$ cd ~/catkin_ws
$ catkin config -DCMAKE_BUILD_TYPE=Release
$ catkin b
Simple test using the built-in data in a voxel map can be run using the following commands:
$ cd ./mpl_test_node/launch/map_planner_node
$ roslaunch rviz.launch
$ roslaunch test.launch
It also extracts the control commands for the generated trajectory and saves as
trajectory_commands.bag
.
The planning results are visualized in Rviz as following:
2D Occ Map | 3D Voxel Map |
---|---|
The planner can also take input polygonal map for collision checking. When the obstacles are not static, it's able to find the trajectory that avoids future collision:
$ cd ./mpl_test_node/launch/poly_map_planner_node
$ roslaunch rviz.launch
$ roslaunch test.launch
Static Obstacles | Moving Obtacles |
---|---|
Even if the trajectories of obstacles are non-linear, our planner could find the optimal maneuver for the robot with certain dynamic constraints through one plan:
$ cd ./mpl_test_node/launch/nonlinear_obstacle_node
$ roslaunch rviz.launch
$ roslaunch test.launch
We can build a team of robots that move simultaneously in a constrained environments without internal collision. In the following demo, each robot replans constantly at 2Hz and it runs its own planner that tries to reach the pre-allocate goal as fast as possible. We assume the robot knows other robots' trajectory at the time when it's planning.
Star | Tunnel |
---|---|
Another example using ellipsoid model can be found in mpl_test_node/launch/ellipsoid_planner_node
, in which a point cloud is used as obstacles, and the robot is modeled as the ellipsoid. More information can be found in the paper "Search-based Motion Planning for Aggressive Flight in SE(3)".
$ cd ./mpl_test_node/launch/ellispoid_planner_node
$ roslaunch rviz.launch
$ roslaunch test.launch
The built-in maps are listed as below:
Simple | Levine | Skir | Office |
---|---|---|---|
User can form their own maps using the mapping_utils
, a launch file example is provided in ./mpl_test_node/launch/map_generator
for converting a STL file into voxel map.
For details about the full utilities, please refer to wiki.