Dear Isaac ROS devs,
Always mighty thanks for continued development and support of Isaac ROS.
I see that Isaac ROS 3.2 has been released, however I wish to stick to 3.1 for a while for various reasons. While I am building isaac_ros_visual_slam from source after installing dependencies using rosdep install, I encounter several build errors as below:
/workspaces/isaac_ros-dev/src/isaac_ros_visual_slam/isaac_ros_visual_slam/src/visual_slam_node.cpp: In lambda function:
/workspaces/isaac_ros-dev/src/isaac_ros_visual_slam/isaac_ros_visual_slam/src/visual_slam_node.cpp:109:40: error: ‘NitrosStatisticsConfig’ is not a member of ‘nvidia::isaac_ros::nitros’; did you mean ‘NitrosDiagnosticsConfig’?
109 | nvidia::isaac_ros::nitros::NitrosStatisticsConfig(), image_qos_));
| ^~~~~~~~~~~~~~~~~~~~~~
| NitrosDiagnosticsConfig
/workspaces/isaac_ros-dev/src/isaac_ros_visual_slam/isaac_ros_visual_slam/src/visual_slam_node.cpp: In member function ‘void nvidia::isaac_ros::visual_slam::VisualSlamNode::CallbackGetAllPoses(std::shared_ptr<isaac_ros_visual_slam_interfaces::srv::GetAllPoses_Request_<std::allocator<void> > >, std::shared_ptr<isaac_ros_visual_slam_interfaces::srv::GetAllPoses_Response_<std::allocator<void> > >)’:
/workspaces/isaac_ros-dev/src/isaac_ros_visual_slam/isaac_ros_visual_slam/src/visual_slam_node.cpp:299:26: error: ‘CUVSLAM_GetAllSLAMPoses’ was not declared in this scope; did you mean ‘CUVSLAM_GetAllSlamPoses’?
299 | const uint32_t count = CUVSLAM_GetAllSLAMPoses(
| ^~~~~~~~~~~~~~~~~~~~~~~
| CUVSLAM_GetAllSlamPoses
/workspaces/isaac_ros-dev/src/isaac_ros_visual_slam/isaac_ros_visual_slam/src/visual_slam_node.cpp: In member function ‘void nvidia::isaac_ros::visual_slam::VisualSlamNode::CallbackLoadMapAndLocalizeAccepted(std::shared_ptr<rclcpp_action::ServerGoalHandle<isaac_ros_visual_slam_interfaces::action::LoadMapAndLocalize> >)’:
/workspaces/isaac_ros-dev/src/isaac_ros_visual_slam/isaac_ros_visual_slam/src/visual_slam_node.cpp:457:17: error: cannot convert ‘double’ to ‘const CUVSLAM_Image*’
457 | /*radius=*/ 0.0, // reserved for future implementation
| ^~~
| |
| double
I believe this is due to API-breaking changes at NITROS and CUVSLAM for Isaac ROS 3.2.
What would be the best way to manage dependencies for non-latest versions of Isaac ROS such as 3.1? rosdep install seems to install the latest available dependencies from NVIDIA apt repos. Any help to resolve this situation will be appreciated.
For these issues, could you try following and re-start the docker?
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && vim docker/Dockerfile.aarch64
# Switch all "release-3.0" to "legacy-release-3.1"
# Please edit docker/Dockerfile.x86_64 for x86.
To resolve the build errors you’re encountering with Isaac ROS 3.1, you should pin the dependencies to the specific versions compatible with 3.1. Modify your rosdep configuration to install the appropriate versions of dependencies instead of fetching the latest ones from NVIDIA’s apt repos. Ensure you’re on the correct branch or tag corresponding to Isaac ROS 3.1 in the source code. If needed, manually install older versions of NITROS and CUVSLAM that match 3.1 and patch the code for API-breaking changes, such as replacing NitrosStatisticsConfig with NitrosDiagnosticsConfig. This approach will help you manage dependencies effectively and avoid compatibility issues with newer versions like 3.2.
Thank you for your suggestion. I use the same platform as the original poster, but I set it up directly on the Ubuntu 22.4 host without using Docker. I deleted isaac_ros_common and cloned it again, but the same error message still appears. I don’t understand if I missed something. Do you have any further suggestions? I look forward to your reply. Thank you very much.
Based on the error you’re encountering, I wonder if the dependencies required for Isaac ROS were fully installed on your local Ubuntu 22.04 setup. The Dockerfiles provided for Isaac ROS include many necessary dependencies and configurations.
Have you tried analyzing the Dockerfiles and manually setting up the required dependencies on your local system? This includes installing libraries, configuring environment variables, and ensuring compatibility with your system’s architecture.
If you haven’t done this yet, I recommend reviewing the Dockerfiles (e.g., Dockerfile.aarch64) used for the Isaac ROS containers. They contain valuable information about the dependencies and setup steps that you might need to replicate in your local environment.
Let me know if you need help with this process or if you’ve already tried this approach!