2D与3D融合实践¶
根据模板抓取指定物体:
制作模板,并计算取得相机到模板的变换矩阵T1,根据实时相机中拍到的物体进行模板匹配,得到变换矩阵T0,最后和相机的外参矩阵Tc进行矩阵相乘,得到目标在世界坐标系的表示,从而进行抓取操作。
一、制作模板:求T1¶
-
Kinect相机拍照(得到RGB图和深度图)
01_PhotoCapture.cpp
-
检测抓取位置(u,v),根据内参及深度信息得到三个空间中的点坐标
02_PointLocator.cpp
03_TemplateMaker.cpp
-
构建坐标系得到旋转矩阵T1,转成RPY进行抓取测试
04_TestGrabTemplate.cpp
-
生成点云图用于模板匹配(进行直通滤波及降采样)
05_CreatePclCloud.cpp
验证变换矩阵06_TemplateCloudFilter.cpp
生成剪切后的模板- 实时的拍照得到RGB和深度图
- 合成目标点云图
- 通过直通滤波框定范围(得到感兴趣区域)
- 将感兴趣区域进行降采样(提高模板匹配效率)
二、使用模板:求T0¶
准备好切割后的点云template.pcd以及对应的变换矩阵T1(可以有多个)
-
Kinect相机拍照(得到RGB图和深度图)
01_PhotoCapture.cpp
-
生成目标点云图
07_TargetCloudFilter.cpp
-
进行模板与目标点云图匹配(统一进行直通滤波及降采样),得到变换矩阵T0
08_TemplateAlignment.cpp
三、进行抓取测试¶
根据准备好的所有参数,通过T_c \cdot T_1 \cdot T_0,结合机械臂驱动进行目标抓取
09_TestGrabTarget.cpp
√
T0 为目标在模板坐标系的表达 T1 为模板在相机坐标系的表达 Tc 为相机在基坐标系的表达
待优化事宜¶
- 安全位置判定
- 将盒子抓取到指定位置放置
- 不间断抓取多个盒子
- 准备多个模板,提高模板匹配姿态识别度
- 设置间隔,实时进行模板匹配
- 设置目标位置抓取动态延时
- 自动避障
- 其他
自己封装内外参标定工具¶
- 命令行版
- Qt版