修复serve逻辑
This commit is contained in:
parent
44cf57f544
commit
5b9526b5d0
|
@ -17,8 +17,8 @@ class DealChat(Act):
|
|||
self.func_map = {
|
||||
"create_sub_task": self.create_sub_task,
|
||||
"stop_serve": self.stop_serve,
|
||||
# "get_object_info": self.get_object_info,
|
||||
# "find_location": self.find_location
|
||||
"get_object_info": self.get_object_info,
|
||||
"find_location": self.find_location
|
||||
}
|
||||
|
||||
def _update(self) -> ptree.common.Status:
|
||||
|
@ -64,17 +64,22 @@ class DealChat(Act):
|
|||
|
||||
self.scene.robot.expand_sub_task_tree(goal_set)
|
||||
|
||||
# def get_object_info(self,**args):
|
||||
# try:
|
||||
# obj = args['obj']
|
||||
#
|
||||
# self.function_success = True
|
||||
# except:
|
||||
# obj = None
|
||||
# print("参数解析错误")
|
||||
#
|
||||
# near_object = "None"
|
||||
#
|
||||
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
|
||||
|
||||
# max_similarity = 0.02
|
||||
# similar_word = None
|
||||
#
|
||||
|
@ -101,32 +106,37 @@ class DealChat(Act):
|
|||
#
|
||||
# return near_object
|
||||
#
|
||||
# def find_location(self, **args):
|
||||
# try:
|
||||
# location = args['obj']
|
||||
# self.function_success = True
|
||||
# except:
|
||||
# obj = None
|
||||
# print("参数解析错误")
|
||||
#
|
||||
# near_location = None
|
||||
# # 用户咨询的地点
|
||||
# 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:
|
||||
# mp = list(self.scene.loc_map_en[similar_word])
|
||||
# near_location = random.choice(mp)
|
||||
# return near_location
|
||||
def find_location(self, **args):
|
||||
try:
|
||||
location = args['obj']
|
||||
self.function_success = True
|
||||
except:
|
||||
obj = None
|
||||
print("参数解析错误")
|
||||
|
||||
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:
|
||||
# mp = list(self.scene.loc_map_en[similar_word])
|
||||
# near_location = random.choice(mp)
|
||||
# return near_location
|
||||
|
||||
def stop_serve(self,**args):
|
||||
customer = self.scene.state["attention"]["customer"]
|
||||
|
|
|
@ -9,7 +9,13 @@ class DelSubTree(Act):
|
|||
super().__init__(*args)
|
||||
|
||||
def _update(self) -> ptree.common.Status:
|
||||
self.scene.state["attention"] = {}
|
||||
# self.scene.state["attention"] = {}
|
||||
if "customer" in self.scene.state["attention"]:
|
||||
customer = self.scene.state["attention"]["customer"]
|
||||
serve_state = self.scene.state["serve_state"][customer]
|
||||
|
||||
serve_state['last_chat_time'] = self.scene.time
|
||||
|
||||
|
||||
sub_task_tree = self.parent
|
||||
self.scene.sub_task_seq.children.remove(sub_task_tree)
|
||||
|
|
|
@ -21,10 +21,19 @@ class ServeCustomer(Act):
|
|||
# self.chat_bubble
|
||||
|
||||
customer = self.scene.state["attention"]["customer"]
|
||||
if customer not in self.scene.state["serve_state"]:
|
||||
self.scene.state["serve_state"][customer] = {
|
||||
"last_chat_time": self.scene.time,
|
||||
"served": False
|
||||
}
|
||||
|
||||
serve_state = self.scene.state["serve_state"][customer]
|
||||
|
||||
if self.scene.time - serve_state['last_chat_time'] > 3:
|
||||
serve_state['served'] = True
|
||||
del self.scene.state["attention"]["customer"]
|
||||
goal = Act.place_xyz_dic['Bar']
|
||||
self.scene.walk_to(goal[0] - 5, goal[1], 180, 180, 0)
|
||||
|
||||
# goal = Act.place_xyz_dic['Bar']
|
||||
# self.scene.walk_to(goal[0]-5,goal[1], 180, 180, 0)
|
||||
|
|
|
@ -20,6 +20,9 @@ class CustomerChatting(Cond):
|
|||
if name == attention_customer:
|
||||
return ptree.common.Status.SUCCESS
|
||||
else:
|
||||
# self.scene.chat_bubble("请稍等一下") # 机器人输出对话
|
||||
# self.scene.wait_history.add(sentence)
|
||||
|
||||
return ptree.common.Status.FAILURE
|
||||
else:
|
||||
self.scene.state["attention"]["customer"] = name
|
||||
|
|
|
@ -22,7 +22,7 @@ class NewCustomerComing(Cond):
|
|||
for walker in scene.walkers:
|
||||
x, y, yaw = walker.pose.X, walker.pose.Y, walker.pose.Yaw
|
||||
# 到达一定区域就打招呼
|
||||
if y >= 510 and y <= 530 and x >= 50 and x <= 70 and yaw>=-10 and yaw <=10: #450-620
|
||||
if y >= 450 and y <= 620 and x >= 40 and x <= 100 and yaw>=-10 and yaw <=10: #450-620
|
||||
# close_to_bar = True
|
||||
queue_list.append((x,y,walker.name))
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ create_sub_task
|
|||
我昨天保温杯好像落在你们咖啡厅了,你看到了吗?
|
||||
是的,我有印象,保温杯在大厅的2号桌子上。
|
||||
get_object_info
|
||||
{"obj":"2号桌子"}
|
||||
{"obj":"保温杯"}
|
||||
|
||||
|
||||
给我来份午餐套餐。
|
||||
|
|
|
@ -75,7 +75,8 @@ class Scene:
|
|||
"greeted_customers":set(),
|
||||
"attention":{},
|
||||
"serve_state":{},
|
||||
"chat_history":{}
|
||||
"chat_history":{},
|
||||
"wait_history":set()
|
||||
}
|
||||
"""
|
||||
status:
|
||||
|
@ -106,6 +107,7 @@ class Scene:
|
|||
self.robot = robot
|
||||
|
||||
self.robot_changed = False
|
||||
self.last_event_time = 0
|
||||
|
||||
# 1-7 正常执行, 8-10 控灯操作移动到6, 11-12窗帘操作不需要移动,
|
||||
self.op_dialog = ["","制作咖啡","倒水","夹点心","拖地","擦桌子","开筒灯","搬椅子", # 1-7
|
||||
|
@ -200,13 +202,15 @@ class Scene:
|
|||
if t < 0: #一直等待机器人行动,直到机器人无行动
|
||||
if self.robot_changed:
|
||||
return
|
||||
if t > 0:
|
||||
time.sleep(t)
|
||||
if (t >= 0) and (self.time - self.last_event_time < t):
|
||||
return
|
||||
|
||||
print(f'event: {t}, {func.__name__}')
|
||||
self.signal_event_list.pop(0)
|
||||
self.last_event_time = self.time
|
||||
func(*args)
|
||||
|
||||
|
||||
def deal_event(self):
|
||||
if len(self.event_list)>0:
|
||||
next_event = self.event_list[0]
|
||||
|
|
|
@ -25,11 +25,11 @@ class SceneVLM(Scene):
|
|||
self.signal_event_list = [
|
||||
|
||||
# 场景1:带小女孩找阳光下的空位
|
||||
# (3, self.add_walker, (5, 230, 1200)),
|
||||
# (1, self.control_walker, (0, False, 200, 60, 520, 0)),
|
||||
# (9, self.customer_say, (0, "早上好呀,我想找个能晒太阳的地方。")),
|
||||
# (-1, self.customer_say, (0,"可以带我过去嘛?")),
|
||||
# (0, self.control_walker, (0, False, 50, 140, 1200, 180)), # 小女孩站在了 BrightTable1 旁边就餐啦
|
||||
(3, self.add_walker, (5, 230, 1200)),
|
||||
(1, self.control_walker, (0, False, 200, 60, 520, 0)),
|
||||
(9, self.customer_say, (0, "早上好呀,我想找个能晒太阳的地方。")),
|
||||
(-1, self.customer_say, (0,"可以带我过去嘛?")),
|
||||
(0, self.control_walker, (0, False, 50, 140, 1200, 180)), # 小女孩站在了 BrightTable1 旁边就餐啦
|
||||
|
||||
# 场景2:有个胖胖男人点单交流并要咖啡,帮他送去角落的桌子
|
||||
# (3, self.add_walker, (5, 230, 1200)), # 小女孩
|
||||
|
|
|
@ -28,18 +28,21 @@ class SceneOT(Scene):
|
|||
# self.add_walkers([[0, 880], [250, 1200]])
|
||||
|
||||
# 展示顾客,前8个id是小孩,后面都是大人
|
||||
for i in range(4):
|
||||
for i in range(20):
|
||||
self.add_walker(i,50,300 + i * 50)
|
||||
name1 = self.walker_index2mem(1)
|
||||
name2 = self.walker_index2mem(3)
|
||||
|
||||
self.remove_walker(0,2)
|
||||
|
||||
index1 = self.state["customer_mem"][name1]
|
||||
index2 = self.state["customer_mem"][name2]
|
||||
|
||||
self.walker_bubble(name1,f"我是第{index1}个")
|
||||
self.walker_bubble(name2,f"我是第{index2}个")
|
||||
for w in self.status.walkers:
|
||||
print(w.name)
|
||||
# name1 = self.walker_index2mem(1)
|
||||
# name2 = self.walker_index2mem(3)
|
||||
#
|
||||
# self.remove_walker(0,2)
|
||||
#
|
||||
# index1 = self.state["customer_mem"][name1]
|
||||
# index2 = self.state["customer_mem"][name2]
|
||||
#
|
||||
# self.walker_bubble(name1,f"我是第{index1}个")
|
||||
# self.walker_bubble(name2,f"我是第{index2}个")
|
||||
|
||||
def _run(self):
|
||||
pass
|
||||
|
|
Loading…
Reference in New Issue