micro-ROS / micro-ROS/micro_ros_setup
Not enough memory in the buffer stream - PlotJuggler and RC topic
Đang mở
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Shell
- Star
- 509
- Fork
- 183
- Merge trung bình
- 22 giờ 26 phút
- Pull request đã merge (30 ngày)
- 7
Mô tả
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/rcis been published withros2 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
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Tái hiện lỗi crash bằng các bước SITL và PlotJuggler được liệt kê, sau đó bắt đầu từ DataStreamROS2::messageCallback và lần theo stack vào ParserROS::parseMessage và RosMsgParser::FastCDR_Deserializer::deserialize. So sánh dữ liệu message /ap/rc với những gì deserializer mong đợi. Hoàn thành khi việc subscribe /ap/rc trong PlotJuggler không còn bị abort với NotEnoughMemoryException.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Lĩnh vực
- robotics
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 25/100