(1)Launch Ros2 Common container
(2)See Topics
ros2 topic list
(3)Examine rqt_graph
(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
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
(5)Display information about a ROS 2 bag file
nvblox1
nvblox2
nvblox3
ros2 bag info nvblox3
(6)Play the recorded Ros2 bag file
nvblox1
nvblox2
nvblox3
ros2 bag play nvblox3
(7)Check by echoing the message
nvblox1
nvblox2
nvblox3
ros2 topic echo /bond
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
(1)Launch Ros2 Common container
(2)See Topics
ros2 topic list
(3)Examine rqt_graph
rqt_graph
Select Nodes/Topics(Active)
(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
(5)Display information about a ROS 2 bag file
ros2 bag info humannvblox1
(6)Play the recorded Ros2 bag file
ros2 bag play humannvblox1
(7)Check by echoing the message
humannvblox1
ros2 topic echo /local_plan
Rosbag Data Files:
humannvblox1: https://drive.google.com/drive/folders/1EJ8uigjMSpYegkjQlVWa-0z0LPxhgBML?usp=sharing
(1)Use the randomization options of the above script. To do so:
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
(1)Launch Ros2 Common container
(2)See Topics
ros2 topic list
(3)Examine rqt_graph
rqt_graph
Select Nodes/Topics(Active)
(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
(5)Display information about a ROS 2 bag file
dynamicnvblox1
ros2 bag info dynamicnvblox1
dynamicnvblox2
ros2 bag info dynamicnvblox2
(6)Play the recorded Ros2 bag file
dynamicnvblox1
ros2 bag play dynamicnvblox1
dynamicnvblox2
ros2 bag play dynamicnvblox2
(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
dynamicnvblox2
ros2 topic echo /front/stereo_camera/right/semantic
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