diff --git a/robowaiter/behavior_lib/act/DealChat.py b/robowaiter/behavior_lib/act/DealChat.py index 710360e..04133d7 100644 --- a/robowaiter/behavior_lib/act/DealChat.py +++ b/robowaiter/behavior_lib/act/DealChat.py @@ -11,6 +11,11 @@ class DealChat(Act): def _update(self) -> ptree.common.Status: # if self.scene.status? chat = self.scene.state['chat_list'].pop() + if isinstance(chat,set): + self.create_sub_task(chat) + return ptree.common.Status.RUNNING + + self.chat_history += chat + '\n' res_dict = ask_llm(chat) diff --git a/robowaiter/scene/interact/__init__.py b/robowaiter/scene/interact/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/robowaiter/scene/interact/non_customer.py b/robowaiter/scene/interact/non_customer.py new file mode 100644 index 0000000..6cbd372 --- /dev/null +++ b/robowaiter/scene/interact/non_customer.py @@ -0,0 +1,44 @@ +""" +人提出请求,机器人完成任务 +1. 做咖啡(固定动画):接收到做咖啡指令、走到咖啡机、拿杯子、操作咖啡机、取杯子、送到客人桌子上 +2. 倒水 +3. 夹点心 + +具体描述:设计一套点单规则(如菜单包含咖啡、水、点心等),按照规则拟造随机的订单。在收到订单后,通过大模型让机器人输出合理的备餐计划,并尝试在模拟环境中按照这个规划实现任务。 + +""" + +# todo: 接收点单信息,大模型生成任务规划 + +from robowaiter.scene.scene import Scene + +class SubScene(Scene): + + def __init__(self, robot): + super().__init__(robot) + # 在这里加入场景中发生的事件 + + def _reset(self): + pass + + + def _step(self): + if len(self.sub_task_seq.children) == 0: + question = input("请输入指令:") + if question[-1] == ")": + print(f"设置目标:{question}") + self.set_goal(question)() + else: + self.state['chat_list'].append(question) + + + +if __name__ == '__main__': + from robowaiter.robot.robot import Robot + + robot = Robot() + + # create task + task = SubScene(robot) + task.reset() + task.run() diff --git a/robowaiter/scene/scene.py b/robowaiter/scene/scene.py index 13e20ef..54b0e09 100644 --- a/robowaiter/scene/scene.py +++ b/robowaiter/scene/scene.py @@ -116,6 +116,11 @@ class Scene: # reset state self.state = self.default_state + + + + + print("场景初始化完成") self._reset() @@ -156,6 +161,14 @@ class Scene: return customer_say + def set_goal(self,goal): + g = eval("{'" + goal + "'}") + def set_sub_task(): + self.state['chat_list'].append(g) + + return set_sub_task + + @property def status(self): return stub.Observe(GrabSim_pb2.SceneID(value=self.sceneID)) diff --git a/robowaiter/scene/tasks/Open_tasks_test.py b/robowaiter/scene/tasks/Open_tasks_test.py index 604d569..0408d60 100644 --- a/robowaiter/scene/tasks/Open_tasks_test.py +++ b/robowaiter/scene/tasks/Open_tasks_test.py @@ -18,7 +18,7 @@ class SceneOT(Scene): super().__init__(robot) # 在这里加入场景中发生的事件 self.event_list = [ - (5, self.create_chat_event("给我一杯咖啡")) + (5, self.set_goal("At(Robot,Table2)")) ] def _reset(self):