完成对ptml转化过程中py_trees接口的定义
This commit is contained in:
parent
a7f5ec47df
commit
2cf5114f4d
|
@ -1,70 +0,0 @@
|
||||||
import py_trees as bt
|
|
||||||
import typing
|
|
||||||
|
|
||||||
class BTAPI():
|
|
||||||
"""
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self) -> None:
|
|
||||||
self.string = None
|
|
||||||
|
|
||||||
|
|
||||||
def newTree(self) -> bt.trees.BehaviourTree:
|
|
||||||
"""_summary_
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
bt.trees.BehaviourTree: _description_
|
|
||||||
"""
|
|
||||||
|
|
||||||
def newSequenceNode(self, tag: str='') -> None:
|
|
||||||
"""_summary_
|
|
||||||
|
|
||||||
Args:
|
|
||||||
tag (str, optional): _description_. Defaults to ''.
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
def newSelectorNode(self, tag: str='') -> None:
|
|
||||||
"""_summary_
|
|
||||||
|
|
||||||
Args:
|
|
||||||
tag (str, optional): _description_. Defaults to ''.
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
def newParallelNode(self, threshold:int) -> None:
|
|
||||||
"""_summary_
|
|
||||||
|
|
||||||
Args:
|
|
||||||
threshold (int): _description_
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
def newDecoratorNode(self, tag: str='') -> None:
|
|
||||||
"""_summary_
|
|
||||||
|
|
||||||
Args:
|
|
||||||
tag (str, optional): _description_. Defaults to ''.
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
def newBehaviourNode(self, name: str, args: typing.Optional[typing.List[str]]=[], tag:str='', isCond:bool=False) -> None:
|
|
||||||
"""_summary_
|
|
||||||
|
|
||||||
Args:
|
|
||||||
name (str): _description_
|
|
||||||
args (typing.Optional[typing.List[str]], optional): _description_. Defaults to [].
|
|
||||||
tag (str, optional): _description_. Defaults to ''.
|
|
||||||
isCond (bool, optional): _description_. Defaults to False.
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
def attach_to_parent(self, uuid_child:str, uuid_parent:str) -> None:
|
|
||||||
"""_summary_
|
|
||||||
|
|
||||||
Args:
|
|
||||||
uuid_child (str): _description_
|
|
||||||
uuid_parent (str): _description_
|
|
||||||
"""
|
|
||||||
return
|
|
|
@ -13,4 +13,4 @@ sequence:
|
||||||
task ReachDestinationA()
|
task ReachDestinationA()
|
||||||
selector:
|
selector:
|
||||||
cond CoffeeCupPlaced()
|
cond CoffeeCupPlaced()
|
||||||
task PlaceCoffeeCup()
|
task PlaceCoffeeCup(1.2)
|
|
@ -0,0 +1,120 @@
|
||||||
|
import os
|
||||||
|
import typing
|
||||||
|
import shortuuid
|
||||||
|
|
||||||
|
short_uuid = lambda : shortuuid.ShortUUID().random(length=8)
|
||||||
|
|
||||||
|
class PyTreesAPI():
|
||||||
|
"""
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
self.pystr = ''
|
||||||
|
self.prepare()
|
||||||
|
|
||||||
|
|
||||||
|
def prepare(self) -> None:
|
||||||
|
# import libraries
|
||||||
|
self.pystr += 'import py_trees\n'
|
||||||
|
|
||||||
|
self.pystr += '\n' * 2
|
||||||
|
|
||||||
|
def write_to_file(self, dir: str = './', filename: str = 'auto_generate.py') -> None:
|
||||||
|
"""_summary_
|
||||||
|
|
||||||
|
Args:
|
||||||
|
dir (str, optional): _description_. Defaults to './'.
|
||||||
|
filename (str, optional): _description_. Defaults to 'auto_generate.py'.
|
||||||
|
|
||||||
|
Raises:
|
||||||
|
FileNotFoundError: _description_
|
||||||
|
"""
|
||||||
|
# exceptions handling
|
||||||
|
filepath = os.path.join(dir, filename)
|
||||||
|
if not os.path.exists(dir):
|
||||||
|
raise FileNotFoundError(
|
||||||
|
''
|
||||||
|
)
|
||||||
|
# if os.path.exists(filepath):
|
||||||
|
# raise FileExistsError(
|
||||||
|
# ''
|
||||||
|
# )
|
||||||
|
|
||||||
|
with open(filepath, 'w') as file:
|
||||||
|
file.write(self.pystr)
|
||||||
|
|
||||||
|
def run() -> None:
|
||||||
|
"""_summary_
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def newTree(self) -> None:
|
||||||
|
"""_summary_
|
||||||
|
"""
|
||||||
|
|
||||||
|
def newSequenceNode(self) -> str:
|
||||||
|
"""_summary_
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: _description_
|
||||||
|
"""
|
||||||
|
tag = 'sequence_' + short_uuid()
|
||||||
|
return tag
|
||||||
|
|
||||||
|
def newSelectorNode(self) -> str:
|
||||||
|
"""_summary_
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: _description_
|
||||||
|
"""
|
||||||
|
tag = 'selector_' + short_uuid()
|
||||||
|
return tag
|
||||||
|
|
||||||
|
def newParallelNode(self, threshold:int) -> str:
|
||||||
|
"""_summary_
|
||||||
|
|
||||||
|
Args:
|
||||||
|
threshold (int): _description_
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: _description_
|
||||||
|
"""
|
||||||
|
tag = 'parallel_' + short_uuid()
|
||||||
|
return tag
|
||||||
|
|
||||||
|
def newDecoratorNode(self) -> str:
|
||||||
|
"""_summary_
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: _description_
|
||||||
|
"""
|
||||||
|
tag = 'decorator_' + short_uuid()
|
||||||
|
return tag
|
||||||
|
|
||||||
|
def newBehaviourNode(self,
|
||||||
|
name: str,
|
||||||
|
args: typing.Optional[typing.List[str]] = [],
|
||||||
|
isCond: bool = False
|
||||||
|
) -> str:
|
||||||
|
"""_summary_
|
||||||
|
|
||||||
|
Args:
|
||||||
|
name (str): _description_
|
||||||
|
args (typing.Optional[typing.List[str]], optional): _description_. Defaults to [].
|
||||||
|
isCond (bool, optional): _description_. Defaults to False.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
str: _description_
|
||||||
|
"""
|
||||||
|
tag = 'behavior_' + short_uuid()
|
||||||
|
return tag
|
||||||
|
|
||||||
|
def connect_to_parent(self, uuid_child:str, uuid_parent:str) -> None:
|
||||||
|
"""_summary_
|
||||||
|
|
||||||
|
Args:
|
||||||
|
uuid_child (str): _description_
|
||||||
|
uuid_parent (str): _description_
|
||||||
|
"""
|
||||||
|
return
|
|
@ -8,7 +8,7 @@ sys.path.append(project_path)
|
||||||
from antlr4 import *
|
from antlr4 import *
|
||||||
from ptmlListener import ptmlListener
|
from ptmlListener import ptmlListener
|
||||||
from ptmlParser import ptmlParser
|
from ptmlParser import ptmlParser
|
||||||
from BT_api import BTAPI
|
from ptml.ptmlTranslateAPI import PyTreesAPI
|
||||||
|
|
||||||
class ptmlTranslator(ptmlListener):
|
class ptmlTranslator(ptmlListener):
|
||||||
"""Translate the ptml language to BT.
|
"""Translate the ptml language to BT.
|
||||||
|
@ -20,7 +20,7 @@ class ptmlTranslator(ptmlListener):
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.stack = []
|
self.stack = []
|
||||||
self.api = BTAPI()
|
self.api = PyTreesAPI()
|
||||||
|
|
||||||
|
|
||||||
# Enter a parse tree produced by ptmlParser#root.
|
# Enter a parse tree produced by ptmlParser#root.
|
||||||
|
@ -71,11 +71,12 @@ class ptmlTranslator(ptmlListener):
|
||||||
if len(ctx.children) > 4:
|
if len(ctx.children) > 4:
|
||||||
# have params
|
# have params
|
||||||
args = ctx.action_parm()
|
args = ctx.action_parm()
|
||||||
|
print(args.Float())
|
||||||
|
|
||||||
if type == 'cond':
|
if type == 'cond':
|
||||||
self.api.newBehaviourNode(name, cond=True)
|
self.api.newBehaviourNode(name, isCond=True)
|
||||||
else:
|
else:
|
||||||
self.api.newBehaviourNode(name, cond=False)
|
self.api.newBehaviourNode(name, isCond=False)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,24 +94,6 @@ class ptmlTranslator(ptmlListener):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
# Enter a parse tree produced by ptmlParser#var_decls.
|
|
||||||
def enterVar_decls(self, ctx:ptmlParser.Var_declsContext):
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Exit a parse tree produced by ptmlParser#var_decls.
|
|
||||||
def exitVar_decls(self, ctx:ptmlParser.Var_declsContext):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# Enter a parse tree produced by ptmlParser#var_type.
|
|
||||||
def enterVar_type(self, ctx:ptmlParser.Var_typeContext):
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Exit a parse tree produced by ptmlParser#var_type.
|
|
||||||
def exitVar_type(self, ctx:ptmlParser.Var_typeContext):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# Enter a parse tree produced by ptmlParser#boolean.
|
# Enter a parse tree produced by ptmlParser#boolean.
|
||||||
def enterBoolean(self, ctx:ptmlParser.BooleanContext):
|
def enterBoolean(self, ctx:ptmlParser.BooleanContext):
|
||||||
pass
|
pass
|
||||||
|
@ -119,11 +102,3 @@ class ptmlTranslator(ptmlListener):
|
||||||
def exitBoolean(self, ctx:ptmlParser.BooleanContext):
|
def exitBoolean(self, ctx:ptmlParser.BooleanContext):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class BtNode():
|
|
||||||
"""
|
|
||||||
|
|
||||||
"""
|
|
||||||
def __init__(self, type:str='BtNode') -> None:
|
|
||||||
self.type = type
|
|
||||||
self.name:str = ''
|
|
Loading…
Reference in New Issue