type
status
date
slug
summary
tags
category
icon
password
D435i摄像头使用
第一阶段:安装SDK
Intel 官方提供了 APT 仓库,这是最简单的安装方式,无需手动编译。
- 更新系统并安装依赖:
- 注册 Intel 公钥并添加仓库:
- 安装核心库与工具:
注意:
librealsense2-dkms 会更新内核驱动,安装时如果弹出 "Secure Boot" 相关的提示,请根据提示设置密码或在 BIOS 中关闭 Secure Boot,否则驱动可能无法加载。- 配置 USB 权限(非常重要): 插上摄像头,然后运行这行命令来赋予当前用户访问摄像头的权限:
(安装完后,建议拔掉摄像头重新插一下)
第二阶段:硬件连接与验证
- 物理连接: 使用随相机附带的 USB 3.0 数据线。D435i 在 USB 2.0 下功能会受限(如分辨率和帧率降低)。
- 启动可视化工具: 在终端输入以下命令启动官方预览器:
- 检查: 如果界面右侧能看到 Stereo Module(深度)和 RGB Camera 选项,点击开关(Off -> On)看是否有画面。
- 固件更新: 如果顶部弹出提示 "Firmware Update Available",建议点击更新以确保 D435i 的 IMU(惯性测量单元)和深度算法正常工作。
- 显示Connect a RealSense Camera or Add Source.
- 拔掉摄像头。
- 在终端运行:
- 重新插入摄像头。
- 再次运行
realsense-viewer。 - 如果还是不行,可以选择将 Type-C 那一头翻转 180 度重新插入摄像头。
- 如果
ros2 topic hz频率极低 ,应检查 USB 线是否插在了蓝色(3.0)接口,而非黑色(2.0)接口 。
lsusb指令查找Bus 010 Device 002: ID 8086:0b3a Intel Corp. Intel(R) RealSense(TM) Depth Camera 435i
如果出现该项,则说明连接成功。
第三阶段:编写简单的Python代码
为了进行简单的“识别测试”,我们通常使用 Python 调用相机。
这个可以单独创建一个conda环境。
- 创建环境:
- 激活环境:
- 安装开发包:
- 环境验证:
- 编写测试脚本:
创建一个
test_realsense.py文件,以下代码将实时显示深度图和彩色图,并在彩色图中通过深度数据获取中心点的距离(这是最基础的“识别”:空间距离感知)。
在ROS2中订阅相机话题
- 编写节点代码
不要忘记配置入口点。
- 启动驱动节点:
- 核心动作:驱动程序读取 USB 数据,并根据相机内参发布各种
Topics。 - 关键参数:
align_depth.enable:=true确保深度图和彩色图的像素坐标一一对应。
- 终端 2:运行你编写的节点
其他:
- 报错:在 ROS2 Humble 中,如果遇到
_ARRAY_API not found,请检查numpy版本是否小于 2.0。
SLAM视觉建图
在开始之前使用指令lsusb | grep Intel确定相机存在。在使用视觉slam建图需要注意最好搭配里程计。
1. 初始版 slam_launch.py
请将以下内容完整覆盖你的
~/nav2_ws/src/camera/launch/slam_launch.py:配置文件d435i_params.yaml
配置文件rtabmap_params.yaml
2. 编译并生效
在运行前,请确保清理掉旧的进程并重新编译:
启动
3. 使用IMU优化视觉SLAM建图
SLAM建图文件slam_launch.py
配置文件d435i_params.yaml
配置文件rtabmap_params.yaml
4. 使用GPU优化
- 修改rtabmap_params.yaml参数
- 环境加速
- 检查是否成功使用GPU
看
Processes 列表中是否出现了 rviz2 或 rtabmap。如果出现了,说明你已经成功开启了 GPU 模式!5. SLAM建图优化参数
SLAM建图的参数优化主要是依据ratbmap_params.yaml
针对室内工位区域进行建模的参数
6. 地图保存与查看
- 2D地图保存:
ros2 run nav2_map_server map_saver_cli -f ~/my_map。 ros2 topic list | grep map指令查找正确的话题名称。Grid/FromDepth: "true"打开2D栅格地图
注意:
- 3D数据查看: 默认数据库路径为
~/.ros/rtabmap.db。
- 工具: 使用
rtabmap-databaseViewer可回放建图轨迹。
排错
1.工程经验:DDS通信
- 报错:
sequence size exceeds remaining buffer
- 异常原因:
- 多播风暴:当你的 D435i 产生巨大的图像流(每秒几十兆)时,DDS 试图把这些数据通过 WiFi 发送出去(即便你只是在本地运行)。WiFi 的带宽远远扛不住这种流量,导致大量数据包丢弃和延迟。
- 干扰重试:由于 WiFi 丢包,DDS 会不断尝试重发,这占用了 CPU 资源并阻塞了本地内存缓冲区。
- 结果:数据包顺序乱了(Out of Order),缓冲区撑爆了(Buffer Exceeded)。
- 解决办法:
- 断开wifi。
- 强行让ROS2用本地回环地址
- 修改系统内核缓冲区限制(临时生效命令)
永久生效:修改
/etc/sysctl.conf 文件,在末尾添加 net.core.rmem_max=2147483647。- DDS 配置:官方推荐使用 Cyclone DDS 以解决 GUI 或话题频率出现的延迟问题。
- 设置 RMW 运行环境
- 将上述命令添加到您的
.bashrc文件中:nano ~/.bashrc - 如果尚未安装 Cyclone DDS 的 RMW 实现,需要先进行安装:
保存并退出,然后运行
source ~/.bashrc 使其立即生效。2.配置 日志
- 强制将日志输出到“标准输出”(stdout)
- 主要作用:这样做可以确保日志在终端或日志文件中按严格的时间顺序排列,避免因
stdout和stderr流不同步而导致的日志显示顺序错乱。
- 配置日志流使用缓存(Buffered)模式
- 详细解释:
- 当设置为
0(非缓存)时,每产生一条日志都会立即写入控制台,这会消耗较多的 CPU 资源。 - 当设置为
1(缓存)时,日志会先存入内存缓冲区,达到一定量或特定条件后再批量写入。 - 主要作用:在 RTAB-Map 这种对实时性要求较高的 SLAM 算法中,开启缓存可以减少日志打印对系统性能的影响,防止因频繁的 I/O 操作导致程序卡顿。
- 彩色输出配合:以便在有序的日志中通过颜色快速区分不同等级的消
3.检查 USB
- 正常结果:
Bus 010 Device 002: ID 8086:0b3a Intel Corp. Intel(R) RealSense(TM) Depth Camera 435i
- SLAM代码显示:
RealSense Node Is Up!
- 异常:如果没有输出,重新刷新usb接口,接口转180度重新插入,换一个3.0的usb。
4.检查 固件
- 正常结果:查看固件是否正常显示图像(注意打开左侧开关才有图像显示)
- 异常:MIPI Error 与 Buffer 报错
5.检查 图像
- 正常结果:持续输出频率(如 15Hz 或 30Hz)。
- 异常:如果没有输出,说明相机驱动卡死了(检查 USB 线和 MIPI Error)。
6.检查 IMU
- 正常结果:持续输出高频数据(如 200Hz)。
- 异常:如果没有输出,SLAM 节点会报错Motion Module failure。
7.检查 参数
- 问题现象:修改了 YAML 文件但
ros2 param get显示没生效;重定位时rtabmap_viz图形界面不显示。
- 根本原因:
- Launch 覆盖:官方
rtabmap.launch.py内部参数优先级高于外部 YAML 文件。 - 命名空间不匹配:YAML 中的层级(如
/camera/rtabmap)与实际运行的节点命名空间不符。
- 解决方案:
- 手动定义节点:放弃官方封装脚本,直接使用
Node实例化rtabmap和rtabmap_viz,并在parameters中显式传递 YAML 路径。
RTAB-Map
RTAB-Map 原理
通过 D435i 获取彩色(RGB)和深度(Depth)信息,利用特征点匹配(Vis/Inliers)计算位姿,同时结合 IMU 消除累计误差。
RTAB-Map 颜色对照表
1. 画面变黄:预警状态(Warning)
当画面背景变为黄色时,通常意味着里程计(Odometry)仍在工作,但质量较低。
- 特征点不足:当前视野内提取到的视觉特征点数量较少(低于设定阈值,如
Vis/MinInliers 10) 。
- 匹配较弱:算法能强行计算出位姿,但置信度不高。
- 应对建议:减慢移动速度,并将相机指向纹理丰富(有杂物、有书架)的区域 。
2. 画面变红:丢失状态(Critical/Lost)
当画面背景变为红色时,意味着里程计已经彻底丢失(Odometry Lost)。
- 运动模糊:相机晃动太快导致图像模糊,算法无法匹配前后两帧的特征点 。
- 视觉特征消失:相机对着白墙、镜子或纯色物体,导致没有足够的点可以追踪 。
- 计算阻塞:CPU 负载过高导致图像帧堆积(如遇到
queue is full报错),导致位姿计算超时 。
- IMU 异常:如果开启了
wait_imu_to_init但 IMU 没能成功初始化,系统也会卡在红色阻塞状态
- 应对建议:重新退回到之前的状态,借助imu恢复到上一步。
RTAB-Map 图形化界面
有关问题,欢迎您在底部评论区留言,一起交流~
- Author:Koreyoshi
- URL:https://tangly1024.com/article/2e0c7b13-c6a7-8036-9347-ee8e1d3d57dc
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!








