Skip to content

Commit 7f82fbf

Browse files
committed
Generate the launch file for the bridges separately
1 parent 92f25d7 commit 7f82fbf

File tree

4 files changed

+93
-61
lines changed

4 files changed

+93
-61
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package de.fraunhofer.ipa.rossystem.generator
2+
3+
import system.System
4+
import com.google.inject.Inject
5+
6+
class BridgesLaunchFileCompiler_ROS2 {
7+
8+
@Inject extension GeneratorHelpers
9+
10+
11+
def compile_toROS2launchbridges(System system) '''
12+
import os
13+
from launch import LaunchDescription
14+
from launch_ros.actions import Node
15+
from launch.actions import IncludeLaunchDescription, DeclareLaunchArgument
16+
from launch.launch_description_sources import PythonLaunchDescriptionSource
17+
from launch.substitutions import LaunchConfiguration, PythonExpression, PathJoinSubstitution, TextSubstitution
18+
19+
def generate_launch_description():
20+
ld = LaunchDescription()
21+
22+
# *** ROS 1 to ROS 2 bridges ***
23+
«IF TopicBridgeGenerated(system) || ServiceFromBridgeGenerated(system)|| ServiceToBridgeGenerated(system) »
24+
«system.name»_ros1_bridge_config = os.path.join(
25+
get_package_share_directory('«system.getName().toLowerCase»'),
26+
'config',
27+
'ros1_bridges.yaml'
28+
ENDIF»«IF TopicBridgeGenerated(system
29+
ros1_topic_bridge_parameter_bridge = Node(
30+
package='ros1_bridge',
31+
executable='parameter_bridge',
32+
name='ros1_topic_bridge_parameter_bridge',
33+
namespace='bridge_«system.name»_topics',
34+
output='screen',
35+
parameters=[
36+
{'__ns': 'bridge_«system.name»_topics'},
37+
{'__name': 'bridge_«system.name»_topics'}
38+
],
39+
arguments=[
40+
'--ros-args', '-r', '__name:=bridge_«system.name»_topics'
41+
]
42+
ENDIF»«IF ServiceFromBridgeGenerated(system
43+
ros1_service_from_bridge_parameter_bridge = Node(
44+
package='ros1_bridge',
45+
executable='parameter_bridge',
46+
name='ros1_service_from_bridge_parameter_bridge',
47+
namespace='bridge_«system.name»_from_services',
48+
output='screen',
49+
parameters=[
50+
{'__ns': 'bridge_«system.name»_from_services'},
51+
{'__name': 'bridge_«system.name»_from_services'}
52+
],
53+
arguments=[
54+
'--ros-args', '-r', '__name:=bridge_«system.name»_from_services'
55+
]
56+
ENDIF»«IF ServiceToBridgeGenerated(system
57+
ros1_service_to_bridge_parameter_bridge = Node(
58+
package='ros1_bridge',
59+
executable='parameter_bridge',
60+
name='ros1_service_to_bridge_parameter_bridge',
61+
namespace='bridge_«system.name»_to_services',
62+
output='screen',
63+
parameters=[
64+
{'__ns': 'bridge_«system.name»_to_services'},
65+
{'__name': 'bridge_«system.name»_to_services'}
66+
],
67+
arguments=[
68+
'--ros-args', '-r', '__name:=bridge_«system.name»_to_services'
69+
]
70+
)«ENDIF»
71+
72+
# *** Add actions ***
73+
«IF TopicBridgeGenerated(system
74+
ld.add_action(ros1_topic_bridge_parameter_bridge)
75+
«ENDIF»«IF ServiceFromBridgeGenerated(system
76+
ld.add_action(ros1_service_from_bridge_parameter_bridge)
77+
«ENDIF»«IF ServiceToBridgeGenerated(system
78+
ld.add_action(ros1_service_to_bridge_parameter_bridge)
79+
«ENDIF»
80+
81+
return ld
82+
'''
83+
}

plugins/de.fraunhofer.ipa.rossystem.xtext/src/de/fraunhofer/ipa/rossystem/generator/GeneratorHelpers.xtend

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ class GeneratorHelpers {
6969
os_import=true
7070
}
7171
}
72-
if (TopicBridgeGenerated(rossystem) || ServiceFromBridgeGenerated(rossystem) || ServiceToBridgeGenerated(rossystem)){
73-
os_import=true
74-
}
72+
// if (TopicBridgeGenerated(rossystem) || ServiceFromBridgeGenerated(rossystem) || ServiceToBridgeGenerated(rossystem)){
73+
// os_import=true
74+
// }
7575
return os_import
7676
}
7777

plugins/de.fraunhofer.ipa.rossystem.xtext/src/de/fraunhofer/ipa/rossystem/generator/LaunchFileCompiler_ROS2.xtend

Lines changed: 2 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -83,70 +83,14 @@ def generate_launch_description():
8383
include_«subsystem.name»= IncludeLaunchDescription(
8484
PythonLaunchDescriptionSource([get_package_share_directory('«subsystem.fromFile.split("/",2).get(0)»') + '/«subsystem.fromFile.split("/",2).get(1)»'])
8585
)
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»_topics',
100-
output='screen',
101-
parameters=[
102-
{'__ns': 'bridge_«system.name»_topics'},
103-
{'__name': 'bridge_«system.name»_topics'}
104-
],
105-
arguments=[
106-
'--ros-args', '-r', '__name:=bridge_«system.name»_topics'
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»
86+
«ENDIF»«ENDFOR»
13787

13888
# *** Add actions ***
13989
«FOR component:getRos2Nodes(system)»
14090
ld.add_action(«(component as RosNode).name»)
14191
«ENDFOR»«FOR subsystem:getSubsystems(system)»
14292
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»
93+
«ENDFOR»
15094

15195
return ld
15296
'''

plugins/de.fraunhofer.ipa.rossystem.xtext/src/de/fraunhofer/ipa/rossystem/generator/RosSystemGenerator.xtend

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class RosSystemGenerator extends AbstractGenerator {
2626
@Inject extension PlantUMLCompiler
2727
@Inject extension GeneratorHelpers
2828
@Inject extension Ros1BridgesYamlFileCompiler
29+
@Inject extension BridgesLaunchFileCompiler_ROS2
2930

3031
override void doGenerate(Resource resource, IFileSystemAccess2 fsa, IGeneratorContext context) {
3132
var yaml_gen = false
@@ -79,6 +80,10 @@ class RosSystemGenerator extends AbstractGenerator {
7980
system.getName().toLowerCase+"/config/"+"ros1_bridges.yaml",
8081
compile_ROS1bridges_config(system)
8182
)
83+
fsa.generateFile(
84+
system.getName().toLowerCase+"/launch/"+system.getName()+"_bridges.launch.py",
85+
compile_toROS2launchbridges(system).toString().replace("\t"," ")
86+
)
8287
}
8388
}
8489
}

0 commit comments

Comments
 (0)