修复括号不匹配的bug

This commit is contained in:
wuziji 2023-11-13 11:53:50 +08:00
parent 3f1f8d9d06
commit ed5b99e69b
9 changed files with 39 additions and 48 deletions

View File

@ -34,6 +34,7 @@ def load(scene, ptml_path: str, behaviour_lib_path: str):
# noting fault, go next # noting fault, go next
ptml_path = format_trans_to_bracket(ptml_path) ptml_path = format_trans_to_bracket(ptml_path)
# print(ptml_path)
input_stream = FileStream(ptml_path, encoding="utf-8") input_stream = FileStream(ptml_path, encoding="utf-8")
lexer = Lexer(input_stream) lexer = Lexer(input_stream)
@ -43,9 +44,8 @@ def load(scene, ptml_path: str, behaviour_lib_path: str):
walker = ParseTreeWalker() walker = ParseTreeWalker()
sys.path.append(os.path.join(behaviour_lib_path, "cond"))
sys.path.append(os.path.join(behaviour_lib_path,"cond")) sys.path.append(os.path.join(behaviour_lib_path, "act"))
sys.path.append(os.path.join(behaviour_lib_path,"act"))
ptml = ptmlTranslator(scene, behaviour_lib_path) # listener mode ptml = ptmlTranslator(scene, behaviour_lib_path) # listener mode
walker.walk(ptml, tree) walker.walk(ptml, tree)
@ -75,8 +75,7 @@ def format_trans_to_bracket(file_path: str) -> str:
if "{" in f: if "{" in f:
return file_path return file_path
def counter_(input: str) -> int:
def counter_(input:str) -> int:
length = 0 length = 0
for i in range(len(input)): for i in range(len(input)):
if input[i] == ' ': if input[i] == ' ':
@ -86,7 +85,6 @@ def format_trans_to_bracket(file_path: str) -> str:
raise TabError('Tab length in ptml file should be 4.') raise TabError('Tab length in ptml file should be 4.')
return length return length
with open(file_path, 'r') as file: with open(file_path, 'r') as file:
ptml_new = '' ptml_new = ''
ptml_tab = file.readlines() ptml_tab = file.readlines()
@ -110,9 +108,9 @@ def format_trans_to_bracket(file_path: str) -> str:
ptml_new += '}' ptml_new += '}'
import re import re
new_path = re.sub('/[a-zA-Z0-9_]*\.ptml', '/bracket_ptml.ptml',file_path) new_path = re.sub('\\\[a-zA-Z0-9_]*\.ptml', '/bracket_ptml.ptml', file_path)
with open(new_path, 'w+') as file: with open(new_path, 'w+') as file:
file.write(ptml_new) file.write(ptml_new)
return new_path return new_path
# format_trans_to_bracket('/home/wu/RoboWaiter/robowaiter/behavior_tree/ptml/test/tab_test.ptml') # format_trans_to_bracket('C:\\Users\\Estrella\\Desktop\\RoboWaiter\\robowaiter\\behavior_tree\\ptml\\test\\Default.ptml')

View File

@ -9,4 +9,4 @@ selector
cond HasSubTask() cond HasSubTask()
sequence sequence
cond At(Robot,Table) cond At(Robot,Table)
cond At(Robot,Table) // cond At(Robot,Table)

View File

@ -1,6 +1,11 @@
selector selector
{ {
sequence selector
{
cond HasMap()
act ExploreEnv()
} sequence
{ {
cond Chatting() cond Chatting()
act DealChat() act DealChat()
@ -10,6 +15,6 @@ selector
cond HasSubTask() cond HasSubTask()
sequence sequence
{ {
act SubTaskPlaceHolder() cond At(Robot,Table)
} cond At(Talb,ea)}} } // cond At(Robot,Table)}}

View File

@ -1,12 +0,0 @@
selector
// selector
// cond HasMap()
// act ExploreEnv()
sequence
cond Chatting()
act DealChat()
sequence
cond HasSubTask()
sequence
act SubTaskPlaceHolder()
cond At(Talb,ea)

View File

@ -1,11 +1,13 @@
selector selector
// sequence {
// cond NeedExplore()
// act ExploreEnv()
sequence sequence
{
cond Chatting() cond Chatting()
act DealChat() act DealChat()
sequence
} sequence
{
cond HasSubTask() cond HasSubTask()
sequence sequence
act SubTaskPlaceHolder() {
act SubTaskPlaceHolder()}}}

View File

@ -1,7 +1,7 @@
import io import io
import contextlib import contextlib
from robowaiter.utils.bt.load import load_bt_from_ptml,find_node_by_name,print_tree_from_root from robowaiter.utils.bt.load import load_bt_from_ptml, find_node_by_name, print_tree_from_root
from robowaiter.utils.bt.visitor import StatusVisitor from robowaiter.utils.bt.visitor import StatusVisitor
from robowaiter.behavior_tree.obtea.OptimalBTExpansionAlgorithm import Action # 调用最优行为树扩展算法 from robowaiter.behavior_tree.obtea.OptimalBTExpansionAlgorithm import Action # 调用最优行为树扩展算法
@ -15,7 +15,7 @@ class Robot(object):
scene = None scene = None
response_frequency = 1 response_frequency = 1
def __init__(self,ptml_path,behavior_lib_path): def __init__(self, ptml_path, behavior_lib_path):
self.ptml_path = ptml_path self.ptml_path = ptml_path
self.behavior_lib_path = behavior_lib_path self.behavior_lib_path = behavior_lib_path
@ -24,13 +24,12 @@ class Robot(object):
self.last_tick_output = "" self.last_tick_output = ""
self.action_list = None self.action_list = None
def set_scene(self, scene):
def set_scene(self,scene):
self.scene = scene self.scene = scene
def load_BT(self): def load_BT(self):
self.bt = load_bt_from_ptml(self.scene, self.ptml_path,self.behavior_lib_path) self.bt = load_bt_from_ptml(self.scene, self.ptml_path, self.behavior_lib_path)
sub_task_place_holder = find_node_by_name(self.bt.root,"SubTaskPlaceHolder") sub_task_place_holder = find_node_by_name(self.bt.root, "SubTaskPlaceHolder")
if sub_task_place_holder: if sub_task_place_holder:
sub_task_seq = sub_task_place_holder.parent sub_task_seq = sub_task_place_holder.parent
sub_task_seq.children.pop() sub_task_seq.children.pop()
@ -39,8 +38,7 @@ class Robot(object):
self.bt_visitor = StatusVisitor() self.bt_visitor = StatusVisitor()
self.bt.visitors.append(self.bt_visitor) self.bt.visitors.append(self.bt_visitor)
def expand_sub_task_tree(self, goal):
def expand_sub_task_tree(self,goal):
if self.action_list is None: if self.action_list is None:
self.action_list = self.collect_action_nodes() self.action_list = self.collect_action_nodes()
print(f"首次运行行为树扩展算法,收集到{len(self.action_list)}个有效动作") print(f"首次运行行为树扩展算法,收集到{len(self.action_list)}个有效动作")
@ -54,7 +52,7 @@ class Robot(object):
with open(file_path, 'w') as file: with open(file_path, 'w') as file:
file.write(ptml_string) file.write(ptml_string)
sub_task_bt = load_bt_from_ptml(self.scene, file_path,self.behavior_lib_path) sub_task_bt = load_bt_from_ptml(self.scene, file_path, self.behavior_lib_path)
# 加入删除子树的节点 # 加入删除子树的节点
seq = Sequence(name="Sequence", memory=False) seq = Sequence(name="Sequence", memory=False)
@ -69,7 +67,7 @@ class Robot(object):
def collect_action_nodes(self): def collect_action_nodes(self):
action_list = [ action_list = [
Action(name='MakeCoffee', pre={'At(Robot,CoffeeMachine)'}, Action(name='MakeCoffee()', pre={'At(Robot,CoffeeMachine)'},
add={'At(Coffee,Bar)'}, del_set=set(), cost=1), add={'At(Coffee,Bar)'}, del_set=set(), cost=1),
Action(name='MoveTo(Table)', pre={'At(Robot,Bar)'}, Action(name='MoveTo(Table)', pre={'At(Robot,Bar)'},
add={'At(Robot,Table)'}, del_set=set(), cost=1), add={'At(Robot,Table)'}, del_set=set(), cost=1),
@ -94,5 +92,6 @@ class Robot(object):
print("\n") print("\n")
self.last_tick_output = bt_output self.last_tick_output = bt_output
if __name__ == '__main__': if __name__ == '__main__':
pass pass

View File

@ -29,6 +29,7 @@ def print_tree_from_root(node, indent=0):
for child in node.children: for child in node.children:
print_tree_from_root(child, indent + 1) print_tree_from_root(child, indent + 1)
def find_node_by_name(tree, name): def find_node_by_name(tree, name):
""" """
Find a node in the behavior tree with the specified name. Find a node in the behavior tree with the specified name.
@ -46,8 +47,6 @@ def find_node_by_name(tree, name):
return result return result
return None return None
# class BehaviorTree(ptree): # class BehaviorTree(ptree):
# def __init__(self): # def __init__(self):
# super().__init__() # super().__init__()

View File

@ -1,7 +1,7 @@
import os import os
from robowaiter import Robot, task_map from robowaiter import Robot, task_map
TASK_NAME = 'AEM' TASK_NAME = 'VLM'
# create robot # create robot
project_path = "./robowaiter" project_path = "./robowaiter"

View File

@ -1,7 +1,7 @@
selector{ selector{
cond EnvExplored() cond At(Coffee,Bar)
selector{ selector{
cond At(Robot,Bar) cond At(Robot,CoffeeMachine)
act ExploreEnv() act MakeCoffee()
} }
} }