Record Isaac ROS Nvblox Repository

Record Static Reconstruction

Ros2 bag

(1)Launch Ros2 Common container
Nvblox_Record1
(2)See Topics

ros2 topic list

Nvblox_Record2
(3)Examine rqt_graph
Nvblox2-38
(4)Record the topics subscribing only for the Nvblox Repository
Command:

ros2 bag record -o nvblox1 /mesh /mesh_marker /static_esdf_pointcloud /static_map_slice /static_occupancy /map_slice_bounds /back_projected_depth /dynamic_occupancy /dynamic_esdf_pointcloud /dynamic_map_slice /dynamic_points /dynamic_depth_frame_overlay /freespace /combined_esdf_pointcloud /combined_map_slice

Command2:

ros2 bag record -o nvblox1 /front/stereo_camera/left/rgb /front/stereo_camera/left/camera_info /tf /transform /nvblox_node /nvblox_human_node /planner_server /bt_navigator /behavior_server /smoother_server /velocity_smoother /waypoint_follower /global_costmap/global_costmap /bond

Nvblox2-39
Command3:

ros2 bag record -o nvblox3 \
/global_costmap/costmap_raw \
/global_costmap/costmap \
/behavior_server/transition_event \
/global_costmap/costmap_updates \
/bt_navigator/transition_event \
/global_costmap/global_costmap/transition_event \
/plan_smoothed \
/planner_server/transition_event \
/global_costmap/published_footprint \
/plan \
/front/stereo_camera/left/rgb \
/front/stereo_camera/left/camera_info \
/tf \
/transform \
/nvblox_node \
/nvblox_human_node \
/planner_server \
/bt_navigator \
/behavior_server \
/smoother_server \
/velocity_smoother \
/waypoint_follower \
/global_costmap/global_costmap \
/bond

Nvblox2-49

(5)Display information about a ROS 2 bag file
nvblox1
Nvblox2-40
nvblox2
Nvblox2-43
nvblox3

ros2 bag info nvblox3

Nvblox2-50
(6)Play the recorded Ros2 bag file
nvblox1
Nvblox2-41
nvblox2
Nvblox2-46
nvblox3

ros2 bag play nvblox3

Nvblox2-53
(7)Check by echoing the message
nvblox1
Nvblox2-44
nvblox2
Nvblox2-45
nvblox3

ros2 topic echo /bond

Nvblox2-51
Nvblox2-52
Rosbag Data Files: Nvblox1: https://drive.google.com/drive/folders/1nUen8gcKWVbZOp92moKA_A-Y1Cqvbxzt?usp=sharing
Nvblox2: https://drive.google.com/drive/folders/1m7kGxxKQ_zyDKCj4C6x-W4Fal-SlocVm?usp=sharing
Nvblox3: https://drive.google.com/drive/folders/1Kq51JWFLzy_WMcmDXdB8ZNe0DUN7DArK?usp=sharing

Record human Reconstruction

Running with Demonstration Path

(1)Launch Ros2 Common container
Nvblox2-29
(2)See Topics

ros2 topic list

Nvblox2-28
(3)Examine rqt_graph

rqt_graph

Nvblox2-58
Select Nodes/Topics(Active)
Nvblox2-65
(4)Record the topics subscribing only for the Nvblox Repository

ros2 bag record -o humannvblox1 \
/behavior_server/transition_event \
/behavior_tree_log \
/bond \
/bt_navigator/transition_event \
/clicked_point \
/clock \
/cmd_vel \
/cmd_vel_nav \
/controller_server/transition_event \
/cost_cloud \
/diagnostics \
/evaluation \
/front/stereo_camera/left/camera_info \
/front/stereo_camera/left/depth \
/front/stereo_camera/left/rgb \
/front/stereo_camera/left/semantic \
/front/stereo_camera/left/semantic_labels \
/front/stereo_camera/right/camera_info \
/front/stereo_camera/right/depth \
/global_costmap/costmap \
/global_costmap/costmap_raw \
/global_costmap/costmap_updates \
/global_costmap/footprint \
/global_costmap/global_costmap/transition_event \
/global_costmap/published_footprint \
/goal_pose \
/initialpose \
/local_costmap/costmap \
/local_costmap/costmap_raw \
/local_costmap/costmap_updates \
/local_costmap/footprint \
/local_costmap/local_costmap/transition_event \
/local_costmap/published_footprint \
/local_plan \
/marker \
/nvblox_human_node/dynamic_map_slice \
/nvblox_node/back_projected_depth \
/nvblox_node/combined_esdf_pointcloud \
/nvblox_node/combined_map_slice \
/nvblox_node/dynamic_depth_frame_overlay \
/nvblox_node/dynamic_esdf_pointcloud \
/nvblox_node/dynamic_map_slice \
/nvblox_node/dynamic_occupancy \
/nvblox_node/dynamic_points \
/nvblox_node/freespace \
/nvblox_node/map_slice_bounds \
/nvblox_node/mesh \
/nvblox_node/mesh_marker \
/nvblox_node/static_esdf_pointcloud \
/nvblox_node/static_map_slice \
/nvblox_node/static_occupancy \
/odom \
/parameter_events \
/plan \
/plan_smoothed \
/planner_server/transition_event \
/pose \
/received_global_plan \
/rosout \
/smoother_server/transition_event \
/speed_limit \
/tf \
/tf_static \
/transform \
/transformed_global_plan \
/velocity_smoother/transition_event \
/waypoint_follower/transition_event

Nvblox2-66

(5)Display information about a ROS 2 bag file

ros2 bag info humannvblox1

Nvblox2-67
(6)Play the recorded Ros2 bag file

ros2 bag play humannvblox1

Nvblox2-69
(7)Check by echoing the message
humannvblox1

ros2 topic echo /local_plan

Nvblox2-68
Rosbag Data Files:
humannvblox1: https://drive.google.com/drive/folders/1EJ8uigjMSpYegkjQlVWa-0z0LPxhgBML?usp=sharing

Running with Custom Human Paths

(1)Use the randomization options of the above script. To do so:
Nvblox2-31
This launches the scene headless (without visualization) and generates a new human_cmd_file.txt in
By default, it generates 5 waypoints per human, but it is possible to change this with the option --num_waypoints=
You can then upload the script file to replace the default one, or use the same command as step

Record Dynamic Reconstruction

(1)Launch Ros2 Common container
Nvblox2-56
(2)See Topics

ros2 topic list

Nvblox2-64
(3)Examine rqt_graph

rqt_graph

Nvblox2-58
Select Nodes/Topics(Active)
Nvblox2-59
(4)Record the topics subscribing only for the Nvblox Repository
Command1:

ros2 bag record -o dynamicnvblox1 \
/behavior_server/transition_event \
/behavior_tree_log \
/bond \
/bt_navigator/transition_event \
/clicked_point \
/clock \
/cmd_vel \
/cmd_vel_nav \
/controller_server/transition_event \
/cost_cloud \
/diagnostics \
/evaluation \
/front/stereo_camera/left/camera_info \
/front/stereo_camera/left/depth \
/front/stereo_camera/left/rgb \
/front/stereo_camera/left/semantic \
/front/stereo_camera/left/semantic_labels \
/front/stereo_camera/right/camera_info \
/front/stereo_camera/right/depth \
/front/stereo_camera/right/rgb \
/front/stereo_camera/right/semantic \
/front/stereo_camera/right/semantic_labels \
/global_costmap/costmap \
/global_costmap/costmap_raw \
/global_costmap/costmap_updates \
/global_costmap/footprint \
/global_costmap/global_costmap/transition_event \
/global_costmap/published_footprint \
/goal_pose \
/initialpose \
/local_costmap/costmap \
/local_costmap/costmap_raw \
/local_costmap/costmap_updates \
/local_costmap/footprint \
/local_costmap/local_costmap/transition_event \
/local_costmap/published_footprint \
/local_plan \
/marker \
/nvblox_human_node/dynamic_map_slice \
/nvblox_node/combined_esdf_pointcloud \
/nvblox_node/dynamic_occupancy \
/nvblox_node/mesh \
/nvblox_node/static_map_slice \
/odom \
/parameter_events \
/plan \
/plan_smoothed \
/planner_server/transition_event \
/received_global_plan \
/rosout \
/smoother_server/transition_event \
/speed_limit \
/tf \
/tf_static \
/transformed_global_plan \
/velocity_smoother/transition_event \
/waypoint_follower/transition_event

Command2:

ros2 bag record -o dynamicnvblox2 \
/behavior_server/transition_event \
/behavior_tree_log \
/bond \
/bt_navigator/transition_event \
/clicked_point \
/clock \
/cmd_vel \
/cmd_vel_nav \
/controller_server/transition_event \
/cost_cloud \
/diagnostics \
/evaluation \
/front/stereo_camera/left/camera_info \
/front/stereo_camera/left/depth \
/front/stereo_camera/left/rgb \
/front/stereo_camera/left/semantic \
/front/stereo_camera/left/semantic_labels \
/front/stereo_camera/right/camera_info \
/front/stereo_camera/right/depth \
/front/stereo_camera/right/rgb \
/front/stereo_camera/right/semantic \
/front/stereo_camera/right/semantic_labels \
/global_costmap/costmap \
/global_costmap/costmap_raw \
/global_costmap/costmap_updates \
/global_costmap/footprint \
/global_costmap/global_costmap/transition_event \
/global_costmap/published_footprint \
/goal_pose \
/initialpose \
/local_costmap/costmap \
/local_costmap/costmap_raw \
/local_costmap/costmap_updates \
/local_costmap/footprint \
/local_costmap/local_costmap/transition_event \
/local_costmap/published_footprint \
/local_plan \
/marker \
/nvblox_human_node/dynamic_map_slice \
/nvblox_node/combined_esdf_pointcloud \
/nvblox_node/dynamic_occupancy \
/nvblox_node/mesh \
/nvblox_node/static_map_slice \
/odom \
/parameter_events \
/plan \
/plan_smoothed \
/planner_server/transition_event \
/received_global_plan \
/rosout \
/smoother_server/transition_event \
/speed_limit \
/tf \
/tf_static \
/transformed_global_plan \
/velocity_smoother/transition_event \
/waypoint_follower/transition_event

Nvblox2-70
(5)Display information about a ROS 2 bag file
dynamicnvblox1

ros2 bag info dynamicnvblox1

Nvblox2-72
dynamicnvblox2

ros2 bag info dynamicnvblox2

Nvblox2-71
(6)Play the recorded Ros2 bag file
dynamicnvblox1

ros2 bag play dynamicnvblox1

Nvblox2-73
dynamicnvblox2

ros2 bag play dynamicnvblox2

Nvblox2-75
(7)Check by echoing the message
Run Container

cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
  ./scripts/run_dev.sh

dynamicnvblox1

ros2 topic echo /front/stereo_camera/right/semantic

Nvblox2-74
dynamicnvblox2

ros2 topic echo /front/stereo_camera/right/semantic

Nvblox2-76

Rosbag Data Files:
humannvblox1: https://drive.google.com/drive/folders/1EJ8uigjMSpYegkjQlVWa-0z0LPxhgBML?usp=sharing

ROS Topics Subscribed
| ROS Topic | Interface | Description | |—————————|————————————-|————-| | pointcloud | sensor_msgs/PointCloud2 | Input 3D LIDAR pointcloud. Make sure to set the lidar intrinsic parameters if using this input, as it uses those to convert the pointcloud into a depth image. | | color/image | sensor_msgs/Image | Optional input color image to be integrated. Must be paired with a camera_info message below. Only used to color the mesh. | | color/camera_info | sensor_msgs/CameraInfo | Optional topic along with the color image above. Contains intrinsics of the color camera. | | depth/image | sensor_msgs/Image | The input depth image to be integrated. Must be paired with a camera_info message below. Supports both floating-point (depth in meters) and uint16 (depth in millimeters, OpenNI format). | | depth/camera_info | sensor_msgs/CameraInfo | Required topic along with the depth image. Contains intrinsic calibration parameters of the depth camera. | | transform | geometry_msgs/TransformStamped | Odometry as stamped transform messages. Not required if use_tf_transforms is set to true. | | pose | geometry_msgs/PoseStamped | Odometry as stamped pose messages. Not required if use_tf_transforms is set to true. |

ROS Topics Published
| ROS Topic | Interface | Description | |—————————-|——————————–|————-| | ~mesh | nvblox_msgs/Mesh | A visualization topic showing the mesh produced from the TSDF in a form that can be seen in RViz using nvblox_rviz_plugin. Set mesh_update_rate_hz to control its update rate. | | ~mesh_marker | visualization_msgs/Marker | A visualization topic showing the mesh using a marker message. | | ~static_esdf_pointcloud | sensor_msgs/PointCloud2 | A pointcloud of the static 2D ESDF (Euclidean Signed Distance Field), with intensity as the metric distance to the nearest obstacle. Set esdf_update_rate_hz to control its update rate. | | ~static_map_slice | nvblox_msgs/DistanceMapSlice | A 2D slice of the static ESDF, to be consumed by nvblox_nav2 package for interfacing with Nav2. Set esdf_update_rate_hz to control its update rate. | | ~static_occupancy | sensor_msgs/PointCloud2 | A pointcloud of the static occupancy map (only voxels with occupation probability > 0.5). Set static_occupancy_publication_rate_hz to control its publication rate. | | ~map_slice_bounds | visualization_msgs/Marker | A visualization topic showing the mesh slice bounds that can be set with the parameters esdf_2d_min_height and esdf_2d_min_height. | | ~back_projected_depth | sensor_msgs/PointCloud2 | A pointcloud of the back projected latest depth image in the global frame. | | ~dynamic_occupancy | sensor_msgs/PointCloud2 | A pointcloud of the human/dynamic occupancy map (only voxels with occupation probability > 0.5). | | ~dynamic_esdf_pointcloud | sensor_msgs/PointCloud2 | A pointcloud of the human/dynamic 2D ESDF (Euclidean Signed Distance Field), with intensity as the metric distance to the nearest human. Set esdf_update_rate_hz to control its update rate. | | ~dynamic_map_slice | nvblox_msgs/DistanceMapSlice | A 2D slice of the human/dynamic ESDF, to be consumed by nvblox_nav2 package for interfacing with Nav2. Set esdf_update_rate_hz to control its update rate. | | ~dynamic_points | sensor_msgs/PointCloud2 | Pointcloud visualizing the back-projected pixels of the latest human/dynamic masked depth frame (without temporal fusion). | | /dynamic_depth_frame_overlay | sensor_msgs/Image | Debug image showing the dynamic/human mask overlaid on the depth image. Note: The overlay is showing the mask before postprocessing. | | ~freespace | sensor_msgs/PointCloud2 | Pointcloud visualizing all non high confidence freespace voxels inside a 5x5x1 m box around the depth camera. | | ~combined_esdf_pointcloud| sensor_msgs/PointCloud2 | A pointcloud of the combined static and human/dynamic 2D ESDF (minimal distance of both), with intensity as the metric distance to the nearest obstacle or human. Set esdf_update_rate_hz to control its update rate. | | ~combined_map_slice | nvblox_msgs/DistanceMapSlice | A 2D slice of the combined static and human/dynamic ESDF (minimal distance of both), to be consumed by nvblox_nav2 package for interfacing with Nav2. Set esdf_update_rate_hz to control its update rate. |

Resources
https://drive.google.com/drive/folders/1104cJ0gekPOrVGCAGhBKhpn_0PnAoshn?usp=sharing

Reference:
https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/isaac_ros_nvblox/api/topics_and_services.html
https://www.youtube.com/watch?v=a-O1qM9_S7k