Skip to content

Commit ffc3c37

Browse files
author
Javier Moreno
committed
Refs #3459.
1 parent 1d106a8 commit ffc3c37

8 files changed

Lines changed: 325 additions & 259 deletions

‎CMakeLists.txt‎

Lines changed: 167 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ cmake_minimum_required(VERSION 3.5)
1818

1919

2020
# Set proyect name
21-
project(micro_ros_agent)
21+
project(uros_agent)
2222

2323

2424
# Find packages depencences
25+
find_package(rosidl_cmake REQUIRED)
2526
find_package(ament_cmake REQUIRED)
2627
find_package(fastcdr REQUIRED CONFIG)
2728
find_package(fastrtps REQUIRED CONFIG)
@@ -35,26 +36,178 @@ ament_export_dependencies(fastrtps)
3536
ament_export_dependencies(micrortps_agent)
3637

3738

38-
# Install python files
39-
ament_python_install_package(${PROJECT_NAME})
39+
# Set variables
40+
set(_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/python")
4041

42+
set(_XML_INTERFACE_GEN_BIN "${_OUTPUT_PATH}/bin/Xml_interface_gen.py")
43+
normalize_path(_XML_INTERFACE_GEN_BIN "${_XML_INTERFACE_GEN_BIN}")
4144

42-
# Register package resource in order to be called when a new msg package is generated
43-
ament_index_register_resource("rosidl_typesupport_c")
45+
set(_XML_DEFAULT_READ_BIN "${_OUTPUT_PATH}/bin/Xml_read_default_profiles.py")
46+
normalize_path(_XML_DEFAULT_READ_BIN "${_XML_DEFAULT_READ_BIN}")
4447

48+
set(_PYTHON_PKG_TOOL ${PROJECT_NAME})
4549

46-
# Install the package.xml file, and generate code for ``find_package`` so that other packages can get information about this package.
47-
ament_package(
48-
CONFIG_EXTRAS "micro_ros_agent-extras.cmake.in"
50+
set(_RESOURCE_DIR "${_OUTPUT_PATH}/resource")
51+
normalize_path(_RESOURCE_DIR "${_RESOURCE_DIR}")
52+
53+
54+
set(_DEFAULT_FASTRTPS_PROFILES_PATH "${_OUTPUT_PATH}/gen/DEFAULT_FASTRTPS_PROFILES.xml")
55+
normalize_path(_DEFAULT_FASTRTPS_PROFILES_PATH "${_DEFAULT_FASTRTPS_PROFILES_PATH}")
56+
57+
58+
# Get colcon call dir
59+
get_filename_component(_COLCON_CALL_DIR "${CMAKE_INSTALL_PREFIX}" DIRECTORY)
60+
get_filename_component(_COLCON_CALL_DIR "${_COLCON_CALL_DIR}" DIRECTORY)
61+
62+
63+
# Generate python header
64+
set(
65+
_PYTHON_SCRIPT_HEAD
66+
"
67+
import os\n
68+
import sys\n
69+
sys.path.append('${_OUTPUT_PATH}')\n
70+
from ${_PYTHON_PKG_TOOL} import *\n
71+
"
4972
)
5073

5174

52-
install(
53-
PROGRAMS bin/micro_ros_agent
54-
DESTINATION lib/micro_ros_agent
75+
# Copy pyton files
76+
file(COPY "bin" "${_PYTHON_PKG_TOOL}" "resource" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/python")
77+
78+
79+
# Extract all packages and manifiest paths
80+
execute_process(
81+
COMMAND
82+
"${PYTHON_EXECUTABLE}"
83+
"-c"
84+
"${_PYTHON_SCRIPT_HEAD}for package in GetInterfacePackages(GetPackageList('${_COLCON_CALL_DIR}')): print ('%s,%s' % (package, GetPackageName(package)))"
85+
OUTPUT_VARIABLE _packages
86+
RESULT_VARIABLE _result
87+
OUTPUT_STRIP_TRAILING_WHITESPACE
5588
)
89+
if(NOT _result EQUAL 0)
90+
message(FATAL_ERROR "Error finding xml packages")
91+
endif()
92+
93+
94+
# Convert output to list
95+
string(REPLACE "\n" ";" _packages ${_packages})
96+
97+
98+
# Extract all msg from each package (stored in ${package}_MSG_FILES)
99+
set(ALL_MSG_FILES "")
100+
foreach(package ${_packages})
101+
102+
# Extract info
103+
string(REPLACE "," ";" package ${package})
104+
list(GET package 0 package_file)
105+
list(GET package 1 package)
106+
107+
108+
# Get all msg files
109+
execute_process(
110+
COMMAND
111+
"${PYTHON_EXECUTABLE}"
112+
"-c"
113+
"${_PYTHON_SCRIPT_HEAD}for msg in GetInterfacePackageMsgs('${package_file}'): print ('%s' % msg)"
114+
OUTPUT_VARIABLE ${package}_MSG_FILES
115+
RESULT_VARIABLE _result
116+
OUTPUT_STRIP_TRAILING_WHITESPACE
117+
)
118+
if(NOT _result EQUAL 0)
119+
message(FATAL_ERROR "Error finding .msg files")
120+
endif()
121+
122+
# Skip if there are no msgs to create
123+
if(${package}_MSG_FILES STREQUAL "")
124+
continue()
125+
endif()
126+
127+
# Generate list
128+
string(REPLACE "\n" ";" ${package}_MSG_FILES ${${package}_MSG_FILES})
129+
130+
endforeach()
131+
132+
133+
# Append defaul xml profiles
134+
execute_process(
135+
COMMAND "${PYTHON_EXECUTABLE}" "${_XML_DEFAULT_READ_BIN}" "--default-xml-path" "${_RESOURCE_DIR}"
136+
OUTPUT_VARIABLE _XmlDoc
137+
RESULT_VARIABLE _result
138+
)
139+
if(NOT _result EQUAL 0)
140+
message(FATAL_ERROR "Error in typesuppor generation")
141+
endif()
142+
56143

144+
# Create one xml for each message
145+
foreach(package ${_packages})
146+
string(REPLACE "," ";" package ${package})
147+
list(GET package 0 package_file)
148+
list(GET package 1 package)
149+
150+
151+
# Skip this generation if there are no msgs to process
152+
if(${package}_MSG_FILES STREQUAL "")
153+
continue()
154+
endif()
155+
156+
157+
158+
# generate script argument file
159+
set(generator_arguments_file "${_OUTPUT_PATH}/XML_ArgFiles/${package}_Args.json")
160+
rosidl_write_generator_arguments(
161+
"${generator_arguments_file}"
162+
PACKAGE_NAME "${package}"
163+
ROS_INTERFACE_FILES "${${package}_MSG_FILES}"
164+
ROS_INTERFACE_DEPENDENCIES "NULL"
165+
OUTPUT_DIR "NULL"
166+
TEMPLATE_DIR "NULL"
167+
TARGET_DEPENDENCIES "NULL"
168+
ADDITIONAL_FILES ""
169+
)
170+
171+
172+
# execute python script
173+
execute_process(
174+
COMMAND "${PYTHON_EXECUTABLE}" "${_XML_INTERFACE_GEN_BIN}" --generator-arguments-file "${generator_arguments_file}"
175+
OUTPUT_VARIABLE _XmlGen
176+
RESULT_VARIABLE _result
177+
)
178+
if(NOT _result EQUAL 0)
179+
message(FATAL_ERROR "Error in typesuppor generation")
180+
endif()
181+
182+
183+
# Strore xml
184+
set(_XmlDoc "${_XmlDoc}${_XmlGen}")
185+
186+
endforeach()
187+
188+
189+
# Close profile
190+
set (_XmlDoc "<profiles>\n${_XmlDoc}</profiles>\n")
191+
192+
193+
# Save
194+
file(WRITE "${_DEFAULT_FASTRTPS_PROFILES_PATH}" "${_XmlDoc}")
195+
196+
197+
198+
# Install the package.xml file, and generate code for ``find_package`` so that other packages can get information about this package.
199+
ament_package()
200+
201+
202+
#Install
57203
install(
58-
DIRECTORY cmake resource
59-
DESTINATION share/${PROJECT_NAME}
60-
)
204+
FILES "${_DEFAULT_FASTRTPS_PROFILES_PATH}"
205+
DESTINATION "../micrortps_agent/bin"
206+
)
207+
208+
209+
# Install package
210+
#install(
211+
# DIRECTORY cmake resource
212+
# DESTINATION share/${PROJECT_NAME}
213+
#)

‎bin/Xml_interface_gen.py‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/usr/bin/env python3
2+
3+
import argparse
4+
import os
5+
import sys
6+
7+
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)),'..'))
8+
9+
from rosidl_cmake import read_generator_arguments
10+
from rosidl_parser import UnknownMessageType
11+
from uros_agent import generate_XML
12+
13+
14+
def main(argv=sys.argv[1:]):
15+
parser = argparse.ArgumentParser(
16+
description='Generate the C interfaces for Micro RTPS.',
17+
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
18+
parser.add_argument(
19+
'--generator-arguments-file',
20+
required=True,
21+
help='The location of the file containing the generator arguments')
22+
args = parser.parse_args(argv)
23+
24+
generator_args = read_generator_arguments(args.generator_arguments_file)
25+
rc = generate_XML(generator_args)
26+
return rc
27+
28+
29+
if __name__ == '__main__':
30+
sys.exit(main())

‎bin/Xml_read_default_profiles.py‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#!/usr/bin/env python3
2+
3+
import os
4+
import sys
5+
import argparse
6+
import xml.etree.ElementTree
7+
8+
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)),'..'))
9+
10+
from uros_agent import *
11+
12+
def main(argv=sys.argv[1:]):
13+
parser = argparse.ArgumentParser(
14+
description='Import default xml files',
15+
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
16+
parser.add_argument(
17+
'--default-xml-path',
18+
required=True,
19+
help='The location of the default profiles')
20+
args = parser.parse_args(argv)
21+
ReadDefaultXMLs(args.default_xml_path)
22+
23+
return 0
24+
25+
if __name__ == '__main__':
26+
sys.exit(main())

‎bin/micro_ros_agent‎

Lines changed: 0 additions & 45 deletions
This file was deleted.

‎cmake/micrortps_agent_xml_generator.cmake‎

Lines changed: 0 additions & 69 deletions
This file was deleted.

‎micro_ros_agent-extras.cmake.in‎

Lines changed: 0 additions & 14 deletions
This file was deleted.

0 commit comments

Comments
 (0)