Use PDDL to plan for a sequence of actions to execute. The implementation allows to create a ROS server that instantiate a PDDL problem and allows to solve it.
The definition of the problem can be fully customized by configuration file (config/task_planner_params.yaml) so that it can be changed, also online according to the problem and requirements.
Furthermore, functions are available to set initial state and goal state in order to change the planning conditions online based on the real state and desired task.
- Unified-Planning (https://unified-planning.readthedocs.io/en/latest/index.html)
- ROS
The configuration file enables to define all the elements PDDL's problem.
In more detail:
- Types: List of object Types custom defined. Put in parenthesis the father. i.e. Tool(Obj)
- Objects: For each type defined, list the existing objects/elements
- Fluents:
- names: list of fluents available
- type: Currently, only BoolType is available
- params: list of params types (using the types described before)
- Actions:
- names: list of actions available
- params: list of params types (using the types described before)
- preconditions: list of fluents with parameters. Here parameters are identified with integers being the indices of the array params. Example: params: [Robot, Obj] precondition: ["grasped(0,1)"]. "~" to be used before the fluent name to specify negation.
- effect: the definition is the same as preconditions.
- init_state: list of fluent using as parameter the Objects' names. Example: requires_tool(Nail,Hammer)
- goal_state: list of fluent using as parameter the Objects' names
NOTE: Each element of: preconditions, effect, init_state, goal_state has to be defined within " ".
- Alessio De Luca 2024, email: [email protected]