更新了工具调用
This commit is contained in:
parent
2e4d563aad
commit
4cf4726e57
|
@ -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)"}
|
|
@ -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),
|
||||
|
|
|
@ -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<min_dis:
|
||||
# min_dis = dis
|
||||
# obj_id = id
|
||||
# near_object = obji.name
|
||||
#
|
||||
# near_object = f"{obj}在{self.scene.objname_en2zh_dic[near_object]}附近"
|
||||
|
||||
# 直接输出在哪个桌子上
|
||||
min_dis = float('inf')
|
||||
table_name = -1
|
||||
near_object = None
|
||||
for key,values in self.place_have_obj_xyz_dic.items():
|
||||
dis = self.scene.getDistanc3D(values,(objx, objy, objz))
|
||||
if dis<min_dis:
|
||||
min_dis = dis
|
||||
table_name = key
|
||||
# near_object = f"{obj}在{self.place_en2zh_name[table_name]}附近"
|
||||
# near_object = self.place_en2zh_name[table_name]
|
||||
near_object = obj + "在" + self.place_en2zh_name[table_name] +"附近"
|
||||
# near_object = self.place_en2zh_name[table_name]
|
||||
# near_object = "在" + self.place_en2zh_name[table_name] + "附近"
|
||||
return near_object
|
||||
|
||||
|
||||
|
||||
|
||||
# def find_location(self, **args):
|
||||
# try:
|
||||
# location = args['obj']
|
||||
# self.function_success = True
|
||||
# except:
|
||||
# obj = None
|
||||
# print("参数解析错误")
|
||||
#
|
||||
# # 场景中现有物品
|
||||
# cur_things = set()
|
||||
# for item in self.scene.status.objects:
|
||||
# cur_things.add(item.name)
|
||||
# # obj与现有物品进行相似度匹配
|
||||
# query_token = nlp(obj)
|
||||
# for w in cur_things:
|
||||
# d = {"保温杯": "二号桌子"}
|
||||
# if location in d.keys():
|
||||
# result = d[obj]
|
||||
# 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)
|
||||
# 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:
|
||||
# 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"]
|
||||
|
|
|
@ -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"}))
|
||||
|
|
|
@ -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";
|
||||
}
|
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 88 KiB |
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
|
||||
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
|
||||
"p, li { white-space: pre-wrap; }\n"
|
||||
"</style></head><body style=\" font-family:\'黑体\'; font-size:13pt; font-weight:400; font-style:normal;\">\n"
|
||||
"<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>"))
|
||||
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__":
|
||||
|
|
|
@ -153,85 +153,6 @@
|
|||
</item>
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QLabel" name="img_label_map">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>345</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: 2px solid black;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="img_label_seg">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: 2px solid black;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="img_label_obj">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: 2px solid black;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<property name="spacing">
|
||||
|
@ -317,6 +238,85 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QLabel" name="img_label_map">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>345</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: 2px solid black;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="img_label_seg">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: 2px solid black;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="img_label_obj">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>250</width>
|
||||
<height>200</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border: 2px solid black;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -324,10 +324,89 @@
|
|||
<item row="5" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QTextEdit" name="textEdit_5"/>
|
||||
<widget class="QTextBrowser" name="textBrowser_5">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>黑体</family>
|
||||
<pointsize>13</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">text-align:center;</string>
|
||||
</property>
|
||||
<property name="markdown">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="html">
|
||||
<string><!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></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>等线</family>
|
||||
<pointsize>10</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>任务演示:(播放动画时需等待动画播放完毕才会重置场景)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="btn_say">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>黑体</family>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>说话</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="edit_say">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Times New Roman</family>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Is(AC,On)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>黑体</family>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>语义信息</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
|
@ -435,6 +514,12 @@
|
|||
<height>25</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>黑体</family>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="editable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
|
@ -454,60 +539,6 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>等线</family>
|
||||
<pointsize>10</pointsize>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>任务演示:(播放动画时需等待动画播放完毕才会重置场景)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="btn_say">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>黑体</family>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>说话</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>黑体</family>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>语义信息</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="edit_say">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Times New Roman</family>
|
||||
<pointsize>14</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Is(AC,On)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
|
|
|
@ -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)
|
||||
}}
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}}
|
Binary file not shown.
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 101 KiB |
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue