/StandTheGrapefruit

using depth camera and robot arm to stand the grapefruit

Primary LanguagePythonMIT LicenseMIT

项目介绍

本项目是基于kinect相机和机械臂的项目,目的是扶正传送带上的柚子,减少人工投入。

算法介绍

1.3D点云处理

2.PCA主成分分析

在用统计分析方法研究多变量的课题时,变量个数太多就会增加课题的复杂性。人们自然希望变量个数较少而得到的信息较多。在很多情形,变量之间是有一定的相关关系的,当两个变量之间有一定相关关系时,可以解释为这两个变量反映此课题的信息有一定的重叠。主成分分析是对于原先提出的所有变量,将重复的变量(关系紧密的变量)删去多余,建立尽可能少的新变量,使得这些新变量是两两不相关的,而且这些新变量在反映课题的信息方面尽可能保持原有的信息。 设法将原来变量重新组合成一组新的互相无关的几个综合变量,同时根据实际需要从中可以取出几个较少的综合变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上用来降维的一种方法。

3.ICP点云配准

ICP搜索就近点的主要方法

1. Point to Point就近点搜索法

Point to Point就近点搜索法是ICP算法中最经典的一种方法。Point to Point法根据源曲面上的一个点p,在目标曲面上找出对应于p点距离最近的q点。在这个方法中通常运用kd-tree的方法实现就近点搜索。pi是源曲面点云数据中的一个点,Vi是生成目标曲面点云数据中距Pi最近的点。根据Vi点搜索出在曲面上与Vi点相邻的点构成的三角形格网,计算pi点投影到每个三角形平面上的投影点qi的坐标。对于每个三角形来说,当投影点qi位于三角形内部,则距离最近点是搜索的最近点,当投影点qi位于三角形外部,搜索的就近点应位于三角形的两条边界上,Vi是该三角形到pi点的就近距离点。将每个三角形确定的就近距离点进行比较可获得一个最近点。

2. Point to Plane就近点搜索算法

Point to Plane法是根据源曲面上的一个点p,在目标曲面上找出对应于p点一个最近的q点。搜索算法是根据源曲面上p点的切平面的法线,确定发现于目标曲面的交点q’。根据目标曲面上q’点求出的过q’点切平面,然后求源曲面上p点到过q’点切平面的垂线的交点q。

3. Point to Projection就近点搜索算法

Point to Projection就近点搜索法是一种快速的配准方法。Oq是扫描目标曲面的透视点的位置。Point to Projection法是根据源曲面上的一个点p和透视点Oq,在目标曲面上找出q点作为对应于p点的就近点。通过确定Oq点向p点方向的投影线与目标曲面的交点q,作为搜索的就近点。

4.结合PCA与ICP

由于柚子竖着和横放的PCA和ICP工作效果适应情况不同,于是结合两种算法,用PCA的结果来优化ICP的配准效果。

1.PCA的工作场景分析

当柚子横躺时,PCA计算的主成分方向在x和y方向上比较准确,在z方向上效果稍差但仍比较准确。 当柚子竖直站立时,PCA计算的主成分方向不准确。

2.ICP的适合工作场景

当柚子初始姿态比较匹配时,ICP的配准效果很好。 如果柚子头部不突出,ICP配准容易陷入局部最优解,配准效果差。

3.解决方案

使用PCA调整柚子配准前的姿态,从而提高ICP的配准准确度。

工作进展

  • 借助PointCloud中的方法,读取深度图像,进行相关处理,得到柚子的3d点云图像,然后处理3d图像,去除相关杂点,得到一个只有柚子的纯净的3d点云图像。
  • 使用PCA计算柚子的主成分,得到三个主成分轴。
  • 计算齐次矩阵,使标准柚子模型和采集柚子点云主成分重合。
  • 将该齐次矩阵当作trans_init矩阵传入ICP方法,降低threshold从而减少计算量,提高算法效率。

项目指南

待定