1515#
1616# SPDX-License-Identifier: Apache-2.0
1717
18- from isaac_ros_launch_utils .all_types import *
18+ import isaac_ros_launch_utils .all_types as lut
1919import isaac_ros_launch_utils as lu
20- import isaac_ros_perceptor_constants as pc
2120
2221from nvblox_ros_python_utils .nvblox_launch_utils import NvbloxPeopleSegmentation
23- import nvblox_ros_python_utils .nvblox_constants as nc
2422
2523from typing import Any , List , Tuple
2624
@@ -33,92 +31,111 @@ def get_nvblox_remappings(camera_names: List[str],
3331 remappings .append ((f'camera_{ i } /depth/camera_info' , f'{ name } /camera_info' ))
3432 # NOTE(alexmillane): If in people mapping mode the first camera subscribes to color
3533 # image coming from the segmentation graph.
36- if enable_people_segmentation and name == 'front_stereo_camera' :
37- remappings .append ((f'camera_{ i } /color/image' , f'/segmentation/image_resized' ))
38- remappings .append ((f'camera_{ i } /color/camera_info' , f'/segmentation/camera_info_resized' ))
34+ if enable_people_segmentation :
35+ remappings .append ((f'camera_{ i } /color/image' , f'/{ name } /segmentation/image_resized' ))
36+ remappings .append ((f'camera_{ i } /color/camera_info' ,
37+ f'/{ name } /segmentation/camera_info_resized' ))
38+ remappings .append ((f'camera_{ i } /mask/image' , f'/{ name } /segmentation/people_mask' ))
39+ remappings .append ((f'camera_{ i } /mask/camera_info' ,
40+ f'/{ name } /segmentation/camera_info_resized' ))
3941 else :
4042 remappings .append ((f'camera_{ i } /color/image' , f'{ name } /left/image_rect' ))
4143 remappings .append ((f'camera_{ i } /color/camera_info' , f'{ name } /left/camera_info_rect' ))
42- if enable_people_segmentation :
43- remappings .append ((f'mask/image' , f'/unet/raw_segmentation_mask' ))
44- remappings .append ((f'mask/camera_info' , f'/segmentation/camera_info_resized' ))
4544 return remappings
4645
4746
48- def get_nvblox_params (camera_names : List [str ], enable_people_segmentation : bool ,
49- global_frame : str ) -> List [Any ]:
47+ def get_nvblox_params (
48+ camera_names : List [str ],
49+ enable_people_segmentation : bool ,
50+ global_frame : str ,
51+ param_filename : str ,
52+ ) -> List [Any ]:
5053 parameters = []
5154 parameters .append (lu .get_path ('nvblox_examples_bringup' , 'config/nvblox/nvblox_base.yaml' ))
52- parameters .append (lu .get_path ('isaac_ros_perceptor_bringup' , 'params/nvblox_perceptor.yaml' ))
53- parameters .append ({'num_cameras' : len (camera_names )})
54- parameters .append ({'global_frame' : global_frame })
55+
56+ # Dynamics is always enabled, unless we're running in people segmentation mode
5557 if enable_people_segmentation :
5658 parameters .append (
5759 lu .get_path ('nvblox_examples_bringup' ,
5860 'config/nvblox/specializations/nvblox_segmentation.yaml' ))
59- return parameters
61+ else :
62+ parameters .append (
63+ lu .get_path ('nvblox_examples_bringup' ,
64+ 'config/nvblox/specializations/nvblox_dynamics.yaml' ))
6065
66+ parameters .append (lu .get_path ('isaac_ros_perceptor_bringup' , param_filename ))
67+ parameters .append ({'num_cameras' : len (camera_names )})
68+ parameters .append ({'global_frame' : global_frame })
6169
62- def check_valid_nvblox_configuration (args : lu .ArgumentContainer , enable_people_segmentation : bool ):
63- if enable_people_segmentation :
64- # For now, we only allow people segmentation on the front camera.
65- segmentation_camera_names = args .enabled_stereo_cameras_for_nvblox_people .split (',' )
66- assert len (
67- segmentation_camera_names ) <= 1 , 'People segmentation is only possible for one camera.'
68- assert segmentation_camera_names [0 ] == 'front_stereo_camera' , \
69- 'People segmentation is only possible for the front stereo camera.'
70+ return parameters
7071
7172
72- def add_nvblox (args : lu .ArgumentContainer ) -> List [Action ]:
73+ def add_nvblox (args : lu .ArgumentContainer ) -> List [lut . Action ]:
7374 camera_names = args .enabled_stereo_cameras_for_nvblox .split (',' )
7475 enable_people_segmentation = len (args .enabled_stereo_cameras_for_nvblox_people ) > 0
7576
7677 remappings = get_nvblox_remappings (camera_names , enable_people_segmentation )
77- parameters = get_nvblox_params (camera_names , enable_people_segmentation , args .global_frame )
78- check_valid_nvblox_configuration (args , enable_people_segmentation )
78+ parameters = get_nvblox_params (camera_names , enable_people_segmentation ,
79+ args .nvblox_global_frame , args .param_filename )
80+ parameters .append ({'after_shutdown_map_save_path' : args .after_shutdown_map_save_path })
7981
8082 # Add the nvblox node.
81- if enable_people_segmentation :
82- nvblox_node_name = 'nvblox_human_node'
83- nvblox_plugin_name = 'nvblox::NvbloxHumanNode'
84- else :
85- nvblox_node_name = 'nvblox_node'
86- nvblox_plugin_name = 'nvblox::NvbloxNode'
87-
88- nvblox_node = ComposableNode (
89- name = nvblox_node_name ,
83+ nvblox_node = lut .ComposableNode (
84+ name = 'nvblox_node' ,
9085 package = 'nvblox_ros' ,
91- plugin = nvblox_plugin_name ,
86+ plugin = 'nvblox::NvbloxNode' ,
9287 remappings = remappings ,
9388 parameters = parameters ,
9489 )
9590
9691 actions = []
9792 actions .append (lu .load_composable_nodes (args .container_name , [nvblox_node ]))
9893 actions .append (
99- lu .log_info (["Enabling nvblox for cameras '" , args .enabled_stereo_cameras_for_nvblox , "'" ]))
94+ lu .log_info (["Enabling nvblox for cameras '" ,
95+ args .enabled_stereo_cameras_for_nvblox , "'" ]))
10096
10197 # Add people segmentation if enabled.
10298 if enable_people_segmentation :
99+ camera_namespaces = []
100+ camera_input_topics = []
101+ input_camera_info_topics = []
102+ output_resized_image_topics = []
103+ output_resized_camera_info_topics = []
104+ for _ , name in enumerate (camera_names ):
105+ camera_namespaces .append (name )
106+ camera_input_topics .append (f'/{ name } /left/image_rect' )
107+ input_camera_info_topics .append (f'/{ name } /left/camera_info_rect' )
108+ output_resized_image_topics .append (f'/{ name } /segmentation/image_resized' )
109+ output_resized_camera_info_topics .append (f'/{ name } /segmentation/camera_info_resized' )
110+
103111 actions .append (
104112 lu .include (
105113 'nvblox_examples_bringup' ,
106114 'launch/perception/segmentation.launch.py' ,
107115 launch_arguments = {
108116 'container_name' : args .container_name ,
109- 'input_topic' : '/front_stereo_camera/left/image_rect' ,
110- 'input_camera_info_topic' : '/front_stereo_camera/left/camera_info_rect' ,
111- 'people_segmentation' : NvbloxPeopleSegmentation .peoplesemsegnet_shuffleseg ,
117+ 'namespace_list' : camera_namespaces ,
118+ 'input_topic_list' : camera_input_topics ,
119+ 'input_camera_info_topic_list' : input_camera_info_topics ,
120+ 'output_resized_image_topic_list' : output_resized_image_topics ,
121+ 'output_resized_camera_info_topic_list' : output_resized_camera_info_topics ,
122+ 'num_cameras' : len (camera_names ),
123+ # Isaac 3.0 enabled people seg only on front camera, and fps drops during
124+ # replay is not reported.
125+ 'one_container_per_camera' : False ,
126+ 'people_segmentation' : NvbloxPeopleSegmentation .peoplesemsegnet_vanilla ,
112127 }))
113128
114129 return actions
115130
116131
117- def generate_launch_description () -> LaunchDescription :
132+ def generate_launch_description () -> lut . LaunchDescription :
118133 args = lu .ArgumentContainer ()
119134 args .add_arg ('enabled_stereo_cameras_for_nvblox' )
120135 args .add_arg ('enabled_stereo_cameras_for_nvblox_people' )
121136 args .add_arg ('container_name' , 'nova_container' )
122- args .add_arg ('global_frame' , 'odom' )
137+ args .add_arg ('param_filename' , 'params/nvblox_perceptor.yaml' )
138+ args .add_arg ('after_shutdown_map_save_path' , '' )
139+ args .add_arg ('nvblox_global_frame' , 'odom' )
123140 args .add_opaque_function (add_nvblox )
124- return LaunchDescription (args .get_launch_actions ())
141+ return lut . LaunchDescription (args .get_launch_actions ())
0 commit comments