如何使用realsense摄像头调试ROS错误消息

How to debug ROS error message with realsense camera

本文关键字:ROS 错误 消息 调试 摄像头 何使用 realsense      更新时间:2023-10-16

我正在运行以下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     }

我们如何看待实际解释此错误消息的代码逻辑?我想这需要找到消息的来源。我们是怎么发现的?

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

三条线路327、388和411

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

所有异常都是基于失败的分配(如)抛出的

_actual_source.alloc_frame(...);

其中CCD_ 2。深入挖掘,您会发现frame_source::alloc_frame的定义,在我们的例子中,它返回一个null指针。此空指针由虚拟方法alloc_and_track返回,该方法的实现导致publish_frame失败。

对我来说,似乎有一个帧缓冲区,如果发布,这些帧可以发布并在以后重用。你的软件(在这种情况下是ROS)只是没有足够快地释放帧以便再次重用。

这应该基本上回答了你的问题。如果需要,您现在可以更深入地了解如何参数化intestuint32_t max_publish_list_size的参数,或者尝试找出为什么您的帧发布得不够快。做到这一点的方法与到目前为止所做的完全相同。试着逐步了解代码。

打开启动文件,修改帧速率参数。您的默认值是30,您可以将其缩小。

<arg name="depth_fps"           default="15"/>
<arg name="infra_fps"           default="15"/>
<arg name="color_fps"           default="15"/>