公司动态

点云配准 6Dpose估计 实验报告(c++ open3d )

📅 2026/7/31 23:50:30
点云配准 6Dpose估计 实验报告(c++ open3d )
「c点云配准 报告 」/~0d493ZtaFU~:/链接https://pan.quark.cn/s/7e9e9fecd299V3 单帧点云配准到 6D Pose可视化汇报本报告展示电钻不规则 Mask 点云经过 V3 的完整处理过程场景预处理、FGR 全局粗配准、small_gicp GICP 精修、point-to-point ICP 最终精修以及T_camera_object6D Pose 输出。所有点云图均由 frame000404的真实 PLY、真实中间变换矩阵和真值矩阵生成不是示意假图。图片中的阶段效果固定使用代表运行run0 / seed206耗时和最终统计采用已归档的正式 40 次结果。1. 业务流程与时间口径V3 当前计时从“已生成的 Mask 点云 PLY”开始到输出T_camera_object为止阶段主要处理正式均值场景预处理PLY读取、5 mm点云/法向/FPFH、1.5 mm small_gicp点云/KD-tree/协方差78.5 msFGR粗配准FPFH特征双向匹配、tuple过滤、全局初始Pose72.1 msGICP精修small_gicp最大对应距离15 mm69.1 ms最终ICPpoint-to-point最大对应距离7 mm42.7 ms匹配与精修FGR GICP ICP183.9 ms在线估算场景预处理 匹配精修262.4 ms相机曝光/传输、Mask计算、从深度生成点云、机械臂IK和轨迹规划不在这262.4 ms内。模型CAD、模型FPFH和模型精修点云在程序启动时准备不计入每次抓取。2. 输入不规则 Mask 场景点云不规则 Mask 已经去掉大部分无关背景当前场景保留19,330个点。图中颜色表示相机深度 Z少量离群点仍然存在后续降采样、特征匹配和对应距离门槛共同抑制其影响。3. 场景和模型预处理V3 使用两条不同分辨率的分支FGR分支场景19,330 → 1,642点CAD模型34,695 → 3,757点体素尺寸5 mmsmall_gicp精修分支体素尺寸1.5 mm保留更多局部几何并建立KD-tree和协方差。5 mm点云负责快速找到全局初始Pose1.5 mm点云负责毫米级精修。两条分支承担的任务不同不能直接只保留5 mm点云完成最终精度。4. FGR全局粗配准代表运行中FGR输出误差为10.406 mm / 8.412°。此阶段的任务不是直接满足抓取精度而是在物体初始位姿完全未知时把CAD模型送入GICP可收敛的邻域。左图中灰色为Mask场景红色为真值CAD橙色为FGR估计CAD。右图把估计CAD按其到场景的最近邻距离着色。5. small_gicp GICP精修GICP利用点坐标和局部协方差从FGR初值继续优化。代表运行经过GICP后误差下降到2.105 mm / 0.795°旋转已经低于1°平移距离2 mm严格门槛还差约0.105 mm。这一步完成了主要精度收敛也是V3中不能简单删除的核心精修阶段。6. point-to-point ICP最终精修最终point-to-point ICP最多配置4次代表运行实际3次后达到1.952 mm / 0.780°跨过2 mm / 1°严格门槛。已有消融显示取消最终ICP时约为2.105 mm严格门槛0/10只做2次时约为1.999 mm工程余量太小。因此当前保留最多4次作为速度和精度折中。7. 三个阶段直接对比从左到右可以看到FGR解决未知初始Pose把模型送到正确物体附近GICP负责主要位置和姿态收敛最终ICP完成最后约0.15 mm的平移修正保证严格门槛。注意场景点云只包含相机可见表面而CAD包含完整物体表面。最近邻残差图中CAD背面和不可见区域可能显示为大残差红色这不等同于Pose错误定量Pose误差以真值矩阵计算结果为准。8. 最终6D Pose输出V3输出4×4齐次变换矩阵T_camera_object。代表运行的平移部分为X 3.010 mm Y -109.943 mm Z 626.331 mm眼在手外时通过手眼标定矩阵转换到机器人基坐标系T_base_object T_base_camera × T_camera_object再乘预先定义的物体抓取位姿得到机器人TCP目标位姿T_base_tcp_target T_base_object × T_object_tcp_grasp9. 耗时构成与精度收敛正式40次结果为指标V3结果严格正确40/40最终Pose中位误差1.953 mm / 0.780°匹配均值 / 中位数 / P95183.9 / 176.4 / 222.1 ms场景预处理均值78.5 ms在线均值估算262.4 ms与HALCON当前单帧结果对比V3慢约37 ms但平移误差只多约0.015 mm、旋转误差只多约0.046°。对于单次机械臂抓取这37 ms通常远小于运动规划和机械臂实际运动时间。10. 汇报结论V3能够从完全未知初始Pose开始不依赖上一帧适合眼在手外的单帧抓取。FGR负责全局定位GICP负责主要精修最终ICP保证跨过2 mm严格门槛。当前正式精度约1.953 mm / 0.780°从Mask点云文件到6D Pose约262.4 ms。在当前电钻frame000404上V3精度与HALCON同级速度差异对机械臂完整抓取周期影响较小。生产替代HALCON之前仍需采集多个独立单帧覆盖不同位置、旋转、遮挡和Mask扰动“每次业务只用一帧”不等于“只需要测试一个Pose”。文件说明与重新生成v3_pipeline_visualization/ ├── README.md 本汇报 ├── images/ 9张PNG汇报图片 ├── data/ 代表运行CSV、JSON、阶段矩阵和点云 ├── generate_images.py 从真实数据重新制图 ├── regenerate_report.ps1 一键重跑V3并生成图片 └── report_metrics.json 图片使用的Pose、误差、点数和正式耗时在V3项目目录执行 .\docs\v3_pipeline_visualization\regenerate_report.ps1只更新数据和图片、不重新编译 .\docs\v3_pipeline_visualization\regenerate_report.ps1 -SkipBuild制图脚本需要系统Python具备numpy、matplotlib、scipy和plyfile。3D相机采集单帧→ 目标检测矩形框仅用于缩小搜索区域→ 生成电钻实例分割Mask→ 使用原始Mask提取深度点→ V3FGR全局粗配准→ small_gicp GICP精修→ point-to-point ICP最终精修→ 输出 T_camera_object→ 手眼标定转换到机器人基坐标系→ 逆解、轨迹规划和抓取Mask膨胀与矩形框对照实验本实验回答两个问题电钻可见Mask是否应该膨胀以及能否直接使用外接矩形代替不规则Mask。实验固定 frame000404、CAD模型、真值、V3推荐参数、6线程和随机种子200219每种Mask预热3次、正式运行20次。只改变场景Mask不改变FGR、GICP和ICP参数。结果目录独立于V3正式基线不覆盖原项目数据。结论当前数据继续使用原始不规则可见Mask不改成矩形框也不默认膨胀。原始Mask20/20匹配均值179.6 ms本轮在线估算231.1 ms最快且稳定。膨胀1 px20/20但匹配均值增至248.8 ms慢约38.6%精度变化只有约0.013 mm / 0.008°没有实质收益。膨胀2 px17/203次掉到约19.519.9 mm / 18.819.0°不稳定。膨胀3 px本帧20/20、平移中位误差略低但匹配均值增至322.0 ms慢约79.3%并引入1,692个物体投影外深度点。外接矩形18/20匹配均值1275.2 ms、P952390.3 ms两次约19 mm / 19°错误明确不适合作为当前杂乱场景的最终点云ROI。膨胀3 px在本帧比膨胀2 px稳定并不表示“膨胀越大越好”。Mask变化会改变5 mm体素、法向、FPFH和随机对应关系FGR稳定性可能非单调变化单帧的一次有利组合不能外推到生产场景。1. 2D Mask覆盖范围黄色是原始BOP可见Mask边界青色是当前策略边界红色区域是新增像素。原始可见Mask面积为19,884 pxBOP完整投影Mask面积为19,957 px只相差73 px。策略有效深度点新增点新增点中位于完整投影内新增点中位于完整投影外原始Mask19,330000膨胀1 px19,91458455529膨胀2 px20,4741,144711,073膨胀3 px21,0951,765731,692外接矩形36,79117,4617317,388即使“位于完整投影内”的73个像素也属于mask_visib之外的遮挡区域其深度可能来自蓝色电钻或其他遮挡物并不能当成绿色电钻的真实表面。2. 3D场景点云变化灰色为原始Mask点云橙色为新增点。膨胀1 px已经在轮廓周围和更远深度处引入点矩形框则把白色瓶子、蓝色电钻、背景和桌面结构大量带入点云。这也再次说明单相机只能得到电钻朝向相机的可见表面Mask膨胀不会恢复背面只会扩大从深度图取点的二维范围。3. 最终配准效果策略严格成功平移中位 / P95旋转中位 / P95原始Mask20/201.966 / 1.967 mm0.780 / 0.780°膨胀1 px20/201.954 / 1.954 mm0.788 / 0.788°膨胀2 px17/201.942 / 19.866 mm0.797 / 18.989°膨胀3 px20/201.912 / 1.913 mm0.803 / 0.803°外接矩形18/201.986 / 19.631 mm0.737 / 18.797°中位误差只描述“多数正确运行”的精度。膨胀2 px和矩形框的中位数看起来仍不错但P95和成功率已经暴露出全局匹配失败不能只看中位数选择Mask。4. 速度、精度和稳定性汇总策略场景预处理匹配均值匹配P95在线估算相对原始匹配均值原始Mask51.6 ms179.6 ms269.7 ms231.1 ms基准膨胀1 px100.8 ms248.8 ms362.8 ms349.6 ms38.6%膨胀2 px57.6 ms377.2 ms715.4 ms434.7 ms110.0%膨胀3 px73.9 ms322.0 ms487.9 ms395.9 ms79.3%外接矩形135.4 ms1275.2 ms2390.3 ms1410.6 ms610.1%场景预处理每种策略只在进程启动时测量一次容易受Windows运行状态影响判断速度时优先看20次匹配均值和P95。该批次的绝对时间不替代V3正式40次基线主要用于同轮Mask策略筛选。5. 对生产Mask的建议当前BOP真值Mask已经准确覆盖绿色电钻可见区域因此默认保持原Mask。如果真实分割模型经常把物体边缘切得偏紧可以把“膨胀1 px”作为备用候选但不应直接接受全部新增点。更稳妥的生产流程是矩形检测ROI只用于缩小分割搜索范围 → 电钻实例Mask → 可选膨胀1 px → 新增点与核心Mask点云的3D距离过滤 → 深度连通域/统计离群点过滤 → V3 FGR GICP ICP矩形框可以用于目标检测和裁剪图像但不应直接作为最终深度点云Mask。若实际工位背景完全受控、矩形内只有电钻则应单独测试“矩形ROI 桌面平面去除 3D最大连通簇”不能把本实验中的裸矩形结果当作可用方案。6. 实验文件与复现mask_strategy_comparison/ ├── README.md ├── images/ 4张对比图 ├── data/ │ ├── masks/ 5种二值Mask │ ├── clouds/ 5种场景PLY │ ├── results/ 每种策略20次V3结果和阶段矩阵 │ └── mask_variant_metadata.json ├── comparison_summary.csv ├── comparison_summary.json ├── prepare_mask_variants.py ├── analyze_and_visualize.py └── run_comparison.ps1在V3项目目录执行完整复现 .\docs\mask_strategy_comparison\run_comparison.ps1跳过Release编译 .\docs\mask_strategy_comparison\run_comparison.ps1 -SkipBuild失败Pose是本实验需要保留的数据因此V3返回“未全部通过严格门槛”时脚本会记录警告、继续剩余策略并生成汇总只有程序异常退出才终止实验。电钻单帧抓取原始Mask方案推荐报告一、汇报结论在当前电钻单帧点云配准场景中推荐继续使用原始不规则可见Mask不默认膨胀也不直接改成外接矩形框。原始Mask在同轮20次对照中取得指标结果严格成功率2 mm / 1°20/20FGR GICP ICP匹配均值179.6 ms同轮在线时间估算231.1 ms平移中位误差1.966 mm旋转中位误差0.780°场景有效点19,330新增背景点0综合速度、严格成功率、P95和背景污染风险原始Mask是当前最好的工程折中。二、为什么不是“平移误差最小”的膨胀3 px选择Mask不能只看正确运行的中位误差还必须同时看成功率、长尾时间、污染点和跨场景风险。策略严格成功匹配均值在线估算平移 / 旋转中位误差工程判断原始Mask20/20179.6 ms231.1 ms1.966 mm / 0.780°推荐膨胀1 px20/20248.8 ms349.6 ms1.954 mm / 0.788°精度收益无实质意义速度变慢膨胀2 px17/20377.2 ms434.7 ms1.942 mm / 0.797°出现约19 mm / 19°错误拒绝膨胀3 px20/20322.0 ms395.9 ms1.912 mm / 0.803°本帧稳定但慢约79%污染点更多外接矩形18/201275.2 ms1410.6 ms1.986 mm / 0.737°慢且有错误Pose拒绝膨胀3 px的平移中位误差比原始Mask少约0.054 mm但匹配均值增加约142.4 ms新增1,765个深度点其中1,692个在完整电钻投影之外旋转误差由0.780°增加到0.803°单帧上偶然有利的FPFH对应关系不能保证换姿态后仍有利。因此不值得用明显的速度和泛化风险换取不到0.1 mm的单帧中位数变化。三、Mask覆盖范围黄色为原始可见Mask青色为当前策略边界红色为新增区域。原始可见Mask面积19,884 pxBOP完整物体投影面积19,957 px只差73 px说明原始Mask并没有明显切掉电钻。外接矩形新增17,461个有效深度点其中17,388个在完整电钻投影之外主要来自蓝色电钻、白色瓶子、桌面和背景。四、3D点云变化灰色为原始Mask点云橙色为新增点。膨胀不会恢复电钻背面或遮挡面只会从二维Mask边缘继续读取邻近物体和背景的深度。单个3D相机得到的是电钻的单视角可见表面而V3利用这部分可见表面配准完整CAD并输出6D Pose。场景点云不需要是360°完整模型。五、最终配准与稳定性原始Mask、膨胀1 px和膨胀3 px在本帧20次均通过严格门槛膨胀2 px出现3次错误矩形框出现2次错误。两种失败方案的P95误差都达到约19 mm / 19°对于机械臂抓取不可接受。六、机械臂业务采用方案当前推荐生产链路3D相机采集单帧 → 目标检测矩形框仅用于缩小搜索区域 → 生成电钻实例分割Mask → 使用原始Mask提取深度点 → V3FGR全局粗配准 → small_gicp GICP精修 → point-to-point ICP最终精修 → 输出 T_camera_object → 手眼标定转换到机器人基坐标系 → 逆解、轨迹规划和抓取矩形框可以作为检测ROI但不能直接作为最终点云Mask。如果真实分割模型在实际工位经常把边缘切得偏紧可以单独测试原始分割Mask → 可选膨胀1 px → 只保留与核心Mask点云3D距离较近的新增点 → 深度连通域和统计离群点过滤当前BOP真值Mask不需要这一步。七、时间口径说明本Mask对照批次的原始Mask在线估算是231.1 ms此前V3两个独立批次共40次的正式在线均值是262.4 ms。两者运行时系统状态不同因此Mask策略相对比较使用本报告的同轮数据对外描述V3单帧速度时建议写为约0.230.26秒保守工程预算继续使用正式值约262 ms当前精度可描述为约1.951.97 mm / 0.78°。相机曝光和传输、Mask推理、深度转点云、手眼矩阵、机械臂IK和轨迹规划不包含在上述V3配准时间内。八、最终汇报用语针对眼在手外的电钻单帧抓取场景V3采用原始不规则可见Mask过滤背景再执行FGR全局配准、small_gicp GICP和最终ICP精修。原始Mask同轮20次严格成功率为20/20匹配均值179.6 ms在线估算231.1 msPose中位误差1.966 mm / 0.780°。综合速度、精度、P95和背景污染风险原始Mask优于膨胀Mask和外接矩形方案。工程上按约0.230.26秒完成从Mask点云到6D Pose进行预算。九、文件结构original_mask_recommendation_report/ ├── README.md ├── generate_summary_image.py └── images/ ├── 01_original_mask_recommendation.png ├── 02_mask_2d_comparison.png ├── 03_pointcloud_3d_comparison.png ├── 04_registration_comparison.png └── 05_metrics_comparison.png完整原始CSV、JSON、五组PLY和每次运行数据仍保存在相邻目录../mask_strategy_comparison/。