micro-ROS/micro-ROS-Agent

Run micro-ros-agent on top of rmw_fastrtps_dynamic_cpp, using introspection typesupport

Opened this issue · 2 comments

Issue template

I am getting segmentation fault at

callbacks_ = static_cast<const message_type_support_callbacks_t *>(type_support_->data);

due to the type_support_ object being erased from memory somewhere in

type_support_ = get_message_typesupport_handle(type_support_,

type_support_->typesupport_identifier is rosidl_typesupport_introspection_cpp since I am using rmw_fastrtps_dynamic_cpp as middleware. I see that L33 in graph_typesupport.cpp compares with rosidl_typesupport_fastrtps_cpp, which is why I assume micro-ros-agent requires rmw_fastrtps_cpp as middleware. I would like to stick with rmw_fastrtps_dynamic_cpp.

Changing this line from rmw_fastrtps_dynamic_cpp to rosidl_typesupport_introspection_cpp causes the segmentation error to go away and the program can proceed:

However, then it fails at this line instead with a segmentation fault:

return static_cast<uint32_t>(4 + callbacks_->get_serialized_size(data));

My question is, can micro-ros-agent support introspection, i.e. rmw_fastrtps_dynamic_cpp?
What are the necessary changes if not?

Hello, not sure why you need introspection in the micro-ROS Agent.

In any case, if there is a solution that fits your requirements, please feel free to contribute with a PR. Maybe we can make those type support to be selected by means of an environment variable.

I am using this repo https://github.com/mvukov/rules_ros2 to build ROS2 nodes using the Bazel build system. They currently have support for CycloneDDS which uses rosidl_typesupport_introspection. I have made a PR to add FastDDS and since there is already generator rules implemented for rosidl_typesupport_introspection, it makes sense to use rmw_fastrtps_dynamic.

Maybe I am too new to ROS2 to understand, why would I not want to use introspection? It reduces complexity in the projects and makes switching between DDS middlewares more seamless.