ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Ubuntu 20.04下RealSense深度相机环境配置与realsense-viewer运行指南

Ubuntu 20.04下RealSense深度相机环境配置与realsense-viewer运行指南 1. 为什么realsense-viewer在Ubuntu 20.04上总出问题1.1 这个工具到底解决什么问题realsense-viewer是Intel RealSense深度相机系列的官方可视化调试工具用来实时预览深度流、彩色流、红外流还能直接在界面上调曝光、增益、激光功率这些参数。做机器人视觉、三维重建、SLAM标定的人基本绕不开它。但很多人第一次在Ubuntu 20.04上装它往往卡在依赖缺失、内核模块冲突、权限报错这几个环节折腾一整天都看不到画面。我自己前前后后在三台不同配置的机器上装过这套环境有物理机直装的也有虚拟机里跑的踩的坑基本能凑成一本小册子。这篇就把从零到成功运行realsense-viewer的完整流程拆开讲包括依赖怎么补、内核补丁要不要打、udev规则怎么配、ROS联动怎么接。适合刚接触RealSense相机的新手也适合装了一半卡住想找排查思路的老手。1.2 装之前先搞清楚版本对应关系RealSense这套东西版本耦合比较紧选错组合后面全是坑。Ubuntu 20.04对应ROS Noeticlibrealsense建议用2.50以上的版本realsense-ros用4.51以上。下面这张表是我实测下来比较稳的搭配组件推荐版本说明Ubuntu20.04 LTS内核5.4或5.15librealsense2.54.2源码编译或apt安装realsense-ros4.51.1对应ROS NoeticROSNoetic桌面完整版内核5.15需要打补丁才能用全部功能注意如果你只是用D435i做视觉SLAM不打内核补丁也能跑但硬件同步、部分高级流配置会受限。要完整功能就得走内核补丁这条路。2. 依赖环境准备与librealsense安装2.1 系统更新与基础依赖补齐第一步永远是更新源和补基础编译工具。很多人跳过这步直接装librealsense结果cmake报一堆找不到头文件的错。sudo apt update sudo apt upgrade -y sudo apt install -y git cmake build-essential libssl-dev libusb-1.0-0-dev \ pkg-config libgtk-3-dev libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev \ libudev-dev libv4l-dev这里每个包都有用libusb-1.0-0-dev是USB通信的核心libgtk-3-dev和libglfw3-dev是realsense-viewer图形界面依赖libssl-dev处理加密相关libv4l-dev是视频采集接口。少一个后面cmake就会红字报错。我遇到过最典型的问题是libusb版本太老Ubuntu 20.04自带的版本有时候和librealsense要求的不匹配。如果编译时报libusb相关错误可以手动编译安装最新版libusb。2.2 内核补丁到底要不要打这是争议最大的一个点。librealsense官方提供了两种内核支持方式一种是librealsense自带的patch-realsense-ubuntu-lts.sh脚本另一种是社区维护的realsense-kernel-patches。不打补丁的情况相机能识别深度流和彩色流能出图但硬件时间戳同步、部分UVC元数据、激光发射器控制会不正常。做普通视觉任务够用。打补丁的情况需要完整硬件同步、多相机同步、精确时间戳的场景。但打补丁有风险内核升级后补丁会失效需要重新打。# 查看当前内核版本 uname -r # 如果决定打补丁先装内核头文件 sudo apt install -y linux-headers-$(uname -r) # 下载librealsense源码 git clone https://github.com/IntelRealSense/librealsense.git cd librealsense ./scripts/patch-realsense-ubuntu-lts.sh提示打补丁前建议先给系统做个快照或者备份重要数据。补丁脚本会重新编译内核模块万一失败可能导致USB子系统异常。2.3 udev规则配置不配这个永远报权限错这是新手最容易忽略的一步。RealSense相机是USB设备默认只有root能访问。不配udev规则realsense-viewer打开就是“No device connected”或者权限拒绝。cd librealsense sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ sudo udevadm control --reload-rules sudo udevadm trigger配完之后把当前用户加入plugdev组sudo usermod -aG plugdev $USER然后必须重新登录才生效。我见过有人配完规则直接开viewer还是不行就是因为没重新登录组权限没刷新。2.4 编译安装librealsense依赖齐了、规则配了就可以编译了。推荐用cmake指定安装路径方便后面卸载。cd librealsense mkdir build cd build cmake .. -DCMAKE_BUILD_TYPERelease -DBUILD_EXAMPLEStrue \ -DFORCE_RSUSB_BACKENDfalse -DBUILD_WITH_TM2false make -j$(nproc) sudo make install sudo ldconfig几个关键参数说明-DCMAKE_BUILD_TYPERelease开优化不然viewer跑起来卡-DBUILD_EXAMPLEStrue编译示例程序方便验证-DFORCE_RSUSB_BACKENDfalse用内核驱动而不是RSUSB后端性能更好-DBUILD_WITH_TM2false不用T265的话关掉省编译时间编译过程大概10到20分钟取决于机器性能。make -j$(nproc)用满所有核心能快不少。3. realsense-viewer运行验证与ROS联动3.1 第一次运行viewer的正确姿势编译安装完直接终端输入realsense-viewer就能启动。但第一次运行有几个检查点相机USB线插在USB 3.0口上蓝色口USB 2.0带宽不够深度流会掉帧终端有没有报Permission denied有的话回去检查udev规则界面上方能不能看到设备型号看不到就是驱动没加载# 验证librealsense是否识别到设备 rs-enumerate-devices # 启动viewer realsense-viewerrs-enumerate-devices能列出相机型号、固件版本、支持的流配置这个命令比viewer更底层排查问题时先用它确认设备层是否正常。3.2 固件升级别忽略RealSense相机的固件版本直接影响功能稳定性。老固件可能导致深度流闪烁、USB断连。升级用rs-fw-update工具rs-fw-update -l # 列出设备 rs-fw-update -f firmware.bin # 指定固件文件升级固件文件从官方发布页下载升级过程中不要拔线大概两分钟。升级完重新插拔相机。3.3 接入ROSrealsense-ros安装做机器人开发最终要把相机数据接进ROS。Ubuntu 20.04对应ROS Noetic安装方式有两种方式一apt安装推荐新手sudo apt install ros-noetic-realsense2-camera ros-noetic-realsense2-description方式二源码编译需要改代码时用cd ~/catkin_ws/src git clone https://github.com/IntelRealSense/realsense-ros.git cd realsense-ros git checkout git tag | sort -V | grep -P ^2.\d\.\d | tail -1 cd ~/catkin_ws catkin_make clean catkin_make -DCATKIN_ENABLE_TESTINGFalse -DCMAKE_BUILD_TYPERelease catkin_make install源码编译时注意分支选择ros1-legacy分支对应ROS1ros2-development对应ROS2。选错了编译不过。3.4 启动相机节点并验证话题roslaunch realsense2_camera rs_camera.launch启动后用rostopic list应该能看到/camera/color/image_raw、/camera/depth/image_rect_raw、/camera/imu这些话题。用rqt_image_view或者rviz订阅验证画面。如果要开IMU同步launch文件里加参数arg nameunite_imu_method valuelinear_interpolation/ arg nameenable_gyro valuetrue/ arg nameenable_accel valuetrue/注意D435i的IMU和图像同步需要内核补丁支持没打补丁的话时间戳会对不齐做VIO会飘。4. 常见报错排查与避坑经验4.1 报错速查表报错信息原因解决方法No device connectedudev规则没配或没重新登录配规则重新登录Permission denied用户不在plugdev组usermod加组Library not foundldconfig没跑sudo ldconfigUSB disconnect供电不足或线材问题换USB3.0口原装线Frame didnt arrive带宽不够或固件老降分辨率升级固件CMake Error: libusblibusb版本不匹配手动编译libusbviewer闪退显卡驱动或OpenGL问题装mesa驱动4.2 几个我踩过的坑坑一虚拟机里跑viewer。VMware和VirtualBox的USB直通对RealSense支持不好经常识别到设备但出不了流。如果非要在虚拟机里开发建议只跑ROS节点viewer在物理机上开。或者用WSL2但WSL2的USB支持需要额外配置比较折腾。坑二USB线材。原装线短但质量好第三方长线经常导致带宽不足。我试过一根三米的延长线深度流直接掉到5帧。换回原装线立刻满帧。坑三多相机同步。同时接两个D435如果不做硬件同步两个相机的曝光时间会互相干扰。需要用一个相机的同步信号输出接到另一个的同步输入线序在官方文档里有。坑四内核升级后失效。系统自动更新内核后之前打的补丁就没了相机功能退化。要么锁定内核版本要么每次升级后重新打补丁。# 锁定内核版本防止自动升级 sudo apt-mark hold linux-image-$(uname -r) linux-headers-$(uname -r)4.3 性能调优的几个参数viewer里能直接调的参数对应到ROS launch文件里也有enable_auto_exposure自动曝光室内固定光源建议关掉手动设laser_power激光功率0到360太高会过曝太低深度噪声大depth_units深度单位默认0.001米做近距离用0.0001filters后处理滤波decimation降采样、spatial平滑、temporal时域滤波做SLAM的话spatial和temporal滤波开着能明显降噪但会引入延迟实时性要求高的场景要权衡。5. 从安装到跑通的完整检查清单5.1 安装后自检流程装完别急着开viewer按这个顺序过一遍lsusb | grep Intel确认USB层识别到设备rs-enumerate-devices确认librealsense能枚举设备realsense-viewer确认图形界面能出流roslaunch realsense2_camera rs_camera.launch确认ROS节点正常rostopic hz /camera/depth/image_rect_raw确认帧率稳定每一步都过了说明环境没问题。哪一步卡住就针对性排查。5.2 卸载与重装librealsense装乱了想重来cd librealsense/build sudo make uninstall sudo rm -rf /usr/local/lib/librealsense* /usr/local/include/librealsense* sudo ldconfigROS包用sudo apt remove ros-noetic-realsense2-*卸载。重装前把build目录删干净不然cmake缓存会导致奇怪错误。这套流程我在三台机器上验证过物理机Ubuntu 20.04、虚拟机Ubuntu 20.04、双系统Ubuntu 20.04都能跑通。虚拟机那台因为USB直通问题折腾最久最后发现是VMware的USB控制器版本要设成3.1才行。如果你也在虚拟机里搞先检查这个设置。
返回列表