task_planning_wiki - IRS-group/isr_tiago_docs GitHub Wiki
Install
sudo apt-get install flex ros-melodic-mongodb-store ros-melodic-tf2-bullet freeglut3-dev time
sudo apt-get install bison flex gawk g++-multilib pypy
These packages are already inside isr_tiago repo, so you don't need to clone them, but I'll leave them here for anyone in the future to know the source:
git clone -b kinetic --single-branch [email protected]:socrob/ROSPlan.git
git clone [email protected]:socrob_at_home/isr_planning.git
git clone [email protected]:socrob/robocup-at-work.git
Launch
GPSR main launch files
roslaunch mbot_gpsr gpsr.launch
GPSR coordination state machine
roslaunch mbot_gpsr sm_gpsr.launch
Next Steps
- Trigger word before recording audio (porcupine);
- Plan executor (from plan to actions);
For debug purposes
Knowledge-base GUI
rqt_rosplan
If the state machine is not launched the intrinsic knowledge needs to be uploaded. To do that use the following command:
rostopic pub /task_planning/upload_pddl_knowledge_node/event_in std_msgs/String "data: 'e_start'"
Unified Planning Framework
Install commands:
!rm -rf upf && git clone https://github.com/aiplan4eu/upf && pip install upf/
!rm -rf pyperplan-upf && git clone https://github.com/aiplan4eu/pyperplan-upf && pip install pyperplan-upf/
!rm -rf tamer-upf && git clone https://github.com/aiplan4eu/tamer-upf && pip install tamer-upf/
Usage Python code:
import unified_planning
from unified_planning.shortcuts import *
from unified_planning.io.pddl_writer import PDDLWriter
from unified_planning.io.pddl_reader import PDDLReader
reader = PDDLReader()
pddl_problem = reader.parse_problem('upf/upf/test/pddl/depot/domain.pddl', 'upf/upf/test/pddl/depot/problem.pddl')
print(pddl_problem)
print(pddl_problem.kind().features())
with OneshotPlanner(name='pyperplan') as planner:
plan = planner.solve(pddl_problem)
print("%s returned: %s" % (planner.name(), plan))
with OneshotPlanner(names=['tamer', 'tamer', 'pyperplan'],
params=[{'heuristic': 'hadd'}, {'heuristic': 'hmax'}, {}]) as planner:
plan = planner.solve(problem)
print("%s returned: %s" % (planner.name(), plan))
with PlanValidator(problem_kind=problem.kind()) as validator:
if validator.validate(problem, plan):
print('The plan is valid')
else:
print('The plan is invalid')