更好的编写事件逻辑

This commit is contained in:
ChenXL97 2023-11-19 10:48:45 +08:00
parent 1cd40c7bb7
commit f82ef1a7b0
5 changed files with 44 additions and 13 deletions

View File

@ -10,7 +10,8 @@ class DealChat(Act):
self.function_success = False
self.func_map = {
"create_sub_task": self.create_sub_task,
"get_object_info": self.get_object_info
"get_object_info": self.get_object_info,
"stop_serve": self.stop_serve
}
def _update(self) -> ptree.common.Status:
@ -69,4 +70,11 @@ class DealChat(Act):
if obj == "洗手间":
near_object = "大门"
return near_object
return near_object
def stop_serve(self,**args):
return "好的"

View File

@ -137,6 +137,9 @@ class Robot(object):
print("\n")
self.last_tick_output = bt_output
return True
else:
return False
if __name__ == '__main__':
pass

View File

@ -51,7 +51,9 @@ class Scene:
robot = None
event_list = []
new_event_list = []
signal_event_list = []
show_bubble = False
event_signal = "None"
default_state = {
"map": {
@ -99,6 +101,8 @@ class Scene:
robot.load_BT()
self.robot = robot
self.robot_changed = False
# 1-7 正常执行, 8-10 控灯操作移动到6, 11-12窗帘操作不需要移动,
self.op_dialog = ["","制作咖啡","倒水","夹点心","拖地","擦桌子","开筒灯","搬椅子", # 1-7
"关筒灯","开大厅灯","关大厅灯","关闭窗帘","打开窗帘", # 8-12
@ -153,8 +157,9 @@ class Scene:
self.deal_event()
self.deal_new_event()
self.deal_signal_event()
self._step()
self.robot.step()
self.robot_changed = self.robot.step()
def deal_new_event(self):
if len(self.new_event_list)>0:
@ -165,6 +170,20 @@ class Scene:
self.new_event_list.pop(0)
func(*args)
def deal_signal_event(self):
if len(self.signal_event_list)>0:
next_event = self.signal_event_list[0]
t, func,args = next_event
if t < 0 and self.robot_changed: #一直等待机器人行动,直到机器人无行动
return
if t > 0:
time.sleep(t)
print(f'event: {t}, {func.__name__}')
self.signal_event_list.pop(0)
func(*args)
def deal_event(self):
if len(self.event_list)>0:

View File

@ -17,8 +17,9 @@ class SceneOT(Scene):
def __init__(self, robot):
super().__init__(robot)
# 在这里加入场景中发生的事件
self.new_event_list = [
(3, self.customer_say, ("System","来一号桌"))
self.signal_event_list = [
(3, self.customer_say, ("System","来一号桌")),
(-1, self.customer_say, ("System","回去吧")),
# (5, self.set_goal("At(Robot,BrightTable4)"))
]

View File

@ -10,12 +10,12 @@ class SceneVLM(Scene):
def __init__(self, robot):
super().__init__(robot)
# 在这里加入场景中发生的事件, (事件发生的时间,事件函数)
self.new_event_list = [
self.signal_event_list = [
(3, self.add_walker, (20,0,700)),
(5, self.control_walker, (6, False,100, 60, 520,0)), #[walkerID,autowalk,speed,X,Y,Yaw]
(1, self.control_walker, (4, False,100, 60, 520,0)), #[walkerID,autowalk,speed,X,Y,Yaw]
# (10, self.customer_say, (6,"给我来杯酸奶和咖啡,哦对,再倒一杯水。")),
(8, self.customer_say, (6, "来杯酸奶吧。")),
(7, self.control_walker, (6, False, 100, -250, 480, 0)), #(-100,600)
(-1, self.customer_say, (4, "来杯酸奶吧。")),
(-1, self.control_walker, (4, False, 100, -250, 480, 0)), #(-100,600)
# 有人提出要开空调和关窗帘
# bar (60, 520)
@ -24,10 +24,10 @@ class SceneVLM(Scene):
# (35, self.customer_say, (7,"好热呀!太阳也好大!")),
# (45, self.control_walkers_and_say, ([[[7, False, 100, 270, -240, -65, "谢谢,这下凉快了!"]]])),
(5, self.add_walker, (0, 0, 0)),
(6, self.control_walker, (7, False, 100, 60, 520, 180)),
(7, self.customer_say, (7,"好热呀!太阳也好大!")),
(8, self.control_walkers_and_say, ([[[7, False, 100, 270, -240, -65, "谢谢,这下凉快了!"]]])),
(3, self.add_walker, (0, 0, 0)),
(1, self.control_walker, (5, False, 100, 60, 520, 180)),
(1, self.customer_say, (5,"好热呀!太阳也好大!")),
(-1, self.control_walkers_and_say, ([[[5, False, 100, 270, -240, -65, "谢谢,这下凉快了!"]]])),
]
def _reset(self):