Hi I'm using ROS2 and realsense D435i to implement a navigation application, the setup are below:
in short, I implement this examples which would brings up the realsense node, nvblox, and VSLAM.
which runs well when all nodes in same machine.
https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nvblox/blob/main/docs/tutorial-nvblox-vslam-realsense.md
and I divided them for realsense node only running on the jetson board on my robots, nvblox and VSLAM runs in the edge server
robots and edge server are connected with ethernet cables, and I test they can ping and use the talker listener examples from ROS2 well.
Problems:
When I start realsense node at the jetson board side, I can see topics and image data in edge server.
But when I bring up the nvblox and VSLAM nodes, edge side doesn't see the image but the topic name still there, but jetson side can see the image data.
Is that I have any mistakes in launch files or network setup?
the launch files are as follows:
nvr_debug_jetson.launch.py
Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
NVIDIA CORPORATION and its licensors retain all intellectual property
and proprietary rights in and to this software, related documentation
and any modifications thereto. Any use, reproduction, disclosure or
distribution of this software and related documentation without an express
license agreement from NVIDIA CORPORATION is strictly prohibited.
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.descriptions import ComposableNode
from launch_ros.actions import ComposableNodeContainer
def generate_launch_description():
Realsense
realsense_config_file_path = os.path.join(
get_package_share_directory('nvblox_examples_bringup'),
'config', 'realsense.yaml'
)
realsense_node = ComposableNode(
namespace="camera",
package='realsense2_camera',
plugin='realsense2_camera::RealSenseNodeFactory',
parameters=[realsense_config_file_path],
)
realsense_splitter_node = ComposableNode(
namespace="camera",
name='realsense_splitter_node',
package='realsense_splitter',
plugin='nvblox::RealsenseSplitterNode',
parameters=[{
'input_qos': 'SENSOR_DATA',
'output_qos': 'SENSOR_DATA'
}],
remappings=[('input/infra_1', '/camera/infra1/image_rect_raw'),
('input/infra_1_metadata', '/camera/infra1/metadata'),
('input/infra_2', '/camera/infra2/image_rect_raw'),
('input/infra_2_metadata', '/camera/infra2/metadata'),
('input/depth', '/camera/depth/image_rect_raw'),
('input/depth_metadata', '/camera/depth/metadata'),
('input/pointcloud', '/camera/depth/color/points'),
('input/pointcloud_metadata', '/camera/depth/metadata'),
]
)
realsense_container = ComposableNodeContainer(
name='realsense_container',
namespace='',
package='rclcpp_components',
executable='component_container',
composable_node_descriptions=[
realsense_node,
realsense_splitter_node
],
output='screen'
)
base_link_tf_node = Node(
package='tf2_ros',
executable='static_transform_publisher',
arguments=[
'0.16', '0', '0.11', '0', '0', '0', '1',
'base_link', 'camera_link']
)
return LaunchDescription([
realsense_container,
base_link_tf_node
])
nvr_debug_edge.launch.py
Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved.
NVIDIA CORPORATION and its licensors retain all intellectual property
and proprietary rights in and to this software, related documentation
and any modifications thereto. Any use, reproduction, disclosure or
distribution of this software and related documentation without an express
license agreement from NVIDIA CORPORATION is strictly prohibited.
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
from launch_ros.descriptions import ComposableNode
from launch_ros.actions import ComposableNodeContainer
def generate_launch_description():
VSLAM
visual_slam_node = Node(
name='visual_slam_node',
package='isaac_ros_visual_slam',
executable='isaac_ros_visual_slam',
parameters=[{
'enable_rectified_pose': True,
'denoise_input_images': False,
'rectified_images': True,
'enable_debug_mode': False,
'debug_dump_path': '/tmp/vslam',
'enable_slam_visualization': True,
'enable_landmarks_view': True,
'enable_observations_view': True,
'map_frame': 'map',
'odom_frame': 'odom',
'base_frame': 'base_link',
'input_left_camera_frame': 'camera_infra1_frame',
'input_right_camera_frame': 'camera_infra2_frame',
'enable_localization_n_mapping': True,
'publish_odom_to_base_tf': True,
'publish_map_to_odom_tf': True,
}],
remappings=[('stereo_camera/left/image', '/camera/infra1/image_rect_raw'),
('stereo_camera/left/camera_info', '/camera/infra1/camera_info'),
('stereo_camera/right/image', '/camera/infra2/image_rect_raw'),
('stereo_camera/right/camera_info', '/camera/infra2/camera_info')]
)
Nvblox
nvblox_config = DeclareLaunchArgument(
'nvblox_config', default_value=os.path.join(
get_package_share_directory(
'nvblox_examples_bringup'), 'config', 'nvblox.yaml'
)
)
nvblox_node = Node(
package='nvblox_ros',
executable='nvblox_node',
parameters=[LaunchConfiguration('nvblox_config')],
output='screen',
remappings=[
("depth/camera_info", "/camera/depth/camera_info"),
("depth/image", "/camera/realsense_splitter_node/output/depth"),
("color/camera_info", "/camera/color/camera_info"),
("color/image", "/camera/color/image_raw")
]
)
RVIZ
rviz_config_path = os.path.join(get_package_share_directory(
'nvblox_examples_bringup'), 'config', 'nvblox_vslam_realsense.rviz')
print(rviz_config_path)
rviz = Node(
package='rviz2',
executable='rviz2',
arguments=['-d', rviz_config_path],
output='screen')
return LaunchDescription([
nvblox_config,
visual_slam_node,
nvblox_node,
rviz
])