Ubuntu 22.04 部署 Intel RealSense D400 系列深度相机开发环境全攻略
1. 环境准备从零开始的Ubuntu工作站你好我是老陈一个在机器人和视觉领域折腾了十多年的工程师。今天咱们不聊那些虚的直接上手干。如果你刚拿到一台全新的Ubuntu 22.04 LTS工作站或者刚装好系统想在上面跑起来Intel的RealSense D400系列深度相机比如经典的D435i那这篇笔记就是为你准备的。我会把我自己踩过的坑、绕过的弯还有最终验证过最稳的路径一步一步分享给你。整个过程就像搭积木咱们一块一块来保证你最后能稳稳地打开那个realsense-viewer看到清晰的深度图像。首先你得知道咱们在干什么。Intel RealSense D400系列是一组非常流行的深度感知摄像头它不仅能提供彩色图像还能通过红外结构光或者立体视觉的方式实时计算出每个像素点到相机的距离也就是深度图。这玩意儿在机器人导航、三维重建、手势识别等领域简直是神器。而librealsense就是Intel官方提供的、用来和这些相机“对话”的软件开发工具包SDK。我们的目标就是在Ubuntu 22.04上把这个SDK及其所有依赖包括需要跟Linux内核打交道的底层驱动都完美地装好。在开始敲任何命令之前我强烈建议你先做两件事。第一确保你的Ubuntu 22.04系统是最新的。这不是官样文章新系统往往修复了很多底层依赖的兼容性问题能避免不少莫名其妙的错误。第二如果你是物理连接相机现在请先把所有RealSense相机从USB口上拔下来。这一点非常关键因为在安装驱动模块的过程中如果系统检测到有相机设备可能会干扰内核模块的编译和加载导致安装失败。咱们先把路铺好再把车开上来。2. 系统与依赖打好坚实的地基2.1 全面更新系统万事开头更新先行。打开你的终端快捷键CtrlAltT咱们先来一套标准的“系统热身操”。这不仅仅是更新软件列表更是将系统所有已安装的包升级到最新版本包括内核。Ubuntu 22.04 LTS默认的内核版本已经比较新这为我们后续的工作减少了很多麻烦。sudo apt update sudo apt upgrade -y sudo apt dist-upgrade -y这条命令干了三件事update刷新软件源列表upgrade升级所有可升级的软件包dist-upgrade处理更复杂的依赖关系变更比如内核升级。执行完后系统可能会提示你重启。如果内核有更新务必重启电脑让新内核生效。这是很多朋友容易忽略的一步结果后面编译内核模块时发现版本对不上白白浪费几个小时。2.2 安装核心开发工具和依赖地基要打牢砖瓦不能少。接下来我们需要安装编译librealsenseSDK以及构建其内核模块所必需的一系列开发库和工具。别被这一长串包名吓到它们各自有重要的职责。sudo apt install -y git wget cmake build-essential libssl-dev libusb-1.0-0-dev libudev-dev pkg-config libgtk-3-dev libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev我来简单解释几个关键的git用来从GitHub上克隆librealsense的源代码仓库。cmakebuild-essentialC/C项目的构建工具链没有它们编译无从谈起。libusb-1.0-0-devRealSense相机通过USB与电脑通信这个库提供了底层的USB访问开发支持。libudev-dev管理设备节点的库确保相机插入后能被系统正确识别并设置好访问权限。libglfw3-dev和libgl1-mesa-dev这是realsense-viewer这个图形化查看工具所依赖的OpenGL图形库。没有它们即使SDK装好了你也打不开那个直观的查看界面。安装完这些你的系统就已经具备了编译和运行所需的基本环境。我习惯把这个步骤称为“配齐工具箱”工欲善其事必先利其器嘛。3. 获取源码与权限配置3.1 克隆官方源码库工具准备好了现在去取“图纸”——也就是librealsense的源代码。Intel官方将代码托管在GitHub上我们直接用git克隆下来。我建议克隆到你的家目录~下这样路径简单不容易出错。cd ~ git clone https://github.com/IntelRealSense/librealsense.git这个仓库有点大包含了几年的提交历史和所有平台的代码下载需要一点时间请耐心等待。克隆完成后你会得到一个~/librealsense的目录。这里有个小技巧如果你想下载某个特定的稳定版本而不是最新的开发版可以先去GitHub的Release页面查看版本号然后用git checkout命令切换标签。但对于大多数初次使用者直接用最新的master分支就好它通常包含了最新的设备支持和Bug修复。3.2 设置udev规则让普通用户也能操作相机在Linux系统里像摄像头这样的硬件设备默认只有root用户才有直接访问的权限。这意味着如果你用普通用户身份去运行程序访问RealSense会得到“权限拒绝”的错误。为了解决这个问题librealsense提供了一个脚本它会配置一套udev规则。udev是Linux内核的设备管理器这些规则告诉系统当检测到RealSense相机插入时自动将其权限设置为普通用户可读写。进入源码目录运行这个脚本cd ~/librealsense ./scripts/setup_udev_rules.sh脚本执行时它会将规则文件复制到/etc/udev/rules.d/目录下。完成后强烈建议你重新插拔一次RealSense相机或者直接重启电脑以确保新的规则生效。这一步做完之后你就不需要每次都sudo来运行你的视觉程序了安全和便利性都得到了保障。我在团队协作时经常发现新人忘了这一步导致程序运行时崩溃却报一些摸不着头脑的IO错误其实根源就在这里。4. 内核模块处理让系统内核认识新相机这是整个安装过程中最核心、也最容易出问题的一步。RealSense D400系列相机需要特定的USB和视频内核驱动模块才能发挥全部功能尤其是深度流和IMU惯性测量单元数据。而Ubuntu默认的内核可能不包含这些特定的驱动补丁。因此我们需要为当前运行的内核打上补丁并编译安装这些定制化的模块。4.1 应用内核补丁脚本librealsense源码包里非常贴心地为我们准备了针对不同Ubuntu和内核版本的自动化补丁脚本。对于Ubuntu 22.04 LTS它通常使用的是5.15或更高版本的LTS内核HWE即硬件启用内核。我们使用对应的脚本./scripts/patch-realsense-ubuntu-lts-hwe.sh运行这个脚本时它会做以下几件事检查当前内核的版本和头文件是否已安装。下载或定位对应的内核源码。应用一系列修改USB视频驱动UVC等的补丁。编译生成新的内核模块.ko文件。在这个过程中终端可能会输出大量信息甚至有一些警告Warning。只要脚本没有以红色的错误Error信息终止通常就可以继续。一个常见的“警告”是脚本提示找不到完全匹配的linux-headers它可能会自动安装一个接近的版本这通常是可行的。4.2 处理可能的内核版本问题如果你运气不好遇到了脚本明确报错提示内核版本不匹配比如“Kernel version xxx is not supported”那我们就需要手动处理一下。这通常是因为你的内核版本太新而补丁脚本还没来得及适配。别慌我们有成熟的解决方案。首先查看你当前正在运行的内核版本uname -r然后去安装一个Ubuntu 22.04官方仓库中更早、更稳定的LTS内核版本。例如5.15系列内核是22.04的一个基础版本兼容性非常好。sudo apt install linux-image-5.15.0-generic linux-headers-5.15.0-generic安装完成后重启电脑。在开机时长按Shift键进入GRUB引导菜单选择“Advanced options for Ubuntu”然后选择你刚安装的5.15.0内核启动。进入系统后再次运行uname -r确认版本已切换。然后重新回到~/librealsense目录再次运行上面的补丁脚本。这次成功率会大大增加。4.3 验证内核模块安装补丁脚本运行完毕后无论是否有警告我们都应该验证一下驱动是否真的加载成功了。使用dmesg命令查看内核的最新日志sudo dmesg | tail -n 50在输出信息里你应该寻找类似这样的关键行[ 12.345678] uvcvideo: Found UVC 1.50 device Intel(R) RealSense(TM) Depth Camera 435i (8086:0b3a) [ 12.345679] uvcvideo: Unable to create debugfs directory [ 12.345680] uvcvideo 1-2:1.0: Entity type for entity Intel(R) RealSense(TM) Depth Ca was not initialized! [ 12.345681] input: Intel(R) RealSense(TM) Depth Ca as /devices/pci0000:00/.../input/inputXX看到uvcvideo识别到了“Intel(R) RealSense(TM) Depth Camera”字样并且没有严重的错误就说明内核驱动已经成功识别了你的相机。此时你可以插上RealSense相机再次运行dmesg | tail -n 20会看到更具体的设备枚举信息。这一步验证通过意味着最底层、最棘手的部分已经搞定了。5. 编译与安装librealsense2 SDK内核驱动搞定相当于给相机接上了“神经系统”。现在我们来安装“大脑”——也就是上层的librealsense2SDK库和工具。我们将采用标准的CMake“源代码外构建”方式这样保持源码目录的干净也方便后续清理。5.1 使用CMake配置构建选项首先在librealsense源码目录下创建一个独立的build目录并进入它。这是最佳实践。cd ~/librealsense mkdir build cd build接下来运行cmake来配置构建系统。这里我强烈建议你开启示例程序的编译它们是非常好的学习工具。cmake .. -DCMAKE_BUILD_TYPERelease -DBUILD_EXAMPLEStrue -DBUILD_GRAPHICAL_EXAMPLEStrue解释一下这几个参数-DCMAKE_BUILD_TYPERelease指定编译为发布版本编译器会进行优化生成的程序运行速度更快。如果你想调试可以换成Debug但会慢一些。-DBUILD_EXAMPLEStrue编译C示例代码里面有很多宝藏。-DBUILD_GRAPHICAL_EXAMPLEStrue编译带有图形界面的示例比如realsense-viewer。这个一定要开这是我们最主要的测试工具。cmake命令会检查你的系统环境配置好Makefile。这个过程会输出很多信息注意看有没有找不到关键库如GLFW3、OpenGL的FATAL_ERROR。如果没有就说明配置成功。5.2 编译与安装配置完成后就可以开始编译了。使用make命令-j后面的数字表示并行编译的线程数通常设置为你的CPU核心数可以大幅加快编译速度。你可以用nproc命令查看核心数。make -j$(nproc)泡杯咖啡这个过程可能会持续5到15分钟取决于你的电脑性能。编译完成后终端会停留在最后没有错误信息就是胜利。最后将编译好的库文件、头文件和可执行程序安装到系统目录通常是/usr/local/lib和/usr/local/include。这样系统里任何地方的程序都能找到它们。sudo make install安装完成后还需要让系统动态链接器知道我们新安装的库。运行以下命令更新链接库缓存sudo ldconfig6. 功能验证与实战测试所有的辛苦劳作都是为了这一刻的验收。让我们来全面测试一下环境是否真的搭建成功。6.1 启动realsense-viewer这是最直观的测试。在终端中直接输入realsense-viewer如果一切顺利一个图形化界面会弹出来。第一次启动可能会慢一点。界面左侧会显示检测到的设备列表点击你的D435i或其他D400系列相机右侧就会显示图像流的选择面板。实测操作勾选“Depth”深度流和“Color”彩色流。你应该立即在右侧看到两个实时视频窗口。深度流默认会以彩色渲染图显示越近的颜色越暖红/黄越远的颜色越冷蓝/紫。你可以拖动三维点云视图的开关看看实时的三维场景非常酷。这个工具不仅能验证安装更是你后续调试相机参数如曝光、激光功率的利器。6.2 运行命令行工具除了图形界面SDK还提供了一些强大的命令行工具非常适合集成到脚本中或进行快速检查。查看设备信息rs-enumerate-devices这个命令会列出所有连接的RealSense设备并输出详细的硬件信息、固件版本以及支持的流格式和分辨率。这是确认相机被系统完整识别的好方法。深度流测试rs-depth这是一个简单的示例程序会在终端中打印出深度图像中心区域的几个深度值单位是米。虽然简陋但能快速验证深度数据流是否正常。6.3 编译运行官方示例我们之前编译了示例程序它们在~/librealsense/build/examples目录下。找一个简单的例子来运行比如hello-realsensecd ~/librealsense/build/examples/hello-realsense ./hello-realsense这个程序会打印出一段简短的欢迎信息和设备列表。运行你自己的C程序时你需要在CMakeLists.txt中链接realsense2库并在代码中包含#include librealsense2/rs.hpp头文件。编译命令类似这样g -stdc11 your_program.cpp -lrealsense2 -o your_program pkg-config --libs --cflags glfw36.4 常见问题排查与解决即使按照步骤来也可能遇到一些小麻烦。这里分享几个我高频遇到的坑realsense-viewer能打开但点开设备后一片黑没有图像流。可能原因内核补丁没有正确应用或加载。首先确保你运行过补丁脚本且重启了电脑。然后用lsmod | grep uvcvideo检查uvcvideo模块是否加载。再用modinfo uvcvideo | grep version查看模块版本确认描述里包含“RealSense”字样。解决最彻底的方法是重新执行一遍内核补丁流程并确保在补丁后重启。运行程序时报错error while loading shared libraries: librealsense2.so.xx: cannot open shared object file可能原因系统找不到安装的库文件。虽然sudo make install安装了但ldconfig缓存可能没更新或者库路径不在默认搜索范围内。解决再次运行sudo ldconfig。如果还不行可以手动将库路径加入环境变量export LD_LIBRARY_PATH/usr/local/lib:$LD_LIBRARY_PATH可将此命令加入~/.bashrc永久生效。多相机同时使用时出现断流或不稳定。可能原因USB带宽或供电不足。D435i同时开深度、彩色、红外和IMU流数据量很大。解决尽量将相机连接到主板原生的USB 3.0端口通常是蓝色的。避免使用机箱前置面板或经过扩展坞的接口。如果必须用多个相机考虑使用带有独立供电的USB集线器。环境搭建从来不是一劳永逸的事尤其是当你升级了系统内核之后。每次执行完系统级内核更新比如从5.15升级到5.19之前为RealSense打的内核模块补丁就会失效。因为新内核需要重新编译对应的驱动模块。这时候你不用慌也不需要重装整个SDK。只需要回到你的~/librealsense源码目录重新运行一遍内核补丁脚本./scripts/patch-realsense-ubuntu-lts-hwe.sh然后重启电脑就能让相机恢复工作。上层SDK库librealsense2.so通常不受内核升级影响所以这部分不需要重装。把这个小技巧记下来能为你省下不少未来排查问题的时间。好了现在你的Ubuntu 22.04已经是一个功能完备的RealSense开发机了接下来就是发挥创造力用深度视觉去解决实际问题的时候了。