ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

librealsense 完整教程:如何 5 步跑通 RealSense 深度相机并构建 3D 视觉应用

librealsense 完整教程:如何 5 步跑通 RealSense 深度相机并构建 3D 视觉应用 librealsense 完整教程如何 5 步跑通 RealSense 深度相机并构建 3D 视觉应用【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsenselibrealsense 是 Intel 官方开源的 RealSense SDK负责把 RealSense 深度相机输出的彩色、红外与深度数据变成你的 C/C/Python 程序能直接消费的结构化帧适用于机器人、三维扫描和 CV 算法工程师。本文带你从克隆仓库到写出第一个测距程序全部基于仓库内真实代码。⚡️ 快速上手克隆、编译与第一次看到深度画面最省事的路径是直接下载官方预编译包需要定制或装 Python 之外的语言绑定就从源码编译。以 Linux 为例只需四步git clone https://gitcode.com/GitHub_Trending/li/librealsense # 获取源码 mkdir build cd build # 独立构建目录不污染源码 cmake .. # 配置构建可加 -DDEPTH_QUALITY_TOOLon 等选项 cmake --build . -j$(nproc) # 并行编译产物在 build/ 下编译完成后第一屏看什么运行官方自带可视化程序./realsense-viewer # 无需写代码直接查看彩色/深度/点云三路画面窗口里左侧是设备树能看到相机序列号、各传感器可配置的分辨率与帧率右侧是当前实时画面。确认深度画面不是纯黑、有灰度层次说明相机链路正常可以开始写代码。Python 用户跳过编译pip install pyrealsense2一行即可注意稳定版与 beta 版只能装一个import 名都是pyrealsense2。 第一个程序读取任意像素的距离SDK 的高层入口是rs2::pipeline流水线对象内部帮你完成打开设备、配置流、同步帧等琐事。仓库里 examples/ 目录按难度分级最基础的是hello-realsensers2::pipeline p; // 创建流水线 p.start(); // 以默认配置开始出图 auto frames p.wait_for_frames(); // 阻塞直到一帧到达 auto depth frames.get_depth_frame(); // 取出深度帧 float dist depth.get_distance(x, y); // 该像素距相机的距离单位米关键认知深度帧里的每个像素存的就是距离值Z16格式单位毫米get_distance只是把它换算成米。程序里对x, y取画面中心就能持续打印正前方物体离我多远。想控制出什么流用rs2::config在start之前声明比如cfg.enable_stream(RS2_STREAM_DEPTH, 640, 480, RS2_FORMAT_Z16, 30)参数依次是流类型、宽、高、格式、帧率。 空间对齐把深度贴到彩色图上深度传感器和彩色摄像头是两个镜头画面分辨率、视角都不一样。直接拿深度像素 (x, y) 去索引彩色图会错位距离越远偏得越多——这是新手最常见的框偏了问题。解法是对齐align把一路流变换到另一路的坐标系。注意对齐对象创建开销大要放在主循环外rs2::align align_to_color(RS2_STREAM_COLOR); // 目标选彩色视点 auto aligned align_to_color.process(frameset); // 整组流一次性变换变换后get_color_frame()和get_depth_frame()分辨率一致逐像素对应成立。两个副作用要心里有数插值只允许最近邻避免捏造不存在的深度值且彩色镜头看不到的遮挡区域会出现无效像素。 深度图降噪五个常用后处理滤波器原始深度画面常有两类瑕疵随机噪点和边缘毛刺。SDK 把清理工作做成可串联的滤波器链常用五个rs2::decimation_filter dec; // 抽稀降分辨率减噪兼提速 rs2::spatial_filter spat; // 空间滤波保边平滑消毛刺 rs2::temporal_filter temp; // 时序滤波用历史帧压抖动 rs2::threshold_filter thr; // 阈值裁掉超范围值 rs2::hole_filling_filter hf; // 填洞补无效像素使用方式是按temp → dec → spat → hf顺序对深度帧连续process每个滤波器都能单独设参数如dec.set_option(RS2_OPTION_DECIMATION, 2)表示抽到 1/4 像素。想交互式调参数看效果直接跑仓库自带的post-processing示例它给每个滤波器都配了实时滑块。⏸️ 录制与回放.bag 文件脱离相机调试调算法时不可能永远对着实物librealsense 支持把实时流录成.bag文件之后像设备一样回放rs2::recorder rec device.asrs2::recorder(); rec.start_recording(scene.bag); // 开始写入文件 rec.stop_recording(); // 结束得到完整 bag回放时改用rs2::playback还能seek_to跳到任意时间点、循环播放。这带来两个实际收益现场采集的数据可以带回办公室反复分析算法 bug 出现时有据可查。仓库里的record-playback示例演示了带进度条的完整交互流程。 三个现场排障场景场景一黑色物体在画面里消失。现象是纸箱是白色的、旁边的哑光黑设备却测不出深度。原因不是程序错而是红外结构光被黑色表面吸收传感器收不到回波。打开 Viewer 把发射强度emissivity调高验证若仍无效给黑色物体区域加辅助照明或在算法层对无效区做插值兜底。场景二在彩色图上画的检测框离得远的物体框不住。检查代码里是否跳过了对齐——只要深度和彩色分别来自两个传感器就必须先align。跑measure示例可直观对比对齐前后点两个像素量距离未对齐时结果随距离漂移。场景三嵌入式设备上帧率掉到 15 以下。用depth-quality工具确认硬件本身能跑满 30fps 后问题在 CPU 侧。优先加decimation_filter把深度降档如 640×480→320×240再检查是否开启了不需要的流彩色流占用远大于深度。每降一档分辨率后处理和下游算法的开销同步减半。❓ 安装与平台高频问题问题原因与解法Linux 插上相机无反应需打内核补丁 udev 规则跑仓库scripts/下install_dependencies-*.sh对应发行版的脚本虚拟机里相机识别不到USB3 虚拟层不支持官方明确不支持 VM 部署请用物理机Python 导入报版本冲突pyrealsense2与pyrealsense2-beta不能共存卸载其一深度值全是 0多半是被threshold裁掉了或超出量程先print原始帧确认macOS/ARM 编译失败检查 CMake 版本 ≥ 3.13并按doc/里对应平台的安装文档装依赖Jetson 上想用 MIPI 直连需刷 L4T 内核补丁参考doc/installation_jetson.md行动清单今天按第一节四行命令编译跑通realsense-viewer看到深度画面。本周把hello-realsense改成你要测的像素点加上align与temporal滤波器用record_to_file存一段现场数据。之后遇到怪问题先看 doc/troubleshooting.md涉及多语言集成再浏览 wrappers/ 里现成的绑定。【免费下载链接】librealsenseRealSense SDK项目地址: https://gitcode.com/GitHub_Trending/li/librealsense创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表