RoboWaiter/robowaiter/behavior_tree/obtea/examples.py

175 lines
5.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from robowaiter.behavior_tree.obtea.OptimalBTExpansionAlgorithm import Action
def MakeCoffee():
actions=[
Action(name='Put(Table,Coffee)', pre={'Holding(Coffee)','At(Table)'}, add={'At(Table,Coffee)','NotHolding'}, del_set={'Holding(Coffee)'}, cost=1),
Action(name='Put(Table,VacuumCup)', pre={'Holding(VacuumCup)','At(Table)'}, add={'At(Table,VacuumCup)','NotHolding'}, del_set={'Holding(VacuumCup)'}, cost=1),
Action(name='Grasp(Coffee)', pre={'NotHolding','At(Coffee)'}, add={'Holding(Coffee)'}, del_set={'NotHolding'}, cost=1),
Action(name='MoveTo(Table)', pre={'Exist(Table)'}, add={'At(Table)'}, del_set={'At(FrontDesk)','At(Coffee)','At(CoffeeMachine)'}, cost=1),
Action(name='MoveTo(Coffee)', pre={'Exist(Coffee)'}, add={'At(Coffee)'}, del_set={'At(FrontDesk)','At(Table)','At(CoffeeMachine)'}, cost=1),
Action(name='MoveTo(CoffeeMachine)', pre={'Exist(CoffeeMachine)'}, add={'At(CoffeeMachine)'}, del_set={'At(FrontDesk)','At(Coffee)','At(Table)'}, cost=1),
Action(name='OpCoffeeMachine', pre={'At(CoffeeMachine)','NotHolding'}, add={'Exist(Coffee)','At(Coffee)'}, del_set=set(), cost=1),
]
start = {'At(FrontDesk)','Holding(VacuumCup)','Exist(Table)','Exist(CoffeeMachine)','Exist(FrontDesk)'}
goal = {'At(Table,Coffee)'}
return goal,start,actions
# 本例子中,将 VacuumCup 放到 FrontDesk比 MoveTo(Table) 再 Put(Table,VacuumCup) 的 cost 要小
def MakeCoffeeCost():
actions=[
Action(name='PutDown(Table,Coffee)', pre={'Holding(Coffee)','At(Robot,Table)'}, add={'At(Table,Coffee)','NotHolding'}, del_set={'Holding(Coffee)'}, cost=1),
Action(name='PutDown(Table,VacuumCup)', pre={'Holding(VacuumCup)','At(Robot,Table)'}, add={'At(Table,VacuumCup)','NotHolding'}, del_set={'Holding(VacuumCup)'}, cost=1),
Action(name='PickUp(Coffee)', pre={'NotHolding','At(Robot,Coffee)'}, add={'Holding(Coffee)'}, del_set={'NotHolding'}, cost=1),
Action(name='MoveTo(Table)', pre={'Available(Table)'}, add={'At(Robot,Table)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,CoffeeMachine)'}, cost=1),
Action(name='MoveTo(Coffee)', pre={'Available(Coffee)'}, add={'At(Robot,Coffee)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Table)','At(Robot,CoffeeMachine)'}, cost=1),
Action(name='MoveTo(CoffeeMachine)', pre={'Available(CoffeeMachine)'}, add={'At(Robot,CoffeeMachine)'}, del_set={'At(Robot,FrontDesk)','At(Robot,Coffee)','At(Robot,Table)'}, cost=1),
Action(name='OpCoffeeMachine', pre={'At(Robot,CoffeeMachine)','NotHolding'}, add={'Available(Coffee)','At(Robot,Coffee)'}, del_set=set(), cost=1),
]
start = {'At(Robot,Bar)','Holding(VacuumCup)','Available(Table)','Available(CoffeeMachine)','Available(FrontDesk)'}
goal = {'At(Table,Coffee)'}
return goal,start,actions
# test
def Test():
actions=[
Action(name='a1', pre={6}, add={0,2,4}, del_set={1,5}, cost=1),
Action(name='a2', pre=set(), add={0,1}, del_set=set(), cost=1),
Action(name='a3', pre={1,6}, add={0,2,3,5}, del_set={1,6}, cost=1),
Action(name='a4', pre={0,2,3}, add={4,5}, del_set={0,6}, cost=1),
Action(name='a5', pre={0,1,4}, add={2,3,6}, del_set={0}, cost=1),
]
start = {1,2,6}
goal={0,1,2,4,6}
return goal,start,actions
# def Test():
# actions=[
# Action(name='a1', pre={2}, add={1}, del_set=set(), cost=1),
# Action(name='a2', pre=set(), add={1}, del_set={0,2}, cost=1),
# Action(name='a3', pre={1}, add=set(), del_set={0,2}, cost=1),
# Action(name='a4', pre=set(), add={0}, del_set=set(), cost=1),
# Action(name='a5', pre={1}, add={0,2}, del_set={1}, cost=1),
# Action(name='a6', pre={1}, add=set(), del_set={0,1,2}, cost=1),
# Action(name='a7', pre={1}, add={2}, del_set={0, 2}, cost=1),
# ]
#
# start = {1,2}
# goal={0,1}
# return goal,start,actions
# todo: 最原始的例子
def MoveBtoB_num ():
actions=[]
a = Action(name='a1')
a.pre={1,4}
a.add={"c_goal"}
a.del_set={1,4}
a.cost = 1
actions.append(a)
a=Action(name='a2')
a.pre={1,2,3}
a.add={"c_goal"}
a.del_set={1,2,3}
a.cost = 1
actions.append(a)
a=Action(name='a3')
a.pre={1,2}
a.add={4}
a.del_set={2}
a.cost = 1
actions.append(a)
a=Action(name='a4')
a.pre={"c_start"}
a.add={1,2,3}
a.del_set={"c_start",4}
a.cost = 1
actions.append(a)
start = {"c_start"}
goal={"c_goal"}
return goal,start,actions
# todo: 最原始的例子
def MoveBtoB ():
actions=[]
a = Action(name="Move(b,ab)") #'movebtob'
a.pre={'Free(ab)','WayClear'} #{1,2}
a.add={'At(b,ab)'} #{3}
a.del_set= {'Free(ab)','At(b,pb)'} #{1,4}
a.cost = 1
actions.append(a)
a=Action(name="Move(s,ab)") #'moveatob'
a.pre={'Free(ab)'} #{1}
a.add={'Free(ab)','WayClear'} #{5,2}
a.del_set={'Free(ab)','At(s,ps)'} #{1,6}
a.cost = 1
actions.append(a)
a=Action(name="Move(s,as)") #'moveatoa'
a.pre={'Free(as)'} #{7}
a.add={'At(s,ps)','WayClear'} #{8,2}
a.del_set={'Free(as)','At(s,ps)'} #{7,6}
a.cost = 1
actions.append(a)
start = {'Free(ab)','Free(as)','At(b,pb)','At(s,ps)'} #{1,7,4,6}
goal= {'At(b,ab)'} #{3}
return goal,start,actions
# 小蔡师兄论文里的例子
def Cond2BelongsToCond3():
actions=[]
a = Action(name='a1')
a.pre={1,4}
a.add={"c_goal"}
a.del_set={1,4}
a.cost = 1
actions.append(a)
a=Action(name='a2')
a.pre={1,2,3}
a.add={"c_goal"}
a.del_set={1,2,3}
a.cost = 100
actions.append(a)
a=Action(name='a3')
a.pre={1,2}
a.add={4}
a.del_set={2}
a.cost = 1
actions.append(a)
a=Action(name='a4')
a.pre={"c_start"}
a.add={1,2,3}
a.del_set={"c_start",4}
a.cost = 1
actions.append(a)
start = {"c_start"}
goal={"c_goal"}
return goal,start,actions