diff --git a/robowaiter/algos/retrieval/retrieval_lm/fix_questions.txt b/robowaiter/algos/retrieval/retrieval_lm/fix_questions.txt index cc7a19b..9b2196a 100644 --- a/robowaiter/algos/retrieval/retrieval_lm/fix_questions.txt +++ b/robowaiter/algos/retrieval/retrieval_lm/fix_questions.txt @@ -112,14 +112,18 @@ get_object_info 给我来杯酸奶和冰红茶,我坐在对面的桌子那儿。 好的,请稍等。 create_sub_task -{"goal":"On(Chips,WaterTable),On(NFCJuice,WaterTable)"} +{"goal":"On(BottledDrink,WaterTable),On(Yogurt,WaterTable)"} 给我来份薯片和果汁,我坐在对面的桌子那儿。 好的,请稍等。 create_sub_task -{"goal":"On(BottledDrink,WaterTable),On(Yogurt,WaterTable)"} +{"goal":"On(Chips,WaterTable),On(NFCJuice,WaterTable)"} +给我来份薯片和果汁,我坐在对面的水杯桌那儿。 +好的,请稍等。 +create_sub_task +{"goal":"On(Chips,WaterTable),On(NFCJuice,WaterTable)"} 好热呀,想开空调,想要温度调低点! 抱歉,我马上去开空调并调低空调温度。 @@ -131,6 +135,9 @@ create_sub_task 我想坐高脚凳子。 没问题,大厅里就有这样的位置呢! +get_object_info +{"obj":"高脚凳子的空位"} + 你带我去吧。 OK,请跟我来! @@ -164,6 +171,9 @@ create_sub_task 你好呀,你们这有啥好吃的? 我们咖啡厅有咖啡,还有饮料和点心蛋糕呢?您想点什么不? +get_object_info +{"obj":"饮料,水果,点心"} + 听起来都好甜呀,我女朋友爱吃水果。 没问题,我们也提供草莓、橘子和苹果等水果呢。 @@ -205,5 +215,26 @@ create_sub_task 水杯 好的 create_sub_task -{"goal":"On(Glass,Bar)"} +{"goal":"On(Water,Bar)"} +点心 +好的 +create_sub_task +{"goal":"On(Dessert,Bar)"} + +酸奶 +好的 +create_sub_task +{"goal":"On(Yogurt,Bar)"} + + +做一杯咖啡 +好的,我马上做咖啡 +create_sub_task +{"goal":"On(Coffee,CoffeeTable)"} + + +把盒装冰红茶放到水桌 +好的 +create_sub_task +{"goal":"On(Softdrink,WaterTable)"} \ No newline at end of file diff --git a/robowaiter/behavior_lib/_base/Behavior.py b/robowaiter/behavior_lib/_base/Behavior.py index 7051e10..5bfcff3 100644 --- a/robowaiter/behavior_lib/_base/Behavior.py +++ b/robowaiter/behavior_lib/_base/Behavior.py @@ -56,6 +56,35 @@ class Bahavior(ptree.behaviour.Behaviour): 'BrightTable6': (5, -315, 116.5), } + place_have_obj_xyz_dic = { + 'QuietTable1': (480, 1300, 70), + 'QuietTable2': (250, -240, 70), + 'BrightTable1': (230, 1200, 35), + 'BrightTable2': (65, 1000, 35), + 'BrightTable3': (-80, 850, 35), + 'BrightTable4': (-270, 520, 70), + 'BrightTable5': (-270, 420, 35) + } + place_have_obj_xyz_dic.update(place_xyz_dic) + + place_en2zh_name={ + 'Bar': "吧台", + 'Bar2': "另一侧的吧台", + 'WaterTable': "大厅的茶水桌", + 'CoffeeTable': "咖啡桌", + 'Table1': "前门的斜桌子", + 'Table2': "大厅长桌子", + 'Table3': "大厅长桌子", + 'BrightTable6': "后门靠窗边圆桌", + 'QuietTable1': "前门角落双人圆桌", + 'QuietTable2': "后门角落三人圆桌", + 'BrightTable1': "靠窗边第一个四人矮桌", + 'BrightTable2': "靠窗边第二个四人矮桌", + 'BrightTable3': "靠窗边第三个四人矮桌", + 'BrightTable4': "大厅里靠窗边长桌子", + 'BrightTable5': "大厅里靠窗边多人矮桌", + } + place_xy_yaw_dic={ 'Bar': (247.0, 520.0, 180), # (247.0, 520.0, 100.0) 'Bar2': (240.0, 40.0, 100.0), diff --git a/robowaiter/behavior_lib/act/DealChat.py b/robowaiter/behavior_lib/act/DealChat.py index 8a4f087..1980488 100644 --- a/robowaiter/behavior_lib/act/DealChat.py +++ b/robowaiter/behavior_lib/act/DealChat.py @@ -5,9 +5,17 @@ from robowaiter.llm_client.multi_rounds_retri import ask_llm, new_history import random from collections import deque +from translate import Translator + + +translator = Translator(to_lang="zh") +translator.from_lang = 'en' +translator.to_lang = 'zh-cn' import spacy nlp = spacy.load('en_core_web_lg') +nlp_zh = spacy.load('zh_core_web_lg') + class History(deque): def __init__(self,scene,customer_name): @@ -29,7 +37,8 @@ class DealChat(Act): "create_sub_task": self.create_sub_task, "stop_serve": self.stop_serve, "get_object_info": self.get_object_info, - "find_location": self.find_location + # "find_location": self.find_location, + "get_number_of_objects": self.get_number_of_objects, } def _update(self) -> ptree.common.Status: @@ -63,6 +72,12 @@ class DealChat(Act): return ptree.common.Status.RUNNING + def obj_name_en2zh(self,obj): + obj = obj.replace("_", " ") + obj = translator.translate(obj) #转成中文 + print("====obj:=======",obj) + return obj + def create_sub_task(self, **args): try: goal = args['goal'] @@ -84,76 +99,173 @@ class DealChat(Act): def get_object_info(self,**args): try: obj = args['obj'] - self.function_success = True except: obj = None print("参数解析错误") - d = {"保温杯": "二号桌子"} - if obj in d.keys(): - result = d[obj] - else: - result = "None" - return result + near_object = None + d = {"保温杯": "二号桌子","洗手间":"前门","卫生间":"前门"} - # max_similarity = 0.02 - # similar_word = None + # 先把 obj 转成中文 + + # 写死的内容 + if obj in d.keys(): + near_object = d[obj] + near_object = f"{obj}在{near_object}附近" + obj_id = 0 + else: # 根据相似性查找物品位置 + obj = self.obj_name_en2zh(obj) + + max_similarity = 0.02 + similar_word = None + + # 场景中现有物品 + cur_things = set() + for item in self.scene.status.objects: + cur_things.add(self.scene.objname_en2zh_dic[item.name]) + # obj与现有物品进行相似度匹配 中文的匹配 + print("==========obj==========:",obj) + query_token = nlp_zh(obj) + for w in cur_things: + word_token = nlp_zh(w) + similarity = query_token.similarity(word_token) + print("similarity:", similarity, w) + if similarity > max_similarity: + max_similarity = similarity + similar_word = w + if similar_word: + print("max_similarity:",max_similarity,"similar_word:",similar_word) + + if similar_word: # 存在同义词说明场景中存在该物品 + # near_object = random.choices(list(cur_things), k=5) # 返回场景中的5个物品 + # 找到距离最近的物品 + similar_word_en = self.scene.objname_zh2en_dic[similar_word] + obj_dict = self.scene.status.objects + if len(obj_dict)!=0: + + for id, obji in enumerate(obj_dict): + if obji.name == similar_word_en: + obj_info = obj_dict[id] + objx,objy,objz = obj_info.location.X, obj_info.location.Y, obj_info.location.Z + break + + # 获取离它最近的物品 + # min_dis = float('inf') + # obj_id = -1 + # near_object = None + # for id,obji in enumerate(obj_dict): + # if obji.name != similar_word_en: + # obj_info = obj_dict[id] + # dis = self.scene.getDistanc3D((obj_info.location.X, obj_info.location.Y, obj_info.location.Z),(objx,objy,objz)) + # if dis max_similarity: # max_similarity = similarity # similar_word = w + # print("similarity:", max_similarity, "similar_word:", similar_word) + # # 存在同义词说明客户咨询的地点有效 # if similar_word: - # print("max_similarity:",max_similarity,"similar_word:",similar_word) - # - # if similar_word: # 存在同义词说明场景中存在该物品 - # near_object = random.choices(list(cur_things), k=5) # 返回场景中的5个物品 - # - # if obj == "洗手间": - # near_object = "Door" - # - # return near_object - # - def find_location(self, **args): + # mp = list(self.scene.loc_map_en[similar_word]) + # near_location = random.choice(mp) + # return near_location + + def get_number_of_objects(self,**args): try: - location = args['obj'] + obj = args['obj'] self.function_success = True + obj = self.obj_name_en2zh(obj) except: obj = None print("参数解析错误") - d = {"保温杯": "二号桌子"} - if location in d.keys(): - result = d[obj] + # 找到最近的中文 + max_similarity = 0.02 + similar_word = None + + # obj 是中文 + # obj = translator.translate(obj) #转成中文 + # print("obj:",obj) + query_token = nlp_zh(obj) + for real_obj_name in self.scene.objname_zh2en_dic.keys(): # 在中文名字里面找 + word_token = nlp_zh(real_obj_name) + similarity = query_token.similarity(word_token) + # print("similarity:",similarity,real_obj_name) + if similarity > max_similarity: + max_similarity = similarity + similar_word = real_obj_name + if similar_word: + print("max_similarity:",max_similarity,"similar_word:",similar_word) + + count = 0 + similar_word_en = self.scene.objname_zh2en_dic[similar_word] + if similar_word_en != "Customer": + for item in self.scene.status.objects: + if item.name == similar_word_en: + count+=1 else: - result = "None" - return result - # 用户咨询的地点 - # query_token = nlp(location) - # max_similarity = 0 - # similar_word = None - # # 到自己维护的地点列表中找同义词 - # for w in self.scene.all_loc_en: - # word_token = nlp(w) + count = len(self.scene.status.walkers) + + # obj 是英文 + # query_token = nlp(obj) + # for real_obj_name in self.scene.objname_en2zh_dic.keys(): # 在中文名字里面找 + # word_token = nlp(real_obj_name) # similarity = query_token.similarity(word_token) + # print("similarity:",similarity,real_obj_name) # if similarity > max_similarity: # max_similarity = similarity - # similar_word = w - # print("similarity:", max_similarity, "similar_word:", similar_word) - # # 存在同义词说明客户咨询的地点有效 + # similar_word = real_obj_name # if similar_word: - # mp = list(self.scene.loc_map_en[similar_word]) - # near_location = random.choice(mp) - # return near_location + # print("max_similarity:",max_similarity,"similar_word:",similar_word) + return count + + def stop_serve(self,**args): customer = self.scene.state["attention"]["customer"] diff --git a/robowaiter/llm_client/tool_register.py b/robowaiter/llm_client/tool_register.py index f15a927..a16ee1d 100644 --- a/robowaiter/llm_client/tool_register.py +++ b/robowaiter/llm_client/tool_register.py @@ -160,14 +160,40 @@ def stop_serve( @register_tool def get_object_info( - obj: Annotated[str, '需要获取信息的物体名称', True] + obj: Annotated[str, '需要获取位置的物体名称', True] ) -> str: """ - 获取场景中指定物体 `object` 在哪里,不涉及到具体的执行任务 - 如果`object` 是一个地点,例如洗手间,则输出大门。 - 如果`object`是咖啡,则输出桌子,咖啡在桌子上。 - 如果`object` 是空桌子,则输出一号桌 + 获取场景中`object`的位置信息。在询问物品位置时调用该函数,以辅助场景交互,不执行动作 + 例如: + `object`在哪里? + 哪有`object` + 哪里有`object`? + `object`在哪里 + 哪里有`object` + `object`放在哪里 + 我在哪儿能找到`object` + 你们这儿有`object`吗? + 你们这里有`object` + 你看见`object`了吗? + `object`在你们这里吗 + `object`,你看见过吗? + 遇到上述问题时,调用该函数,并根据返回的结果回复物体位置信息,例如 + 回答: + `object`在输出的物品附近 + 如果`object` 是一个地点,例如洗手间,则输出大门。 + 如果`object`是咖啡,输出桌子,则咖啡在桌子上。 + 如果`object`是酸奶,输出冰红茶,则酸奶在冰红茶附近。 + 如果`object` 是空桌子,则输出一号桌 """ + + # 桌上有 + # `object` + # 吗? + # 咖啡厅里哪里有 + # `object` + # `object` + # 放在哪里? + near_object = None # if obj == "Table": # near_object = "Bar" @@ -192,22 +218,44 @@ def get_object_info( # 获取的location为英文 # 用户想找某个地点 # """ -# near_location = None -# query_token = nlp(location) -# max_similarity = 0 -# similar_word = None -# for w in find_obj_utils.all_loc_en: -# word_token = nlp(w) -# similarity = query_token.similarity(word_token) -# -# if similarity > max_similarity: -# max_similarity = similarity -# similar_word = w -# print("similarity:", max_similarity, "similar_word:", similar_word) -# if similar_word: -# mp = list(find_obj_utils.loc_map_en[similar_word]) -# near_location = random.choice(mp) -# return near_location + # near_location = None + # query_token = nlp(location) + # max_similarity = 0 + # similar_word = None + # for w in find_obj_utils.all_loc_en: + # word_token = nlp(w) + # similarity = query_token.similarity(word_token) + # + # if similarity > max_similarity: + # max_similarity = similarity + # similar_word = w + # print("similarity:", max_similarity, "similar_word:", similar_word) + # if similar_word: + # mp = list(find_obj_utils.loc_map_en[similar_word]) + # near_location = random.choice(mp) + # return near_location + + +@register_tool +def get_number_of_objects( + obj: Annotated[str, '需要获取数量的物体名称', True] +) -> str: + """ + 当询问场景中的物体数量时,需要调用这个工具。 + 例如询问: + `obj`有多少? + 有多少`obj` + 你们还有`obj` + '桌子有几张' + `obj`还有多的吗? + `obj`有几个 + `obj`有多少个 + 这个工具用于获取场景中指定物体 `obj` 的数量,返回一个整数,不涉及到具体的执行任务。 + 如果`obj`是咖啡,如果场景中有5杯咖啡,就返回 5 + 如果`obj`是桌子,如果场景中有7张桌子,就返回 7 + 如果`obj`是行人,如果场景中有10个顾客,就返回 10 + """ + if __name__ == "__main__": print(dispatch_tool("get_weather", {"city_name": "beijing"})) diff --git a/robowaiter/scene/outputs/current_bt.dot b/robowaiter/scene/outputs/current_bt.dot new file mode 100644 index 0000000..10484f2 --- /dev/null +++ b/robowaiter/scene/outputs/current_bt.dot @@ -0,0 +1,199 @@ +digraph pastafarianism { +ordering=out; +graph [fontname="times-roman"]; +node [fontname="times-roman"]; +edge [fontname="times-roman"]; +"a582faee-7147-4195-81ba-85add86624b4" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01]; +"52d9dd56-2854-495c-820a-d4f291507f33" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"a582faee-7147-4195-81ba-85add86624b4" -> "52d9dd56-2854-495c-820a-d4f291507f33"; +"252a809b-7f62-49ae-addc-2191835a3544" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Chatting()", shape=ellipse, style=filled]; +"52d9dd56-2854-495c-820a-d4f291507f33" -> "252a809b-7f62-49ae-addc-2191835a3544"; +"39c31e0a-dd14-4477-a2e9-01754d4f25ca" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="DealChat()", shape=box, style=filled]; +"52d9dd56-2854-495c-820a-d4f291507f33" -> "39c31e0a-dd14-4477-a2e9-01754d4f25ca"; +"b938e131-cc32-4d66-a769-0b4539bbd4e9" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"a582faee-7147-4195-81ba-85add86624b4" -> "b938e131-cc32-4d66-a769-0b4539bbd4e9"; +"0e243f89-91ee-4b48-8a2b-a685f90589d3" [fillcolor=yellow, fontcolor=black, fontsize=20, label="HasSubTask()", shape=ellipse, style=filled]; +"b938e131-cc32-4d66-a769-0b4539bbd4e9" -> "0e243f89-91ee-4b48-8a2b-a685f90589d3"; +"38ed4e08-f4ae-4250-ad32-eff42d5ab471" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"b938e131-cc32-4d66-a769-0b4539bbd4e9" -> "38ed4e08-f4ae-4250-ad32-eff42d5ab471"; +"057834e6-77b3-416b-bebe-0e1690ea7b77" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"38ed4e08-f4ae-4250-ad32-eff42d5ab471" -> "057834e6-77b3-416b-bebe-0e1690ea7b77"; +"89809d74-1aa6-4401-b296-b10cb96a0017" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01]; +"057834e6-77b3-416b-bebe-0e1690ea7b77" -> "89809d74-1aa6-4401-b296-b10cb96a0017"; +"428ce8be-6e76-4032-865e-ed767f6d9cd9" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "428ce8be-6e76-4032-865e-ed767f6d9cd9"; +"416609ed-eb10-4d93-a8bf-389b30c8a489" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Coffee,WaterTable)", shape=ellipse, style=filled]; +"428ce8be-6e76-4032-865e-ed767f6d9cd9" -> "416609ed-eb10-4d93-a8bf-389b30c8a489"; +"4fc84dda-929f-42f0-b845-2caf0dd9de9b" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Water,WaterTable)", shape=ellipse, style=filled]; +"428ce8be-6e76-4032-865e-ed767f6d9cd9" -> "4fc84dda-929f-42f0-b845-2caf0dd9de9b"; +"8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f"; +"c4db186e-044d-4992-a6d0-dc0cf95aa3af" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Coffee,WaterTable)", shape=ellipse, style=filled]; +"8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f" -> "c4db186e-044d-4992-a6d0-dc0cf95aa3af"; +"670d06c4-42a3-4e25-803f-43c8d6bc704c" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f" -> "670d06c4-42a3-4e25-803f-43c8d6bc704c"; +"8ae61657-5b87-400a-b508-c99eac28f0b1" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="Make(Water)", shape=box, style=filled]; +"8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f" -> "8ae61657-5b87-400a-b508-c99eac28f0b1"; +"499ad5e8-a924-45b2-8f9e-e376e12cc23f" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "499ad5e8-a924-45b2-8f9e-e376e12cc23f"; +"933d9099-d8cb-439a-a194-5ee422cccd64" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Coffee,WaterTable)", shape=ellipse, style=filled]; +"499ad5e8-a924-45b2-8f9e-e376e12cc23f" -> "933d9099-d8cb-439a-a194-5ee422cccd64"; +"1d582953-04bd-4d6e-b57e-cc516073a5f2" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,WaterTable)", shape=ellipse, style=filled]; +"499ad5e8-a924-45b2-8f9e-e376e12cc23f" -> "1d582953-04bd-4d6e-b57e-cc516073a5f2"; +"5da03831-1168-4a0b-b5c4-e1545eae332f" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Water)", shape=ellipse, style=filled]; +"499ad5e8-a924-45b2-8f9e-e376e12cc23f" -> "5da03831-1168-4a0b-b5c4-e1545eae332f"; +"41cde1a8-35f2-47ec-8eb9-04bd6f7c6879" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Water,WaterTable)", shape=box, style=filled]; +"499ad5e8-a924-45b2-8f9e-e376e12cc23f" -> "41cde1a8-35f2-47ec-8eb9-04bd6f7c6879"; +"508b6d47-b448-452f-bb2a-3d214c4b33ad" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "508b6d47-b448-452f-bb2a-3d214c4b33ad"; +"c1bb3e26-8883-42ea-b6c3-57b6b989609a" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled]; +"508b6d47-b448-452f-bb2a-3d214c4b33ad" -> "c1bb3e26-8883-42ea-b6c3-57b6b989609a"; +"d92346dd-2191-41a5-9536-f82022404c75" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,WaterTable)", shape=ellipse, style=filled]; +"508b6d47-b448-452f-bb2a-3d214c4b33ad" -> "d92346dd-2191-41a5-9536-f82022404c75"; +"86966885-d2be-4e6e-9946-8cfe42a7220c" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Water,WaterTable)", shape=ellipse, style=filled]; +"508b6d47-b448-452f-bb2a-3d214c4b33ad" -> "86966885-d2be-4e6e-9946-8cfe42a7220c"; +"df497c9e-356b-4304-9fd0-921db828e93f" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Coffee,WaterTable)", shape=box, style=filled]; +"508b6d47-b448-452f-bb2a-3d214c4b33ad" -> "df497c9e-356b-4304-9fd0-921db828e93f"; +"1ccd2c59-53f0-42cb-ae43-54478ae1c64b" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "1ccd2c59-53f0-42cb-ae43-54478ae1c64b"; +"8342fd0e-0596-496c-9534-8770a064b59e" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Coffee,WaterTable)", shape=ellipse, style=filled]; +"1ccd2c59-53f0-42cb-ae43-54478ae1c64b" -> "8342fd0e-0596-496c-9534-8770a064b59e"; +"04e4b336-479a-4bb3-972d-f186a3d03759" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="FreeHands()", shape=box, style=filled]; +"1ccd2c59-53f0-42cb-ae43-54478ae1c64b" -> "04e4b336-479a-4bb3-972d-f186a3d03759"; +"55980925-a4d9-4fde-b08a-b2dcffbec659" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "55980925-a4d9-4fde-b08a-b2dcffbec659"; +"f246a574-4935-4646-a474-d866d7f8355b" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled]; +"55980925-a4d9-4fde-b08a-b2dcffbec659" -> "f246a574-4935-4646-a474-d866d7f8355b"; +"d33b539f-f3ac-4934-b0d2-c538d3bde390" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,WaterTable)", shape=ellipse, style=filled]; +"55980925-a4d9-4fde-b08a-b2dcffbec659" -> "d33b539f-f3ac-4934-b0d2-c538d3bde390"; +"95c3881e-ad7c-4a6e-b758-683834718b67" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Coffee,WaterTable)", shape=box, style=filled]; +"55980925-a4d9-4fde-b08a-b2dcffbec659" -> "95c3881e-ad7c-4a6e-b758-683834718b67"; +"c9d033ba-b2a5-406f-8d7b-c644ee5e8a13" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "c9d033ba-b2a5-406f-8d7b-c644ee5e8a13"; +"8483c080-80c2-4f0d-9787-4a8ab035c8f7" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled]; +"c9d033ba-b2a5-406f-8d7b-c644ee5e8a13" -> "8483c080-80c2-4f0d-9787-4a8ab035c8f7"; +"696baf79-2e67-4225-84f9-4db8cb5a7877" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Water,WaterTable)", shape=ellipse, style=filled]; +"c9d033ba-b2a5-406f-8d7b-c644ee5e8a13" -> "696baf79-2e67-4225-84f9-4db8cb5a7877"; +"71f49725-d34c-4990-8956-94b0d7076872" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(WaterTable)", shape=box, style=filled]; +"c9d033ba-b2a5-406f-8d7b-c644ee5e8a13" -> "71f49725-d34c-4990-8956-94b0d7076872"; +"ae1795ad-99ad-4a19-ae19-3dfac64b96d5" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "ae1795ad-99ad-4a19-ae19-3dfac64b96d5"; +"3f5584f5-98e4-4d97-ada4-518fd930efe1" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Coffee)", shape=ellipse, style=filled]; +"ae1795ad-99ad-4a19-ae19-3dfac64b96d5" -> "3f5584f5-98e4-4d97-ada4-518fd930efe1"; +"feb9d0bd-81ef-4de4-a011-554cfab12dfc" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(WaterTable)", shape=box, style=filled]; +"ae1795ad-99ad-4a19-ae19-3dfac64b96d5" -> "feb9d0bd-81ef-4de4-a011-554cfab12dfc"; +"0304536e-fa59-485d-a452-47a668dfe2ea" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "0304536e-fa59-485d-a452-47a668dfe2ea"; +"4a75fcc7-7c99-4d64-8150-add03da82ef7" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Coffee)", shape=ellipse, style=filled]; +"0304536e-fa59-485d-a452-47a668dfe2ea" -> "4a75fcc7-7c99-4d64-8150-add03da82ef7"; +"911690ee-a827-4fde-9846-5f291ef0ff6e" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"0304536e-fa59-485d-a452-47a668dfe2ea" -> "911690ee-a827-4fde-9846-5f291ef0ff6e"; +"c35cb7a2-15d2-4440-bbf8-7667b5711653" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Water,WaterTable)", shape=ellipse, style=filled]; +"0304536e-fa59-485d-a452-47a668dfe2ea" -> "c35cb7a2-15d2-4440-bbf8-7667b5711653"; +"7baadc46-e643-4db4-bbd7-d8f109ea6c06" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PickUp(Coffee)", shape=box, style=filled]; +"0304536e-fa59-485d-a452-47a668dfe2ea" -> "7baadc46-e643-4db4-bbd7-d8f109ea6c06"; +"b7923c0f-0992-4266-868d-558efbd07716" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "b7923c0f-0992-4266-868d-558efbd07716"; +"d5c99c51-2edc-4d41-b2db-0068f92aa77c" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Coffee)", shape=ellipse, style=filled]; +"b7923c0f-0992-4266-868d-558efbd07716" -> "d5c99c51-2edc-4d41-b2db-0068f92aa77c"; +"89129311-b249-4eab-83a7-c5cf21a35c00" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"b7923c0f-0992-4266-868d-558efbd07716" -> "89129311-b249-4eab-83a7-c5cf21a35c00"; +"711d4b2e-0087-4520-9528-ad5b252aadd5" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PickUp(Coffee)", shape=box, style=filled]; +"b7923c0f-0992-4266-868d-558efbd07716" -> "711d4b2e-0087-4520-9528-ad5b252aadd5"; +"6de54193-aa93-4d1a-b3f3-d04adb06a7ac" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "6de54193-aa93-4d1a-b3f3-d04adb06a7ac"; +"55153a6f-cb38-4bd1-8602-d6960b6bdbfa" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Coffee)", shape=ellipse, style=filled]; +"6de54193-aa93-4d1a-b3f3-d04adb06a7ac" -> "55153a6f-cb38-4bd1-8602-d6960b6bdbfa"; +"88c8b174-727b-4249-8768-17630e6e37e0" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Water,WaterTable)", shape=ellipse, style=filled]; +"6de54193-aa93-4d1a-b3f3-d04adb06a7ac" -> "88c8b174-727b-4249-8768-17630e6e37e0"; +"c7f0187c-a4c8-4b76-8da1-4ac790e56ee5" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="FreeHands()", shape=box, style=filled]; +"6de54193-aa93-4d1a-b3f3-d04adb06a7ac" -> "c7f0187c-a4c8-4b76-8da1-4ac790e56ee5"; +"acc92740-05eb-4963-b01b-63b41cf20140" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "acc92740-05eb-4963-b01b-63b41cf20140"; +"5508c6dc-6c58-4d91-a2f7-81b19be0f22d" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"acc92740-05eb-4963-b01b-63b41cf20140" -> "5508c6dc-6c58-4d91-a2f7-81b19be0f22d"; +"ed0d3415-95b4-4ce5-9341-b7352f78eff1" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Water,WaterTable)", shape=ellipse, style=filled]; +"acc92740-05eb-4963-b01b-63b41cf20140" -> "ed0d3415-95b4-4ce5-9341-b7352f78eff1"; +"248b5d9a-5160-4154-a747-35c180c26788" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Exist(Coffee)", shape=ellipse, style=filled]; +"acc92740-05eb-4963-b01b-63b41cf20140" -> "248b5d9a-5160-4154-a747-35c180c26788"; +"96ea24c5-198d-46ff-88e6-375a310463c2" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(Coffee)", shape=box, style=filled]; +"acc92740-05eb-4963-b01b-63b41cf20140" -> "96ea24c5-198d-46ff-88e6-375a310463c2"; +"370f4fa8-1789-47cf-86d4-43c1fcaec40d" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "370f4fa8-1789-47cf-86d4-43c1fcaec40d"; +"3b4e2601-a215-4c53-9725-024a7272ca01" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Coffee)", shape=ellipse, style=filled]; +"370f4fa8-1789-47cf-86d4-43c1fcaec40d" -> "3b4e2601-a215-4c53-9725-024a7272ca01"; +"5207249d-7ed3-4374-8c35-551323aa6e6f" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="FreeHands()", shape=box, style=filled]; +"370f4fa8-1789-47cf-86d4-43c1fcaec40d" -> "5207249d-7ed3-4374-8c35-551323aa6e6f"; +"adb07734-f041-4c2e-9e4c-360fc7932ec9" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "adb07734-f041-4c2e-9e4c-360fc7932ec9"; +"c050928b-ea79-40c0-b9ba-fdf1cb60a773" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"adb07734-f041-4c2e-9e4c-360fc7932ec9" -> "c050928b-ea79-40c0-b9ba-fdf1cb60a773"; +"07b147ab-23b5-48ae-9449-c810c93e28b4" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Exist(Coffee)", shape=ellipse, style=filled]; +"adb07734-f041-4c2e-9e4c-360fc7932ec9" -> "07b147ab-23b5-48ae-9449-c810c93e28b4"; +"59f2afe9-173b-41f8-921e-29cfd4ecc1c4" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(Coffee)", shape=box, style=filled]; +"adb07734-f041-4c2e-9e4c-360fc7932ec9" -> "59f2afe9-173b-41f8-921e-29cfd4ecc1c4"; +"fcbee6e1-0e5e-41c3-9db5-5bf808bac68b" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "fcbee6e1-0e5e-41c3-9db5-5bf808bac68b"; +"f0843e6c-a65a-4d9f-971d-06766e94df66" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Water,WaterTable)", shape=ellipse, style=filled]; +"fcbee6e1-0e5e-41c3-9db5-5bf808bac68b" -> "f0843e6c-a65a-4d9f-971d-06766e94df66"; +"6dab056a-a232-4212-af57-5c1c1465db99" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Exist(Coffee)", shape=ellipse, style=filled]; +"fcbee6e1-0e5e-41c3-9db5-5bf808bac68b" -> "6dab056a-a232-4212-af57-5c1c1465db99"; +"0c2f54f1-85e8-486d-9c81-3d18f5f12ae8" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(Coffee)", shape=box, style=filled]; +"fcbee6e1-0e5e-41c3-9db5-5bf808bac68b" -> "0c2f54f1-85e8-486d-9c81-3d18f5f12ae8"; +"1c873ce0-8037-40a0-9394-037257e6ef1f" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "1c873ce0-8037-40a0-9394-037257e6ef1f"; +"4c2f06f6-fa4b-41a2-a50d-cbd4f2370b5b" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"1c873ce0-8037-40a0-9394-037257e6ef1f" -> "4c2f06f6-fa4b-41a2-a50d-cbd4f2370b5b"; +"e311ac9a-4505-442e-9ec9-47c2a0fd2ac8" [fillcolor=yellow, fontcolor=black, fontsize=20, label="On(Water,WaterTable)", shape=ellipse, style=filled]; +"1c873ce0-8037-40a0-9394-037257e6ef1f" -> "e311ac9a-4505-442e-9ec9-47c2a0fd2ac8"; +"b3880316-85f0-4124-a18a-fa84896d3485" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="Make(Coffee)", shape=box, style=filled]; +"1c873ce0-8037-40a0-9394-037257e6ef1f" -> "b3880316-85f0-4124-a18a-fa84896d3485"; +"96e46656-34ac-47aa-83b1-902ec66e53b5" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "96e46656-34ac-47aa-83b1-902ec66e53b5"; +"41ad97fa-7ea9-48e4-8cd3-187dc53fe992" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,WaterTable)", shape=ellipse, style=filled]; +"96e46656-34ac-47aa-83b1-902ec66e53b5" -> "41ad97fa-7ea9-48e4-8cd3-187dc53fe992"; +"7e7163b1-eadd-4f81-99c5-5cd238252a79" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Water)", shape=ellipse, style=filled]; +"96e46656-34ac-47aa-83b1-902ec66e53b5" -> "7e7163b1-eadd-4f81-99c5-5cd238252a79"; +"18b63af1-2803-4a7d-95c2-c701dff29a51" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Exist(Coffee)", shape=ellipse, style=filled]; +"96e46656-34ac-47aa-83b1-902ec66e53b5" -> "18b63af1-2803-4a7d-95c2-c701dff29a51"; +"1f492236-0a16-4e47-bca0-d6cda8fc1e79" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="PutDown(Water,WaterTable)", shape=box, style=filled]; +"96e46656-34ac-47aa-83b1-902ec66e53b5" -> "1f492236-0a16-4e47-bca0-d6cda8fc1e79"; +"26396b01-8762-46f0-be46-224b590173ce" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "26396b01-8762-46f0-be46-224b590173ce"; +"bee79c41-c84d-427a-a0b4-fe732ab6e448" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Exist(Coffee)", shape=ellipse, style=filled]; +"26396b01-8762-46f0-be46-224b590173ce" -> "bee79c41-c84d-427a-a0b4-fe732ab6e448"; +"7845d148-bef6-4b74-959b-5e13fbe75330" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(Coffee)", shape=box, style=filled]; +"26396b01-8762-46f0-be46-224b590173ce" -> "7845d148-bef6-4b74-959b-5e13fbe75330"; +"eee68ac0-f125-4074-a523-dcd9b1d25e42" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"89809d74-1aa6-4401-b296-b10cb96a0017" -> "eee68ac0-f125-4074-a523-dcd9b1d25e42"; +"bc97fe9a-8eeb-4d4f-8865-025bf8ab1d0e" [fillcolor=yellow, fontcolor=black, fontsize=20, label="Holding(Nothing)", shape=ellipse, style=filled]; +"eee68ac0-f125-4074-a523-dcd9b1d25e42" -> "bc97fe9a-8eeb-4d4f-8865-025bf8ab1d0e"; +"e631843b-92d8-4612-8dcf-7dd66b86a531" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="Make(Coffee)", shape=box, style=filled]; +"eee68ac0-f125-4074-a523-dcd9b1d25e42" -> "e631843b-92d8-4612-8dcf-7dd66b86a531"; +"1c7e5f57-89fe-40d3-a5fe-45d7fa2e7f90" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="DelSubTree()", shape=box, style=filled]; +"057834e6-77b3-416b-bebe-0e1690ea7b77" -> "1c7e5f57-89fe-40d3-a5fe-45d7fa2e7f90"; +"deb5f50b-93ac-4601-a5f1-af68f0f9d50a" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"a582faee-7147-4195-81ba-85add86624b4" -> "deb5f50b-93ac-4601-a5f1-af68f0f9d50a"; +"8d9e0427-c7c4-4c8a-b6a1-d3cf0a7ae4c6" [fillcolor=yellow, fontcolor=black, fontsize=20, label="FocusingCustomer()", shape=ellipse, style=filled]; +"deb5f50b-93ac-4601-a5f1-af68f0f9d50a" -> "8d9e0427-c7c4-4c8a-b6a1-d3cf0a7ae4c6"; +"a8ab831b-5e89-41c6-9a6a-15441aa1d32b" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="ServeCustomer()", shape=box, style=filled]; +"deb5f50b-93ac-4601-a5f1-af68f0f9d50a" -> "a8ab831b-5e89-41c6-9a6a-15441aa1d32b"; +"cc071d28-4cb6-4bbd-a866-38f48b77efda" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"a582faee-7147-4195-81ba-85add86624b4" -> "cc071d28-4cb6-4bbd-a866-38f48b77efda"; +"e227e659-1432-4fba-8b6a-a9364e51076c" [fillcolor=yellow, fontcolor=black, fontsize=20, label="NewCustomer()", shape=ellipse, style=filled]; +"cc071d28-4cb6-4bbd-a866-38f48b77efda" -> "e227e659-1432-4fba-8b6a-a9364e51076c"; +"d3a930dc-8300-4510-a83c-5f070170bb5b" [fillcolor=cyan, fontcolor=black, fontsize=20, height=0.01, label=Selector, shape=diamond, style=filled, width=0.01]; +"cc071d28-4cb6-4bbd-a866-38f48b77efda" -> "d3a930dc-8300-4510-a83c-5f070170bb5b"; +"85295be4-2eed-4dac-98f6-040450241204" [fillcolor=yellow, fontcolor=black, fontsize=20, label="At(Robot,Bar)", shape=ellipse, style=filled]; +"d3a930dc-8300-4510-a83c-5f070170bb5b" -> "85295be4-2eed-4dac-98f6-040450241204"; +"5a775c24-2a6b-445c-87e9-9eeab2b6882c" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="MoveTo(Bar)", shape=box, style=filled]; +"d3a930dc-8300-4510-a83c-5f070170bb5b" -> "5a775c24-2a6b-445c-87e9-9eeab2b6882c"; +"3b8f863e-eef0-43e9-8ccc-4086c59af2a1" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="GreetCustomer()", shape=box, style=filled]; +"cc071d28-4cb6-4bbd-a866-38f48b77efda" -> "3b8f863e-eef0-43e9-8ccc-4086c59af2a1"; +"16c9b1ee-9159-4816-92a4-37c149d0233a" [fillcolor=orange, fontcolor=black, fontsize=20, height=0.01, label=Sequence, shape=octagon, style=filled, width=0.01]; +"a582faee-7147-4195-81ba-85add86624b4" -> "16c9b1ee-9159-4816-92a4-37c149d0233a"; +"967d7a51-f3e2-4b8f-9331-dc75660d7136" [fillcolor=yellow, fontcolor=black, fontsize=20, label="AnomalyDetected()", shape=ellipse, style=filled]; +"16c9b1ee-9159-4816-92a4-37c149d0233a" -> "967d7a51-f3e2-4b8f-9331-dc75660d7136"; +"9b9909d3-e999-4706-b4de-1c60dfe53a14" [fillcolor=lawngreen, fontcolor=black, fontsize=20, label="ResolveAnomaly()", shape=box, style=filled]; +"16c9b1ee-9159-4816-92a4-37c149d0233a" -> "9b9909d3-e999-4706-b4de-1c60dfe53a14"; +} diff --git a/robowaiter/scene/outputs/current_bt.svg b/robowaiter/scene/outputs/current_bt.svg new file mode 100644 index 0000000..d400a88 --- /dev/null +++ b/robowaiter/scene/outputs/current_bt.svg @@ -0,0 +1,1171 @@ + + + + + + +pastafarianism + + + +a582faee-7147-4195-81ba-85add86624b4 + +Selector + + + +52d9dd56-2854-495c-820a-d4f291507f33 + +Sequence + + + +a582faee-7147-4195-81ba-85add86624b4->52d9dd56-2854-495c-820a-d4f291507f33 + + + + + +b938e131-cc32-4d66-a769-0b4539bbd4e9 + +Sequence + + + +a582faee-7147-4195-81ba-85add86624b4->b938e131-cc32-4d66-a769-0b4539bbd4e9 + + + + + +deb5f50b-93ac-4601-a5f1-af68f0f9d50a + +Sequence + + + +a582faee-7147-4195-81ba-85add86624b4->deb5f50b-93ac-4601-a5f1-af68f0f9d50a + + + + + +cc071d28-4cb6-4bbd-a866-38f48b77efda + +Sequence + + + +a582faee-7147-4195-81ba-85add86624b4->cc071d28-4cb6-4bbd-a866-38f48b77efda + + + + + +16c9b1ee-9159-4816-92a4-37c149d0233a + +Sequence + + + +a582faee-7147-4195-81ba-85add86624b4->16c9b1ee-9159-4816-92a4-37c149d0233a + + + + + +252a809b-7f62-49ae-addc-2191835a3544 + +Chatting() + + + +52d9dd56-2854-495c-820a-d4f291507f33->252a809b-7f62-49ae-addc-2191835a3544 + + + + + +39c31e0a-dd14-4477-a2e9-01754d4f25ca + +DealChat() + + + +52d9dd56-2854-495c-820a-d4f291507f33->39c31e0a-dd14-4477-a2e9-01754d4f25ca + + + + + +0e243f89-91ee-4b48-8a2b-a685f90589d3 + +HasSubTask() + + + +b938e131-cc32-4d66-a769-0b4539bbd4e9->0e243f89-91ee-4b48-8a2b-a685f90589d3 + + + + + +38ed4e08-f4ae-4250-ad32-eff42d5ab471 + +Sequence + + + +b938e131-cc32-4d66-a769-0b4539bbd4e9->38ed4e08-f4ae-4250-ad32-eff42d5ab471 + + + + + +057834e6-77b3-416b-bebe-0e1690ea7b77 + +Sequence + + + +38ed4e08-f4ae-4250-ad32-eff42d5ab471->057834e6-77b3-416b-bebe-0e1690ea7b77 + + + + + +89809d74-1aa6-4401-b296-b10cb96a0017 + +Selector + + + +057834e6-77b3-416b-bebe-0e1690ea7b77->89809d74-1aa6-4401-b296-b10cb96a0017 + + + + + +1c7e5f57-89fe-40d3-a5fe-45d7fa2e7f90 + +DelSubTree() + + + +057834e6-77b3-416b-bebe-0e1690ea7b77->1c7e5f57-89fe-40d3-a5fe-45d7fa2e7f90 + + + + + +428ce8be-6e76-4032-865e-ed767f6d9cd9 + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->428ce8be-6e76-4032-865e-ed767f6d9cd9 + + + + + +8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f + + + + + +499ad5e8-a924-45b2-8f9e-e376e12cc23f + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->499ad5e8-a924-45b2-8f9e-e376e12cc23f + + + + + +508b6d47-b448-452f-bb2a-3d214c4b33ad + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->508b6d47-b448-452f-bb2a-3d214c4b33ad + + + + + +1ccd2c59-53f0-42cb-ae43-54478ae1c64b + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->1ccd2c59-53f0-42cb-ae43-54478ae1c64b + + + + + +55980925-a4d9-4fde-b08a-b2dcffbec659 + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->55980925-a4d9-4fde-b08a-b2dcffbec659 + + + + + +c9d033ba-b2a5-406f-8d7b-c644ee5e8a13 + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->c9d033ba-b2a5-406f-8d7b-c644ee5e8a13 + + + + + +ae1795ad-99ad-4a19-ae19-3dfac64b96d5 + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->ae1795ad-99ad-4a19-ae19-3dfac64b96d5 + + + + + +0304536e-fa59-485d-a452-47a668dfe2ea + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->0304536e-fa59-485d-a452-47a668dfe2ea + + + + + +b7923c0f-0992-4266-868d-558efbd07716 + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->b7923c0f-0992-4266-868d-558efbd07716 + + + + + +6de54193-aa93-4d1a-b3f3-d04adb06a7ac + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->6de54193-aa93-4d1a-b3f3-d04adb06a7ac + + + + + +acc92740-05eb-4963-b01b-63b41cf20140 + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->acc92740-05eb-4963-b01b-63b41cf20140 + + + + + +370f4fa8-1789-47cf-86d4-43c1fcaec40d + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->370f4fa8-1789-47cf-86d4-43c1fcaec40d + + + + + +adb07734-f041-4c2e-9e4c-360fc7932ec9 + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->adb07734-f041-4c2e-9e4c-360fc7932ec9 + + + + + +fcbee6e1-0e5e-41c3-9db5-5bf808bac68b + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->fcbee6e1-0e5e-41c3-9db5-5bf808bac68b + + + + + +1c873ce0-8037-40a0-9394-037257e6ef1f + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->1c873ce0-8037-40a0-9394-037257e6ef1f + + + + + +96e46656-34ac-47aa-83b1-902ec66e53b5 + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->96e46656-34ac-47aa-83b1-902ec66e53b5 + + + + + +26396b01-8762-46f0-be46-224b590173ce + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->26396b01-8762-46f0-be46-224b590173ce + + + + + +eee68ac0-f125-4074-a523-dcd9b1d25e42 + +Sequence + + + +89809d74-1aa6-4401-b296-b10cb96a0017->eee68ac0-f125-4074-a523-dcd9b1d25e42 + + + + + +416609ed-eb10-4d93-a8bf-389b30c8a489 + +On(Coffee,WaterTable) + + + +428ce8be-6e76-4032-865e-ed767f6d9cd9->416609ed-eb10-4d93-a8bf-389b30c8a489 + + + + + +4fc84dda-929f-42f0-b845-2caf0dd9de9b + +On(Water,WaterTable) + + + +428ce8be-6e76-4032-865e-ed767f6d9cd9->4fc84dda-929f-42f0-b845-2caf0dd9de9b + + + + + +c4db186e-044d-4992-a6d0-dc0cf95aa3af + +On(Coffee,WaterTable) + + + +8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f->c4db186e-044d-4992-a6d0-dc0cf95aa3af + + + + + +670d06c4-42a3-4e25-803f-43c8d6bc704c + +Holding(Nothing) + + + +8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f->670d06c4-42a3-4e25-803f-43c8d6bc704c + + + + + +8ae61657-5b87-400a-b508-c99eac28f0b1 + +Make(Water) + + + +8dbb1cc4-46f0-4a7f-bd41-bf4918faad0f->8ae61657-5b87-400a-b508-c99eac28f0b1 + + + + + +933d9099-d8cb-439a-a194-5ee422cccd64 + +On(Coffee,WaterTable) + + + +499ad5e8-a924-45b2-8f9e-e376e12cc23f->933d9099-d8cb-439a-a194-5ee422cccd64 + + + + + +1d582953-04bd-4d6e-b57e-cc516073a5f2 + +At(Robot,WaterTable) + + + +499ad5e8-a924-45b2-8f9e-e376e12cc23f->1d582953-04bd-4d6e-b57e-cc516073a5f2 + + + + + +5da03831-1168-4a0b-b5c4-e1545eae332f + +Holding(Water) + + + +499ad5e8-a924-45b2-8f9e-e376e12cc23f->5da03831-1168-4a0b-b5c4-e1545eae332f + + + + + +41cde1a8-35f2-47ec-8eb9-04bd6f7c6879 + +PutDown(Water,WaterTable) + + + +499ad5e8-a924-45b2-8f9e-e376e12cc23f->41cde1a8-35f2-47ec-8eb9-04bd6f7c6879 + + + + + +c1bb3e26-8883-42ea-b6c3-57b6b989609a + +Holding(Coffee) + + + +508b6d47-b448-452f-bb2a-3d214c4b33ad->c1bb3e26-8883-42ea-b6c3-57b6b989609a + + + + + +d92346dd-2191-41a5-9536-f82022404c75 + +At(Robot,WaterTable) + + + +508b6d47-b448-452f-bb2a-3d214c4b33ad->d92346dd-2191-41a5-9536-f82022404c75 + + + + + +86966885-d2be-4e6e-9946-8cfe42a7220c + +On(Water,WaterTable) + + + +508b6d47-b448-452f-bb2a-3d214c4b33ad->86966885-d2be-4e6e-9946-8cfe42a7220c + + + + + +df497c9e-356b-4304-9fd0-921db828e93f + +PutDown(Coffee,WaterTable) + + + +508b6d47-b448-452f-bb2a-3d214c4b33ad->df497c9e-356b-4304-9fd0-921db828e93f + + + + + +8342fd0e-0596-496c-9534-8770a064b59e + +On(Coffee,WaterTable) + + + +1ccd2c59-53f0-42cb-ae43-54478ae1c64b->8342fd0e-0596-496c-9534-8770a064b59e + + + + + +04e4b336-479a-4bb3-972d-f186a3d03759 + +FreeHands() + + + +1ccd2c59-53f0-42cb-ae43-54478ae1c64b->04e4b336-479a-4bb3-972d-f186a3d03759 + + + + + +f246a574-4935-4646-a474-d866d7f8355b + +Holding(Coffee) + + + +55980925-a4d9-4fde-b08a-b2dcffbec659->f246a574-4935-4646-a474-d866d7f8355b + + + + + +d33b539f-f3ac-4934-b0d2-c538d3bde390 + +At(Robot,WaterTable) + + + +55980925-a4d9-4fde-b08a-b2dcffbec659->d33b539f-f3ac-4934-b0d2-c538d3bde390 + + + + + +95c3881e-ad7c-4a6e-b758-683834718b67 + +PutDown(Coffee,WaterTable) + + + +55980925-a4d9-4fde-b08a-b2dcffbec659->95c3881e-ad7c-4a6e-b758-683834718b67 + + + + + +8483c080-80c2-4f0d-9787-4a8ab035c8f7 + +Holding(Coffee) + + + +c9d033ba-b2a5-406f-8d7b-c644ee5e8a13->8483c080-80c2-4f0d-9787-4a8ab035c8f7 + + + + + +696baf79-2e67-4225-84f9-4db8cb5a7877 + +On(Water,WaterTable) + + + +c9d033ba-b2a5-406f-8d7b-c644ee5e8a13->696baf79-2e67-4225-84f9-4db8cb5a7877 + + + + + +71f49725-d34c-4990-8956-94b0d7076872 + +MoveTo(WaterTable) + + + +c9d033ba-b2a5-406f-8d7b-c644ee5e8a13->71f49725-d34c-4990-8956-94b0d7076872 + + + + + +3f5584f5-98e4-4d97-ada4-518fd930efe1 + +Holding(Coffee) + + + +ae1795ad-99ad-4a19-ae19-3dfac64b96d5->3f5584f5-98e4-4d97-ada4-518fd930efe1 + + + + + +feb9d0bd-81ef-4de4-a011-554cfab12dfc + +MoveTo(WaterTable) + + + +ae1795ad-99ad-4a19-ae19-3dfac64b96d5->feb9d0bd-81ef-4de4-a011-554cfab12dfc + + + + + +4a75fcc7-7c99-4d64-8150-add03da82ef7 + +At(Robot,Coffee) + + + +0304536e-fa59-485d-a452-47a668dfe2ea->4a75fcc7-7c99-4d64-8150-add03da82ef7 + + + + + +911690ee-a827-4fde-9846-5f291ef0ff6e + +Holding(Nothing) + + + +0304536e-fa59-485d-a452-47a668dfe2ea->911690ee-a827-4fde-9846-5f291ef0ff6e + + + + + +c35cb7a2-15d2-4440-bbf8-7667b5711653 + +On(Water,WaterTable) + + + +0304536e-fa59-485d-a452-47a668dfe2ea->c35cb7a2-15d2-4440-bbf8-7667b5711653 + + + + + +7baadc46-e643-4db4-bbd7-d8f109ea6c06 + +PickUp(Coffee) + + + +0304536e-fa59-485d-a452-47a668dfe2ea->7baadc46-e643-4db4-bbd7-d8f109ea6c06 + + + + + +d5c99c51-2edc-4d41-b2db-0068f92aa77c + +At(Robot,Coffee) + + + +b7923c0f-0992-4266-868d-558efbd07716->d5c99c51-2edc-4d41-b2db-0068f92aa77c + + + + + +89129311-b249-4eab-83a7-c5cf21a35c00 + +Holding(Nothing) + + + +b7923c0f-0992-4266-868d-558efbd07716->89129311-b249-4eab-83a7-c5cf21a35c00 + + + + + +711d4b2e-0087-4520-9528-ad5b252aadd5 + +PickUp(Coffee) + + + +b7923c0f-0992-4266-868d-558efbd07716->711d4b2e-0087-4520-9528-ad5b252aadd5 + + + + + +55153a6f-cb38-4bd1-8602-d6960b6bdbfa + +At(Robot,Coffee) + + + +6de54193-aa93-4d1a-b3f3-d04adb06a7ac->55153a6f-cb38-4bd1-8602-d6960b6bdbfa + + + + + +88c8b174-727b-4249-8768-17630e6e37e0 + +On(Water,WaterTable) + + + +6de54193-aa93-4d1a-b3f3-d04adb06a7ac->88c8b174-727b-4249-8768-17630e6e37e0 + + + + + +c7f0187c-a4c8-4b76-8da1-4ac790e56ee5 + +FreeHands() + + + +6de54193-aa93-4d1a-b3f3-d04adb06a7ac->c7f0187c-a4c8-4b76-8da1-4ac790e56ee5 + + + + + +5508c6dc-6c58-4d91-a2f7-81b19be0f22d + +Holding(Nothing) + + + +acc92740-05eb-4963-b01b-63b41cf20140->5508c6dc-6c58-4d91-a2f7-81b19be0f22d + + + + + +ed0d3415-95b4-4ce5-9341-b7352f78eff1 + +On(Water,WaterTable) + + + +acc92740-05eb-4963-b01b-63b41cf20140->ed0d3415-95b4-4ce5-9341-b7352f78eff1 + + + + + +248b5d9a-5160-4154-a747-35c180c26788 + +Exist(Coffee) + + + +acc92740-05eb-4963-b01b-63b41cf20140->248b5d9a-5160-4154-a747-35c180c26788 + + + + + +96ea24c5-198d-46ff-88e6-375a310463c2 + +MoveTo(Coffee) + + + +acc92740-05eb-4963-b01b-63b41cf20140->96ea24c5-198d-46ff-88e6-375a310463c2 + + + + + +3b4e2601-a215-4c53-9725-024a7272ca01 + +At(Robot,Coffee) + + + +370f4fa8-1789-47cf-86d4-43c1fcaec40d->3b4e2601-a215-4c53-9725-024a7272ca01 + + + + + +5207249d-7ed3-4374-8c35-551323aa6e6f + +FreeHands() + + + +370f4fa8-1789-47cf-86d4-43c1fcaec40d->5207249d-7ed3-4374-8c35-551323aa6e6f + + + + + +c050928b-ea79-40c0-b9ba-fdf1cb60a773 + +Holding(Nothing) + + + +adb07734-f041-4c2e-9e4c-360fc7932ec9->c050928b-ea79-40c0-b9ba-fdf1cb60a773 + + + + + +07b147ab-23b5-48ae-9449-c810c93e28b4 + +Exist(Coffee) + + + +adb07734-f041-4c2e-9e4c-360fc7932ec9->07b147ab-23b5-48ae-9449-c810c93e28b4 + + + + + +59f2afe9-173b-41f8-921e-29cfd4ecc1c4 + +MoveTo(Coffee) + + + +adb07734-f041-4c2e-9e4c-360fc7932ec9->59f2afe9-173b-41f8-921e-29cfd4ecc1c4 + + + + + +f0843e6c-a65a-4d9f-971d-06766e94df66 + +On(Water,WaterTable) + + + +fcbee6e1-0e5e-41c3-9db5-5bf808bac68b->f0843e6c-a65a-4d9f-971d-06766e94df66 + + + + + +6dab056a-a232-4212-af57-5c1c1465db99 + +Exist(Coffee) + + + +fcbee6e1-0e5e-41c3-9db5-5bf808bac68b->6dab056a-a232-4212-af57-5c1c1465db99 + + + + + +0c2f54f1-85e8-486d-9c81-3d18f5f12ae8 + +MoveTo(Coffee) + + + +fcbee6e1-0e5e-41c3-9db5-5bf808bac68b->0c2f54f1-85e8-486d-9c81-3d18f5f12ae8 + + + + + +4c2f06f6-fa4b-41a2-a50d-cbd4f2370b5b + +Holding(Nothing) + + + +1c873ce0-8037-40a0-9394-037257e6ef1f->4c2f06f6-fa4b-41a2-a50d-cbd4f2370b5b + + + + + +e311ac9a-4505-442e-9ec9-47c2a0fd2ac8 + +On(Water,WaterTable) + + + +1c873ce0-8037-40a0-9394-037257e6ef1f->e311ac9a-4505-442e-9ec9-47c2a0fd2ac8 + + + + + +b3880316-85f0-4124-a18a-fa84896d3485 + +Make(Coffee) + + + +1c873ce0-8037-40a0-9394-037257e6ef1f->b3880316-85f0-4124-a18a-fa84896d3485 + + + + + +41ad97fa-7ea9-48e4-8cd3-187dc53fe992 + +At(Robot,WaterTable) + + + +96e46656-34ac-47aa-83b1-902ec66e53b5->41ad97fa-7ea9-48e4-8cd3-187dc53fe992 + + + + + +7e7163b1-eadd-4f81-99c5-5cd238252a79 + +Holding(Water) + + + +96e46656-34ac-47aa-83b1-902ec66e53b5->7e7163b1-eadd-4f81-99c5-5cd238252a79 + + + + + +18b63af1-2803-4a7d-95c2-c701dff29a51 + +Exist(Coffee) + + + +96e46656-34ac-47aa-83b1-902ec66e53b5->18b63af1-2803-4a7d-95c2-c701dff29a51 + + + + + +1f492236-0a16-4e47-bca0-d6cda8fc1e79 + +PutDown(Water,WaterTable) + + + +96e46656-34ac-47aa-83b1-902ec66e53b5->1f492236-0a16-4e47-bca0-d6cda8fc1e79 + + + + + +bee79c41-c84d-427a-a0b4-fe732ab6e448 + +Exist(Coffee) + + + +26396b01-8762-46f0-be46-224b590173ce->bee79c41-c84d-427a-a0b4-fe732ab6e448 + + + + + +7845d148-bef6-4b74-959b-5e13fbe75330 + +MoveTo(Coffee) + + + +26396b01-8762-46f0-be46-224b590173ce->7845d148-bef6-4b74-959b-5e13fbe75330 + + + + + +bc97fe9a-8eeb-4d4f-8865-025bf8ab1d0e + +Holding(Nothing) + + + +eee68ac0-f125-4074-a523-dcd9b1d25e42->bc97fe9a-8eeb-4d4f-8865-025bf8ab1d0e + + + + + +e631843b-92d8-4612-8dcf-7dd66b86a531 + +Make(Coffee) + + + +eee68ac0-f125-4074-a523-dcd9b1d25e42->e631843b-92d8-4612-8dcf-7dd66b86a531 + + + + + +8d9e0427-c7c4-4c8a-b6a1-d3cf0a7ae4c6 + +FocusingCustomer() + + + +deb5f50b-93ac-4601-a5f1-af68f0f9d50a->8d9e0427-c7c4-4c8a-b6a1-d3cf0a7ae4c6 + + + + + +a8ab831b-5e89-41c6-9a6a-15441aa1d32b + +ServeCustomer() + + + +deb5f50b-93ac-4601-a5f1-af68f0f9d50a->a8ab831b-5e89-41c6-9a6a-15441aa1d32b + + + + + +e227e659-1432-4fba-8b6a-a9364e51076c + +NewCustomer() + + + +cc071d28-4cb6-4bbd-a866-38f48b77efda->e227e659-1432-4fba-8b6a-a9364e51076c + + + + + +d3a930dc-8300-4510-a83c-5f070170bb5b + +Selector + + + +cc071d28-4cb6-4bbd-a866-38f48b77efda->d3a930dc-8300-4510-a83c-5f070170bb5b + + + + + +3b8f863e-eef0-43e9-8ccc-4086c59af2a1 + +GreetCustomer() + + + +cc071d28-4cb6-4bbd-a866-38f48b77efda->3b8f863e-eef0-43e9-8ccc-4086c59af2a1 + + + + + +85295be4-2eed-4dac-98f6-040450241204 + +At(Robot,Bar) + + + +d3a930dc-8300-4510-a83c-5f070170bb5b->85295be4-2eed-4dac-98f6-040450241204 + + + + + +5a775c24-2a6b-445c-87e9-9eeab2b6882c + +MoveTo(Bar) + + + +d3a930dc-8300-4510-a83c-5f070170bb5b->5a775c24-2a6b-445c-87e9-9eeab2b6882c + + + + + +967d7a51-f3e2-4b8f-9331-dc75660d7136 + +AnomalyDetected() + + + +16c9b1ee-9159-4816-92a4-37c149d0233a->967d7a51-f3e2-4b8f-9331-dc75660d7136 + + + + + +9b9909d3-e999-4706-b4de-1c60dfe53a14 + +ResolveAnomaly() + + + +16c9b1ee-9159-4816-92a4-37c149d0233a->9b9909d3-e999-4706-b4de-1c60dfe53a14 + + + + + diff --git a/robowaiter/scene/scene.py b/robowaiter/scene/scene.py index bcf6e01..02c3c80 100644 --- a/robowaiter/scene/scene.py +++ b/robowaiter/scene/scene.py @@ -16,7 +16,7 @@ from robowaiter.proto import GrabSim_pb2_grpc import copy import os -from robowaiter.scene.ui import scene_ui +# from robowaiter.scene.ui import scene_ui from robowaiter.utils import get_root_path from sklearn.cluster import DBSCAN from matplotlib import pyplot as plt @@ -39,7 +39,143 @@ channel = grpc.insecure_channel( animation_step = [4, 5, 7, 3, 3] loc_offset = [-700, -1400] - +objname_en2zh_dic_goal = { +'Customer':'顾客', +'Banana': '香蕉', +'Toothpaste': '牙膏', +'Bread': '面包', +'Softdrink': '盒装饮料', +'Yogurt': '酸奶', +'ADMilk': '安佳牛奶', +'VacuumCup': '真空杯', +'Bernachon': '贝尔纳松', +'BottledDrink': '瓶装饮料', +'PencilVase': '铅笔花瓶', +'Teacup': '茶杯', +'Dictionary': '字典', +'Cake': '蛋糕', +'Stapler': '订书机', +'LunchBox': '午餐盒', +'Bracelet': '手镯', +'CoconutWater': '椰水', +'Walnut': '核桃', +'HamSausage': '火腿肠', +'GlueStick': '胶棒', +'AdhesiveTape': '胶带', +'Calculator': '计算器', +'Chess': '棋', +'Orange': '橙子', +'Glass': '玻璃杯', +'Washbowl': '洗碗盆', +'Durian': '榴莲', +'Gum': '口香糖', +'Towel': '毛巾', +'OrangeJuice': '橙汁', +'Cardcase': '卡包', +'RubikCube': '魔方', +'StickyNotes': '便签', +'NFCJuice': 'NFC果汁', +'SpringWater': '矿泉水', +'Apple': '苹果', +'Coffee': '咖啡', +'Gauze': '纱布', +'Mangosteen': '山竹', +'SesameSeedCake': '芝麻糕', +'Glove': '手套', +'Mouse': '鼠标', +'Kettle': '水壶', +'Atomize': '喷雾器', +'Chips': '薯片', +'SpongeGourd': '丝瓜', +'Garlic': '大蒜', +'Potato': '土豆', +'Tray': '托盘', +'Hemomanometer': '血压计', +'TennisBall': '网球', +'ToyDog': '玩具狗', +'ToyBear': '玩具熊', +'TeaTray': '茶盘', +'Sock': '袜子', +'Scarf': '围巾', +'ToiletPaper': '卫生纸', +'Milk': '牛奶', +'Novel': '小说', +'Watermelon': '西瓜', +'Tomato': '番茄', +'CleansingFoam': '洁面泡沫', +'CoconutMilk': '椰奶', +'SugarlessGum': '无糖口香糖', +'MedicalAdhesiveTape': '医用胶带', +'PaperCup': '纸杯', +'Caddy': '茶匙', +'Date': '日期', +'MilkDrink': '牛奶饮品', +'CocountWater': '椰水', +'AdhensiveTape': '胶带', +'Towl': '毛巾', +'Soap': '肥皂', +'CocountMilk': '椰奶', +'MedicalAdhensiveTape': '医用胶带', +'SourMilkDrink': '酸奶饮品', +'Tissue': '纸巾', +'YogurtDrink': '酸奶饮品', +'Newspaper': '报纸', +'Box': '盒子', +'PaperCupStarbucks': '星巴克纸杯', +'CoffeeMachine': '咖啡机', +'GingerLHand': '机器人左手', +'GingerRHand': '机器人右手', +'Straw': '吸管', +'Door': '门', +'Machine': '机器', +'PackagedCoffee': '包装咖啡', +'CubeSugar': '方糖', +'Spoon': '勺子', +'Drinks': '饮料', +'Drink': '饮料', +'Take-AwayCup': '外带杯', +'Saucer': '茶杯', +'TrashBin': '垃圾桶', +'Knife': '刀', +'Ginger': '姜', +'Floor': '地板', +'Roof': '屋顶', +'Wall': '墙', +'Broom':'扫帚', +'CoffeeCup': '咖啡杯', +'Mug': '马克杯', +'ZhuZi': '著子', +'LaJiTong': '垃圾桶', +'ZaoTai': '灶台', +'Sofa': '沙发', +'ChaTou': '插头', +'Plate': '盘子', +'CoffeeBag': '咖啡袋', +'TuoBu': '拖布', +'KaiGuan': '开关', +'ChaZuo': '插座', +'Sugar': '糖', +'BaTai': '吧台', +'BaoJing': '报警', +'DrinkMachine': '饮料机', +'KongTiao': '空调', +'Desk': '桌子', +'Clip': '夹子', +'TuoPan': '托盘', +'BoJi': '簸箕', +'ZhiBeiHe': '纸杯盒', +'WaterCup': '水杯', +'Chair': '椅子', +'Hand': '手', +'XiGuan': '吸管', +'Container': '容器', +'IceMachine': '制冰机', +'KaoXiang': '烤箱', +'SaoBa': '扫把', +'XiangGui': '香柜', +} +objname_zh2en_dic_goal = dict(zip(objname_en2zh_dic_goal.values(), objname_en2zh_dic_goal.keys())) +# print(objname_zh2eh_dic) def show_image(camera_data): print('------------------show_image----------------------') @@ -66,6 +202,9 @@ class Scene: # camera_interval = 1.5 output_path = os.path.join(os.path.dirname(__file__), "outputs") + objname_en2zh_dic = objname_en2zh_dic_goal + objname_zh2en_dic = objname_zh2en_dic_goal + default_state = { "map": { "2d": None, @@ -124,7 +263,7 @@ class Scene: # 是否展示UI self.show_ui = False # 图像分割 - self.take_picture = False + self.take_picture = True self.map_ratio = 5 self.map_map = np.zeros((math.ceil(950 / self.map_ratio), math.ceil(1850 / self.map_ratio))) self.db = DBSCAN(eps=self.map_ratio, min_samples=int(self.map_ratio / 2)) @@ -880,6 +1019,8 @@ class Scene: scene = self.stub.AddObjects(GrabSim_pb2.ObjectList(objects=obj_list, scene=self.sceneID)) time.sleep(1.0) + + # 实现抓握操作 def grasp_obj(self, obj_id, hand_id=1): print('------------------adjust_joints----------------------') @@ -1142,6 +1283,10 @@ class Scene: def getDistance(self, pos1, pos2): return math.sqrt((pos1[0] - pos2[0]) ** 2 + (pos1[1] - pos2[1]) ** 2) + def getDistanc3D(self, pos1, pos2): + return math.sqrt((pos1[0] - pos2[0]) ** 2 + (pos1[1] - pos2[1]) ** 2+ (pos1[2] - pos2[2]) ** 2) + + def getNearestFrontier(self, cur_pos, frontiers): dis_min = sys.maxsize frontier_best = None @@ -1456,7 +1601,16 @@ class Scene: # plt.text(0, 0.1, f'已存语义信息:{self.infoCount}', fontsize=10) # 元组传参 pyqt5中的函数名, 四个参数 - self.ui_func(("get_info", walker_detect_count, obj_detect_count, update_info_count, self.infoCount)) + # self.ui_func(("get_info", walker_detect_count, obj_detect_count, update_info_count, self.infoCount)) + semantic_info_str="" + semantic_info_str+= f'检测行人数量:{walker_detect_count}'+"\n" + semantic_info_str += f'检测物体数量:{obj_detect_count}' + "\n" + semantic_info_str += f'更新语义信息:{update_info_count}' + "\n" + semantic_info_str += f'已存语义信息:{self.infoCount}' + "\n" + + # print("======semantic_info_str===========") + + self.ui_func(("get_semantic_info", semantic_info_str)) # draw figures diff --git a/robowaiter/scene/ui/pyqt5.py b/robowaiter/scene/ui/pyqt5.py index 05d5041..754db44 100644 --- a/robowaiter/scene/ui/pyqt5.py +++ b/robowaiter/scene/ui/pyqt5.py @@ -1,9 +1,11 @@ import importlib import os +from PyQt5.QtSvg import QGraphicsSvgItem, QSvgWidget from PyQt5.QtWidgets import QApplication, QMainWindow, QListWidgetItem, QGraphicsView, QGraphicsScene, \ - QGraphicsPixmapItem + QGraphicsPixmapItem, QGraphicsProxyWidget from PyQt5.QtCore import QTimer, QPoint, QRectF +from PyQt5 import QtCore import sys from robowaiter.scene.ui.window import Ui_MainWindow @@ -11,7 +13,7 @@ from robowaiter.utils.basic import get_root_path from PyQt5.QtCore import QThread import queue import numpy as np -from PyQt5.QtGui import QImage, QPixmap, QDrag +from PyQt5.QtGui import QImage, QPixmap, QDrag, QPainter from PyQt5.QtCore import Qt from PyQt5.QtCore import QThread, pyqtSignal from robowaiter.scene.ui.scene_ui import SceneUI @@ -56,6 +58,29 @@ def run_scene(scene_cls,robot_cls,scene_queue,ui_queue): # print("Robot system error:", str(e)) example_list = ("AEM","VLN","VLM",'GQA',"OT","AT","reset") +more_example_list = ("VLM_AC","CafeDaily") +dic_more2zh={ + "VLM_AC":"开空调并调节空调温度", + "CafeDaily":"咖啡厅的一天" +} +more_example_list_zh = [value for value in dic_more2zh.values()] + +class GraphicsView(QGraphicsView): + def __init__(self, parent=None): + super(GraphicsView, self).__init__(parent) + self.setRenderHint(QPainter.Antialiasing) + self.setOptimizationFlag(QGraphicsView.DontAdjustForAntialiasing, True) + self.setViewportUpdateMode(QGraphicsView.FullViewportUpdate) + self.setDragMode(QGraphicsView.ScrollHandDrag) + self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + + def wheelEvent(self, event): + factor = 1.15 + if event.angleDelta().y() > 0: + self.scale(factor, factor) + else: + self.scale(1.0 / factor, 1.0 / factor) class UI(QMainWindow, Ui_MainWindow): scene = None @@ -78,6 +103,10 @@ class UI(QMainWindow, Ui_MainWindow): # 绑定说话按钮 self.btn_say.clicked.connect(self.btn_say_on_click) + self.verticalLayout_2.removeWidget(self.img_view_bt) + self.img_view_bt = GraphicsView(self.centralwidget) + self.img_view_bt.setObjectName("img_view_bt") + self.verticalLayout_2.addWidget(self.img_view_bt) self.img_view_bt.setDragMode(QGraphicsView.ScrollHandDrag) @@ -90,12 +119,12 @@ class UI(QMainWindow, Ui_MainWindow): # self.drag_start_position = QPoint() # 记录鼠标按下时的位置 self.cb_task.setCurrentIndex(-1) - self.cb_task.setPlaceholderText("请选择城市") + self.cb_task.setPlaceholderText("请选择更多任务") # 多个添加条目 - self.cb_task.addItems(['Java', 'C#', 'PHP']) + self.cb_task.addItems(more_example_list_zh) # 当下拉索引发生改变时发射信号触发绑定的事件 - self.cb_task.currentIndexChanged.connect(self.selectionchange) + self.cb_task.currentIndexChanged.connect(self.cb_selectionchange) # 绑定任务演示按钮 for example in example_list: @@ -116,24 +145,15 @@ class UI(QMainWindow, Ui_MainWindow): sys.exit(app.exec_()) - def selectionchange(self, i): + def cb_selectionchange(self, i): print(i) - # self.create_example_click(dic[i]) - # 标签用来显示选中的文本 - # currentText():返回选中选项的文本 - # self.btn1.setText(self.cb.currentText()) - # print('Items in the list are:') - # # 输出选项集合中每个选项的索引与对应的内容 - # # count():返回选项集合中的数目 - # for count in range(self.cb.count()): - # print('Item' + str(count) + '=' + self.cb.itemText(count)) - # print('current index', i, 'selection changed', self.cb.currentText()) + self.create_example_click(more_example_list[i])() - def get_info(self, walker_detect_count, obj_detect_count, update_info_count, infoCount): - print(obj_detect_count) - self.textEdit_5.clear() - self.textEdit_5.append(str(obj_detect_count)) - # self.textEdit_5.setText(walker_detect_count + "_" + obj_detect_count + "_" + update_info_count + "_" + infoCount) + def get_semantic_info(self, semantic_info_str): + # self.textEdit_5.clear() + # self.textEdit_5.append(semantic_info_str) + self.textBrowser_5.clear() + self.textBrowser_5.append(semantic_info_str) def new_history(self,customer_name,chat): role = chat["role"] @@ -246,6 +266,17 @@ class UI(QMainWindow, Ui_MainWindow): self.img_view_bt.setScene(scene) pixmap_item = QGraphicsPixmapItem(pixmap) scene.addItem(pixmap_item) + + + # widget = QSvgWidget(file_name) + # # widget.resize(10000, 1600) + # svg_width = widget.width() + # widget.resize(svg_width*2, 1600) + # proxy = QGraphicsProxyWidget() + # proxy.setWidget(widget) + # scene.addItem(+proxy) + + elif control_name == "img_label_obj": return # self.label.setPixmap(pixmap) diff --git a/robowaiter/scene/ui/scene_ui.py b/robowaiter/scene/ui/scene_ui.py index f97b158..b070a3a 100644 --- a/robowaiter/scene/ui/scene_ui.py +++ b/robowaiter/scene/ui/scene_ui.py @@ -10,13 +10,15 @@ import pickle import time import os +from robowaiter.scene.scene import Scene + plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签 plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 from robowaiter.utils import get_root_path root_path = get_root_path() -from robowaiter.scene.scene import Scene + from robowaiter.utils.bt.draw import render_dot_tree @@ -160,20 +162,30 @@ class SceneUI(Scene): self.new_event_list = [ (5, self.customer_say, (0, "请问哪里有空位啊?")), - (13, self.customer_say, (0, "我想坐高凳子。")), + (13, self.customer_say, (0, "我想坐高脚凳子。")), (3, self.customer_say, (0, "你带我去吧。")), - (45, self.control_walker, (0, False, 100, -250, 480, -90)), + (60, self.control_walker, (0, False, 100, -250, 480, -90)), #45 (-1, self.customer_say, (0, "谢谢你!这儿还不错!")), ] def run_VLM(self): + # 场景一 拿放物品 self.gen_obj() + self.state["condition_set"]={'At(Robot,Bar)', 'Is(AC,Off)', + 'Holding(Nothing)', 'Exist(Yogurt)', 'Exist(BottledDrink)', + 'Exist(Softdrink)', + 'Exist(Chips)', 'Exist(NFCJuice)', 'Exist(Bernachon)', 'Exist(ADMilk)', 'Exist(SpringWater)' + 'Exist(VacuumCup)', 'On(VacuumCup,Table2)', + 'Is(HallLight,Off)', 'Is(TubeLight,On)', 'Is(Curtain,On)', + 'Is(Table1,Dirty)', 'Is(Floor,Dirty)', 'Is(Chairs,Dirty)'} + self.add_walkers([[4,1, 880], [31,250, 1200],[6,-55, 750],[10,70, -200],[27,-290, 400, 180],[26, 60,-320,90]]) - self. control_walkers(walker_loc=[[-55, 750], [70, -200], [250, 1200], [0, 880]],is_autowalk = True) + # self.control_walkers(walker_loc=[[-55, 750], [70, -200], [250, 1200], [0, 880]],is_autowalk = True) + self.control_walkers(walker_loc=[[-55, 750]], is_autowalk=True) self.signal_event_list = [ (3, self.add_walker, (20,0,700)), (1, self.control_walker, (6, False,100, 60, 520,0)), - (1, self.customer_say, (6, "给我来份薯片和果汁,我坐在对面的桌子那儿。")), + (1, self.customer_say, (6, "给我来份薯片和果汁,我坐在对面的水杯桌那儿。")), #给我来份薯片和果汁,我坐在对面的桌子那儿。 (5, self.control_walker, (6, False, 100, -250, 480, 0)), ] pass @@ -220,6 +232,26 @@ class SceneUI(Scene): ] pass + + def run_VLM_AC(self): + # 开关空调 + # 场景二 开和调节空调温度 + self.gen_obj() + self.add_walkers([[4,1, 880], [31,250, 1200],[6,-55, 750],[10,70, -200],[27,-290, 400, 180],[26, 60,-320,90]]) + self.control_walkers(walker_loc=[[-55, 750]],is_autowalk = True) + self.signal_event_list = [ + (3, self.add_walker, (0,0,700)), + (1, self.control_walker, (6, False,100, 60, 520,0)), #[walkerID,autowalk,speed,X,Y,Yaw] + (2, self.customer_say, (6, "好热呀,想开空调,想要温度调低点!")), + (6, self.control_walker, (6, False, 200, 60, 80, 0)), + (-1, self.customer_say, (6, "谢谢!这下凉快了!")), #(-100,600) + ] + pass + + def run_CafeDaily(self): + pass + + def run_reset(self): pass @@ -232,8 +264,9 @@ class SceneUI(Scene): self.draw_current_bt() def draw_current_bt(self): - render_dot_tree(self.robot.bt.root,target_directory=self.output_path,name="current_bt") + render_dot_tree(self.robot.bt.root,target_directory=self.output_path,name="current_bt",png_only=True) self.ui_queue.put(('draw_from_file',"img_view_bt", f"{self.output_path}/current_bt.png")) + # self.ui_queue.put(('draw_from_file', "img_view_bt", f"{self.output_path}/current_bt.svg")) def ui_func(self,args): # _,_,output_path = args diff --git a/robowaiter/scene/ui/window.py b/robowaiter/scene/ui/window.py index 6bc8b79..9d5c4d9 100644 --- a/robowaiter/scene/ui/window.py +++ b/robowaiter/scene/ui/window.py @@ -2,7 +2,7 @@ # Form implementation generated from reading ui file 'window.ui' # -# Created by: PyQt5 UI code generator 5.15.7 +# Created by: PyQt5 UI code generator 5.15.10 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. @@ -101,45 +101,6 @@ class Ui_MainWindow(object): self.gridLayout_3.addLayout(self.verticalLayout_2, 1, 0, 1, 1) self.gridLayout_2 = QtWidgets.QGridLayout() self.gridLayout_2.setObjectName("gridLayout_2") - self.horizontalLayout_5 = QtWidgets.QHBoxLayout() - self.horizontalLayout_5.setObjectName("horizontalLayout_5") - self.img_label_map = QtWidgets.QLabel(self.centralwidget) - self.img_label_map.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.img_label_map.sizePolicy().hasHeightForWidth()) - self.img_label_map.setSizePolicy(sizePolicy) - self.img_label_map.setMinimumSize(QtCore.QSize(345, 200)) - self.img_label_map.setStyleSheet("border: 2px solid black;") - self.img_label_map.setText("") - self.img_label_map.setObjectName("img_label_map") - self.horizontalLayout_5.addWidget(self.img_label_map) - self.img_label_seg = QtWidgets.QLabel(self.centralwidget) - self.img_label_seg.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.img_label_seg.sizePolicy().hasHeightForWidth()) - self.img_label_seg.setSizePolicy(sizePolicy) - self.img_label_seg.setMinimumSize(QtCore.QSize(250, 200)) - self.img_label_seg.setStyleSheet("border: 2px solid black;") - self.img_label_seg.setText("") - self.img_label_seg.setObjectName("img_label_seg") - self.horizontalLayout_5.addWidget(self.img_label_seg) - self.img_label_obj = QtWidgets.QLabel(self.centralwidget) - self.img_label_obj.setEnabled(True) - sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - sizePolicy.setHeightForWidth(self.img_label_obj.sizePolicy().hasHeightForWidth()) - self.img_label_obj.setSizePolicy(sizePolicy) - self.img_label_obj.setMinimumSize(QtCore.QSize(250, 200)) - self.img_label_obj.setStyleSheet("border: 2px solid black;") - self.img_label_obj.setText("") - self.img_label_obj.setObjectName("img_label_obj") - self.horizontalLayout_5.addWidget(self.img_label_obj) - self.gridLayout_2.addLayout(self.horizontalLayout_5, 1, 0, 1, 1) self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setContentsMargins(0, -1, -1, -1) self.horizontalLayout_4.setSpacing(0) @@ -184,14 +145,92 @@ class Ui_MainWindow(object): self.label_8.setObjectName("label_8") self.horizontalLayout_4.addWidget(self.label_8) self.gridLayout_2.addLayout(self.horizontalLayout_4, 0, 0, 1, 1) + self.horizontalLayout_5 = QtWidgets.QHBoxLayout() + self.horizontalLayout_5.setObjectName("horizontalLayout_5") + self.img_label_map = QtWidgets.QLabel(self.centralwidget) + self.img_label_map.setEnabled(True) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.img_label_map.sizePolicy().hasHeightForWidth()) + self.img_label_map.setSizePolicy(sizePolicy) + self.img_label_map.setMinimumSize(QtCore.QSize(345, 200)) + self.img_label_map.setStyleSheet("border: 2px solid black;") + self.img_label_map.setText("") + self.img_label_map.setObjectName("img_label_map") + self.horizontalLayout_5.addWidget(self.img_label_map) + self.img_label_seg = QtWidgets.QLabel(self.centralwidget) + self.img_label_seg.setEnabled(True) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.img_label_seg.sizePolicy().hasHeightForWidth()) + self.img_label_seg.setSizePolicy(sizePolicy) + self.img_label_seg.setMinimumSize(QtCore.QSize(250, 200)) + self.img_label_seg.setStyleSheet("border: 2px solid black;") + self.img_label_seg.setText("") + self.img_label_seg.setObjectName("img_label_seg") + self.horizontalLayout_5.addWidget(self.img_label_seg) + self.img_label_obj = QtWidgets.QLabel(self.centralwidget) + self.img_label_obj.setEnabled(True) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.img_label_obj.sizePolicy().hasHeightForWidth()) + self.img_label_obj.setSizePolicy(sizePolicy) + self.img_label_obj.setMinimumSize(QtCore.QSize(250, 200)) + self.img_label_obj.setStyleSheet("border: 2px solid black;") + self.img_label_obj.setText("") + self.img_label_obj.setObjectName("img_label_obj") + self.horizontalLayout_5.addWidget(self.img_label_obj) + self.gridLayout_2.addLayout(self.horizontalLayout_5, 1, 0, 1, 1) self.gridLayout_3.addLayout(self.gridLayout_2, 0, 0, 1, 1) self.gridLayout.addLayout(self.gridLayout_3, 6, 0, 1, 3) self.verticalLayout_3 = QtWidgets.QVBoxLayout() self.verticalLayout_3.setObjectName("verticalLayout_3") - self.textEdit_5 = QtWidgets.QTextEdit(self.centralwidget) - self.textEdit_5.setObjectName("textEdit_5") - self.verticalLayout_3.addWidget(self.textEdit_5) + self.textBrowser_5 = QtWidgets.QTextBrowser(self.centralwidget) + font = QtGui.QFont() + font.setFamily("黑体") + font.setPointSize(13) + font.setBold(False) + font.setWeight(50) + self.textBrowser_5.setFont(font) + self.textBrowser_5.setLayoutDirection(QtCore.Qt.LeftToRight) + self.textBrowser_5.setStyleSheet("text-align:center;") + self.textBrowser_5.setMarkdown("") + self.textBrowser_5.setObjectName("textBrowser_5") + self.verticalLayout_3.addWidget(self.textBrowser_5) self.gridLayout.addLayout(self.verticalLayout_3, 5, 0, 1, 1) + self.label_9 = QtWidgets.QLabel(self.centralwidget) + font = QtGui.QFont() + font.setFamily("等线") + font.setPointSize(10) + font.setBold(True) + font.setWeight(75) + self.label_9.setFont(font) + self.label_9.setObjectName("label_9") + self.gridLayout.addWidget(self.label_9, 0, 0, 1, 1) + self.btn_say = QtWidgets.QPushButton(self.centralwidget) + font = QtGui.QFont() + font.setFamily("黑体") + font.setPointSize(14) + self.btn_say.setFont(font) + self.btn_say.setObjectName("btn_say") + self.gridLayout.addWidget(self.btn_say, 0, 2, 1, 1) + self.edit_say = QtWidgets.QLineEdit(self.centralwidget) + font = QtGui.QFont() + font.setFamily("Times New Roman") + font.setPointSize(14) + self.edit_say.setFont(font) + self.edit_say.setObjectName("edit_say") + self.gridLayout.addWidget(self.edit_say, 0, 1, 1, 1) + self.label = QtWidgets.QLabel(self.centralwidget) + font = QtGui.QFont() + font.setFamily("黑体") + font.setPointSize(14) + self.label.setFont(font) + self.label.setObjectName("label") + self.gridLayout.addWidget(self.label, 4, 0, 1, 1) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.btn_reset = QtWidgets.QPushButton(self.centralwidget) @@ -250,42 +289,16 @@ class Ui_MainWindow(object): sizePolicy.setHeightForWidth(self.cb_task.sizePolicy().hasHeightForWidth()) self.cb_task.setSizePolicy(sizePolicy) self.cb_task.setMinimumSize(QtCore.QSize(0, 25)) + font = QtGui.QFont() + font.setFamily("黑体") + font.setPointSize(14) + self.cb_task.setFont(font) self.cb_task.setEditable(True) self.cb_task.setCurrentText("") self.cb_task.setInsertPolicy(QtWidgets.QComboBox.InsertAtBottom) self.cb_task.setObjectName("cb_task") self.verticalLayout.addWidget(self.cb_task) self.gridLayout.addLayout(self.verticalLayout, 1, 0, 1, 1) - self.label_9 = QtWidgets.QLabel(self.centralwidget) - font = QtGui.QFont() - font.setFamily("等线") - font.setPointSize(10) - font.setBold(True) - font.setWeight(75) - self.label_9.setFont(font) - self.label_9.setObjectName("label_9") - self.gridLayout.addWidget(self.label_9, 0, 0, 1, 1) - self.btn_say = QtWidgets.QPushButton(self.centralwidget) - font = QtGui.QFont() - font.setFamily("黑体") - font.setPointSize(14) - self.btn_say.setFont(font) - self.btn_say.setObjectName("btn_say") - self.gridLayout.addWidget(self.btn_say, 0, 2, 1, 1) - self.label = QtWidgets.QLabel(self.centralwidget) - font = QtGui.QFont() - font.setFamily("黑体") - font.setPointSize(14) - self.label.setFont(font) - self.label.setObjectName("label") - self.gridLayout.addWidget(self.label, 4, 0, 1, 1) - self.edit_say = QtWidgets.QLineEdit(self.centralwidget) - font = QtGui.QFont() - font.setFamily("Times New Roman") - font.setPointSize(14) - self.edit_say.setFont(font) - self.edit_say.setObjectName("edit_say") - self.gridLayout.addWidget(self.edit_say, 0, 1, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") @@ -311,6 +324,15 @@ class Ui_MainWindow(object): self.label_6.setText(_translate("MainWindow", "可达性地图")) self.label_7.setText(_translate("MainWindow", "实例分割")) self.label_8.setText(_translate("MainWindow", "目标检测")) + self.textBrowser_5.setHtml(_translate("MainWindow", "\n" +"\n" +"


")) + self.label_9.setText(_translate("MainWindow", "任务演示:(播放动画时需等待动画播放完毕才会重置场景)")) + self.btn_say.setText(_translate("MainWindow", "说话")) + self.edit_say.setText(_translate("MainWindow", "Is(AC,On)")) + self.label.setText(_translate("MainWindow", "语义信息")) self.btn_reset.setText(_translate("MainWindow", "重置场景")) self.btn_AEM.setText(_translate("MainWindow", "环境主动探索")) self.btn_VLN.setText(_translate("MainWindow", "视觉语言导航")) @@ -319,10 +341,6 @@ class Ui_MainWindow(object): self.btn_OT.setText(_translate("MainWindow", "开放具身任务")) self.btn_AT.setText(_translate("MainWindow", "自主具身任务")) self.cb_task.setPlaceholderText(_translate("MainWindow", "其他任务")) - self.label_9.setText(_translate("MainWindow", "任务演示:(播放动画时需等待动画播放完毕才会重置场景)")) - self.btn_say.setText(_translate("MainWindow", "说话")) - self.label.setText(_translate("MainWindow", "语义信息")) - self.edit_say.setText(_translate("MainWindow", "Is(AC,On)")) if __name__ == "__main__": diff --git a/robowaiter/scene/ui/window.ui b/robowaiter/scene/ui/window.ui index 6e34ef4..1372957 100644 --- a/robowaiter/scene/ui/window.ui +++ b/robowaiter/scene/ui/window.ui @@ -153,85 +153,6 @@ - - - - - - true - - - - 0 - 0 - - - - - 345 - 200 - - - - border: 2px solid black; - - - - - - - - - - true - - - - 0 - 0 - - - - - 250 - 200 - - - - border: 2px solid black; - - - - - - - - - - true - - - - 0 - 0 - - - - - 250 - 200 - - - - border: 2px solid black; - - - - - - - - @@ -317,6 +238,85 @@ + + + + + + true + + + + 0 + 0 + + + + + 345 + 200 + + + + border: 2px solid black; + + + + + + + + + + true + + + + 0 + 0 + + + + + 250 + 200 + + + + border: 2px solid black; + + + + + + + + + + true + + + + 0 + 0 + + + + + 250 + 200 + + + + border: 2px solid black; + + + + + + + + @@ -324,10 +324,89 @@ - + + + + 黑体 + 13 + 50 + false + + + + Qt::LeftToRight + + + text-align:center; + + + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'黑体'; font-size:13pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><br /></p></body></html> + + + + + + + 等线 + 10 + 75 + true + + + + 任务演示:(播放动画时需等待动画播放完毕才会重置场景) + + + + + + + + 黑体 + 14 + + + + 说话 + + + + + + + + Times New Roman + 14 + + + + Is(AC,On) + + + + + + + + 黑体 + 14 + + + + 语义信息 + + + @@ -435,6 +514,12 @@ 25 + + + 黑体 + 14 + + true @@ -454,60 +539,6 @@ - - - - - 等线 - 10 - 75 - true - - - - 任务演示:(播放动画时需等待动画播放完毕才会重置场景) - - - - - - - - 黑体 - 14 - - - - 说话 - - - - - - - - 黑体 - 14 - - - - 语义信息 - - - - - - - - Times New Roman - 14 - - - - Is(AC,On) - - - diff --git a/robowaiter/utils/draw_bt/Default.ptml b/robowaiter/utils/draw_bt/Default.ptml index 55a6f88..d5ec102 100644 --- a/robowaiter/utils/draw_bt/Default.ptml +++ b/robowaiter/utils/draw_bt/Default.ptml @@ -1,10 +1,26 @@ +selector{ +cond On(Yogurt,Bar) sequence{ -cond Holding(Nothing) -sequence{ -cond Is(Curtain,Off) -act Turn(Curtain,On) +cond Holding(Yogurt) + cond At(Robot,Bar) +act PutDown(Yogurt,Bar) } sequence{ -cond Is(AC,Off) -act Turn(AC,On) -}} \ No newline at end of file +cond Holding(Yogurt) +act MoveTo(Bar) +} +sequence{ +cond Holding(Nothing) + cond At(Robot,Yogurt) +act PickUp(Yogurt) +} +sequence{ +cond At(Robot,Yogurt) +act FreeHands() +} +sequence{ +cond Holding(Nothing) + cond Exist(Yogurt) +act MoveTo(Yogurt) +} +} diff --git a/robowaiter/utils/draw_bt/Default_bracket.ptml b/robowaiter/utils/draw_bt/Default_bracket.ptml index 844db49..7eed65e 100644 --- a/robowaiter/utils/draw_bt/Default_bracket.ptml +++ b/robowaiter/utils/draw_bt/Default_bracket.ptml @@ -1,29 +1,38 @@ -selector +Selector { - sequence + cond On(Yogurt,Bar) + Sequence { - cond Chatting() - act DealChat() - } sequence + cond Holding(Yogurt) + cond At(Robot,Bar) + act PutDown(Yogurt,Bar) + } Sequence { - cond HasSubTask() - sequence + cond Holding(Yogurt) + act MoveTo(Bar) + } Sequence { - act SubTaskPlaceHolder() - } } sequence + cond Holding(Nothing) + cond At(Robot,Yogurt) + cond At(Robot,Bar) + act PickUp(Yogurt) + } Sequence { - cond FocusingCustomer() - act ServeCustomer() - } sequence + cond Holding(Nothing) + cond At(Robot,Yogurt) + act PickUp(Yogurt) + } Sequence { - cond NewCustomer() - selector + cond At(Robot,Yogurt) + cond At(Robot,Bar) + act FreeHands() + } Sequence { - cond At(Robot,Bar) - act MoveTo(Bar) - } act GreetCustomer() - } sequence + cond At(Robot,Yogurt) + act FreeHands() + } Sequence { - cond AnomalyDetected() - act ResolveAnomaly() + cond Holding(Nothing) + cond Exist(Yogurt) + act MoveTo(Yogurt) }} \ No newline at end of file diff --git a/robowaiter/utils/draw_bt/test.png b/robowaiter/utils/draw_bt/test.png index 15a3183..dce3fe0 100644 Binary files a/robowaiter/utils/draw_bt/test.png and b/robowaiter/utils/draw_bt/test.png differ diff --git a/tasks_no_ui/OT/Open_tasks_test.py b/tasks_no_ui/OT/Open_tasks_test.py index 996c28a..a49796c 100644 --- a/tasks_no_ui/OT/Open_tasks_test.py +++ b/tasks_no_ui/OT/Open_tasks_test.py @@ -18,7 +18,32 @@ class SceneOT(Scene): super().__init__(robot) # 在这里加入场景中发生的事件 self.signal_event_list = [ - (3, self.customer_say, ("System", "冰红茶")), + # (3, self.customer_say, ("System", "有多少盒装饮料")), + # (3, self.customer_say, ("System", "桌子有几张")), + # (3, self.customer_say, ("System", "你们这儿有军棋吗")), + # (3, self.customer_say, ("System", "军棋有几个")), + # (3, self.customer_say, ("System", "有几把椅子呀")), + # (3, self.customer_say, ("System", "有多少顾客")), + # (3, self.customer_say, ("System", "你们这儿有多少军棋")), + + # (3, self.customer_say, ("System", "哪里有盒装饮料?")), + # (3, self.customer_say, ("System", "洗手间在哪里?")),卫生间 + # (3, self.customer_say, ("System", "卫生间在哪里?")), + + # (3, self.customer_say, ("System", "你们这里有棋吗,在哪里")), + + # (3, self.customer_say, ("System", "有几副棋")), + # (3, self.customer_say, ("System", "我的手镯,你有看到吗")), + # (3, self.customer_say, ("System", "你们这有小说吗?")), + # (3, self.customer_say, ("System", "我昨天保温杯落在你们咖啡厅了,你看到了吗?")), + # (3, self.customer_say, ("System", "你们这有魔方吗?")), + # (3, self.customer_say, ("System", "垃圾桶在哪呀?")), + + # (3, self.customer_say, ("System", "这有小说吗?在哪里")), + + + # (3, self.customer_say, ("System", "把盒装冰红茶放到水桌")), + # (3, self.customer_say, ("System", "冰红茶")), # (3, self.customer_say, ("System", "酸奶。")), # (3, self.customer_say, ("System","来一号桌")), # (-1, self.customer_say, ("System","回去吧")), @@ -30,7 +55,7 @@ class SceneOT(Scene): # ] def _reset(self): - # self.add_walkers([[0, 880], [250, 1200]]) + self.add_walkers([[0, 880], [250, 1200]]) self.gen_obj() pass