首页 > 解决方案 > 如何使用 realsense 摄像头调试 ROS 错误消息

问题描述

我正在运行以下 realsense2_camera 启动命令:

roslaunch realsense2_camera rs_rgbd.launch

我看到这个错误:

04/01 22:02:12,523 WARNING [139805191870208] (types.cpp:49) Out of frame resources!
 04/01 22:02:12,523 ERROR [139805191870208] (synthetic-stream.cpp:47) Exception was thrown during user processing callback!

尝试调试有一些问题: 1. 我们使用的是编译的 realsense-ros 库,所以我们的系统上没有 types.cpp。

  1. 消息“帧资源不足!” 是无信息的。在这里查看 types.cpp:http: //docs.ros.org/kinetic/api/librealsense2/html/types_8cpp_source.html

它仍然没有提供信息,因为 types.cpp 第 47 行只是通用错误处理代码:

45     recoverable_exception::recoverable_exception(const std::string& msg,
   46         rs2_exception_type exception_type) noexcept
   47         : librealsense_exception(msg, exception_type)
   48     {
   49         LOG_WARNING(msg);
   50     }

我们如何看到实际解释此错误消息的代码逻辑?我认为这需要转到消息的来源。我们如何找到它?

标签: c++ros

解决方案


英特尔® 实感™ 是开源的,您可以在 GitHub 上找到源代码。如果您检查异常的来源,您会发现

三行327 , 388411

抛出异常 ( class wrong_api_call_sequence_exception : public recoverable_exception)。

所有异常都是基于失败的分配引发的,例如

_actual_source.alloc_frame(...);

哪里 frame_source & _actual_source;。深入挖掘,你会发现在我们的例子中,它的定义frame_source::alloc_frame返回了一个空指针。此空指针由虚方法返回,该方法alloc_and_track实现导致publish_frame.

对我来说,看起来有一个帧缓冲区,如果发布,以后可以发布和重用。您的软件(在这种情况下为 ROS)根本没有足够快地释放帧以再次重用。

这应该基本上回答了你的问题。如果需要,您现在可以更深入地了解如何对 intrest 参数进行参数化,uint32_t max_publish_list_size或者尝试找出您的帧释放速度不够快的原因。执行此操作的方法与之前所做的完全相同。只需尝试单步执行代码。


推荐阅读