前后忙碌了两个星期,从最开始采用PCL进行目标物体检测分割到后面发现另一种简便的方法ORK一步步采坑调通,先将步骤记录下来。任务主线是深度相机看到物体是什么、在哪儿,接着讲位姿发送给机械臂进行抓取,这两周主要解决了用深度相机检测一个可乐罐以及发布其位置信息。(盗版内容太多了,不过我会偶尔更新内容以及在邮箱进行回复大家)
好了开始这两周的工作内容总结:
运行环境:Ubuntu16.04+ROS Kinetic+PCL
目前深度相机主要的方法有:
1.基于霍夫变换
(可以参考2010年的论文 ppf (point pair feature):Model Globally, Match Locally: Efficient and Robust 3D Object Recognition)
2.基于模板匹配(也就是本文采用的基于linemod算法)比1效果要更好
论文:Multimodal Templates for Real-Time Detection of Texture-less Objects in Heavily Cluttered Scenes
(http://campar.in.tum.de/pub/hinterstoisser2011linemod/hinterstoisser2011linemod.pdf)
3.基于patch匹配+random forest(Latent-Class Hough Forests 用于处理linemd在遮挡时候识别率下降的问题)
论文:Learning 6D Object Pose Estimation using 3D Object Coordinates
LCHF:https://arxiv.org/abs/1706.03285
4.基于点云(也是之前一周采用的方法)
http://wiki.ros.org/pcl_ros/Tutorials
https://blog.csdn.net/shine_cherise/article/details/79285162(学习资料)
http://ros-developer.com/2017/05/15/object-recognition-and-6dof-pose-estimation-with-pcl-pointcloud-and-ros/(核心项目参考 最下面有个评论以及回复可以作为参考后面就舍弃掉这种方法了)(也就是https://github.com/adityag6994/3D_Object_Seg_CNN以及可以参考他的分享https://github.com/adityag6994/object_tracking_particle_filter)
https://blog.csdn.net/AmbitiousRuralDog/article/details/80268920(地面点云分割)
5.基于CNN end-to-end
论文:SSD-6D: Making RGB-based 3D detection and 6D pose estimation great agai
关于linemod算法可以参考:
(http://campar.in.tum.de/pub/hinterstoisser2011linemod/hinterstoisser2011linemod.pdf以及https://blog.csdn.net/zmdsjtu/article/details/79933822)这里稍作简单介绍已使文章内容更加完整严谨
linemod主要解决的是3D刚性物体的实时检测与定位,利用较短的训练时间训练采集的RGBD信息,将其与模版匹配对比后得到物体信息、位姿及自信度。
linemod特征采用彩色图像的梯度信息结合物体表面的法向特征作为模板匹配的依据:
1.首先计算梯度方向,分别进行7*7高斯模糊、sobel算子计算梯度、每个像素点梯度方向及幅值求解(去掉低于阈值的梯度)、3*3邻阈内统计梯度方向,最终对梯度起到主成分提取和放大的提取特征效果。
2.接着方向扩散使匹配具备容错度,图像提取得到特征图后在一定邻阈让特征进行扩散、利用模版进行滑窗匹配得到容错度。