micro-ROS / micro-ROS/micro_ros_setup

Not enough memory in the buffer stream - PlotJuggler and RC topic

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

Nobody has claimed this yet.

Dominant language
Shell
Stars
509
Forks
183
Avg merge
22h 26m
Merged PRs (30d)
7

Description

Issue template

When I try to subscribe Plot Juggler to the /ap/rc topic of my custom branch, PlotJuggler always crashes reporting the following error:

terminate called after throwing an instance of 'eprosima::fastcdr::exception::NotEnoughMemoryException'
[plotjuggler-1]   what():  Not enough memory in the buffer stream
  • Hardware description: SITL
  • Installation type: Micro-ROS on ROS2 Humble
Steps to reproduce the issue
  • Clone the Ardupilot repo git clone https://github.com/tizianofiorenzani/ardupilot.git
  • CD to the ardupilot folder and checkout my branch git checkout wips/dds-rc-out
  • Install Plotjuggler apt install ros-humble-plotjuggler-ros
  • Build the ardupilot branch colcon build --packages-up-to ardupilot_sitl
  • Launch ardupilot SITL ros2 launch ardupilot_sitl sitl_dds_udp.launch.py
  • On a new terminal, verify that the topic /ap/rc is been published with ros2 topic echo /ap/rc
  • Start Plot Juggler with ros2 run plotjuggler plotjuggler
  • On the screen, select the topic /ap/rc
Expected behavior
QStandardPaths: error creating runtime directory '/run/user/1000' (Permission denied)
Loading compatible plugins from directory:  "/opt/ros/humble/lib/plotjuggler_ros"
"libDataLoadROS2.so is a DataLoader plugin"
"libDataStreamROS2.so is a DataStreamer plugin"
[WARN] [1740678396.752654369] [rclcpp]: logging was initialized more than once
"libTopicPublisherROS2.so is a StatePublisher plugin"
Number of plugins loaded:  3 

Loading compatible plugins from directory:  "/opt/ros/humble/lib/plotjuggler"
"libDataLoadCSV.so is a DataLoader plugin"
"libDataLoadMCAP.so is a DataLoader plugin"
"libDataLoadULog.so is a DataLoader plugin"
"libDataStreamSample.so is a DataStreamer plugin"  ...disabled, unless option -t is used
"libDataStreamUDP.so is a DataStreamer plugin"
"libDataStreamWebSocket.so is a DataStreamer plugin"
"libDataStreamZMQ.so is a DataStreamer plugin"
"libParserDataTamer.so is a MessageParser plugin"
"libParserROS1.so is a MessageParser plugin"
"libParserROS2.so is a MessageParser plugin"
"libProtobufParser.so is a MessageParser plugin"
"libPublisherCSV.so is a StatePublisher plugin"
Type conversion already registered from type QString to type QwtText
"libToolboxFFT.so is a Toolbox plugin"
"libToolboxLuaEditor.so is a Toolbox plugin"
Type conversion already registered from type QString to type QwtText
"libToolboxQuaternion.so is a Toolbox plugin"
Number of plugins loaded:  14 

Loading compatible plugins from directory:  "/home/avas/.local/share/PlotJuggler"
Number of plugins loaded:  0 

terminate called after throwing an instance of 'eprosima::fastcdr::exception::NotEnoughMemoryException'
  what():  Not enough memory in the buffer stream
Stack trace (most recent call last) in thread 1111430:
#25   Object "", at 0xffffffffffffffff, in 
#24   Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x74da6ae8d84f, in __xmknodat
#23   Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x74da6adfbac2, in pthread_condattr_setpshared
#22   Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x74da6b175252, in std::error_code::default_error_condition() const
#21   Object "/opt/ros/humble/lib/plotjuggler_ros/libDataStreamROS2.so", at 0x74da5ff35e2a, in DataStreamROS2::start(QStringList*)
#20   Object "/opt/ros/humble/lib/librclcpp.so", at 0x74da6c8edc53, in rclcpp::Executor::spin_once(std::chrono::duration<long, std::ratio<1l, 1000000000l> >)
#19   Object "/opt/ros/humble/lib/librclcpp.so", at 0x74da6c8f79a0, in rclcpp::Executor::spin_once_impl(std::chrono::duration<long, std::ratio<1l, 1000000000l> >)
#18   Object "/opt/ros/humble/lib/librclcpp.so", at 0x74da6c8f602e, in rclcpp::Executor::execute_any_executable(rclcpp::AnyExecutable&)
#17   Object "/opt/ros/humble/lib/librclcpp.so", at 0x74da6c8f5689, in rclcpp::Executor::execute_subscription(std::shared_ptr<rclcpp::SubscriptionBase>)
#16   Object "/opt/ros/humble/lib/librclcpp.so", at 0x74da6c901198, in rclcpp::GenericSubscription::handle_serialized_message(std::shared_ptr<rclcpp::SerializedMessage> const&, rclcpp::MessageInfo const&)
#15   Object "/opt/ros/humble/lib/plotjuggler_ros/libDataStreamROS2.so", at 0x74da5ff347ab, in DataStreamROS2::messageCallback(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<rclcpp::SerializedMessage>)
#14   Object "/opt/ros/humble/lib/plotjuggler_ros/libDataStreamROS2.so", at 0x74da5ff346c1, in DataStreamROS2::messageCallback(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::shared_ptr<rclcpp::SerializedMessage>)
#13   Object "/opt/ros/humble/lib/plotjuggler_ros/libDataStreamROS2.so", at 0x74da5ff40240, in PJ::CompositeParser::parseMessage(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, PJ::MessageRef, double&)
#12   Object "/opt/ros/humble/lib/plotjuggler/libParserROS2.so", at 0x74da53e837cf, in ParserROS::parseMessage(PJ::MessageRef, double&)
#11   Object "/opt/ros/humble/lib/plotjuggler/libParserROS2.so", at 0x74da53e9fa7c, in RosMsgParser::Parser::deserialize(nonstd::span_lite::span<unsigned char const, 18446744073709551615ul>, RosMsgParser::FlatMessage*, RosMsgParser::Deserializer*) const
#10   Object "/opt/ros/humble/lib/plotjuggler/libParserROS2.so", at 0x74da53e9f7c0, in RosMsgParser::ROSField::getMessagePtr(std::unordered_map<RosMsgParser::ROSType, std::shared_ptr<RosMsgParser::ROSMessage>, std::hash<RosMsgParser::ROSType>, std::equal_to<RosMsgParser::ROSType>, std::allocator<std::pair<RosMsgParser::ROSType const, std::shared_ptr<RosMsgParser::ROSMessage> > > > const&) const
#9    Object "/opt/ros/humble/lib/plotjuggler/libParserROS2.so", at 0x74da53e9efcb, in RosMsgParser::ROSField::getMessagePtr(std::unordered_map<RosMsgParser::ROSType, std::shared_ptr<RosMsgParser::ROSMessage>, std::hash<RosMsgParser::ROSType>, std::equal_to<RosMsgParser::ROSType>, std::allocator<std::pair<RosMsgParser::ROSType const, std::shared_ptr<RosMsgParser::ROSMessage> > > > const&) const
#8    Object "/opt/ros/humble/lib/plotjuggler/libParserROS2.so", at 0x74da53e9988c, in RosMsgParser::FastCDR_Deserializer::deserialize(RosMsgParser::BuiltinType)
#7    Object "/opt/ros/humble/lib/libfastcdr.so.1", at 0x74da677ae1d2, in 
#6    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x74da6b1474d7, in __cxa_throw
#5    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x74da6b147276, in std::terminate()
#4    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x74da6b14720b, in std::rethrow_exception(std::__exception_ptr::exception_ptr)
#3    Object "/lib/x86_64-linux-gnu/libstdc++.so.6", at 0x74da6b13bb9d, in __cxa_throw_bad_array_new_length
#2    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x74da6ad8f7f2, in abort
#1    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x74da6ada9475, in raise
#0    Object "/lib/x86_64-linux-gnu/libc.so.6", at 0x74da6adfd9fc, in pthread_kill
Aborted (Signal sent by tkill() 1111283 1000)
[ros2run]: Aborted

Contributor guide

Open the contributing guide

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

Reproduce the crash using the listed SITL and PlotJuggler steps, then start at DataStreamROS2::messageCallback and follow the stack into ParserROS::parseMessage and RosMsgParser::FastCDR_Deserializer::deserialize. Compare the /ap/rc message data with the deserializer's expectations. Done means subscribing to /ap/rc in PlotJuggler no longer aborts with NotEnoughMemoryException.

Written by the indexing model from the issue text.

Assessment

Domain
robotics
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.