Job planning in robotics – Robohub

Written by admin

Suppose we now have a robotic in a easy world just like the one beneath. Let’s think about commanding our robotic to carry out a activity comparable to “take the apple from the shelf and put it on the desk”.

Easy activity planning instance world: A robotic can transfer between a finite set of areas, and may decide and place objects at these areas.

I’d argue we people have fairly good instinct for a way a robotic may obtain this activity. We may describe what the robotic ought to do by breaking the answer down into particular person actions. For instance:

  • Transfer to the shelf
  • Choose up the apple
  • Transfer again to the desk
  • Place the apple

That is advantageous for our easy instance — and actually, can be advantageous for a lot of real-world robotics functions — however what if the duty will get extra sophisticated? Suppose we add extra objects and areas to our easy world, and begin describing more and more advanced objectives like “be sure all of the apples are on the desk and every thing else is within the rubbish bin”? Moreover, what if we need to obtain this in some optimum method like minimizing time, or variety of complete actions? Our reasoning rapidly hits its restrict as the issue grows, and maybe we need to think about letting a pc do the work.

That is what we regularly seek advice from as activity planning: Autonomously reasoning in regards to the state of the world utilizing an inner mannequin and developing a sequence of actions, or a plan, to attain a objective.

For my part, activity planning shouldn’t be as fashionable as different areas in robotics you may encounter as a result of… fairly frankly, we’re simply not that good at robotics but! What I imply is that robots are sophisticated, and plenty of commercially obtainable programs are automating easy, repetitive duties that don’t require this stage of high-level planning — it will be overkill! There are numerous lower-level issues to resolve in robotics comparable to standing up good {hardware}, sturdy sensing and actuation, movement planning, and protecting prices down. Whereas activity planning skews in direction of extra educational settings for that reason, I eagerly await the not-so-distant future the place robots are much more succesful and your entire trade is considering extra about planning over longer horizons and more and more subtle duties.

On this publish, I’ll introduce the essential items behind activity planning for robotics. I’ll deal with Planning Area Definition Language (PDDL) and take you thru some primary examples each conceptually and utilizing the pyrobosim software.

Defining a planning area

Job planning requires a mannequin of the world and the way an autonomous agent can work together with the world. That is normally described utilizing state and actions. Given a selected state of the world, our robotic can take some motion to transition to a different state.

Through the years, there have been a number of languages used to outline domains for activity planning. The primary activity planning language was the STanford Analysis Institute Downside Solver (STRIPS) in 1971, made fashionable by the Shakey mission.

Since then, a number of associated languages for planning have come up, however one of the vital fashionable as we speak is Planning Area Definition Language (PDDL). The primary PDDL paper was printed in 1998, although there have been a number of enhancements and variations tacked on over time. To briefly describe PDDL, it’s exhausting to beat the authentic paper.

“PDDL is meant to specific the “physics” of a site, that’s, what predicates there are, what actions are attainable, what the construction of compound actions is, and what the consequences of actions are.”


The purpose of languages like PDDL is that they will describe a whole area of attainable issues the place a robotic can take the identical actions, however in several environments and with completely different objectives. As such, the basic items of activity planning with PDDL are a task-agnostic area and a task-specific drawback.

Utilizing our robotic instance, we will outline:

  • Area: The duty-agnostic half
    • Predicates: (Robotic ?r), (Object ?o), (Location ?loc), (At ?r ?loc), (Holding ?r ?o), and many others.
    • Actions: transfer(?r ?loc1 ?loc2), decide(?r ?o ?loc), place(?r ?o ?loc)
  • Downside: The duty-specific half
    • Objects: (Robotic robotic), (Location shelf), (Location desk), (Object apple)
    • Preliminary state: (HandEmpty robotic), (At robotic desk), (At apple shelf)
    • Objective specification: (At apple desk)

Since domains describe how the world works, predicates and actions have related parameters, that are denoted by ?, whereas a particular object doesn’t have any particular characters to explain it. Some examples to make this concrete:

  • (Location ?loc) is a unary predicate, that means it has one parameter. In our instance, shelf and desk are particular location situations, so we are saying that (Location desk) and (Location shelf) are a part of our preliminary state and don’t change over time.
  • (At ?r ?loc) is a binary predicate, that means it has two parameters. In our instance, the robotic might start on the desk, so we are saying that (At robotic desk) is a part of our preliminary state, although it could be negated because the robotic strikes to a different location.

PDDL is an motion language, that means that the majority of a site is outlined as actions (typically known as operators) that work together with our predicates above. Particularly, an motion accommodates:

  • Parameters: Permit the identical sort of motion to be executed for various mixtures of objects that will exist in our world.
  • Preconditions: Predicates which should be true at a given state to permit taking the motion from that state.
  • Results: Modifications in state that happen because of executing the motion.

For our robotic, we may outline a transfer motion as follows:

(:motion transfer
:parameters (?r ?loc1 ?loc2)
:precondition (and (Robotic ?r)
(Location ?loc1)
(Location ?loc2)
(At ?r ?loc1))
:impact (and (At ?r ?loc2)
(not (At ?r ?loc1)))



In our description of transfer, we now have

  • Three parameters ?r ?loc1, and ?loc2.
  • Unary predicates within the preconditions that slender down the area of parameters that make an motion possible — ?r should be a robotic and ?loc1 and ?loc2 should be areas, in any other case the motion doesn’t make sense.
  • One other precondition that’s state-dependent: (At ?r ?loc1). Which means to carry out a transfer motion beginning at some location ?loc1, the robotic should already be in that location.

Word that in some instances, PDDL descriptions enable for typing, which helps you to outline the area of actions inline with the parameters relatively than explicitly together with them as unary predicates — for instance, :parameters ?r – Robotic ?loc1 – Location ?loc2 – Location … however that is simply syntactic sugar.

Equally, the consequences of the motion can add new predicates or negate current ones (in STRIPS these had been specified as separate addition and deletion lists). In our instance, after performing a transfer motion, the robotic is now not at its earlier location ?loc1 and as a substitute is at its supposed new location ?loc2.

An identical idea will be utilized to different actions, for instance decide and place. For those who take a while to course of the PDDL snippets beneath, you’ll hopefully get the gist that our robotic can manipulate an object solely whether it is on the similar location as that object, and it’s at present not holding one thing else.

(:motion decide
:parameters (?r ?o ?loc)
:precondition (and (Robotic ?r)
(Obj ?o)
(Location ?loc)
(HandEmpty ?r)
(At ?r ?loc)
(At ?o ?loc))
:impact (and (Holding ?r ?o)
(not (HandEmpty ?r))
(not (At ?o ?loc)))

(:motion place
:parameters (?r ?o ?loc)
:precondition (and (Robotic ?r)
(Obj ?o)
(Location ?loc)
(At ?r ?loc)
(not (HandEmpty ?r))
(Holding ?r ?o))
:impact (and (HandEmpty ?r)
(At ?o ?loc)
(not (Holding ?r ?o)))

So given a PDDL area, we will now come up a plan, or sequence of actions, to resolve numerous sorts of issues inside that area … however how is that this executed in follow?

Job planning is search

There may be good purpose for all this overhead in defining a planning area and a superb language to specific it in: On the finish of the day, activity planning is solved utilizing search algorithms, and far of the literature is about fixing advanced issues as effectively as attainable. As activity planning issues scale up, computational prices enhance at an alarming price — you’ll typically see PSPACE-Full and NP-Full thrown round within the literature, which ought to make planning individuals run for the hills.

State-space search

One technique to implement activity planning is utilizing our mannequin to carry out state-space search. Given our drawback assertion, this might both be:

  • Ahead search: Begin with the preliminary state and develop a graph till a objective state is reached.
  • Backward search: Begin with the objective state(s) and work backwards till the preliminary state is reached.

Utilizing our instance, let’s see how ahead state-space search would work given the objective specification (At apple desk):

(1/6) In our easy world, the robotic begins on the desk. The one legitimate motion from right here is to maneuver to the shelf.

(2/6) After shifting to the shelf, the robotic may both decide the apple or transfer again to the desk. Since shifting again to the desk leads us to a state we now have already seen, we will ignore it.

(3/6) After selecting the apple, we may transfer again to the desk or place the apple again on the shelf. Once more, inserting the apple would lead us to an already visited state.

(4/6) As soon as the robotic is on the desk whereas holding the apple, we will place the apple on the desk or transfer again to the shelf.

(5/6) At this level, if we place the apple on the desk we attain a objective state! The sequence of actions resulting in the state is our ensuing plan.

(6/6) Because the variety of variables will increase, the search drawback (and time to discover a resolution) grows exponentially.

Deciding which states to develop throughout search might be purely based mostly on a predetermined traversal technique, utilizing customary approaches like breadth-first search (BFS), depth-first search (DFS), and the like. Whether or not we determine so as to add prices to actions or deal with all of them as unit price (that’s, an optimum plan merely minimizes the whole variety of actions), we may as a substitute determine to make use of grasping or hill-climbing algorithms to develop the following state based mostly on minimal price. And eventually, no matter which algorithm we use, we most likely need to maintain monitor of states we now have already beforehand visited and prune our search graph to forestall infinite cycles and increasing pointless actions.

In movement planning, we regularly use heuristics throughout search; one frequent instance is using A* with the straight-line distance to a objective as an admissible heuristic. However what is a superb heuristic within the context of activity planning? How would you outline the gap to a objective state with no helpful metric like distance? Certainly, an amazing portion of the literature focuses on simply this. Strategies like Heuristic Search Planning (HSP) and Quick-Ahead (FF) search to outline heuristics by fixing relaxed variations of the issue, which incorporates eradicating preconditions or damaging results of actions. The de facto customary for state-space search as we speak is a variant of those strategies named Quick Downward, whose heuristic depends on constructing a causal graph to decompose the issue hierarchically — successfully taking the computational hit up entrance to remodel the issue right into a handful of approximate however smaller issues that proves itself worthwhile in follow.

Beneath is an instance utilizing pyrobosim and the PDDLStream planning framework, which specifies a extra advanced objective that makes use of the predicates we described above. In comparison with our instance on this publish, the video beneath has a number of delicate variations in that there’s a separate class of objects to characterize the rooms that the robotic can navigate, and areas can have a number of placement areas (for instance, the counter has separate left and proper areas).

  • (At robotic bed room)
  • (At apple0 table0_tabletop)
  • (At banana0 counter0_left)
  • (Holding robotic water0)

Different search strategies

Whereas ahead state-space search is likely one of the commonest methods to plan, it’s not the one one. There are numerous different search strategies that search to construct alternate knowledge constructions whose objective is to keep away from the computational complexity of increasing a full state-transition mannequin as above. Some frequent strategies and phrases you will notice embrace:

Basically, these search strategies are inclined to outperform state-space search in duties the place there are a number of actions that may be carried out in any order relative to one another as a result of they rely on, and have an effect on, mutually unique components of the world. One of many canonical easy examples is the “dinner date instance” which is used to display Graphplan. Whereas these slides describe the issue in additional element, the concept is that an individual is getting ready a dinner date the place the top objective is that dinner and a gift be prepared whereas the home is clear — or (dinner current ¬garb). By occupied with the issue on this planning graph construction, we will achieve the next insights:

  1. Planning seeks to seek out actions that may be executed independently as a result of they’re mutually unique (mutex). This the place the notion of partial ordering is available in, and why there are computational positive factors in comparison with specific state-space search: As a substitute of individually looking by way of alternate paths the place one motion happens earlier than the opposite, right here we merely say that the actions are mutex and we will work out which to execute first after planning is full.
  2. This drawback can’t be solved at one stage as a result of cooking requires clear fingers (cleanH) and wrapping the current requires quiet, whereas the 2 strategies of taking out the rubbish (carry and dolly) negate these predicates, respectively. So within the resolution beneath, we should develop two ranges of the planning graph after which backtrack to get a concrete plan. We first execute prepare dinner to take away the requirement on cleanH, after which carry out the opposite two actions in any order — it doesn’t matter.
  3. There may be an alternate resolution the place on the first stage we execute the wrap motion, and on the second stage we will execute prepare dinner and dolly (in both order) to attain the objective. You’ll be able to think about this resolution can be favored if we moreover required our dinner date hero to have clear fingers earlier than beginning their date — gross!

Planning graph for the dinner date drawback [Source].
Straight strains are preconditions and results, strains with packing containers are no-operation (no-op) hyperlinks, and curved strains are mutual exclusion (mutex) hyperlinks.
One resolution to the issue is highlighted in blue by backtracking from the objective state.

To deliver this all full-circle, you’ll typically discover state-space search implementations that use strategies like Graphplan on a relaxed model of the issue to estimate the price to objective as a heuristic. If you wish to dig into the main points, I’d advocate A Tutorial on Planning Graph-Primarily based Reachability Heuristics, by Daniel Bryce and Subbarao Kambhampati.

In direction of extra advanced duties

Let’s get again to our cellular robotic instance. What if we need to describe extra advanced motion preconditions and/or objective specs? In any case, we established at the beginning of this publish that straightforward duties most likely don’t want the enormous hammer that may be a activity planner. For instance, as a substitute of requesting {that a} particular object be positioned at a particular location, we may transfer in direction of one thing extra common like “all apples must be on the desk”.

New instance world containing objects, apple0 and apple1, which belong to the identical object sort (apple).

To discover this, let’s add predicates denoting objects belonging to classes. For instance, (Sort ?t) can outline a particular sort and (Is ?o ?t) to indicate that an object belongs to such a sort. Concretely, let’s imagine that (Sort apple), (Is apple0 apple), and (Is apple1 apple).

We are able to then add a brand new derived predicate (Has ?loc ?entity) to finish this. Derived predicates are simply syntactic sugar — on this case, it helps us to succinctly outline a whole area of attainable states from our library of current predicates. Nevertheless, it lets us specific extra elaborate concepts in much less textual content. For instance:

  • (Has desk apple0) is true if the article apple0 is on the location desk.
  • (Has desk apple) is true if a minimum of one object of sort apple is on the location desk.

If we select the objective state (Has desk apple) for our instance, an answer may contain inserting both apple0 or apple1 on the desk. One implementation of this derived predicate may look as follows, which makes use of the exists key phrase in PDDL.

(:derived (Has ?loc ?entity)
; CASE 1: Entity is a particular object occasion, e.g.,
; (Has desk apple0)
(and (Location ?loc)
(Obj ?entity)
(At ?entity ?loc)
; CASE 2: Entity is a particular object class, e.g.,
; (Has desk apple)
(exists (?o)
(and (Obj ?o)
(Location ?loc)
(Sort ?entity)
(Is ?o ?entity)
(At ?o ?loc)

One other instance can be a HasAll derived predicate, which is true if and provided that a selected location accommodates each object of a particular class. In different phrases, if you happen to deliberate for (HasAll desk apple), you would wish each apple0 and apple1 to be relocated. This might look as follows, this time making use of the indicate key phrase in PDDL.

(:derived (HasAll ?loc ?objtype)
(and (Obj ?o)
(Sort ?objtype)
(Is ?o ?objtype))
(and (Location ?loc)
(At ?o ?loc))

You might think about additionally utilizing derived predicates as preconditions for actions, to equally add abstraction in different components of the planning pipeline. Think about a robotic that may take out your trash and recycling. A derived predicate might be helpful to permit dumping a container into recycling provided that all of the objects contained in the container are made from recyclable materials; if there’s any non-recyclable object, then the robotic can both select the violating object(s) or just toss the container within the trash.

Beneath is an instance from pyrobosim the place we command our robotic to attain the next objective, which now makes use of derived predicates to specific areas and objects both as particular occasion, or by way of their varieties:

  • (Has desk0_desktop banana0)
  • (Has counter apple1)
  • (HasNone rest room banana)
  • (HasAll desk water)


This publish barely scratched the floor of activity planning, but additionally launched a number of sources the place yow will discover out extra. One central useful resource I’d advocate is the Automated Planning and Appearing textbook by Malik Ghallab, Dana Nau, and Paolo Traverso.

Some key takeaways are:

  1. Job planning requires a superb mannequin and modeling language to allow us to describe a task-agnostic planning framework that may be utilized to a number of duties.
  2. Job planning is search, the place the output is a plan, or a sequence of actions.
  3. State-space search depends on intelligent heuristics to work in follow, however there are different partial-order strategies that goal to make search tractable another way.
  4. PDDL is likely one of the commonest languages utilized in activity planning, the place a area is outlined because the software to resolve a number of issues comprising a set of objects, preliminary state, and objective specification.
  5. PDDL shouldn’t be the one technique to formalize activity planning. Listed below are a number of papers I loved:

After studying this publish, the next ought to now make somewhat extra sense: Among the more moderen activity planning programs geared in direction of robotics, such because the ROS2 Planning System (PlanSys2) and PDDLStream, leverage a few of these planners talked about above. Particularly, these use Quick Downward and POPF.

One key pitfall of activity planning — a minimum of in how we’ve seen it thus far — is that we’re working at a stage of abstraction that isn’t essentially excellent for real-world duties. Let’s think about these hypothetical situations:

  • If a plan entails navigating between two rooms, however the rooms will not be linked or the robotic is just too massive to cross by way of, how we do know this earlier than we’re truly executing the plan?
  • If a plan entails inserting 3 objects on a desk, however the objects bodily won’t match on that desk, how can we account for this? And what if there’s another mixture of objects that does match and does fulfill our objective?

To handle these situations, there presumably is a technique to introduce extra professional data to our area as new predicates to make use of in motion preconditions. One other is to think about a richer area of motion parameters that causes about metric particulars (e.g., particular poses or paths to a objective) extra so than a purely symbolic area would. In each instances, we’re considering extra about motion feasibility in activity planning. This leads us to the sphere generally generally known as activity and movement planning (TAMP), and would be the focus of the following publish — so keep tuned!

Within the meantime, if you wish to discover the cellular robotic examples on this publish, take a look at my pyrobosim repository and try the activity and movement planning documentation.

You’ll be able to learn the unique article at

Sebastian Castro
is a software program engineer within the Strong Robotics Group (RRG) on the MIT Pc Science and Synthetic Intelligence Laboratory (CSAIL).

Sebastian Castro
is a software program engineer within the Strong Robotics Group (RRG) on the MIT Pc Science and Synthetic Intelligence Laboratory (CSAIL).

About the author


Leave a Comment