Latest Isaac ROS causes error in Jetson AGX Xavier

I am trying to install Isaac ROS nvblox on a Jetson AGX Xavier, but the ROS package gives a build error.

Jetson AGX Xavier
Jetpack 5.0.2(L4T 35.1)

Q1: It says “Jetson Xavier” is supported
Is both NX and AGX supported?

Q2: Please let me know the cause of the build error.
I have installed the latest version of nvblox according to Quickstart.

When I run Step 7, I get errors for several packages.
realsense2_camera
isaac_ros_test
nvblox_cpu_gpu_tools
nvblox_isaac_sim


Test 1. realsense package
I also tried Humble fixes for realsense_camera2.

If I build only realsense_camera2, I got
“realsense2_camera_msgs”, “realsense2_description” build completed.
“realsense2_camera” fails.

Test 2. Ignore realsense package
If I set the realsense package to COLCON_IGNORE, the following package will cause an error

isaac_ros_test
nvblox_cpu_gpu_tools
nvblox_isaac_sim

Yes, both Xavier NX and AGX Xavier are supported in Isaac ROS DP1.1 (v0.11.0).

Could you provide some detail on what the errors were for each package? You may not have the Intel Realsense SDK installed which is causing the realsense2_camera ROS2 package to fail to build. We provide a way to add that to your Isaac ROS Dev container if you’re using this (here).

Thanks for the advice.
I re-installed the realsense2_camera package based on the link, but the situation was the same.

The error is as follows.

xavier$ pwd
/workspaces/isaac_ros-dev

xavier$ ls src/
isaac_ros_common  isaac_ros_nvblox  realsense-ros

xavier$ colcon build --symlink-install
Starting >>> nvblox_msgs
Starting >>> realsense2_camera_msgs
Starting >>> nvblox
Starting >>> isaac_ros_test
Finished <<< realsense2_camera_msgs [8.70s]
Starting >>> nvblox_cpu_gpu_tools
--- stderr: isaac_ros_test
/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py:123: PkgResourcesDeprecationWarning: 0.23ubuntu1 is an invalid version and will not be supported in a future release
  warnings.warn(
---
Finished <<< isaac_ros_test [13.5s]
Starting >>> nvblox_performance_measurement_msgs
--- stderr: nvblox_cpu_gpu_tools
/usr/local/lib/python3.8/dist-packages/pkg_resources/__init__.py:123: PkgResourcesDeprecationWarning: 0.23ubuntu1 is an invalid version and will not be supported in a future release
  warnings.warn(
---
Finished <<< nvblox_cpu_gpu_tools [14.6s]
Starting >>> realsense2_camera
[Processing: nvblox, nvblox_msgs, nvblox_performance_measurement_msgs, realsense2_camera]
[Processing: nvblox, nvblox_msgs, nvblox_performance_measurement_msgs, realsense2_camera]
Finished <<< nvblox_msgs [1min 42s]
Starting >>> nvblox_nav2
--- stderr: realsense2_camera
/workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/src/base_realsense_node.cpp: In member function ‘rclcpp::Time realsense2_camera::BaseRealSenseNode::frameSystemTimeSec(rs2::frame)’:
/workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/src/base_realsense_node.cpp:2064:58: error: no matching function for call to ‘rclcpp::Duration::Duration(double&)’
 2064 |         rclcpp::Duration elapsed_camera(elapsed_camera_ns);
      |                                                          ^
In file included from /opt/ros/humble/install/include/rclcpp/rclcpp/qos.hpp:20,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/node_interfaces/node_graph_interface.hpp:32,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/client.hpp:42,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/callback_group.hpp:23,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/any_executable.hpp:20,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/memory_strategy.hpp:25,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/memory_strategies.hpp:18,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/executor_options.hpp:20,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/executor.hpp:37,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/executors/multi_threaded_executor.hpp:25,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/executors.hpp:21,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/rclcpp.hpp:155,
                 from /workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/include/ros_param_backend.h:1,
                 from /workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/include/dynamic_params.h:3,
                 from /workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/include/base_realsense_node.h:11,
                 from /workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/src/base_realsense_node.cpp:1:
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:151:3: note: candidate: ‘rclcpp::Duration::Duration()’
  151 |   Duration() = default;
      |   ^~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:151:3: note:   candidate expects 0 arguments, 1 provided
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:61:3: note: candidate: ‘rclcpp::Duration::Duration(const rclcpp::Duration&)’
   61 |   Duration(const Duration & rhs);
      |   ^~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:61:29: note:   no known conversion for argument 1 from ‘double’ to ‘const rclcpp::Duration&’
   61 |   Duration(const Duration & rhs);
      |            ~~~~~~~~~~~~~~~~~^~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:59:12: note: candidate: ‘rclcpp::Duration::Duration(const rcl_duration_t&)’
   59 |   explicit Duration(const rcl_duration_t & duration);
      |            ^~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:59:44: note:   no known conversion for argument 1 from ‘double’ to ‘const rcl_duration_t&’ {aka ‘const rcl_duration_s&’}
   59 |   explicit Duration(const rcl_duration_t & duration);
      |                     ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:53:3: note: candidate: ‘rclcpp::Duration::Duration(const Duration&)’
   53 |   Duration(const builtin_interfaces::msg::Duration & duration_msg);  // NOLINT(runtime/explicit)
      |   ^~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:53:54: note:   no known conversion for argument 1 from ‘double’ to ‘const Duration&’ {aka ‘const builtin_interfaces::msg::Duration_<std::allocator<void> >&’}
   53 |   Duration(const builtin_interfaces::msg::Duration & duration_msg);  // NOLINT(runtime/explicit)
      |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:48:3: note: candidate: ‘template<class Rep, class Period> rclcpp::Duration::Duration(const std::chrono::duration<_Rep1, _Period1>&)’
   48 |   Duration(const std::chrono::duration<Rep, Period> & duration)  // NOLINT(runtime/explicit)
      |   ^~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:48:3: note:   template argument deduction/substitution failed:
/workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/src/base_realsense_node.cpp:2064:58: note:   mismatched types ‘const std::chrono::duration<_Rep1, _Period1>’ and ‘double’
 2064 |         rclcpp::Duration elapsed_camera(elapsed_camera_ns);
      |                                                          ^
In file included from /opt/ros/humble/install/include/rclcpp/rclcpp/qos.hpp:20,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/node_interfaces/node_graph_interface.hpp:32,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/client.hpp:42,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/callback_group.hpp:23,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/any_executable.hpp:20,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/memory_strategy.hpp:25,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/memory_strategies.hpp:18,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/executor_options.hpp:20,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/executor.hpp:37,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/executors/multi_threaded_executor.hpp:25,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/executors.hpp:21,
                 from /opt/ros/humble/install/include/rclcpp/rclcpp/rclcpp.hpp:155,
                 from /workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/include/ros_param_backend.h:1,
                 from /workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/include/dynamic_params.h:3,
                 from /workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/include/base_realsense_node.h:11,
                 from /workspaces/isaac_ros-dev/src/realsense-ros/realsense2_camera/src/base_realsense_node.cpp:1:
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:42:12: note: candidate: ‘rclcpp::Duration::Duration(std::chrono::nanoseconds)’
   42 |   explicit Duration(std::chrono::nanoseconds nanoseconds);
      |            ^~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:42:46: note:   no known conversion for argument 1 from ‘double’ to ‘std::chrono::nanoseconds’ {aka ‘std::chrono::duration<long int, std::ratio<1, 1000000000> >’}
   42 |   explicit Duration(std::chrono::nanoseconds nanoseconds);
      |                     ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:39:3: note: candidate: ‘rclcpp::Duration::Duration(int32_t, uint32_t)’
   39 |   Duration(int32_t seconds, uint32_t nanoseconds);
      |   ^~~~~~~~
/opt/ros/humble/install/include/rclcpp/rclcpp/duration.hpp:39:3: note:   candidate expects 2 arguments, 1 provided
make[2]: *** [CMakeFiles/realsense2_camera.dir/build.make:90: CMakeFiles/realsense2_camera.dir/src/base_realsense_node.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:139: CMakeFiles/realsense2_camera.dir/all] Error 2
make: *** [Makefile:146: all] Error 2
---
Failed   <<< realsense2_camera [1min 41s, exited with code 2]
Aborted  <<< nvblox_nav2 [27.2s]
Aborted  <<< nvblox_performance_measurement_msgs [2min 16s]
Aborted  <<< nvblox [21min 16s]

Summary: 4 packages finished [21min 18s]
  1 package failed: realsense2_camera
  3 packages aborted: nvblox nvblox_nav2 nvblox_performance_measurement_msgs
  3 packages had stderr output: isaac_ros_test nvblox_cpu_gpu_tools realsense2_camera
  12 packages not processed

I have reviewed the installation procedure in detail.

There is an error in step 6 (“No definition of [xacro] for OS version”).
Is this the reason why I cannot build the realsense packages?

# Step6:"Inside the container, install package-specific dependencies via rosdep:"

$ cd /workspaces/isaac_ros-dev/
$ rosdep install -i -r --from-paths src --rosdistro humble -y --skip-keys "libopencv-dev libopencv-contrib-dev libopencv-imgproc-dev python-opencv python3-opencv nvblox"
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
realsense2_description: No definition of [xacro] for OS version [focal]
realsense2_camera: No definition of [librealsense2] for OS version [focal]
Continuing to install resolvable dependencies...
#All required rosdeps installed successfully

I also searched for this error message and found the following question.

However, the “No definition” error is the same when I run the following command
Any ideas on how to resolve the rosdep error?

rosdep install -i --from-path src --ignore-src -r -y --rosdistro $ROS_DISTRO

Yes, it looks like librealsense2 isn’t installed and needs to be built from source. If you’re using Isaac ROS Dev base images, you can take a look here for how to configure run_dev.sh to build librealsense2 for you into the Docker development image.

I have implemented librealsense2 support.
The message at Docker startup is as follows
The configuration of realsense is loaded.

 xavier$ pwd
/home/agx/workspaces/isaac_ros-dev/src/isaac_ros_common

#librealsense support
xavier$ cat scripts/.isaac_ros_common-config
CONFIG_IMAGE_KEY=humble.nav2.realsense
CONFIG_DOCKER_SEARCH_DIRS=($DOCKER_DIR/realsense-dockerfile-example)

#run docker
xavier$ ./scripts/run_dev.sh
isaac_ros_dev not specified, assuming /home/agx/workspaces/isaac_ros-dev
~/workspaces/isaac_ros-dev/src/isaac_ros_common ~/workspaces/isaac_ros-dev/src/isaac_ros_common
Error: Failed to call git rev-parse --git-dir: exit status 128
Building aarch64.humble.nav2.realsense.user base as image: isaac_ros_dev-aarch64 using key aarch64.humble.nav2.realsense.user
Using configured docker search paths: /home/agx/workspaces/isaac_ros-dev/src/isaac_ros_common/scripts/../docker/realsense-dockerfile-example /home/agx/workspaces/isaac_ros-dev/src/isaac_ros_common/scripts/../docker
Using base image name not specified, using ''
Using docker context dir not specified, using Dockerfile directory
Resolved the following Dockerfiles for target image: aarch64.humble.nav2.realsense.user
/home/agx/workspaces/isaac_ros-dev/src/isaac_ros_common/scripts/../docker/Dockerfile.user
/home/agx/workspaces/isaac_ros-dev/src/isaac_ros_common/scripts/../docker/realsense-dockerfile-example/Dockerfile.realsense
/home/agx/workspaces/isaac_ros-dev/src/isaac_ros_common/scripts/../docker/Dockerfile.aarch64.humble.nav2
Building /home/agx/workspaces/isaac_ros-dev/src/isaac_ros_common/scripts/../docker/Dockerfile.aarch64.humble.nav2 as image: aarch64-humble-nav2-image with base:
Sending build context to Docker daemon  82.43kB

But is the error just after “run_dev.sh” is related?
Error: Failed to call git rev-parse --git-dir: exit status 128

This error appears regardless of whether or not the realsense configuration has been implemented.

No, the error line is an innocuous warning. The script runs git lfs commands in a non-Git workspace. We need to fix a bug that expects the directory ~/workspaces/isaac_ros-dev to always be a Git repository.

The build was successful with the latest nvblox release in November 2022.
The bug must have been fixed.

I am now able to connect Realsense and create 3d map.
Thank you for your answer.