首页
/ 解决Intel RealSense D455/D435i在Jetson Orin上运行ORB_SLAM3时的帧获取问题

解决Intel RealSense D455/D435i在Jetson Orin上运行ORB_SLAM3时的帧获取问题

2025-05-29 08:27:49作者:丁柯新Fawn

在使用Intel RealSense D455和D435i深度相机配合ORB_SLAM3进行SLAM开发时,开发者可能会遇到一些帧获取相关的技术挑战。本文将详细分析这些问题的成因,并提供有效的解决方案。

问题现象分析

在NVIDIA Jetson Orin NX开发套件上运行ORB_SLAM3时,主要出现以下两类错误表现:

  1. D455相机:程序抛出rs2::invalid_value_error异常,错误信息为"get_xu(ctrl=1) failed! Last Error: Resource temporarily unavailable"。该错误通常出现在调用get_sensor_option()或获取相机内参时。

  2. D435i相机:程序卡在"Waiting for images"状态,无法继续执行。这种情况在之前可以正常工作,但突然出现异常。

值得注意的是,这些相机在RealSense Viewer和ROS2环境中能够正常工作,能够正常发布和订阅彩色及深度图像流。

可能原因探究

经过深入分析,这些问题可能由以下几个因素导致:

  1. 相机固件与SDK兼容性问题:不同版本的RealSense相机可能需要特定版本的librealsense SDK才能完全兼容。

  2. USB连接稳定性:虽然更换USB线和尝试不同插入方向没有解决问题,但USB3.0端口的供电和数据传输稳定性仍是一个潜在因素。

  3. JetPack版本差异:测试发现JetPack 6.0环境下相机工作正常,而JetPack 6.1环境下出现问题,表明系统环境可能影响相机性能。

  4. 特定相机硬件问题:部分D455相机在相同环境下工作正常,而个别设备存在问题,指向可能的硬件个体差异。

解决方案与实践

针对上述问题,我们推荐以下几种解决方案:

1. 使用ROS2中间件封装

实践证明,通过ROS2节点封装相机数据流是一个可靠的解决方案:

  • 开发独立的ROS2发布节点,将相机数据发布到特定topic
  • ORB_SLAM3通过订阅这些topic获取图像数据
  • 这种方法绕过了直接调用librealsense SDK可能带来的兼容性问题

2. 相机硬件重置

在代码初始化阶段加入硬件重置逻辑:

rs2::context ctx;
rs2::device dev = ctx.query_devices().front();
dev.hardware_reset();
rs2::device_hub hub(ctx);
dev = hub.wait_for_device();

这种方法可以确保相机在每次启动时都处于干净的状态。

3. 系统环境优化

  • 确保使用官方推荐的JetPack版本(如6.0而非6.1)
  • 检查并优化USB端口供电
  • 监控系统资源使用情况,避免内存泄漏等问题

最佳实践建议

  1. 多设备测试:在项目初期,应使用多台同型号相机进行测试,排除个体硬件差异。

  2. 环境隔离:为SLAM开发维护专用的系统环境,避免因系统升级导致的兼容性问题。

  3. 备用方案设计:同时开发直接调用SDK和使用ROS中间件的两种数据获取方式,提高系统鲁棒性。

  4. 资源监控:使用htop等工具实时监控系统资源使用情况,及时发现内存泄漏等问题。

通过以上方法和建议,开发者可以有效地解决RealSense相机在Jetson平台上运行ORB_SLAM3时的帧获取问题,确保SLAM系统的稳定运行。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
861
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
596
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K