外观
识别和抓取常见问题
约 13708 字大约 46 分钟
2026-01-26
1. 双目
双目windows PickWiz部署(应用向)
1.1 自动曝光下取图时间过长
问题:使用双目相机,自动曝光或基于倍率的HDR模式下,进一步优化相机取图节拍的方式【≥1.7.1】:
解决方案:使用自动曝光时间的上限可以控制单张图片的最大曝光时间(建议设置大于200000μs,即200ms,再低的话也不会提升帧率,最高帧率为5帧,反而损害图像质量),200000μs就是最快节拍了,算法会自动根据增益补偿亮度,整体效果不变,但是降低了取图时间,HDR模式下也可以通过这个参数控制最大曝光时间,进而降低HDR的整体时间。

1.2 拍照时闪退
问题:使用双目相机,拍照闪退
可能原因:双目相机没有使用千兆网
解决方案:双目相机必须使用千兆网,先检查网线是否为千兆网,如不是需要更换。
1.3 取图失败报错
问题:双目相机报错取图失败
解决方案:需要新建一份双目相机配置,然后再取图。

1.4 取图失败报错
问题:双目相机报错取图失败
可能原因:丢包严重
解决方案:
可使用MVS软件 连接双目相机,并开始采集 ,检查是否有弹窗提示丢包严重

若有则
保证相机交换机专供相机使用,保证其网络稳定,相机曝光设置为5000,方便后续带宽测试;
打开带宽管理工具,连接想使用的相机;
确认网络最高带宽:滑动相机带宽到最大,确认这个最大值,例如964M,经过测试需留一部分(暂定64M)带宽余量,总的可用带宽为900M;
根据使用的设备数量分配带宽:如4个相机需要同时使用,则设置相机带宽为900/4=225M;
点击开始分析,若(发送数据量)带宽未跑满或是相机出现了丢包,则需继续定位原因;


1.5 点云异常
问题:双目相机点云成像塌陷/失真
可能原因:2D成像存在过曝/过暗,工件长方向不与画面垂直,存在视觉盲区
解决方案:
- 优先检查2D成像是否存在过曝/过暗情况,如有则优先进行曝光调整。
| 状态 | 2D图 | 点云 | 备注 | 处理方式 |
|---|---|---|---|---|
| 调整曝光前(过暗) | ![]() | ![]() | 塌陷 | 补充光源使目标物体表面清晰可见 |
| 调整曝光后 | ![]() | ![]() | 正常 | / |
| 状态 | 点云 | 备注 | 处理方式 |
|---|---|---|---|
| 调整曝光前(过暗) | ![]() | 塌陷 | ![]() |
| 调整曝光后 | ![]() | 正常 | / |
检查工件长方向是否与画面垂直,涉及到双目的“同名点”原理性问题,建议将相机安装角度翻转90度,如下图。


若物体在图像的左右图中存在“视觉盲区”,模型将无法正确预测点云,造成失真或塌陷
这个视觉盲区来怎么理解,只有一个相机能拍到?:左目可以看到右目看不到(反之亦然) 为什么“模型上无法解决”:一般解决这个问题的方式就是影子模式,但是这个区域刚好是遮挡区域,这种区域是不会进入影子模式学习的。因此无用。
例子 成像 

若出现红线图正常,点云成像异常,则修改缩放比跟物体离相机的最小距离均能形成正常点云,实际应该先修改物体离相机的最小距离
| 例子 | 红线图 | 点云 |
|---|---|---|
| 异常 | ![]() | ![]() |
| 正常 | ![]() | ![]() |
1.6 双目相机2D图局部成像过曝
问题:双目相机“阴阳脸”导致2D图局部成像过曝
可能原因:没有开启HDR曝光模式,光线异常
解决方案:
- 通用简易大物体场景,如麻袋纸箱
开启HDR高动态,可以看到工件表面局部过曝的地方可以呈现出纹理,点云改善
复杂形状工件阴阳脸,如圆柱、特定形状
目前双目成像无法解决,如以下场景
1.7 高分双目拍照节拍优化
问题:使用双目高分相机时单次拍照节拍过长(单次拍照将近超过8~10s)
可能原因:
缩放比用了1.0,对高分辨率相机而言图像太大
开启了高动态,相当于触发多次取图
模型推理使用了默认的16迭代次数,对高分辨率图像耗时过长
解决方案:
- 检查拍照界面缩放比设置是否使用0.5

- 检查高动态是否关闭


- 通过修改
C:\Users\dex\.dexforce\kuawei_data\deepmodel\iris\sack_carton\config.json文件中的"refine_iters"字段,从16修改成5,改完后重启软件。
- 注意此时可能存在点云效果变差的情况,可使用产品中的双目影子模式,即可适配(需>=1.7.6)。


1.8 双目相机取图出现黑线
问题:双目相机取图出现黑线,如下图所示。


可能原因:客户更换更长网线导致的网速不稳定,网络问题导致KINGFISHER双目相机取图存在黑线
解决方案:优先排查现场的网络情况或网线状态。
2. 假面模式&影子模式
2.1 假面模式和影子模式的区别
问题:假面模式和影子模式的区别是什么,分别适用于什么场景?
回答:
假面模式:是指基于纹理+合成数据快速构造出来的数据,直接用于训练。检测能力等同于给定的纹理(如果给了多种纹理,那它就能检测多种纹理的箱子或者麻袋)对应的场景,一般直接用于实际物料检测出现fail的情况(例如近期 遇到的驭视,检测效果过差);132后的版本都是支持的。训练时长在工控机上预计是1h内。
影子模式:是指模型运行实际场景后积累的真实数据,重新用于训练。一般的使用场景是已经实现了95%+以上的检测成功率,期望达到99.9%时。130后的版本都是支持的。训练时长在工控机上预计是1h内(启动数据量为100份以上)。
2.2 假面模式纹理数据保存路径
问题:使用假面模式训练后所保存的纹理数据在哪?
回答:在对应的项目配置文件夹里

2.3 假面模式下训练新工件
问题:使用假面模式训练后得到模型A,场内又新增了不一样的箱子,可以在A的基础上继续使用假面模式进行训练吗?
回答:可以,只需要将假面模式训练时的模型更换为对应模型,并录入新的纹理

2.4 假面模式训练无效果
问题:使用假面模式后,效果没有变化,是什么原因?
可能原因:工件模型没有更新,框取纹理不全
解决方案:
2.5 假面模式训练失败
问题:假面模式训练失败

可能原因:
解决方案:
可能因为代码bug导致文件夹未顺利创建

若没有,创建即可重新跑假面模式 or 影子模式
可能因为直接断电或者直接重启导致的文件损坏
- 关注这个路径下面这5个文件夹,每个文件夹中都包含info.yaml,若点开info.yaml,发现文件损坏不能正常打开。跳转第2步

- 在NAS上下图的位置找到对应的文件夹(注意有个文件夹要解压缩),解压后替换上图中data projects的同名文件夹即可。(先删除data projects中文件夹,再更新进去)

2.6 影子数据保存路径
问题:开启影子模式后,保存的影子数据在哪可以看到?
回答:默认是在kuawei_data路径下,也可以修改保存路径(建议使用默认路径)


2.7 影子模式训练无效果
问题:使用影子模式后,效果没有变化,是什么原因?
可能原因:模型未更新、工件种类不匹配
解决方案:
2.8 影子模式开启位置
问题:无序、有序场景在哪开启影子模式?
回答:无序、有序场景默认打开,如果不确定可以按照下面路径查看


2.9 影子模式保存节点修改【1.6.0-1.7.0】全场景
问题:如何修改影子模式保存节点?
回答:进入项目目录下,根据作业ID找到作业的配置

进入配置,修改ShadowMode一节的内容

3. 拆垛场景
3.1 2D识别
3.1.1 快速获取最合适的缩放比例
问题:如何快速获取最合适的缩放比例
回答:
本地使用run.py进行推理(windows)
3.1.2 提取上层纹理 - 个别实例无法识别
问题:大小相同、有序摆放的纸箱出现个别纸箱检测不出来,除了优化模型是否还有其它方法?
可能原因:
解决方案:可以修改提取上层纹理的参数,只保留最上层的纸箱



3.2 抓取点处理
3.2.1 位姿调整
问题:软件默认输出的纸箱坐标x指向长边y指向短边,希望y指向长边,参数如何设置?
回答:分为两种情况进行设置
RZ角不固定(接受±180旋转)
- 在抓取策略中添加一个90°的固定旋转即可

Rz角固定
- 首先添加抓取增加固定旋转角,使y指向短边

- 其次添加设置抓取角度范围(角度范围根据实际情况进行设置 )

3.3 抓取精度
3.3.1 抓取点不在中心 - 分辨率
问题:纸箱实例分割正常且mask完整,但是抓取点不在中心,如何调整?
可能原因:出现该问题的原因可能是因为抓取计算-分辨率参数比较大,导致计算的mask间距较大
解决方案:可以修改抓取-分辨率的大小,调参建议如下

调参
使用 Meshlab 打开历史数据所在文件夹的点云,历史数据的文件路径为C:\Users\dex\kuawei_data\PickLight
Meshlab 是一个强大的三维显示、操作工具,下载地址 https://www.meshlab.net/#download
在 Meshlab 打开对应的点云后,点击
测量相邻点距离并填入附近的值
实际场景中上层物体的点云精度更小,下层物体的点云精度更大,因此建议填入稍大一些的值
如下图所示,测量得到的点云值为0.0016,因此可填入该值附近的值例如0.002作为点云精度

3.3.2 抓取角度过大
问题:麻袋实例分割正常且mask完整,但是麻袋出现鼓包导致抓取角度过大,怎么样能让抓取角度小一点?
解决方案:
可以通过调整patch的大小
进入到可视化工作流中,将"box_width" :100,和"box_height" :100,(代表patch的大小,可根据实际麻袋进行调整)添加到dof4的算法中

3.3.3 抓取点不在中心 - 分割到侧面
问题:出现检测时分割正确,但会将麻袋的侧面也分割进去,导致抓取出现偏差不在中心

可能原因:计算时将侧面也计算进去了
解决方案:可以将视觉参数中抓取计算-选择坐标系由1(roi坐标系)->2(代表的是选择和麻袋垂直的坐标系)
3.3.4 抓取点不在中心 - 抓取点偏差大
问题:分割的mask正确且完整,但在抓取点生成节点输出的点云不正确?



可能原因:这种情况一般是由于可选函数中的参数设置有问题,如点云剔除函数的平均距离比参数设置过小,麻袋点云的大量点被剔除导致抓取点偏移。
解决方案:调整参数设置
3.3.5 抓取点不在中心 - 分割比较粗糙
问题:麻袋分割框过大mask粘连下层,抓取点出现偏移,如何解决?

解决方案:由于mask过大,导致本体点云粘连了下层点云,需将下层点云剔除掉,只保留上层点云

- 在视觉参数中勾选可选函数滤出物体距离超限的点云(基于roi轴方向)(v1.4.2)


3.3.6 抓取点不在中心
问题:查看分割效果图,分割及mask均正常,但是抓取点不在中心,如何解决?
可能原因:实例中粘连了过多的噪点
解决方案:查看一下对应历史数据中抓取节点的输出,可以勾选剔除点云噪点



3.3.7 抓取点模式:4轴/6轴(≤1.4.1)
问题:当机械臂为四轴时,对应的坐标输出在哪里设置?
回答:如果机械臂是四轴,则将抓取生成节点中dof4算法配置里的4dof设置为true;如果是六轴,则设置为false(需进入到可视化工作流中)

3.4 可选函数
3.4.1 fill_hole 孔洞填充使用后点云产生噪点
| 版本依赖 | 添加位置 | 源数据 | 目标数据 |
|---|---|---|---|
| PickLight >= 1.5.0 | 前景节点的后处理 或者 实例生成节点的预处理 | depthImage | depthImage |
建议在glia-0.3.3及以上版本使用
问题:进入到可视化工作流,使用fille_hole来填补孔洞时出现类似金字塔的阶梯状噪点,如

可能原因:深度图像中深度为0的区域影响了孔洞的填充,在pickwiz版本>=1.5.0后修复,
解决方案:
建议寻求产研支持更新现场软件版本
确认或升级glia >= 0.3.3,参考 Windows开发环境搭建-PickLight如图,寻找glia-0.3.3的对应版本下载

确认或升级pickwiz >= 1.5.0 or 升级后端whl包至release-1.4.5.1 (commit版本>=xxx,PR待合入 )
更新后重启软件,再次运行历史数据即可

3.4.2 filter_by_color 函数使用
问题:实例生成误检测,误检测到底部托盘或者其他部分
解决方案:当实例生成出现误检,误将底部托盘或者其他位置检测为待抓取工件时,首先观察这类检测的实例与正常工件之间的区别。


对于上图中麻袋和托盘之间差异很大的场景,进入到可视化工作流,可添加函数filter_by_color用于按照指定的颜色上下限过滤。
- 在实例过滤节点中添加 filter_by_color

- 参数说明
| 参数 | 设置值 | 说明 |
|---|---|---|
| min_c | 0.1 | 颜色过滤的最小值,0为黑色,1为白色 |
| max_c | 2 | 颜色过滤的最大值,不可小于min_c |
| threshold | 0.7 | 过滤阈值,当实例mask中在过滤范围(min_c, max_c)内的数量与mask面积的比低于该阈值时则过滤该实例 |
| inverse | false | 是否取反,若为true,则将取mask中颜色小于 min_c 或大于 max_c的点来计算阈值 |
按上述参数设置即可过滤掉带黑色的托盘实例,仅保留麻袋的实例。
3.4.3 is_top_safety 抓取点上方是否存在其他遮挡
问题:如何判断部分场景待抓取物体是否安全无遮挡
回答:可以在实例过滤节点中增加is_top_safety函数
- 参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
| x_length | 1.0 | 长方体生成所必须参数,用于判断抓取点沿姿态x方向的长度范围内是否存在遮挡物 |
| y_width | 1.0 | 长方体生成所必须参数,用于判断抓取点沿姿态y方向的宽度范围内是否存在遮挡物 |
| z_depth | 2.0 | 长方体生成所必须参数,用于判断抓取点沿姿态z方向的宽度范围内是否存在遮挡物 |
| bindwidth | 0.1 | z方向的距离阈值,单位是m,点云与抓取点在z方向的高度差超过这个距离的被认为是遮挡点 |
| num_threshold | 1000 | 遮挡点超过该阈值则认为该抓取点被遮挡 |
| debug | false | 是否保存点云数据,用于观察长方体生成是否合理 |
| save_path | "" | 数据保存路径,注意win下的路径用 \\ 分隔 |

3.4.4 is_safety 抓取点所处的夹具是否发生碰撞
问题:is_safety函数的作用是什么?
回答:用于过滤可能发生碰撞抓取点,适用于机械臂夹取物体且已知夹具模型的情况
- 参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
| prewin | 100 | 单位为像素,在抓取点周围指定像素范围生成一个mask,用于后续判断碰撞的范围该值过大可能导致耗时增加以及计算异常,建议设为比工件mask本身的长边像素长度稍大一些,可通过查看debug_vis中的数据来评估 |
| threshold | 1.0 | 判断抓取姿态是否安全的阈值, 如果夹具内点云数量超过阈值,则判断为不安全 |
| roi_crop | true | 是否裁剪点云,仅保留roi3d范围内的点云 |
| debug_vis | "" | 调试数据保存路径,将调试过程中的信息保存到指定路径下 mask.png: 根据prewin参数生成的mask范围 object_mask.png: 实例物体maskshell_mask.png: 上面两个mask相减的结果,用于判断碰撞的周边范围crop.ply: 用于判断碰撞的周边点云 |
| use_projected_mask | false | 是否使用模型投影,如果为false,则使用实例生成节点传入的 mask仅在待抓取工件本身有精确的模型时开启 |
- 使用效果日志

4. 上下料场景 (有序/无序)
4.1 深度学习模型
4.1.1 模型识别不全
问题:模型识别不全,多张图片推理数量均有最大值限制(一般是20)
可能原因:模型导出时,设置的最大可识别数为(20)
解决方案:可联系模型提供人员,重新导出模型
4.1.2 模型检测关键点出现异常

问题:模型检测关键点出现异常
可能原因:出现该问题的原因是我们使用一键联通进行模型训练时,关键点是我们自己降采样得到的,当我们拿到训练好的模型时会生成新的关键点。
解决方案:需要将关键点替换成新的。
4.1.3 双/多模板制作方法
用相机拍摄获取工件正反面的点云文件,分别着色,与模型cad对齐后,将着色后的正反面点云文件拼接在一起,作为模版点云文件;对关键点云文件进行逐点着色,使得两种颜色间隔均匀;
操作步骤:
|
|
|---|---|
|
![]() |
| ![]() ![]() ![]() |
| ![]() |
| |
| 类似这样:![]() |
4.1.4 正反同形且平面工件使用SpitialRansc配准的双模板制作及使用方法
拿到三种文件
关键点ply文件(keypoint_128.ply)
正反面的点云模型文件。一般从场景点云中扣出,正模板着绿色,负模板着红色。(point_front.ply,point_back.ply)
网格模型(model.ply)



【若是立体件,关键点分层双色,点云模板只取相机可视的点云即可】

- 两个点云模板对齐CAD后,进行点云拼接,生成双模板点云ply文件。【点云文件对齐CAD后,每个模板单独保存,以免后续要调整模板时重新对齐】


将三个文件导入到pickwiz中
【注意】:检查点云双模板是否已经对齐并着双色、检查关键点是否局部散乱双色,模板和关键点的双色要对应上。

抓取点制作
【注意】:抓取点按顺序制作,每一个抓取点制作的要求要看清楚




- 打开可视化界面,增加双模板绑定信息
{
"model_to_pick_binding": {
"0": [
1,
2
],
"1": [
3,
4
]
}
}
- 机器人设置增加选择”抓取点序号“

- 点击运行,返回的抓取点序号有4种(1,2,3,4),如果精度要求高,需要使用脚本做4个抓取点的示教。
4.1.5 自动增强使用 通过数据增强提高预测效果
请看具体介绍 通用工件视觉参数调整指南
4.1.6 数据渲染的cad模型正确性
当前获得cad模型的方式:
客户直接提供原始cad
根据实际工件扫描
无论哪种方式,请确保cad模型的正确性(尺寸,方向,类型等)
反例1:扫描工件和实际工件点云不一致(张角不一致)


4.1.7 TRT模型导出
导出onnx模型时,增加use-trt选项
python -m mixedai.scripts.export \ --config-file config_path \ --model-file model_path \ --sample-image image_path \ --use-trt使用glia导出trt模型
以下操作都是在pickwiz_py39的环境下,conda activate pickwiz_py39
- rcnn
python -m glia.dl.utils.trt_converter \ --onnx onnx文件路径,如xxx.onnx \ --image 图片文件路径, 如xxx.png \ --model-type rcnn \ --saveEngine xxx.trt \- yolo
python -m glia.dl.utils.trt_converter \ --onnx onnx文件路径,如xxx.onnx \ --model-type yolo \ --saveEngine xxx.trt \- 双目
python -m glia.dl.utils.trt_converter \ --onnx onnx文件路径 \ --model-type stereo \ --saveEngine xxx.trt \ --optShapes=image1:1x3x480x640,image2:1x3x480x640 \ --fp32 \ --workspace=6000 \ --tacticSources=-CUDNN,+CUBLAS \ –-builderOptimizationLevel=3
更详细的导出说明请看:http://doc.open3dv.site/glia/doc/master/text/application/trt_converter.html
- 使用glia推理onnx模型和trt模型,看结果是否一致
python -m glia.dl.utils.inference --image-file "./*.png" \
--model-file .trt .engine or .onnx model \
--output-dir ./ \
--bbox-mode aabb (或者obb)\
--scale 1.04.1.8 extract_roi3d_rgb设置
去除ROI3D区域外的对应图像,达到去除背景的目的
参数: 填充核大小 1.5.1之前: kernel_size


1.5.1之后:

*******注意*******因为待检测区域点云缺失导致去除背景后的图片出现孔洞,影响检测效果,这时候需要增加填充核的大小来填补空洞,具体效果如下
| kernel_size | 原图 | 检测效果 |
|---|---|---|
| 5 | 默认配置为5,如果待检测区域点云缺失,该区域可能存在很多空洞,影响检测结果 | ![]() |
| 7 | ![]() | ![]() |
| 9 | ![]() | ![]() |
| 11 | ![]() | ![]() |
| 13 | ![]() | ![]() |
| 15 | ![]() | ![]() |
| 17 | ![]() | ![]() |
| 19 | 填充核设置增大后,检测区域的黑洞明显减少,检测效果变好 | ![]() |
4.1.9 模型不识别
问题:抓取剩下最后一层工件,深度学习模型识别不出


影响版本:1.6.1
可能原因:glia版本是glia 0.4.1,与模型不适配
解决方案:在NAS系统下载修复包,更新glia版本后,模型可识别最后一层


4.2 CPFV
4.2.1 CPFV无检测结果
问题:检测失败,CPFV无检测结果。
解决方案:
检查模版点云中是否存在非主体的噪声点,在meshlab中的查看方式如图,当外包围框大于期望的模版点云时,说明存在未删除的噪声


提示未检测到姿态时,可以优先关注bootstrap_percentage参数,调整为1,能匹配准确再考虑通过降采样等参数降低调整节拍
检查模版点云数量级是否与降采样前的场景实例点云(instancepcd)相匹配(建议使用未降采样的场景点云作为模版点云,场景点云降采样时姿态估计的输入点云也做对应的降采样处理)
检查model_voxel参数与预处理中场景点云降采样参数是否一致
尝试同时调低model_voxel与预处理中场景点云降采样参数增加可匹配点数
当模版点云与场景点云的降采样一致、点云数也均为200+,仍出现检测失败情况,可能是因为模版点云与场景点云的法向量差异问题(主要可能出现在轮廓模式的使用上,在1.5.2版本有做修复)。可以打开meshlab拖入点云,查看模版与实例点云法向量的一致性。如果法向量一致性高但仍然检测失败,联系产研支持
meshlab查看点云法向量方法
拖入点云
选中希望查看法向量的点云,点击左上角render

在render下拉列表中点击show normal

颜色大小可在右下角设置

4.2.2 模型定位精度差/重复定位精度差
问题:精度不佳,模型定位精度差/重复定位精度差
解决方案:
匹配不准的时候可以优先关注bootstrap_percentage参数,调整为1,能匹配准确再考虑降低调整节拍
查看参数是否设置方向先验,测试取消方向先验是否有效
软件后端PickLight版本1.4.0之后默认CPFV不做ICP精配准处理,检查姿态估计节点后处理是否存在icp_process函数,函数使用参考 面型工件视觉参数调整指南
软件版本 <= 1.4.2,注意!存在icp_process后处理函数时,姿态估计的可视化结果需要打开icp_process参数"save_data": true后,在pose_refine文件夹内观察,即现有Pose文件夹中点云配准结果≠最终姿态估计结果,不能凭借该位置点云断定姿态估计不准
软件版本 >= 1.4.3后,ICP配准结果保存在Pose/output中的两个后缀为poserefine点云文件中

使用ICP函数后精度可视化结果仍旧不满足可以尝试更改icp_process函数中的icp_mode="Plane"
定位物体较小时,根据日志提示 降低icp_process函数中的icp_dist=0.xxx
多次对同场景拍照匹配但是结果存在差异时,检查多次拍照结果中点云的一致性(是否由于多角度拍照导致点云关键特征部分存在空间变化)

查看并去除点云模版中的噪声点(在场景点云中时有时无的部分)

4.2.3 模型定位存在旋转情况

问题:角度不佳/对角度有精度要求,模型定位存在旋转情况
解决方案:
当工件是旋转对称且一致的对象时,可能存在旋转导致RZ旋转180度,如果工件来料方向始终一致,建议将CPFV方向先验设置为[1,0,0,0]保持配准统一性。如果工件来料方向不确定一致性,则不添加先验,增加使用bound_euler_angle函数,函数说明参考文档3.1 抓取策略调整指南【待更新】
- "prior_direction": [[1,0,0,0]]

在抓取点生成节点后处理部分增加refine_pose_by_z_axis_rotation函数修正旋转位姿(1.4.2以后)

函数参数使用参考说明文档链接 面型工件视觉参数调整指南
4.2.4 配准节拍与期望节拍不符
问题:节拍不佳,配准节拍与期望节拍不符
备注:当前认为CPFV节拍一般控制在2秒以内(检测1秒,精配准1秒)
解决方案:在匹配精度允许的前提下!调整以下参数(建议每次调整后测试匹配精度或检查可视化结果)
检查日志中的检测时间如下图,检测时间代表CPFV耗时,将姿态估计耗时-检测时间视为后处理ICP耗时


当CPFV耗时较高时:
调整降采样参数控制参考数据中的模版点云数量和场景点云数量在200附近,效果较好
bootstrap_percent5age 0-1,速度1最慢,0.1最快;稳定性1最好,0.1最差;建议每次降低0.1,一般情况下最低调整为0.3-0.5,过低容易偶发未检测到姿态
检查relative_allowed_diam参数=0.04
当后处理ICP耗时较高时:






检查模版点云数量是否高于20万,在不影响精度要求的前提下适当降低模版点云数量(在meshlab降采样后更新工件点云信息)
检查InstancePCD点云是否经过降采样,建议通过meshlab查看模版点云间距对应设置降采样参数
4.2.5 平面工件匹配产生偏移滑动
问题:匹配偏移,平面工件匹配产生偏移滑动
解决方案:首先确认目标点云尺寸在各方向是否会改变,如果会,则需要确认主体无变化部分
取如图模版,粗配准模版在工件属性填入
增加icp_process参数mode_path="精配准模版文件路径"
- windows路径建议双反斜杠或正斜杠


{ "icp_dist": 0.01, "icp_mode": "Plane", "save_data": true, "model_path": "C:\\Users\\dex\\Documents\\refine_model.ply" }场景点云(红框内尺寸会变化) 粗配准模版(右侧建议比场景多) 精配准模版(取无变化区域) 


增加边缘点的提取
cpfv预处理增加函数get_boundary_points
{ "angle_threshold": 90, "max_nn": 30, "radius": 0.005 }
警告!使用get_boundary_points时注意更改降采样输入数据类型
cpfv参数增加boundary_type类型
{ "angle_num": 40, "bootstrap_percentage": 1.0, "boundary_type": 1, "dist_num": 100, "faster_nms": true, "icp_dist": 0.01, "icp_method": "Plane", "model_voxel": 0.005, "nms_thresh": 0.5, "num_results": 1, "prior": { "angle_thresh": 30, "distance_thresh": 0.3, "is_flat": false, "pair_criterion": 1, "pair_mode": 0, "prior_direction": [] }, "process_in_roi": true, "refine": true, "relative_allowed_diam": 0.04, "scene_ratio": 1, "score_thresh": 0.5, "update_prior": false }当现场平面件使用boundary_type之后仍然存在平滑偏移现象,可以使用轮廓refine功能(当前存在于分支cwy/add-boundary-refine中,后续待合入1.4.x),使用方式为增加参数boundary_icp、boundary_thresh
参数说明:
boundary_icp为true时表示开启轮廓refine,默认为false
boundary_thresh为计算模型轮廓的半径参数,默认值为0.005,与预处理get_boundary_points中radius参数一致。(轮廓半径参数建议为降采样系数的一半,根据Builder/pose/input中模版与场景的轮廓点云情况进行调整)
{ "angle_num": 40, "bootstrap_percentage": 1.0, "boundary_type": 1, "boundary_icp": true, "boundary_thresh": 0.005, "dist_num": 100, "faster_nms": true, "icp_dist": 0.01, "icp_method": "Plane", "model_voxel": 0.005, "nms_thresh": 0.5, "num_results": 1, "prior": { "angle_thresh": 30, "distance_thresh": 0.3, "is_flat": false, "pair_criterion": 1, "pair_mode": 0, "prior_direction": [] }, "process_in_roi": true, "refine": true, "relative_allowed_diam": 0.04, "scene_ratio": 1, "score_thresh": 0.5, "update_prior": false }
4.2.6 经验:单目标精定位调试
项目名称:苏州三星-洗衣机内胆底部螺孔定位
工作流特点
实例分割节点无算法,仅靠ROI框选目标工件的部分区域
仅靠CPFV+ICP对目标进行配准精定位
项目要求
定位精度 <=1 mm
总耗时要求 <=2 s
理论调试过程
优先满足定位精度,再考虑缩减耗时 参考【检测失败】与【精度不佳】
建议调试相机至点云质量稳定,再收集固定ROI中不同角度位置的场景点云数据集
统一对比场景数据集,确认百分百出现的特征区域,选取在空间中相对“立体”的部分作为点云模版,如果是平面工件则建议使用轮廓配准
根据实际使用中日志反馈调节场景点云降采样和CPFV+ICP参数至匹配效果稳定
测试重复定位精度,如满足条件则结束定位调试,否则继续调整参数
在定位精度满足条件的基础上对CPFV+ICP进行加速
参考【节拍不佳】
如果姿态估计节点调整至1s左右,整体耗时仍超过预期,需要参考 算法流程耗时分析对节拍进行分析,然后提需求单咨询产研进行其他可能的提速操作
具体调试问题与经验
问题1:匹配偏移+耗时较高
现场反馈姿态估计匹配结果如下,绿色为模版匹配结果,白色为场景点云


首先检查模版点云与场景点云重合度
发现图中最上方的管子主体在场景点云中存在大量缺失
更大的主体是图中间的平面,而平面部分两侧均有类似的平面点云
由于ROI与目标的相对关系不固定,某一侧的模版平面部分有可能超出场景点云
确定匹配偏移原因
由于ICP的点对匹配特性,更多的点相似会将模版T型的头部在场景点云位置的左右进行“摇摆”,而T型尾部的管子主体无法有效的被场景点云“定住”,导致可能的偏差
另外icp_dis阈值默认设置为0.01,导致模版点云认为距离自己10mm附近的点都是“自己人”,更增加了匹配的随机性
解决方案1:
设置icp_dis=0.002,缩小模版点云的移动随机性
对点云模版进行平面去除的调整,同时在实例过滤节点后处理处增加remove_or_preserve_plane,降低平面部分缺失对匹配的异常影响,参数设置如图,实际新建时会多一个“return_params”参数,删除即可。
dist_thres视平面点云波动的厚度设置
inverse设置true时去除平面,否则保留平面


基于去除平面的点云制作新模版

调整CPFV及预处理降采样参数,提升速度,可以直接参考【节拍不佳】
问题2:匹配重复定位精度低
姿态估计结果严重错位

检查粗配准点云情况
新模版的CPFV粗配准结果可能很差,导致ICP无法得出正确结果
发现模版点云与场景点云的点间距有严重差距,检查发现model_voxel=0.01 与 voxel_size=0.02参数差异大


解决方案2:
- 调整预处理的降采样参数=0.015,使其接近CPFV的"model_voxel"=0.01
修正后测试13份历史数据匹配正常,在现场使用相机拍摄10次,重复精度满足要求,算法耗时在1s左右



注意事项
新模版中的主体由平面更换为黑色管子的前端,所以仍然需要保证无论何种角度来料,该部分都必须在ROI内,否则仍可能导致匹配偏差!
4.3 PNP
4.3.1 匹配不准/匹配反向
问题:匹配过程中出现匹配不准/匹配反向
解决方案:
检查模板点云,将干扰点云删除
检查模板点云跟场景点云是不是刚好反了180°,是的话将模板点云翻转180°
![]() |
![]() ![]() |
|---|
4.3.2 匹配偏移
问题:基于CAD的无序抓取,使用SpatialRansac算法姿态匹配偏
解决方案:
- 采用面型工件+cpfv算法,模型点云文件通过相机拍照抠取获得
采用cpfv后仍存在匹配不准的时候,参考如下解决方法:
调整相机参数,获取高质量点云图像
处理实例分割后的点云图像,将其作为点云模板
调节模板点云和场景点云的数量,将其点云数量控制在200~400之间
bootstrap_percentage参数调整为1,取消姿态估计位姿角度先验
4.4 圆柱拟合PMFE
4.4.1 抓取点角度不垂直
问题:如何使Z轴抓取角度保持在与人眼感知较垂直的状态?
解决方案:减小圆柱工件属性中的旋转间隔,使得在圆柱表面一圈上,每隔一个较小的角度就有一个抓取点,这样的抓取点会更密集,也就是最垂直的抓取点跟ROI Z轴或相机Z轴的角度差会更小,如下图:

4.4.2 拟合的抓取点不在圆柱中心
问题:如何确保抓取点在圆柱中心
解决方案:在圆柱工件属性中设置半径先验和长度先验,如下图(单位是mm)

4.5 分类
4.5.1 圆柱增加朝向分类
问题:如何增加新的一款圆柱的朝向分类?
解决方案:要做新料的话要加一下正反朝向:
- 对单独实例做正反分类,首先在抓取点生成 后处理 添加processor:deep_feature_classify,参数如下


- 创建一个文件夹用于存放正反数据,在创建的文件夹下创建"0"和"1"两个命名的文件夹,如下图

然后跑一下工作流,调用了deep_featrue_classify,会自动裁切出正反图片存放在历史数据中
在picklight看到最新的历史数据

- 把x_search.png复制下来,到指定路径下建一个当前你想添加的料的尺寸命名的文件夹,最直接是复制已有的文件夹,然后把里面东西清空,里面是0和1两个文件夹,清空后放分类好朝向的图片进去(Tip:此步骤需要操作员自己分辨好正反)



- 到这个路径下执行这两句命令,路径记得要改成你要添加的料的,这样正反模板就做好了(路径找寻方式:打开桌面上命名为‘新建文件夹2’的文件夹,在左侧找到命名为“site-packages”的文件夹点击进入后,按图示下路径新建文件夹)

- 若要添加新料,则从2开始重复这个步骤即可
4.6 线束工作流
4.6.1 相机配置
要调整2d曝光,曝光需要大,线束不能看起来“全黑”。

4.6.2 工件模版
扣取的点云做模板,要和keypoints, mesh等对齐。使用meshlab即可操作。
O型线束一般存在尺寸上差异。可以同时scale Cad和特征点,参见 Meshlab常用操作,形成和实际线束尺寸对等的模型,注册到软件中。
4.6.3 料框检测
扣框口,框口扣的精细化。
点云存放地址做好保管;不同工位的料框模板相互独立。
后台日志注意查寻backend.log,搜索“容器分数”,看看匹配分数是否正常(一般要在0.3-0.4以上)。
匹配模式使用Points。
物料没过框口注意增加处理。
container节点的output中,带icp后缀的表示最终框口匹配效果;init表示初始框口姿态。
具体使用文档见 Circle3D,IcpEstimator和CPFV参数说明
4.6.4 姿态估计
线束这个场景下,匹配模式使用Points。
变更相机曝光后,注意更改Processor,可能是存在颜色过滤导致点云过滤异常。
线束的运行分支为特定分支cwy/collection_add_collision_score(仅限1.2.x版本,1.4.x版本不需要),为了防止中途抓取报空框,fitness需要设置为0。
4.6.5 碰撞检测
夹具设置时要进行特殊处理,否则容易出现“夹框壁”的现象。
料框高度设置要合理,否则容易出现“误认为碰撞”的现象,导致框底物料不可抓。
夹具擦边料框时,建议定位问题原因,看是定位问题还是夹具尺寸问题。对夹具可做膨大处理。方式见 Meshlab常用操作。
4.6.6 无抓取点

4.6.7 抓取点设置
x、y轴需要将夹具坐标系设置在线束点云中心
z轴需要设置在点云表面,不可过高或过低
rz角度需要调整正确,符合实际夹取姿态
rx、ry姿态需要与点云垂直设置
偏心夹具情况下,碰撞检测过滤比较多,所以需要设置对称抓取点进行规避碰撞检测。
4.7 抓取排序
4.7.1 排序异常 未按照期望顺序抓取
解决方案:
- 检查实例过滤功能是否生效导致参与抓取排序的实例数减少,需要对全部实例进行排序才能获取正确抓取顺序
4.7.2 抓取策略 出现抓下层的问题

解决方案:按步骤排查
根据实例生成节点的可视化图,确定高层的实例是否正确分割出来了
确认实例点云生成在哪个节点,按高度排序的抓取策略会在该节点后执行
抓取策略的执行若早于实例过滤,根据现有实例正确排了序,但实例过滤节点将高层的部分实例过滤掉了(例如置信度不高被过滤),那么后续就不会给出这些高层实例,表现效果就是抓下层了
解决办法:去掉一些非必要的过滤函数;影子模式训练新模型。




















默认配置为5,如果待检测区域点云缺失,该区域可能存在很多空洞,影响检测结果












填充核设置增大后,检测区域的黑洞明显减少,检测效果变好




