Motion Planner - Pitt-RAS/iarc7_common GitHub Wiki

The motion planner is a single node responsible for high-level planning of every action the drone is capable of, such as moving to a position or hitting a roomba. At this level, it does this through various planners, as opposed to controllers. The planners take in a goal and find a sequence of inputs to a lower level which accomplish that goal. For example, a planner might generate an acceleration and velocity profile to reach a certain position, and then hand this profile to a controller that makes the robot travel at those velocities.

The motion planner takes in high-level actions (like waypoints or objects to track) and outputs lower-level commands (such as velocities) so that the drone executes those actions. It works by providing an action server for other nodes to request actions. The action server itself is implemented in iarc_task_action_server.py, but the node, including the action server, is launched from motion_planner.py. Internally, these actions are converted to tasks, which are objects that inherit from AbstractTask. Intuitively, the task objects are templates that tell the motion planner how to execute the corresponding tasks. This means the tasks cannot do anything on their own, but can return what they would like done next from their get_desired_command method when it is called by the motion planner. This means the motion planner can be very safe and stable, and new behavior can be put into tasks and tested quickly with failsafes in place if there is a bug in a task.

For more information on planning in general, this set of slides from CMU's undergrad planning course is a good place to start.