1111
1212import os
1313
14+ from ament_index_python .packages import get_package_prefix
1415from ament_index_python .packages import get_package_share_directory
16+ from ament_index_python .packages import PackageNotFoundError
1517from launch import LaunchDescription
1618from launch .actions import (
1719 DeclareLaunchArgument ,
2426from launch_ros .actions import Node
2527
2628
29+ def _resolve_plugin_path (package_name , lib_name ):
30+ """Resolve a gateway plugin .so path, returning empty string if not found."""
31+ try :
32+ prefix = get_package_prefix (package_name )
33+ path = os .path .join (prefix , 'lib' , package_name , f'lib{ lib_name } .so' )
34+ if os .path .isfile (path ):
35+ return path
36+ except PackageNotFoundError :
37+ pass
38+ return ''
39+
40+
2741def generate_launch_description ():
2842 # Get package share directories
2943 demo_pkg_dir = get_package_share_directory ("moveit_medkit_demo" )
@@ -35,6 +49,24 @@ def generate_launch_description():
3549 medkit_params_file = os .path .join (demo_pkg_dir , "config" , "medkit_params.yaml" )
3650 manifest_file = os .path .join (demo_pkg_dir , "config" , "panda_manifest.yaml" )
3751
52+ # Resolve plugin paths
53+ graph_provider_path = _resolve_plugin_path (
54+ 'ros2_medkit_graph_provider' , 'ros2_medkit_graph_provider_plugin' )
55+ procfs_plugin_path = _resolve_plugin_path (
56+ 'ros2_medkit_linux_introspection' , 'procfs_introspection' )
57+
58+ # Build plugin overrides - only include plugins that were found
59+ plugin_overrides = {}
60+ active_plugins = []
61+ if graph_provider_path :
62+ active_plugins .append ('graph_provider' )
63+ plugin_overrides ['plugins.graph_provider.path' ] = graph_provider_path
64+ if procfs_plugin_path :
65+ active_plugins .append ('procfs_introspection' )
66+ plugin_overrides ['plugins.procfs_introspection.path' ] = procfs_plugin_path
67+ if active_plugins :
68+ plugin_overrides ['plugins' ] = active_plugins
69+
3870 # Launch configuration variables
3971 use_sim_time = LaunchConfiguration ("use_sim_time" , default = "False" )
4072 headless = LaunchConfiguration ("headless" , default = "False" )
@@ -128,6 +160,7 @@ def generate_launch_description():
128160 "use_sim_time" : use_sim_time ,
129161 "discovery.manifest_path" : manifest_file ,
130162 },
163+ plugin_overrides ,
131164 ],
132165 ),
133166 # === Foxglove Bridge (WebSocket on port 8765) ===
0 commit comments