修复括号不匹配的bug
This commit is contained in:
parent
3f1f8d9d06
commit
ed5b99e69b
|
@ -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')
|
|
@ -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)
|
|
@ -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)}}
|
|
@ -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)
|
|
|
@ -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()}}}
|
|
@ -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
|
|
@ -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__()
|
|
@ -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"
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue