2D与3D融合实践

根据模板抓取指定物体:

制作模板,并计算取得相机到模板的变换矩阵T1,根据实时相机中拍到的物体进行模板匹配,得到变换矩阵T0,最后和相机的外参矩阵Tc进行矩阵相乘,得到目标在世界坐标系的表示,从而进行抓取操作。

一、制作模板:求T1

  1. Kinect相机拍照(得到RGB图和深度图)

    01_PhotoCapture.cpp

  2. 检测抓取位置(u,v),根据内参及深度信息得到三个空间中的点坐标

    02_PointLocator.cpp

    03_TemplateMaker.cpp

  3. 构建坐标系得到旋转矩阵T1,转成RPY进行抓取测试

    04_TestGrabTemplate.cpp

  4. 生成点云图用于模板匹配(进行直通滤波及降采样)

    05_CreatePclCloud.cpp 验证变换矩阵

    06_TemplateCloudFilter.cpp 生成剪切后的模板

    • 实时的拍照得到RGB和深度图
    • 合成目标点云图
    • 通过直通滤波框定范围(得到感兴趣区域)
    • 将感兴趣区域进行降采样(提高模板匹配效率)

二、使用模板:求T0

准备好切割后的点云template.pcd以及对应的变换矩阵T1(可以有多个)

  1. Kinect相机拍照(得到RGB图和深度图)

    01_PhotoCapture.cpp

  2. 生成目标点云图

    07_TargetCloudFilter.cpp

  3. 进行模板与目标点云图匹配(统一进行直通滤波及降采样),得到变换矩阵T0

    08_TemplateAlignment.cpp

三、进行抓取测试

根据准备好的所有参数,通过T_c \cdot T_1 \cdot T_0,结合机械臂驱动进行目标抓取

09_TestGrabTarget.cpp

T0 为目标在模板坐标系的表达 T1 为模板在相机坐标系的表达 Tc 为相机在基坐标系的表达

待优化事宜

  1. 安全位置判定
  2. 将盒子抓取到指定位置放置
  3. 不间断抓取多个盒子
  4. 准备多个模板,提高模板匹配姿态识别度
  5. 设置间隔,实时进行模板匹配
  6. 设置目标位置抓取动态延时
  7. 自动避障
  8. 其他

自己封装内外参标定工具

  • 命令行版
  • Qt版