c++ - 如何使用 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。
- 消息“帧资源不足!” 是无信息的。在这里查看 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 }
我们如何看到实际解释此错误消息的代码逻辑?我认为这需要转到消息的来源。我们如何找到它?
解决方案
英特尔® 实感™ 是开源的,您可以在 GitHub 上找到源代码。如果您检查异常的来源,您会发现
抛出异常 ( 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
或者尝试找出您的帧释放速度不够快的原因。执行此操作的方法与之前所做的完全相同。只需尝试单步执行代码。
推荐阅读
- reactjs - ReactJS DatePicker 在提升状态后停止工作
- android - 更改设备方向时出现 MuPDF 错误
- java - Commons Daemon procrun 失败,退出代码为 5 - “apxServiceControl()”错误
- dependency-injection - 使用默认 ASP.NET Core DI 容器在 Service Fabric 上设置依赖注入
- python - 如何找到包含间隔的系列/数据帧与给定间隔重叠的位置
- karate - Unable to recognize RETRY UNTIL definition
- flutter - Flutter padding、margin 和 alginment 最佳实践
- php - 查找数组中的最大值和父值
- heroku - 在 Heroku 上部署错误 CleverBeagle Pup 2.0 Meteor GraphQL
- javascript - 尝试复制代码但地图不会在后台填充