Featured Package: robot_actions

DoorA key objective for ROS, and the personal robotics program, is to make it easier to get robots to do useful things. Our approach for pursuing this goal is to provide a library of useful primitives that can be assembled quickly to implement new tasks. To this end, we have developed an abstraction of robot action, defined in the robot_actions software package, which encapsulates a specific behavior that may execute for an extended period of time in accomplishing a goal.

A canonical example of such a robot action primitive is the MoveBase action, which was central to Milestone 1. It is commanded with a goal pose to achieve, and may be active in pursuing that goal for many minutes. Internally this action employs a path planner and maintains a world model suitable for navigation. It can handle its own re-planning to recover from a plan failure, as long as the goal is still feasible. If it cannot accomplish the goal, it aborts. If for any reason the action must be terminated prematurely, it can be preempted by a higher level client (we call this an executive). If it achieves its goal, it becomes inactive, indicating success. These features of being goal-directed, modular, durative, and preemptable constitute the main elements of a robot action.

Milestone 2, which is heavily under development as I write, will leverage robot actions extensively. We are sharing actions (e.g. tucking arms out of the way, switching controllers, moving the base) for doorway traversal, recharging, and navigation, as well as building more specific actions (e.g. grasping a handle, detecting a door) for each area. The task of integrating these actions falls to the executive, which will manipulate actions as primitives in building plans of action automatically. That is a topic for another day.

 -- Conor McGann