From f82ef1a7b088ee40d7c11c7aa1d36a7df267561a Mon Sep 17 00:00:00 2001 From: ChenXL97 <908926798@qq.com> Date: Sun, 19 Nov 2023 10:48:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E5=A5=BD=E7=9A=84=E7=BC=96=E5=86=99?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robowaiter/behavior_lib/act/DealChat.py | 12 +++++++++-- robowaiter/robot/robot.py | 3 +++ robowaiter/scene/scene.py | 21 +++++++++++++++++++- robowaiter/scene/tasks/OT/Open_tasks_test.py | 5 +++-- robowaiter/scene/tasks/VLM/VLM_order.py | 16 +++++++-------- 5 files changed, 44 insertions(+), 13 deletions(-) diff --git a/robowaiter/behavior_lib/act/DealChat.py b/robowaiter/behavior_lib/act/DealChat.py index e66ed1c..d5a3e27 100644 --- a/robowaiter/behavior_lib/act/DealChat.py +++ b/robowaiter/behavior_lib/act/DealChat.py @@ -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 \ No newline at end of file + return near_object + + + + def stop_serve(self,**args): + + + return "好的" \ No newline at end of file diff --git a/robowaiter/robot/robot.py b/robowaiter/robot/robot.py index 46abd5c..f6e1909 100644 --- a/robowaiter/robot/robot.py +++ b/robowaiter/robot/robot.py @@ -137,6 +137,9 @@ class Robot(object): print("\n") self.last_tick_output = bt_output + return True + else: + return False if __name__ == '__main__': pass \ No newline at end of file diff --git a/robowaiter/scene/scene.py b/robowaiter/scene/scene.py index 9befad7..0f1d5a4 100644 --- a/robowaiter/scene/scene.py +++ b/robowaiter/scene/scene.py @@ -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: diff --git a/robowaiter/scene/tasks/OT/Open_tasks_test.py b/robowaiter/scene/tasks/OT/Open_tasks_test.py index d39aae6..8844020 100644 --- a/robowaiter/scene/tasks/OT/Open_tasks_test.py +++ b/robowaiter/scene/tasks/OT/Open_tasks_test.py @@ -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)")) ] diff --git a/robowaiter/scene/tasks/VLM/VLM_order.py b/robowaiter/scene/tasks/VLM/VLM_order.py index 7fa2b57..c743023 100644 --- a/robowaiter/scene/tasks/VLM/VLM_order.py +++ b/robowaiter/scene/tasks/VLM/VLM_order.py @@ -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):