SR300 在 Ubuntu 22.04 下 Python 取帧失败?内核补丁到 pyrealsense2 一次修好
【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense
lsusb里找不到设备?这坑我踩过——Ubuntu 22.04 下让 SR300 进 Python,缺的往往只是 librealsense 的内核补丁和 pyrealsense2 绑定。
先花 10 秒确认机器能不能跑
| 检查项 | 要求 |
|---|---|
| 系统 | Ubuntu 22.04 LTS(jammy) |
| 内核 | 5.15 及以上的 HWE kernel(22.04 的 5.15 / 6.x 均可) |
| Python | 3.9 – 3.13,按实际解释器版本编译 |
| HWE 内核 | 必须,补丁脚本官方支持 jammy / noble |
表格全绿就可以动手了。内核还停在 5.4 的话,先sudo apt install linux-generic-hwe-22.04装上 HWE kernel 再重启——补丁脚本是按 HWE 内核的源码树去找 uvcvideo 的,找不到会直接报错退出,到时候再回头补装就麻烦了。
驱动就位:依赖、udev 规则、内核补丁一次装齐
git clone https://gitcode.com/GitHub_Trending/li/librealsense cd librealsense sudo apt-get install libssl-dev libusb-1.0-0-dev libudev-dev pkg-config \ libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev build-essential ./scripts/setup_udev_rules.sh ./scripts/patch-realsense-ubuntu-lts-hwe.shapt 那行长列表里,libssl / libusb 负责 USB 与固件通信,GL / GLFW 给 viewer 用;setup_udev_rules.sh把相机接进系统权限;patch 脚本才是重头戏——它给内核的 uvcvideo 打补丁,让 SR300 的深度数据流能按协议被完整读出来。跑完用sudo dmesg | tail -n 50瞄一眼加载记录。
⚠️ 提示:
dmesg里出现uvcvideo: module verification failed是打补丁驱动加载时的预期告警,不是错误。
脚本会在内核源码树里留下.orig备份,哪天想回到原厂驱动,./scripts/patch-realsense-ubuntu-lts-hwe.sh reset即可回退,不用重装系统。
驱动这层通了,Python 还看不见相机——差的就是绑定编译。
pyrealsense2 绑定编译:cmake 参数速查
mkdir build && cd build cmake ../ -DBUILD_PYTHON_BINDINGS:bool=true -DPYTHON_EXECUTABLE=$(which python3) make -j$(nproc) sudo make install export PYTHONPATH=$PYTHONPATH:/usr/local/lib-DPYTHON_EXECUTABLE值得单独说一句:机器上同时装了 3.10 和 3.12 时,这个参数决定绑定绑到哪个解释器,默认取$(which python3)命中的第一个,写死/usr/bin/python3.10也能强制定向。编译看核数,make -j$(nproc)一般几分钟到十几分钟。装完把.so放进/usr/local/lib后,两行验证:
import pyrealsense2 as rs print(rs.__version__)版本号能打印出来,上真枪。
跑通第一段深度流:最小脚本
640×480@30 的 z16 深度流,SR300 的舒适区。整段复制保存成.py就能跑:
import pyrealsense2 as rs import numpy as np pipeline = rs.pipeline() config = rs.config() config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30) pipeline.start(config) try: while True: frames = pipeline.wait_for_frames() depth_frame = frames.get_depth_frame() if not depth_frame: continue depth_image = np.asanyarray(depth_frame.get_data()) print(f"中心距离: {depth_image[240, 320] / 1000:.2f} m") except KeyboardInterrupt: pass finally: pipeline.stop()- 终端逐帧打印一行
中心距离: x.xx m,约每秒 30 行;手靠近相机数字变小,拉远变大 - z16 原始数据单位是毫米(16 位无符号整数),除以 1000 换算成米;打印 0.00 m 通常代表中心像素没有目标
- Ctrl+C 退出时
finally调用pipeline.stop(),设备正常释放,不会卡住
多机采集与常见症状速查
多台 RealSense 同进程跑起来并不稀奇,SR300 与 D400 系列混插都支持,C++ 侧现成参考在 examples/ 里。排障按"症状 → 一行命令"来:
| 症状 | 一行排查 |
|---|---|
import pyrealsense2报 ModuleNotFoundError | echo $PYTHONPATH,应包含/usr/local/lib |
lsusb列不出 Intel Corp. 设备 | 重跑./scripts/setup_udev_rules.sh后重新插拔 |
| 怀疑驱动没装上 | dmesg \| tail -n 50看 uvcvideo 加载记录 |
表外最常见的还有帧率偏低:降分辨率或关掉不需要的流,config.enable_stream参数调小一档立刻见效。
资源出口
- 安装文档:doc/installation.md
- Python 绑定指南:wrappers/python/readme.md
- 故障排查:doc/troubleshooting.md
- 示例库:examples/
【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考