Skip to content

ROS Plan KB notes

Francesco Ganci edited this page Jul 10, 2022 · 5 revisions

PDDL and ROSPlan

Unfortunately, the ROS Plan knowledge base is able only to parse a very particular, limited version of the PDDL. And worse, this doesn't seem to appear in any documentation about ROS Plan!

validation with Parser

from inside the folder (package robocluedo_rosplan_interface)/pddl/ run the command

./parser <domain file> <(opt) problem file>

solution with popf

the repository contains a already compiled version of the planner popf. In case is doesn't work, you can find another executable in the folder <tour workspace>/src/ROSPlan/rosplan_planning_system/common/bin/.

<path>/popf DOMAIN PROBLEM

some useful options:

  • -n search for many solutions (optimal search)
  • -v2 verbose option
  • -LP2 another verbose option
  • -b disable best-first-search; often it couldn't solve the plan with this method
  • -T in the case of the robocluedo project, it helped me to speed up the planning process

Specific rules for the PDDL in ROS Plan

you can set the planner in a suitable way for your application by the planner_command parameter in the planner interface. BUT the knowledge base node is able to interpret a non-standard particular version of PDDL, otherwise it closes unexpectedly.

  • use this list of requirements:

     (:requirements 
     	:strips 
     	:typing 
     	:equality 
     	:universal-preconditions 
     	:durative-actions
     )
  • seemingly there's no bugs in tabulation parsing

  • always specify the type of the objects and the parameters! Typing is a requirement in ROSPlan, nevertheless it is optional in the standard model

    In particular ROSPlan can't deal with the pure classical planning: it works fine only with durative-actions.

  • durative actions with empty parameters are allowed by the system

  • don't use (and ...) with only one argument! If the and is going to contain only one predicate, simply don't use such operators: just write the predicate, and nothing else.

  • empty :condition (... ) statements are not allowed!

  • you cannot use (not ...) inside the goal statement: the planner doesn't fully support :adl requirement.

  • don't use the upper case characters! ROSPlan poorly supports the uppercase letters, and sometimes it returns lower-case names instead of the expected upper-case ones, making the query to fail without reason.

    here's an example of this nasty feature. let's suppose to have written this in the problem file:

     (h-open ID1 )
     	(= (h-count-who ID1 ) 0)
     	(= (h-count-where ID1 ) 0)
     	(= (h-count-what ID1 ) 0)
     (h-open ID2 )
     	(= (h-count-who ID2 ) 0)
     	(= (h-count-where ID2 ) 0)
     	(= (h-count-what ID2 ) 0)
     (h-open ID3 )
     	(= (h-count-who ID3 ) 0)
     	(= (h-count-where ID3 ) 0)
     	(= (h-count-what ID3 ) 0)
     (h-open ID4 )
     	(= (h-count-who ID4 ) 0)
     	(= (h-count-where ID4 ) 0)
     	(= (h-count-what ID4 ) 0)
     (h-open ID5 )
     	(= (h-count-who ID5 ) 0)
     	(= (h-count-where ID5 ) 0)
     	(= (h-count-what ID5 ) 0)
     (h-open ID6 )
     	(= (h-count-who ID6 ) 0)
     	(= (h-count-where ID6 ) 0)
     	(= (h-count-what ID6 ) 0)

    but, after a simple test, we discover that the knowledge base returns this instead. Here is a simple query, which fails because of this buggy, not documented behaviour of the knowledge base:

     [ INFO] [1657462216.628493200]: [kb_tools] kb_tools::get_fluent( h-count-who, id=ID1 )
     [ INFO] [1657462216.638314500]: [kb_tools] kb_tools::get_fluent FROM SERVICE: 
     [0]	(h-count-who, id=id1)
     [1]	(h-count-who, id=id2)
     [2]	(h-count-who, id=id3)
     [3]	(h-count-who, id=id4)
     [4]	(h-count-who, id=id5)
     [5]	(h-count-who, id=id6)
    
     [ INFO] [1657462216.638412900]: [kb_tools] kb_tools::get_fluent( CALL SUCCESS with return 0 (success=0)
     [ INFO] [1657462216.638467900]: [kb_tools] kb_tools::ok( ) !!! FAILURE !!!

    whatever query fails with this return! beautiful ROSPlan ...

Durative Actions - the right syntax

(:durative-action ???
	:parameters ( ??? )
	
	:duration (= ?duration 1)
	
	:condition ( ??? )
	
	:effect (and
		???
	)
)

Issue in the problem preprocessing

even with a perfect PDDL code, the planner, after the preprocessing phase, could complain a mysterious syntax error...

maybe you wrote this in the original problem:

(:goal (my-predicate ))

ROSPlan will process it into this:

(:goal (and (my-predicate )))

that is syntactically wrong! It explains the strange message.

but notice that this is just a warning, therefore you can skip it.

ADL support

ROSPlan doesn't have a complete support for ADL, which is definitely a bad news. Classical planning isn't supported, in particular the common actions. When you set the requirement ADL, the message is this:

A problem has been encountered, and the planner has to terminate.
-----------------------------------------------------------------
Unfortunately, at present, the planner does not fully support ADL
unless in the rules for derived predicates.  Only two aspects of
ADL can be used in action definitions:
- forall conditions, containing a simple conjunct of propositional and
  numeric facts;
- Conditional (when... ) effects, and then only with numeric conditions
  and numeric consequences on values which do not appear in the
  preconditions of actions.

To use this planner with your problem, you will have to reformulate it to
avoid ADL.  Alternatively, if you have a particularly compelling case
for them, please contact the authors to discuss it with them, who may be able to
extend the planner to meet your needs.

the funny thing is that the planners support ADL, but KB does not! And, since KB parses the problem, there's no way to parse things like classical planning, unless you don't want to throw away most of the ROS Plan framework.

Available Planners

Attention : Better to use POPF, as suggested in the official tutorial.

POPF help

see popf infos

temporal planner (supporting durative actions only). Supported requirements:

(:requirements 
	:strips 
	:typing 
	:equality 
	:universal-preconditions 
	:durative-actions
)

PLanning interface : <node pkg="rosplan_planning_system" name="popf_planning_interface" type="popf_planning_interface">

help from the program:

root@dbfbde77a543:~/ros_ws/src/ROSPlan/rosplan_planning_system/common/bin# ./popf --help
Unrecognised command-line switch '-'
POPF, Release 2
By releasing this code we imply no warranty as to its reliability
and its use is entirely at your own risk.

Usage: ./popf [OPTIONS] domainfile problemfile [planfile, if -r specified]

Options are: 

	-citation	Display citation to relevant conference paper (ICAPS 2010);
	-b		Disable best-first search - if EHC fails, abort;
	-E		Skip EHC: go straight to best-first search;
	-e		Use standard EHC instead of steepest descent;
	-h		Disable helpful-action pruning;
	-k		Disable compression-safe action detection;
	-c		Disable the tie-breaking in RPG that favour actions that slot into the partial order earlier;
	-S		Sort initial layer facts in RPG by availability order (only use if using -c);
	-m		Disable the tie-breaking in search that favours plans with shorter makespans;
	-F		Full FF helpful actions (rather than just those in the RP applicable in the current state);
	-r		Read in a plan instead of planning;
	-T		Rather than building a partial order, build a total-order
	-n		Optimise, finding many solutions;
	-v<n>		Verbose to degree n (n defaults to 1 if not specified).
	-L<n>		LP verbose to degree n (n defaults to 1 if not specified).

Command line for POPF : for normal planning,

timeout 10 <popf_path>/popf -v2 DOMAIN PROBLEM > plan.pddl

optimal planning if possible : (it could significantly slow down the planning workflow)

<popf_path>/popf -n -v2 DOMAIN PROBLEM > plan.pddl

Metric-ff help

see Metric-FF on planning.wiki

see also the official page of Metric-FF

temporal and numerical planning (with support for ADL). Supported requirements:

(:requirements 
	;; === PDDL1.1 === ;;
	:strips 
	:typing 
	:equality 
	:existential-preconditions
	:universal-preconditions 
	:conditional-effects
	:quantified-preconditions
	
	;; === PDDL2.1 === ;;
	:fluents
	:durative-actions
)

help from metric-ff:

root@dbfbde77a543:~/ros_ws/src/ROSPlan/rosplan_planning_system/common/bin# ./Metric-FF --help

usage of ff:

OPTIONS   DESCRIPTIONS

-p <str>    Path for operator and fact file
-o <str>    Operator file name
-f <str>    Fact file name

-r <int>    Random seed [used for random restarts; preset: 0]

-s <int>    Search configuration [preset: s=5]; '+H': helpful actions pruning
      0     Standard-FF: EHC+H then BFS (cost minimization: NO)
      1     BFS (cost minimization: NO)
      2     BFS+H (cost minimization: NO)
      3     Weighted A* (cost minimization: YES)
      4     A*epsilon (cost minimization: YES)
      5     EHC+H then A*epsilon (cost minimization: YES)
-w <num>    Set weight w for search configs 3,4,5 [preset: w=5]

-C          Do NOT use cost-minimizing relaxed plans for options 3,4,5

-b <float>  Fixed upper bound on solution cost (prune based on g+hmax); active only with cost minimization

Command line for Metric-FF :

timeout 10 <metric-ff_path>/Metric-FF -o DOMAIN -p PROBLEM