更新了动作节点

This commit is contained in:
Caiyishuai 2023-11-13 23:36:12 +08:00
parent de54741d57
commit 31615f32cb
6 changed files with 201 additions and 5 deletions

View File

@ -3,10 +3,18 @@ from robowaiter.behavior_lib._base.Behavior import Bahavior
class Act(Bahavior):
print_name_prefix = "act "
type = 'Act'
all_place = {'Bar', 'WaterTable', 'CoffeeTable', 'Bar2', 'Table1', 'Table2', 'Table3'}
all_place = {'Bar', 'Bar2', 'WaterTable', 'CoffeeTable', 'Table1', 'Table2', 'Table3'}
all_object = {'Coffee', 'Water', 'Dessert', 'Softdrink', 'BottledDrink', 'Yogurt', 'ADMilk', 'MilkDrink', 'Milk',
'VacuumCup'}
place_xyz_dic={
'Bar': (247.0, 520.0, 100.0),
'Bar2': (240.0, 40.0, 70.0),
'WaterTable':(-70.0, 500.0, 107),
'CoffeeTable':(247.0, 520.0, 100.0), # 位置需要更改!!!
'Table1': (247.0, 520.0, 100.0),# 位置需要更改!!!
'Table2': (-55.0, 0.0, 107),
'Table3':(-55.0, 150.0, 107)
}
def __init__(self,*args):
super().__init__(*args)
self.info = self.get_info(*args)

View File

@ -0,0 +1,47 @@
import py_trees as ptree
from typing import Any
from robowaiter.behavior_lib._base.Act import Act
from robowaiter.behavior_lib._base.Behavior import Status
class Clean(Act):
can_be_expanded = True
num_args = 1
valid_args = (
'Table1','Floor','Chairs'
)
def __init__(self, *args):
super().__init__(*args)
self.target_obj = self.args[0]
self.op_type = 5
if self.target_obj=="Table1":
self.op_type = 5
elif self.target_obj=="Floor":
self.op_type = 4
elif self.target_obj=="Chairs":
self.op_type = 7
@classmethod
def get_info(cls,arg):
info = {}
info["pre"]= {f'Holding(Nothing)'}
if arg == "Table1":
info["add"]= {f'Is(Table1,Clean)'}
info["del"] = {f'Is(Table1,Dirty)'}
elif arg == "Floor":
info["add"] = {f'Is(Floor,Clean)'}
info["del"] = {f'Is(Floor,Dirty)'}
elif arg == "Chairs":
info["add"] = {f'Is(Chairs,Clean)'}
info["del"] = {f'Is(Chairs,Dirty)'}
return info
def _update(self) -> ptree.common.Status:
self.scene.move_task_area(self.op_type)
self.scene.op_task_execute(self.op_type)
self.scene.state["condition_set"].union(self.info["add"])
self.scene.state["condition_set"] -= self.info["del"]
return Status.RUNNING

View File

@ -13,6 +13,13 @@ class Make(Act):
def __init__(self, *args):
super().__init__(*args)
self.target_obj = self.args[0]
self.op_type = 1
if self.target_obj=="Coffee":
self.op_type = 1
elif self.target_obj=="Water":
self.op_type = 2
elif self.target_obj=="Dessert":
self.op_type = 3
@classmethod
@ -29,9 +36,10 @@ class Make(Act):
return info
def _update(self) -> ptree.common.Status:
op_type = 1
self.scene.move_task_area(op_type)
self.scene.op_task_execute(op_type)
self.scene.move_task_area(self.op_type)
self.scene.op_task_execute(self.op_type)
self.scene.state["condition_set"].union(self.info["add"])
self.scene.state["condition_set"] -= self.info["del"]
return Status.RUNNING

View File

@ -0,0 +1,34 @@
import py_trees as ptree
from typing import Any
from robowaiter.behavior_lib._base.Act import Act
from robowaiter.behavior_lib._base.Behavior import Status
class PickUp(Act):
can_be_expanded = True
num_args = 1
def __init__(self, *args):
super().__init__(*args)
self.target_obj = self.args[0]
@classmethod
def get_info(self,arg):
info = {}
info["pre"] = {f'At(Robot,{arg})','Holding(Nothing)'}
info["add"] = {f'Holding({arg})'}
info["del"] = {f'Holding(Nothing)'}
return info
def _update(self) -> ptree.common.Status:
# self.scene.test_move()
op_type=16
obj_id = 0
# 遍历场景里的所有物品,根据名字匹配位置最近的 obj-id
self.scene.op_task_execute(op_type, obj_id=obj_id)
self.scene.state["condition_set"].union(self.info["add"])
self.scene.state["condition_set"] -= self.info["del"]
return Status.RUNNING

View File

@ -0,0 +1,35 @@
import py_trees as ptree
from typing import Any
from robowaiter.behavior_lib._base.Act import Act
from robowaiter.behavior_lib._base.Behavior import Status
class PutDown(Act):
can_be_expanded = True
num_args = 1
def __init__(self, *args):
super().__init__(*args)
self.target_obj = self.args[0]
self.target_place = self.args[1]
@classmethod
def get_info(self,arg):
info = {}
info["pre"] = {f'Holding({arg[0]})',f'At(Robot,{arg[1]})'}
info["add"] = {f'Holding(Nothing)',f'At({arg[0]},{arg[1]})'}
info["del"] = {f'Holding(Nothing)'}
return info
def _update(self) -> ptree.common.Status:
# self.scene.test_move()
op_type=17
release_pos = list(Act.place_xyz_dic[self.target_place])
# # 原始吧台处:[247.0, 520.0, 100.0], 空调开关旁吧台:[240.0, 40.0, 70.0], 水杯桌:[-70.0, 500.0, 107]
# # 桌子2:[-55.0, 0.0, 107],桌子3:[-55.0, 150.0, 107]
self.scene.op_task_execute(op_type, release_pos=release_pos)
self.scene.state["condition_set"].union(self.info["add"])
self.scene.state["condition_set"] -= self.info["del"]
return Status.RUNNING

View File

@ -0,0 +1,64 @@
import py_trees as ptree
from typing import Any
from robowaiter.behavior_lib._base.Act import Act
from robowaiter.behavior_lib._base.Behavior import Status
class Clean(Act):
can_be_expanded = True
num_args = 1
valid_args = [('AC','ACTemperature','TubeLight','HallLight','Curtain'),
('Off','On','Up','Down','Clean','Dirty')]
def __init__(self, *args):
super().__init__(*args)
self.target_obj = self.args[0]
self.op = self.args[1]
self.op_type = 13
if self.target_obj=="AC":
self.op_type = 13
elif self.target_obj=="ACTemperature":
if self.op == 'Up':
self.op_type = 14
elif self.op == 'Down':
self.op_type = 15
elif self.target_obj=="TubeLight":
if self.op == 'On':
self.op_type = 6
elif self.op == 'Off':
self.op_type = 8
elif self.target_obj=="HallLight":
if self.op == 'On':
self.op_type = 9
elif self.op == 'Off':
self.op_type = 10
elif self.target_obj=="Curtain":
if self.op == 'On':
self.op_type = 11
elif self.op == 'Off':
self.op_type = 12
@classmethod
def get_info(cls,arg):
info = {}
# 明天写
# info["pre"]= {f'Holding(Nothing)'}
# if arg == "Table1":
# info["add"]= {f'Is(Table1,Clean)'}
# info["del"] = {f'Is(Table1,Dirty)'}
# elif arg == "Floor":
# info["add"] = {f'Is(Floor,Clean)'}
# info["del"] = {f'Is(Floor,Dirty)'}
# elif arg == "Chairs":
# info["add"] = {f'Is(Chairs,Clean)'}
# info["del"] = {f'Is(Chairs,Dirty)'}
return info
def _update(self) -> ptree.common.Status:
self.scene.move_task_area(self.op_type)
self.scene.op_task_execute(self.op_type)
self.scene.state["condition_set"].union(self.info["add"])
self.scene.state["condition_set"] -= self.info["del"]
return Status.RUNNING