ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

macOS RealSense 环境配置:如何 30 分钟跑通 RealSense 深度相机到点云开发

macOS RealSense 环境配置:如何 30 分钟跑通 RealSense 深度相机到点云开发 macOS RealSense 环境配置如何 30 分钟跑通 RealSense 深度相机到点云开发【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense本文围绕 librealsenseIntel RealSense SDK做 macOS RealSense 环境配置SDK 把 D400 系列深度相机的红外立体数据变成深度帧、点云等应用可直接消费的数据下面从插线、编译到出点云走一遍完整流程。上图就是深度数据流跑通后的样子灰度图里越亮的区域离相机越近。只要你能稳定输出这种帧整个环境就算成了一半剩下的都是工程问题。 插线后系统毫无反应macOS 上 RealSense 相机是怎么被识别的本节解决USB 插上后系统没有任何提示怎么区分这是正常的和真的没识别到。先说结论macOS 上 SDK 不依赖系统 UVC 驱动而是通过 libusb 直连 USB 设备。这带来两个后果都是新手最先被坑到的点你在 Finder 里看不到任何相机图标系统层面一片安静是正常现象不代表失败从 macOS 12Monterey开始受系统 USB 安全策略收紧影响本 SDK 里所有走 libusb 的工具必须用 sudo 运行否则打不开设备。所以相机有没有被识别这件事不能靠肉眼要靠枚举工具rs-enumerate-devices的输出来判断。它随仓库一起编译产出用法会在下一节编译完成后立刻用到。另外排查一个软件层面的隐形杀手相机被别的程序抢占了。Photo Booth、FaceTime、甚至 Finder 的相机预览都会把相机占住此时任何 SDK 工具都会报设备不可用。运行枚举工具前先把所有带摄像头图标的程序关掉再重插一次设备。编译 librealsensecmake 配置时最容易漏的两个参数本节解决macOS 没有预编译包如何一次装齐依赖、一次配好 cmake并绕开 make 阶段最常见的两个报错。依赖与源码brew 一次装齐CMake、libusb、pkg-config、openssl 都在 Homebrew 里一条命令解决。libusb 是 SDK 与相机通信的底层依赖openssl 是更新检查功能的硬依赖一次性装齐能省掉后面很多 cmake 报错xcode-select --install brew install cmake libusb pkg-config openssl然后拉源码并创建构建目录已有仓库的话直接跳到 cmake 那一步git clone https://gitcode.com/GitHub_Trending/li/librealsense cd librealsense mkdir build cd buildcmake 参数逐个说清楚配置命令如下其中FORCE_RSUSB_BACKEND是 macOS 上最容易漏的那个参数cmake .. -DBUILD_EXAMPLEStrue -DBUILD_GRAPHICAL_EXAMPLEStrue -DFORCE_RSUSB_BACKENDON -DCMAKE_BUILD_TYPERelease-DFORCE_RSUSB_BACKENDON强制走 libusb 后端。Linux 默认用 v4l2macOS 没有这套机制只能 USB 直连这个参数是必选项-DBUILD_EXAMPLEStrue编译 examples/ 目录下的所有示例下一节验证链路全靠它们-DBUILD_GRAPHICAL_EXAMPLEStrue编译需要 OpenGL 窗口的图形化示例点云就是macOS 自带框架可以直接支持-DCMAKE_BUILD_TYPERelease开优化后面跑点云时能明显减少 CPU 占用。配置完并行编译按本机核心数并行make -j$(sysctl -n hw.ncpu)make 阶段两个高频报错与解法第一个现象是ld: library not found for -lusb-1.0。原因是 Homebrew 把 libusb 装在了/usr/local/lib而链接器的默认搜索路径里没有它。解法是把这条路径写进链接器环境再重新 make/bin/launchctl setenv LIBRARY_PATH /usr/local/lib第二个现象是Could NOT find OpenSSL通常出现在开了更新检查选项的构建里。原因是 Homebrew 把 openssl 标记为 keg-only不会自动软链到全局目录cmake 因此找不到。解法是把它指向 brew 报告的实际路径export OPENSSL_ROOT_DIR$(brew --prefix openssl)编译成功后立刻回到上一节的悬念做第一次识别确认注意前面说过的 sudosudo ./tools/enumerate-devices/rs-enumerate-devices输出里能看到设备名如Intel RealSense D435和序列号相机被系统识别这一关就算过了。跑通第一帧深度数据并生成实时点云本节解决用最小成本验证编译产物真的能用——先拿到深度帧再升级成实时点云。先交代两个 macOS 上的限制来自 macOS 安装文档RealSense Viewer 在当前版本不受支持IMU 运动传感器也是禁用状态。所以 macOS 上的验证一律走 examples别去找 Viewer。先跑 rs-hello-realsense 确认深度链路最简单的示例是 rs-hello-realsense它不做任何渲染只持续打印画面中心物体的距离输出形如The camera is facing an object 1.23 meters away。数字在动就说明深度流已经通了sudo ./examples/hello-realsense/rs-hello-realsense从深度帧到可旋转的实时点云链路通了之后直接上点云。rs-pointcloud 会开一个窗口鼠标可以旋转、缩放sudo ./examples/pointcloud/rs-pointcloud它的核心逻辑只有几行这也是你自己写程序时的骨架——pipeline 每轮取一组帧深度帧交给 pointcloud 对象算出点云rs2::pipeline pipe; rs2::pointcloud pc; pipe.start(); auto frames pipe.wait_for_frames(); // 阻塞等待下一组帧 points pc.calculate(frames.get_depth_frame()); // 深度帧 → 点云把 SDK 接入自己的项目C 与 Python 两种链接方式本节解决编译产物如何进自己的工程以及打包分发给别人时 macOS 特有的坑。C 工程里链接 librealsense2头文件都在 include/ 下入口头是librealsense2/rs.hpp。先make install默认装到 /usr/local然后你自己的工程用 CMake 的 find_package 接入即可如果装到了自定义前缀就用-DCMAKE_PREFIX_PATH指过去find_package(realsense2 REQUIRED) target_link_libraries(my_app PRIVATE realsense2::realsense2)开 Python 支持生成 pyrealsense2想要 Python 环境的话在 cmake 阶段加上-DENABLE_PYTHONauto默认探测不到目标解释器时再显式指定 Python 路径make install后进入 wrappers/python/ 目录执行pip install .之后import pyrealsense2即可。最小代码与 C 骨架同构pipeline→wait_for_frames→get_depth_frame→pc.calculate(depth_frame)。打包分发修正 libusb 的动态库引用这是 macOS 独有的坑。编译出的librealsense2.dylib写死了/usr/local下 libusb 的绝对路径只拷 dylib 到应用 bundle 里换台机器就找不到 libusb。官方推荐先用install_name_tool把引用改成相对路径install_name_tool -change /usr/local/opt/libusb/lib/libusb-1.0.0.dylib rpath/libusb-1.0.0.dylib librealsense2.dylib改完把两个 dylib 一起放进应用的 Frameworks 文件夹分发就不会再报缺库。没有相机时继续开发录制回放当离线相机本节解决手边没有硬件或 Viewer 不可用时如何搭一个可复现的数据源来调试自己的代码。SDK 有个很实用的机制把真实数据流录成.bag文件之后这个文件可以当作一台虚拟设备加载回放。现场采一段数据回实验室没带相机也能继续调而且每帧数据完全可复现调 bug 效率很高sudo ./examples/record-playback/rs-record-playback record ./my-scene.bag sudo ./examples/record-playback/rs-record-playback playback ./my-scene.bag两条命令分别是录制和回放示例说明在 record-playback机制细节可以看 record-and-playback 文档 和 sample-data后者还提供了可直接下载的示例数据集点云抖动、有孔洞质量评估与后处理过滤器调优本节解决点云抖、噪、有洞时怎么量化误差以及软件层面有哪些调优点。先量化depth-quality 工具测深度误差先量化再调参。仓库自带的 depth-quality 工具能对固定目标做深度误差的批量统计适合作为当前画质够不够好的基线后处理过滤器的组合用法软件层面的提升靠后处理过滤器。在管线里深度帧被消费之前可以串上 temporal时域滤波压住帧间抖动、spatial空域滤波抹掉孤立噪点、hole-filling孔洞填充等过滤器。每种过滤器的作用和参数取值都写在 post-processing-filters 文档rs-post-processing 示例里有一套完整的组合示范可以直接抄。如果软件手段都用尽了还有问题最后查物理层D400 系列对 USB 带宽要求不低劣质 USB 2.0 线或过长的数据线都会引起丢帧和点云抖动换个好线插直连口往往立竿见影。下一步动作打开 examples/align/ 里的 rs-align 示例把深度对齐到彩色这一层加进你自己的项目——对齐之后点云才能贴上有颜色的纹理画面才算真正完整。【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表