@@ -39,71 +39,118 @@ from launch.launch_description_sources import PythonLaunchDescriptionSource
39
39
from launch.substitutions import LaunchConfiguration, PythonExpression, PathJoinSubstitution, TextSubstitution
40
40
41
41
def generate_launch_description ():
42
- ld = LaunchDescription ()
42
+ ld = LaunchDescription ()
43
+
44
+ # *** PARAMETERS ***
45
+ «FOR component:getRos2Nodes (system )»«IF generate_yaml (component )»
46
+ «component.name»_config = os.path.join (
47
+ get_package_share_directory ('«system .getName ().toLowerCase»'),
48
+ 'config',
49
+ '«component.name».yaml'
50
+ )
51
+ «ELSE»
52
+ «FOR parameter:component.rosparameters»
53
+ «parameter.name»_arg = DeclareLaunchArgument (
54
+ "«parameter .name »", default_value =TextSubstitution (text ="«get_param_value (parameter .val ue ,parameter .name )»")
55
+ )
56
+ ld.add_action («parameter .name »_arg )
57
+ «ENDFOR»
58
+ «ENDIF»
59
+ «ENDFOR»
43
60
44
- «FOR component:getRos2Nodes (system )»«IF generate_yaml (component )»
45
- «component.name»_config = os.path.join (
46
- get_package_share_directory ('«system .getName ().toLowerCase»'),
47
- 'config',
48
- '«component.name».yaml'
49
- )
50
- «ELSE»
51
- «FOR parameter:component.rosparameters»
52
- «parameter.name»_arg = DeclareLaunchArgument (
53
- "«parameter .name »", default_value =TextSubstitution (text ="«get_param_value (parameter .val ue ,parameter .name )»")
54
- )
55
- ld.add_action («parameter .name »_arg )
56
- «ENDFOR»
57
- «ENDIF»
58
- «ENDFOR»
61
+ # *** ROS 2 nodes ***
62
+ «FOR component:getRos2Nodes (system )»
63
+ «(component as RosNode ).name» = Node (
64
+ package ="«((component as RosNode ).from.eContainer.eContainer as AmentPackageImpl).name»",«IF !component.namespace.nullOrEmpty»
65
+ namespace="«component.namespace»",«ENDIF»
66
+ executable="«((component as RosNode).from.eContainer as Artifact).name»",
67
+ prefix = 'xterm -e',
68
+ output='screen',
69
+ name="«(component as RosNode ).name»"«compile_remappings_str (component as RosNode , system .connections )»«IF !component.rosparameters.nullOrEmpty»«IF generate_yaml (component )»,
70
+ parameters = [«component.name»_config]«ELSE»,
71
+ parameters=[{«FOR param: component. rosparameters»
72
+ " «param.from.name»" : LaunchConfiguration (" «param.name»" ),«ENDFOR »}]«ENDIF »«ENDIF »
73
+ )
74
+ «ENDFOR »
59
75
60
- «FOR component:getRos2Nodes (system )»
61
- «(component as RosNode ).name» = Node (
62
- package ="«((component as RosNode ).from.eContainer.eContainer as AmentPackageImpl).name»",«IF !component.namespace.nullOrEmpty»
63
- namespace="«component.namespace»",«ENDIF»
64
- executable="«((component as RosNode).from.eContainer as Artifact).name»",
65
- prefix = 'xterm -e',
66
- output='screen',
67
- name="«(component as RosNode).name»"«compile_remappings_str (component as RosNode , system .connections )»«IF !component.rosparameters.nullOrEmpty»,
68
- «IF generate_yaml (component )» parameters = [«component.name»_config]
69
- «ELSE» parameters=[{«FOR param: component. rosparameters»
70
- " «param.from.name»" : LaunchConfiguration (" «param.name»" ),«ENDFOR »}]«ENDIF »«ENDIF »
71
- )
72
- «ENDFOR »
73
- «FOR subsystem: getSubsystems(system)»
74
- «IF subsystem. fromFile. nullOrEmpty»
75
- include_«subsystem. name»= IncludeLaunchDescription (
76
- PythonLaunchDescriptionSource ([ get_package_share_directory(' «subsystem.name»' ) + ' /launch/«subsystem.name».launch.py' ])
77
- )
78
- «ELSE »
79
- include_«subsystem. name»= IncludeLaunchDescription (
80
- PythonLaunchDescriptionSource ([get_package_share_directory(' «subsystem.fromFile.split("/",2).get(0)»' ) + ' /«subsystem.fromFile.split("/",2).get(1)»' ])
81
- )
82
- «ENDIF »
83
- «ENDFOR »
76
+ # *** ROS 2 subsystems (include launch files)***
77
+ «FOR subsystem: getSubsystems(system)»
78
+ «IF subsystem. fromFile. nullOrEmpty»
79
+ include_«subsystem. name»= IncludeLaunchDescription (
80
+ PythonLaunchDescriptionSource ([ get_package_share_directory(' «subsystem.name»' ) + ' /launch/«subsystem.name».launch.py' ])
81
+ )
82
+ «ELSE »
83
+ include_«subsystem. name»= IncludeLaunchDescription (
84
+ PythonLaunchDescriptionSource ([get_package_share_directory(' «subsystem.fromFile.split("/",2).get(0)»' ) + ' /«subsystem.fromFile.split("/",2).get(1)»' ])
85
+ )
86
+ «ENDIF »
87
+
88
+ # *** ROS 1 to ROS 2 bridges ***
89
+ «ENDFOR »«IF TopicBridgeGenerated (system) || ServiceFromBridgeGenerated (system)|| ServiceToBridgeGenerated (system) »
90
+ «system. name»_ros1_bridge_config = os. path. join(
91
+ get_package_share_directory(' «system.getName().toLowerCase»' ),
92
+ ' config' ,
93
+ ' ros1_bridges.yaml'
94
+ )«ENDIF »«IF TopicBridgeGenerated (system)»
95
+ ros1_topic_bridge_parameter_bridge = Node (
96
+ package = ' ros1_bridge' ,
97
+ executable= ' parameter_bridge' ,
98
+ name= ' ros1_topic_bridge_parameter_bridge' ,
99
+ namespace= ' bridge_«system.name»_topic' ,
100
+ output= ' screen' ,
101
+ parameters= [
102
+ {' __ns' : ' bridge_«system.name»_topic' },
103
+ {' __name' : ' bridge_«system.name»_topic' }
104
+ ],
105
+ arguments= [
106
+ ' --ros-args' , ' -r' , ' __name:=bridge_«system.name»_topic'
107
+ ]
108
+ )«ENDIF »«IF ServiceFromBridgeGenerated (system)»
109
+ ros1_service_from_bridge_parameter_bridge = Node (
110
+ package = ' ros1_bridge' ,
111
+ executable= ' parameter_bridge' ,
112
+ name= ' ros1_service_from_bridge_parameter_bridge' ,
113
+ namespace= ' bridge_«system.name»_from_services' ,
114
+ output= ' screen' ,
115
+ parameters= [
116
+ {' __ns' : ' bridge_«system.name»_from_services' },
117
+ {' __name' : ' bridge_«system.name»_from_services' }
118
+ ],
119
+ arguments= [
120
+ ' --ros-args' , ' -r' , ' __name:=bridge_«system.name»_from_services'
121
+ ]
122
+ )«ENDIF »«IF ServiceToBridgeGenerated (system)»
123
+ ros1_service_to_bridge_parameter_bridge = Node (
124
+ package = ' ros1_bridge' ,
125
+ executable= ' parameter_bridge' ,
126
+ name= ' ros1_service_to_bridge_parameter_bridge' ,
127
+ namespace= ' bridge_«system.name»_to_services' ,
128
+ output= ' screen' ,
129
+ parameters= [
130
+ {' __ns' : ' bridge_«system.name»_to_services' },
131
+ {' __name' : ' bridge_«system.name»_to_services' }
132
+ ],
133
+ arguments= [
134
+ ' --ros-args' , ' -r' , ' __name:=bridge_«system.name»_to_services'
135
+ ]
136
+ )«ENDIF »
84
137
85
- «FOR component: getRos2Nodes(system)»
86
- ld. add_action(«(component as RosNode ). name»)
87
- «ENDFOR »«FOR subsystem: getSubsystems(system)»
88
- ld. add_action(include_«subsystem. name»)
89
- «ENDFOR »
138
+ # *** Add actions ***
139
+ «FOR component: getRos2Nodes(system)»
140
+ ld. add_action(«(component as RosNode ). name»)
141
+ «ENDFOR »«FOR subsystem: getSubsystems(system)»
142
+ ld. add_action(include_«subsystem. name»)
143
+ «ENDFOR »«IF TopicBridgeGenerated (system)»
144
+ ld. add_action(ros1_topic_bridge_parameter_bridge)
145
+ «ENDIF »«IF ServiceFromBridgeGenerated (system)»
146
+ ld. add_action(ros1_service_from_bridge_parameter_bridge)
147
+ «ENDIF »«IF ServiceToBridgeGenerated (system)»
148
+ ld. add_action(ros1_service_to_bridge_parameter_bridge)
149
+ «ENDIF »
90
150
91
- return ld
151
+ return ld
92
152
' ' '
93
153
94
- def Boolean generate_yaml(RosNode component){
95
- var yaml_gen=false
96
- for(param:component.rosparameters){
97
- if(param.eContents.get(0).eClass.name.contains("ParameterStruct")){
98
- yaml_gen=true
99
- }
100
- }
101
- if(component.rosparameters.length>5){
102
- yaml_gen=true
103
- }
104
- return yaml_gen
105
- }
106
-
107
154
// def void compile_list_of_ROS2components(RosSystem system, ComponentStack stack) {
108
155
// components_tmp_.clear;
109
156
// Ros2components.clear;
0 commit comments