NVIDIA-ISAAC-ROS / NVIDIA-ISAAC-ROS/isaac_ros_nitros

NitrosPointCloud: Error when trying to implement pub/sub

Open
#49 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
220
Forks
55
PR merge metrics
No merged PRs in 30d

Description

I am trying to implement a custom_nitros_pointcloud example, similar to the other isaac_ros_managed_nitros_examples. However, when trying to compile the decoder, which has a subscriber to the NitrosPointCloud message, i get the error:

Starting >>> custom_nitros_pointcloud
--- stderr: custom_nitros_pointcloud                             
In file included from /workspaces/isaac_ros-dev/src/custom_nitros_pointcloud/include/custom_nitros_pointcloud/pointcloud_decoder_node.hpp:25,
                 from /workspaces/isaac_ros-dev/src/custom_nitros_pointcloud/src/pointcloud_decoder_node.cpp:18:
/workspaces/isaac_ros-dev/install/isaac_ros_managed_nitros/share/isaac_ros_managed_nitros/gxf/include/isaac_ros_managed_nitros/managed_nitros_subscriber.hpp: In instantiation of ‘nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<NitrosMsgView>::ManagedNitrosSubscriber(rclcpp::Node*, const string&, const string&, std::function<void(const NitrosMsgView&)>, const nvidia::isaac_ros::nitros::NitrosStatisticsConfig&, rclcpp::QoS) [with NitrosMsgView = nvidia::isaac_ros::nitros::NitrosPointCloud; std::string = std::__cxx11::basic_string<char>]’:
/usr/include/c++/11/ext/new_allocator.h:162:4:   required from ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>; _Args = {custom_nitros_pointcloud::PointCloudDecoderNode*, const char (&)[15], const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::_Bind<void (custom_nitros_pointcloud::PointCloudDecoderNode::*(custom_nitros_pointcloud::PointCloudDecoderNode*, std::_Placeholder<1>))(nvidia::isaac_ros::nitros::NitrosPointCloud)>}; _Tp = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>]’
/usr/include/c++/11/bits/alloc_traits.h:516:17:   required from ‘static void std::allocator_traits<std::allocator<_CharT> >::construct(std::allocator_traits<std::allocator<_CharT> >::allocator_type&, _Up*, _Args&& ...) [with _Up = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>; _Args = {custom_nitros_pointcloud::PointCloudDecoderNode*, const char (&)[15], const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::_Bind<void (custom_nitros_pointcloud::PointCloudDecoderNode::*(custom_nitros_pointcloud::PointCloudDecoderNode*, std::_Placeholder<1>))(nvidia::isaac_ros::nitros::NitrosPointCloud)>}; _Tp = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>; std::allocator_traits<std::allocator<_CharT> >::allocator_type = std::allocator<nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud> >]’
/usr/include/c++/11/bits/shared_ptr_base.h:519:39:   required from ‘std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::_Sp_counted_ptr_inplace(_Alloc, _Args&& ...) [with _Args = {custom_nitros_pointcloud::PointCloudDecoderNode*, const char (&)[15], const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::_Bind<void (custom_nitros_pointcloud::PointCloudDecoderNode::*(custom_nitros_pointcloud::PointCloudDecoderNode*, std::_Placeholder<1>))(nvidia::isaac_ros::nitros::NitrosPointCloud)>}; _Tp = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>; _Alloc = std::allocator<nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud> >; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’
/usr/include/c++/11/bits/shared_ptr_base.h:650:16:   required from ‘std::__shared_count<_Lp>::__shared_count(_Tp*&, std::_Sp_alloc_shared_tag<_Alloc>, _Args&& ...) [with _Tp = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>; _Alloc = std::allocator<nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud> >; _Args = {custom_nitros_pointcloud::PointCloudDecoderNode*, const char (&)[15], const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::_Bind<void (custom_nitros_pointcloud::PointCloudDecoderNode::*(custom_nitros_pointcloud::PointCloudDecoderNode*, std::_Placeholder<1>))(nvidia::isaac_ros::nitros::NitrosPointCloud)>}; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’
/usr/include/c++/11/bits/shared_ptr_base.h:1342:14:   required from ‘std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud> >; _Args = {custom_nitros_pointcloud::PointCloudDecoderNode*, const char (&)[15], const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::_Bind<void (custom_nitros_pointcloud::PointCloudDecoderNode::*(custom_nitros_pointcloud::PointCloudDecoderNode*, std::_Placeholder<1>))(nvidia::isaac_ros::nitros::NitrosPointCloud)>}; _Tp = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>; __gnu_cxx::_Lock_policy _Lp = __gnu_cxx::_S_atomic]’
/usr/include/c++/11/bits/shared_ptr.h:409:59:   required from ‘std::shared_ptr<_Tp>::shared_ptr(std::_Sp_alloc_shared_tag<_Tp>, _Args&& ...) [with _Alloc = std::allocator<nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud> >; _Args = {custom_nitros_pointcloud::PointCloudDecoderNode*, const char (&)[15], const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::_Bind<void (custom_nitros_pointcloud::PointCloudDecoderNode::*(custom_nitros_pointcloud::PointCloudDecoderNode*, std::_Placeholder<1>))(nvidia::isaac_ros::nitros::NitrosPointCloud)>}; _Tp = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>]’
/usr/include/c++/11/bits/shared_ptr.h:862:14:   required from ‘std::shared_ptr<_Tp> std::allocate_shared(const _Alloc&, _Args&& ...) [with _Tp = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>; _Alloc = std::allocator<nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud> >; _Args = {custom_nitros_pointcloud::PointCloudDecoderNode*, const char (&)[15], const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::_Bind<void (custom_nitros_pointcloud::PointCloudDecoderNode::*(custom_nitros_pointcloud::PointCloudDecoderNode*, std::_Placeholder<1>))(nvidia::isaac_ros::nitros::NitrosPointCloud)>}]’
/usr/include/c++/11/bits/shared_ptr.h:878:39:   required from ‘std::shared_ptr<_Tp> std::make_shared(_Args&& ...) [with _Tp = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>; _Args = {custom_nitros_pointcloud::PointCloudDecoderNode*, const char (&)[15], const std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::_Bind<void (custom_nitros_pointcloud::PointCloudDecoderNode::*(custom_nitros_pointcloud::PointCloudDecoderNode*, std::_Placeholder<1>))(nvidia::isaac_ros::nitros::NitrosPointCloud)>}]’
/workspaces/isaac_ros-dev/src/custom_nitros_pointcloud/src/pointcloud_decoder_node.cpp:33:52:   required from here
/workspaces/isaac_ros-dev/install/isaac_ros_managed_nitros/share/isaac_ros_managed_nitros/gxf/include/isaac_ros_managed_nitros/managed_nitros_subscriber.hpp:52:27: error: no type named ‘BaseType’ in ‘struct nvidia::isaac_ros::nitros::NitrosPointCloud’
   52 |     nitros_type_manager_->registerSupportedType<typename NitrosMsgView::BaseType>();
      |     ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/workspaces/isaac_ros-dev/install/isaac_ros_managed_nitros/share/isaac_ros_managed_nitros/gxf/include/isaac_ros_managed_nitros/managed_nitros_subscriber.hpp:52:82: error: no matching function for call to ‘nvidia::isaac_ros::nitros::NitrosTypeManager::<expression error>()’
   52 |     nitros_type_manager_->registerSupportedType<typename NitrosMsgView::BaseType>();
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
In file included from /workspaces/isaac_ros-dev/install/isaac_ros_nitros/include/isaac_ros_nitros/nitros_publisher_subscriber_base.hpp:35,
                 from /workspaces/isaac_ros-dev/install/isaac_ros_nitros/include/isaac_ros_nitros/nitros_subscriber.hpp:31,
                 from /workspaces/isaac_ros-dev/install/isaac_ros_managed_nitros/share/isaac_ros_managed_nitros/gxf/include/isaac_ros_managed_nitros/managed_nitros_subscriber.hpp:26,
                 from /workspaces/isaac_ros-dev/src/custom_nitros_pointcloud/include/custom_nitros_pointcloud/pointcloud_decoder_node.hpp:25,
                 from /workspaces/isaac_ros-dev/src/custom_nitros_pointcloud/src/pointcloud_decoder_node.cpp:18:
/workspaces/isaac_ros-dev/install/isaac_ros_nitros/include/isaac_ros_nitros/types/nitros_type_manager.hpp:61:8: note: candidate: ‘template<class T> void nvidia::isaac_ros::nitros::NitrosTypeManager::registerSupportedType()’
   61 |   void registerSupportedType()
      |        ^~~~~~~~~~~~~~~~~~~~~
/workspaces/isaac_ros-dev/install/isaac_ros_nitros/include/isaac_ros_nitros/types/nitros_type_manager.hpp:61:8: note:   template argument deduction/substitution failed:
In file included from /workspaces/isaac_ros-dev/src/custom_nitros_pointcloud/include/custom_nitros_pointcloud/pointcloud_decoder_node.hpp:25,
                 from /workspaces/isaac_ros-dev/src/custom_nitros_pointcloud/src/pointcloud_decoder_node.cpp:18:
/workspaces/isaac_ros-dev/install/isaac_ros_managed_nitros/share/isaac_ros_managed_nitros/gxf/include/isaac_ros_managed_nitros/managed_nitros_subscriber.hpp:63:38: error: no type named ‘BaseType’ in ‘struct nvidia::isaac_ros::nitros::NitrosPointCloud’
   63 |           const NitrosMsgView view(*(static_cast<typename NitrosMsgView::BaseType *>(&msg)));
      |                                     ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/11/functional:59,
                 from /workspaces/isaac_ros-dev/install/isaac_ros_nitros/include/isaac_ros_nitros/types/nitros_format_agent.hpp:21,
                 from /opt/ros/humble/include/isaac_ros_nitros_point_cloud_type/nitros_point_cloud.hpp:28,
                 from /workspaces/isaac_ros-dev/src/custom_nitros_pointcloud/include/custom_nitros_pointcloud/pointcloud_decoder_node.hpp:21,
                 from /workspaces/isaac_ros-dev/src/custom_nitros_pointcloud/src/pointcloud_decoder_node.cpp:18:
/usr/include/c++/11/bits/std_function.h:435:9: error: ‘std::function<_Res(_ArgTypes ...)>::function(_Functor&&) [with _Functor = nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>::ManagedNitrosSubscriber(rclcpp::Node*, const string&, const string&, std::function<void(const nvidia::isaac_ros::nitros::NitrosPointCloud&)>, const nvidia::isaac_ros::nitros::NitrosStatisticsConfig&, rclcpp::QoS)::<lambda(gxf_context_t, nvidia::isaac_ros::nitros::NitrosTypeBase&)>; _Constraints = void; _Res = void; _ArgTypes = {void*, nvidia::isaac_ros::nitros::NitrosTypeBase&}]’, declared using local type ‘nvidia::isaac_ros::nitros::ManagedNitrosSubscriber<nvidia::isaac_ros::nitros::NitrosPointCloud>::ManagedNitrosSubscriber(rclcpp::Node*, const string&, const string&, std::function<void(const nvidia::isaac_ros::nitros::NitrosPointCloud&)>, const nvidia::isaac_ros::nitros::NitrosStatisticsConfig&, rclcpp::QoS)::<lambda(gxf_context_t, nvidia::isaac_ros::nitros::NitrosTypeBase&)>’, is used but never defined [-fpermissive]
  435 |         function(_Functor&& __f)
      |         ^~~~~~~~
gmake[2]: *** [CMakeFiles/pointcloud_decoder_node.dir/build.make:76: CMakeFiles/pointcloud_decoder_node.dir/src/pointcloud_decoder_node.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:167: CMakeFiles/pointcloud_decoder_node.dir/all] Error 2
gmake: *** [Makefile:146: all] Error 2
---
Failed   <<< custom_nitros_pointcloud [6.68s, exited with code 2]

Summary: 0 packages finished [7.00s]
  1 package failed: custom_nitros_pointcloud
  1 package had stderr output: custom_nitros_pointcloud
[1]+  Done                    clear

attached is a .zip of the pkg:
custom_nitros_pointcloud.zip

I am using a isaac ros 3.1, ros humble container, on an x86_64 machine with CUDA 12.4 and nvidia drivers 550.120. Any help here is greatly appreciated!

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with pointcloud_decoder_node.cpp at the subscriber construction on line 33, then inspect managed_nitros_subscriber.hpp and the NitrosPointCloud definition included through nitros_point_cloud.hpp. Compare the setup with the isaac_ros_managed_nitros_examples. Done means the custom NitrosPointCloud decoder compiles without the BaseType errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
robotics
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.