generate_microRTPS_bridge: add the capability to receive absolute and relative paths

This commit is contained in:
TSC21
2019-01-22 15:38:20 +00:00
committed by Beat Küng
parent 4ec40049ce
commit 8da1ff4cff
+42 -54
View File
@@ -55,23 +55,6 @@ except ImportError:
"Failed to import yaml. You may need to install it with 'sudo pip install pyyaml'") "Failed to import yaml. You may need to install it with 'sudo pip install pyyaml'")
def get_absolute_path(arg_parse_dir):
"""
Get absolute path from dir
"""
root_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if isinstance(arg_parse_dir, list):
dir = arg_parse_dir[0]
else:
dir = arg_parse_dir
if dir[0] != '/':
dir = root_path + "/" + dir
return dir
def check_rtps_id_uniqueness(classifier): def check_rtps_id_uniqueness(classifier):
""" """
Checks if there are no ID's for different msgs repeated on the map Checks if there are no ID's for different msgs repeated on the map
@@ -106,7 +89,7 @@ def check_rtps_id_uniqueness(classifier):
if list(classifier.msgs_to_ignore.values()).count(value) > 1: if list(classifier.msgs_to_ignore.values()).count(value) > 1:
repeated_ids.update({key: value}) repeated_ids.update({key: value})
# check if there are repeated IDs between classfied and unclassified msgs # check if there are repeated IDs between classified and unclassified msgs
# check send and ignore lists # check send and ignore lists
send_ignore_common_ids = list(set(classifier.msgs_to_ignore.values( send_ignore_common_ids = list(set(classifier.msgs_to_ignore.values(
)).intersection(classifier.msgs_to_send.values())) )).intersection(classifier.msgs_to_send.values()))
@@ -149,10 +132,8 @@ def check_rtps_id_uniqueness(classifier):
", ".join('%d' % id for id in px_generate_uorb_topic_helper.check_available_ids(all_ids))) ", ".join('%d' % id for id in px_generate_uorb_topic_helper.check_available_ids(all_ids)))
default_client_out = get_absolute_path( default_client_out = "src/modules/micrortps_bridge/micrortps_client"
"src/modules/micrortps_bridge/micrortps_client") default_agent_out = "src/modules/micrortps_bridge/micrortps_agent"
default_agent_out = get_absolute_path(
"src/modules/micrortps_bridge/micrortps_agent")
default_uorb_templates_dir = "templates/uorb_microcdr" default_uorb_templates_dir = "templates/uorb_microcdr"
default_urtps_templates_dir = "templates/urtps" default_urtps_templates_dir = "templates/urtps"
default_rtps_id_file = "tools/uorb_rtps_message_ids.yaml" default_rtps_id_file = "tools/uorb_rtps_message_ids.yaml"
@@ -173,22 +154,22 @@ parser.add_argument("-m", "--mkdir-build", dest='mkdir_build',
parser.add_argument("-l", "--generate-cmakelists", dest='cmakelists', parser.add_argument("-l", "--generate-cmakelists", dest='cmakelists',
action="store_true", help="Flag to generate a CMakeLists.txt file for the micro-RTPS agent") action="store_true", help="Flag to generate a CMakeLists.txt file for the micro-RTPS agent")
parser.add_argument("-t", "--topic-msg-dir", dest='msgdir', type=str, parser.add_argument("-t", "--topic-msg-dir", dest='msgdir', type=str,
help="Topics message dir, by default msg/", default="msg") help="Topics message, by default using relative path 'msg/'", default="msg")
parser.add_argument("-b", "--uorb-templates-dir", dest='uorb_templates', type=str, parser.add_argument("-b", "--uorb-templates-dir", dest='uorb_templates', type=str,
help="uORB templates dir, by default msgdir/templates/uorb_microcdr", default=default_uorb_templates_dir) help="uORB templates, by default using relative path to msgdir 'templates/uorb_microcdr'", default=default_uorb_templates_dir)
parser.add_argument("-q", "--urtps-templates-dir", dest='urtps_templates', type=str, parser.add_argument("-q", "--urtps-templates-dir", dest='urtps_templates', type=str,
help="uRTPS templates abolsute path, by default use relative path to msg, templates/urtps", default=default_urtps_templates_dir) help="uRTPS templates, by default using relative path to msgdir 'templates/urtps'", default=default_urtps_templates_dir)
parser.add_argument("-y", "--rtps-ids-file", dest='yaml_file', type=str, parser.add_argument("-y", "--rtps-ids-file", dest='yaml_file', type=str,
help="RTPS msg IDs definition file absolute path, by default use relative path to msg, tools/uorb_rtps_message_ids.yaml", default=default_rtps_id_file) help="RTPS msg IDs definition path, by default using relative path to msgdir 'tools/uorb_rtps_message_ids.yaml'", default=default_rtps_id_file)
parser.add_argument("-p", "--package", dest='package', type=str, parser.add_argument("-p", "--package", dest='package', type=str,
help="Msg package naming, by default px4", default=default_package_name) help="Msg package naming, by default px4", default=default_package_name)
parser.add_argument("-o", "--agent-outdir", dest='agentdir', type=str, nargs=1, parser.add_argument("-o", "--agent-outdir", dest='agentdir', type=str,
help="Agent output dir, by default src/modules/micrortps_bridge/micrortps_agent", default=default_agent_out) help="Agent output dir, by default using relative path 'src/modules/micrortps_bridge/micrortps_agent'", default=default_agent_out)
parser.add_argument("-u", "--client-outdir", dest='clientdir', type=str, nargs=1, parser.add_argument("-u", "--client-outdir", dest='clientdir', type=str,
help="Client output dir, by default src/modules/micrortps_bridge/micrortps_client", default=default_client_out) help="Client output dir, by default using relative path 'src/modules/micrortps_bridge/micrortps_client'", default=default_client_out)
parser.add_argument("-f", "--fastrtpsgen-dir", dest='fastrtpsgen', type=str, nargs='?', parser.add_argument("-f", "--fastrtpsgen-dir", dest='fastrtpsgen', type=str,
help="fastrtpsgen installation dir, only needed if fastrtpsgen is not in PATH, by default empty", default="") help="fastrtpsgen installation dir, only needed if fastrtpsgen is not in PATH, by default empty", default="")
parser.add_argument("-g", "--fastrtpsgen-include", dest='fastrtpsgen_include', type=str, nargs='?', parser.add_argument("-g", "--fastrtpsgen-include", dest='fastrtpsgen_include', type=str,
help="directory(ies) to add to preprocessor include paths of fastrtpsgen, by default empty", default="") help="directory(ies) to add to preprocessor include paths of fastrtpsgen, by default empty", default="")
parser.add_argument("--delete-tree", dest='del_tree', parser.add_argument("--delete-tree", dest='del_tree',
action="store_true", help="Delete dir tree output dir(s)") action="store_true", help="Delete dir tree output dir(s)")
@@ -200,36 +181,43 @@ if len(sys.argv) <= 1:
# Parse arguments # Parse arguments
args = parser.parse_args() args = parser.parse_args()
msg_folder = get_absolute_path(args.msgdir)
package = args.package
agent = args.agent agent = args.agent
client = args.client client = args.client
mkdir_build = args.mkdir_build
cmakelists = args.cmakelists cmakelists = args.cmakelists
del_tree = args.del_tree del_tree = args.del_tree
px_generate_uorb_topic_files.append_to_include_path(
{msg_folder}, px_generate_uorb_topic_files.INCL_DEFAULT, package)
agent_out_dir = get_absolute_path(args.agentdir)
client_out_dir = get_absolute_path(
args.clientdir)
gen_idl = args.gen_idl gen_idl = args.gen_idl
mkdir_build = args.mkdir_build
package = args.package
# Msg files path
msg_dir = os.path.abspath(args.msgdir)
px_generate_uorb_topic_files.append_to_include_path(
{msg_dir}, px_generate_uorb_topic_files.INCL_DEFAULT, package)
# Agent files output path
agent_out_dir = os.path.abspath(args.agentdir)
# Client files output path
client_out_dir = os.path.abspath(args.clientdir)
# IDL files path
idl_dir = args.idl_dir idl_dir = args.idl_dir
if idl_dir != '': if idl_dir != '':
idl_dir = get_absolute_path(args.idl_dir) idl_dir = os.path.abspath(args.idl_dir)
else: else:
idl_dir = os.path.join(agent_out_dir, "idl") idl_dir = os.path.join(agent_out_dir, "idl")
if args.fastrtpsgen is None or args.fastrtpsgen == "": if args.fastrtpsgen is None or args.fastrtpsgen == '':
# Assume fastrtpsgen is in PATH # Assume fastrtpsgen is in PATH
fastrtpsgen_path = 'fastrtpsgen' fastrtpsgen_path = 'fastrtpsgen'
else: else:
# Path to fastrtpsgen is explicitly specified # Path to fastrtpsgen is explicitly specified
fastrtpsgen_path = os.path.join( fastrtpsgen_path = os.path.join(
get_absolute_path(args.fastrtpsgen), 'fastrtpsgen') os.path.abspath(args.fastrtpsgen), 'fastrtpsgen')
fastrtpsgen_include = args.fastrtpsgen_include fastrtpsgen_include = args.fastrtpsgen_include
if fastrtpsgen_include is not None and fastrtpsgen_include != '': if fastrtpsgen_include is not None and fastrtpsgen_include != '':
fastrtpsgen_include = "-I " + \ fastrtpsgen_include = "-I " + \
get_absolute_path( os.path.abspath(
args.fastrtpsgen_include) + " " args.fastrtpsgen_include) + " "
# If nothing specified it's generated both # If nothing specified it's generated both
@@ -261,17 +249,17 @@ if del_tree:
if agent and os.path.isdir(os.path.join(agent_out_dir, "idl")): if agent and os.path.isdir(os.path.join(agent_out_dir, "idl")):
shutil.rmtree(os.path.join(agent_out_dir, "idl")) shutil.rmtree(os.path.join(agent_out_dir, "idl"))
uorb_templates_dir = os.path.join(msg_folder, args.uorb_templates) # uORB templates path
if args.urtps_templates != default_urtps_templates_dir: uorb_templates_dir = (args.uorb_templates if os.path.isabs(args.uorb_templates) \
urtps_templates_dir = os.path.abspath(args.urtps_templates) else os.path.join(msg_dir, args.uorb_templates))
else:
urtps_templates_dir = os.path.join(msg_folder, args.urtps_templates) # uRTPS templates path
urtps_templates_dir = (args.urtps_templates if os.path.isabs(args.urtps_templates) \
else os.path.join(msg_dir, args.urtps_templates))
# parse yaml file into a map of ids # parse yaml file into a map of ids
if args.yaml_file != default_rtps_id_file: classifier = (Classifier(os.path.abspath(args.yaml_file), msg_dir) if os.path.isabs(args.yaml_file) \
classifier = Classifier(os.path.abspath(args.yaml_file), msg_folder) else Classifier(os.path.join(msg_dir, args.yaml_file), msg_dir))
else:
classifier = Classifier(os.path.join(
msg_folder, args.yaml_file), msg_folder)
# check if there are no ID's repeated # check if there are no ID's repeated
check_rtps_id_uniqueness(classifier) check_rtps_id_uniqueness(classifier)