三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

别再自己编译了!Ubuntu 18.04下用apt一键安装Intel RealSense D435i驱动(附USB3.0避坑指南)

别再自己编译了!Ubuntu 18.04下用apt一键安装Intel RealSense D435i驱动(附USB3.0避坑指南)

Ubuntu 18.04下Intel RealSense D435i驱动一键安装全攻略

第一次拿到Intel RealSense D435i深度相机的开发者,往往会被官方文档中复杂的源码编译流程劝退。实际上,在Ubuntu 18.04系统中,通过apt工具可以快速完成驱动安装和环境配置。本文将详细介绍如何用最简步骤让D435i相机正常工作,并解决USB3.0识别、驱动版本选择等常见问题。

1. 为什么选择apt安装而非源码编译

在Linux系统下配置硬件设备驱动时,开发者通常面临两种选择:源码编译或包管理器安装。对于RealSense D435i相机而言,apt安装方案具有显著优势:

  • 时间成本对比

    • 源码编译平均耗时:45-90分钟(取决于CPU性能)
    • apt安装平均耗时:5-15分钟(包括依赖下载)
  • 成功率对比

    • 源码编译失败率约30%(常见于依赖缺失、版本冲突)
    • apt安装失败率低于5%
  • 维护便利性

    • apt方案自动处理依赖关系
    • 支持一键升级(sudo apt upgrade
    • 卸载更彻底(sudo apt purge

提示:即使是需要深度定制驱动的高级用户,也建议先通过apt安装基础版本,再基于稳定环境进行二次开发。

2. 三步完成驱动安装

2.1 添加官方软件源

首先需要将Intel的RealSense软件源添加到系统:

sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main" -u sudo apt update

2.2 安装核心软件包

执行以下命令安装必要组件:

sudo apt install -y librealsense2-dkms librealsense2-utils librealsense2-dev

各包功能说明:

包名称作用是否必需
librealsense2-dkms内核驱动模块
librealsense2-utils工具集(含realsense-viewer)
librealsense2-dev开发头文件可选

2.3 验证安装

插入相机后运行:

realsense-viewer

正常情况应看到如下界面元素:

  • 设备信息面板显示相机型号
  • 深度图像和RGB图像预览窗口
  • 帧率统计信息

3. 解决USB3.0识别问题

D435i相机需要USB3.0接口才能全功能工作,但实际使用中常遇到识别为USB2.0的问题。可通过以下步骤排查:

3.1 物理层检查

  1. 使用USB3.0标准线缆(蓝色接口)
  2. 直接连接主板原生USB3.0接口(避免使用扩展坞)
  3. 执行lsusb -t查看连接速度:
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M |__ Port 3: Dev 2, If 0, Class=Video, Driver=uvcvideo, 5000M |__ Port 3: Dev 2, If 1, Class=Video, Driver=uvcvideo, 5000M

"5000M"表示运行在USB3.0模式,若显示"480M"则为USB2.0模式。

3.2 内核参数调整

创建配置文件/etc/modprobe.d/d435i.conf

options uvcvideo quirks=0x100 options videobuf2_core min_queued_buffers=2

然后更新initramfs:

sudo update-initramfs -u

4. Python开发环境配置

4.1 安装Python接口

pip install pyrealsense2

验证安装:

import pyrealsense2 as rs print(rs.__version__) # 应输出类似2.54.1的版本号

4.2 实时图像采集示例

import cv2 import numpy as np import pyrealsense2 as rs # 配置深度和彩色流 pipeline = rs.pipeline() config = rs.config() config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30) # 开始采集 profile = pipeline.start(config) try: while True: frames = pipeline.wait_for_frames() depth_frame = frames.get_depth_frame() color_frame = frames.get_color_frame() # 转换为numpy数组 depth_image = np.asanyarray(depth_frame.get_data()) color_image = np.asanyarray(color_frame.get_data()) # 深度图上色 depth_colormap = cv2.applyColorMap( cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET ) # 水平堆叠显示 images = np.hstack((color_image, depth_colormap)) cv2.imshow('RealSense', images) if cv2.waitKey(1) & 0xFF == ord('q'): break finally: pipeline.stop()

5. 深度与RGB图像对齐技术

RealSense相机通过以下两种方式实现深度与彩色图像对齐:

5.1 硬件对齐原理

D435i包含三个主要传感器:

  1. 深度传感器(红外摄像头对)
  2. RGB彩色摄像头
  3. IMU单元(加速度计+陀螺仪)

对齐过程实质上是将不同传感器的坐标系通过标定参数进行转换。

5.2 软件实现方式

# 创建对齐对象(深度对齐到彩色) align_to = rs.stream.color align = rs.align(align_to) # 处理帧数据 aligned_frames = align.process(frames) aligned_depth = aligned_frames.get_depth_frame() color_frame = aligned_frames.get_color_frame()

对齐前后的数据差异:

特征未对齐已对齐
分辨率可能不同相同
像素对应不精确精确匹配
处理开销需要额外计算

6. 常见问题解决方案

6.1 设备权限问题

创建/etc/udev/rules.d/99-realsense.rules

SUBSYSTEM=="usb", ATTR{idVendor}=="8086", MODE="0666"

然后执行:

sudo udevadm control --reload-rules && sudo udevadm trigger

6.2 帧率不稳定

优化措施:

  1. 关闭其他USB设备
  2. 降低分辨率(如改用480p)
  3. 使用单独的USB控制器

6.3 深度数据异常

典型现象及解决方法:

  • 边缘噪点:调整Post-Processing Filter参数
  • 大面积空洞:确保环境有足够纹理
  • 测量不准:运行Dynamic Calibration工具

7. 进阶应用技巧

7.1 点云生成

pc = rs.pointcloud() points = pc.calculate(depth_frame) pc.map_to(color_frame) vtx = np.asanyarray(points.get_vertices())

7.2 保存与回放

录制数据流:

config.enable_record_to_file('recording.bag')

回放录制:

config.enable_device_from_file('recording.bag')

7.3 多相机同步

需要硬件触发支持:

dev = profile.get_device() tm2 = dev.as_tm2() tm2.enable_pose_jumping(True) tm2.set_intrinsics(rs.stream.depth, depth_intrin)
← 返回列表