-
Notifications
You must be signed in to change notification settings - Fork 0
ROS Plan KB notes
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!
from inside the folder (package robocluedo_rosplan_interface)/pddl/
run the command
./parser <domain file> <(opt) problem file>
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
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-action ???
:parameters ( ??? )
:duration (= ?duration 1)
:condition ( ??? )
:effect (and
???
)
)
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.
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.
Attention : Better to use POPF, as suggested in the official tutorial.
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
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