通过ROS控制真实机械臂(17) --- 视觉抓取之ORK实现三维物体识别
视觉抓取中非常重要的一个部分就是对抓取物体的识别,无论是二维图像还是三维点云,在ROS中都可以找到对应的功能包,https://blog.csdn.net/qq_34935373/article/details/103757619该篇博客就基于模板匹配算法的find_object_2d包进行了简单的测试,本次测试的是三维的物体识别的框架,该框架是基于物体的三维模型进行训练并识别,大致的思想也是模板匹配。
本文参考:http://wg-perception.github.io/ork_tutorials/tutorial03/tutorial.html#setup-the-working-environment
一、ORK功能包下载安装:
$ sudo apt-get install ros-indigo-object-recognition-kitchen-*
ORK框架中提供了很多子功能包:
- object-recognition-core:核心功能包,提供物体识别算法以及模型训练和数据库配置
- object-recognition-linemod:基于OpenCV中linemod方法的物体识别,擅长刚性物体的识别
- object-recognition-tebletop:用于同一平面上pick-and-place操作中的物体识别方法
- object-recognition-tod:基于物体外部纹理识别方法
- object-recognition-reconstruction:三维物体重建,基于RGBD摄像头
- object-recognition-render:渲染相关
- object-recognition-msgs:ROS话题相关
- object-recognition-capture:通过3D视图获取物体信息
- object-recognition-transparent-objects:识别和物体位姿估计
- object-recognition-ros-visualization:可视化显示的RViz插件
ROS源码包链接:https://github.com/wg-perception/ork_tutorials/
二、ORK功能包使用:
由于该框架的思想也是模板匹配,大致使用的流程为:
- 创建需要识别的物体模型,建立模型数据库
- 针对模型进行训练,生成识别模型模板
- 使用训练后的识别模型实现物体识别
# 创建数据库,需要用到CouchDB工具 $ sudo apt-get install couchdb# 安装完成,可以使用一下命令测试是否安装成功 $ curl -X GET http://localhost:5984 输出:{"couchdb":"Welcome","uuid":"c5c9d1857cc3677dd54a658c744bf51e","version":"1.5.0","vendor":{"version":"14.04","name":"Ubuntu"}}# 在数据库中创建一条可乐罐模型数据 # 名字可以修改,接着在自己的资料库查看是否已经新增了该物体,将id记录下来 $ rosrun object_recognition_core object_add.py -n "coke " -d "A universal can of coke"# 把可乐罐模型加入到数据库中 $ rosrun object_recognition_core mesh_add.py <YOUR_OBJECT_ID> <path to ork_tutorials/data/coke.stl> $ rosrun object_recognition_core mesh_add.py 0be612246c9b0a00baaa4adefb0009eb ~/catkin_ws/src/ork_tutorials/data/coke.stl --commit# 训练模型 $ rosrun object_recognition_core training -c `rospack find object_recognition_linemod`/conf/training.ork# 启动深度相机kinect $ roslaunch freenect_launch freenect.launch 或者 $ roslaunch zed_wrapper_ros zedm.launch# 修改点云的话题映射,话题要一一匹配# 三维物体识别 (通过三维点云数据),使用linemod刚体方法 $ rosrun object_recognition_core detection -c `rospack find object_recognition_linemod`/conf/detection.ros.ork# 三维物体识别 (通过三维点云数据),使用tabletop物体抓取方法 $ rosrun object_recognition_core detection -c `rospack find object_recognition_tabletop`/conf/detection.ros.ork# RViz可视化 $ rosrun rviz rviz
目标的3D姿态估计是一个非常有意思的问题
对于刚性的目标,我们的三维姿态可能是一个6DoF的Pose,
对于柔性的物体,这个姿态就复杂一点,通常直接给出重建出来的目标模型(mesh)。对于刚性的目标:
如果是纹理丰富,特征点比较多的物体,最简单直接的方式莫过于直接通过特征点对来直接计算Pose了。
如果没有特征点,现在流行的做法应该是使用梯度信息了。比较流行的是linemod。
http://campar.in.tum.de/Main/StefanHinterstoisser
git clone http://github.com/wg-perception/object_recognition_core
git clone http://github.com/wg-perception/linemod
git clone http://github.com/wg-perception/ork_rendererlinemod 的基本思路是以CAD模型为出发点,提取离散的normal(就是与梯度方向垂直的一个方向向量),
然后去原图里面做金字塔搜索。思路很朴实,技巧主要在于实现上,毕竟速度还是很重要的。linemod使用了图像normal和来自于深度摄像头的曲面normal,两个都是离散采样的。
在实际中如果场景比较复杂,由于normal本身只有位置和方向属性,很容易出现误检,
所以也有人在这一点上下功夫,回过头来利用颜色等信息来减少一些误检。另外,现在能买到的商业深度传感器的精度和范围都存在较强的限制,
所以还是有很多人在想着直接使用双目视觉的方式来估算梯度,甚至加入一些Bias,
通过单张图来估计物体表面的Normal。但是这些方法现在大多比较慢,在实际中很难用上。因为这些算法对精度要求高,并且不需要dense,
所以工业上会有厂商用激光扫描获取一个稀疏的深度图,然后利用这个深度图来做一些工作。基于CAD模型的3D目标姿态估计的另外一个方向是减少CAD生成的模型跟实际模型之间的差异性,
毕竟CAD出来的图,跟现实中图的光照条件等还是很不一样的,这个时候,哎,讨巧的人就幸运了,
比如最新的ICCV2015有一篇论文,学习一个卷积网络来比较CAD出来的图像和实际中的图像,
期望能去掉光照等因素的影响,典型的老思路用在新地方……是值得在实际中尝试的。 2D图片中框出的物体上的点在物理世界座标中距离相机成像平面的距离
对于RGB,可以利用geometry来求解,比如CVPR17上的Deep3DBox和Deep MANTA 论文。
在Deep3DBox 中,已知2D box、orientation、3D size,利用3D box
投影到图像上的顶点和2D box 的边的对应关系可以求解出物体的3D坐标。
在Deep MANTA中,已知2D keypoints、3D size,首先通过CAD model 获得3D keypoints,
然后求解PnP就可以得到物体的3D坐标和orientation。这类方法的3D定位精度本质上受限于重投影误差,
而keypoints、2D box 的定位精度是有限的,所以瓶颈也很明显。如果有RGB-D,玩法就更多了,
你不一定要先得到2D box再求解3D坐标,你还可以直接在点云里面做。
通过ROS控制真实机械臂(17) --- 视觉抓取之ORK实现三维物体识别相关推荐
- 通过ROS控制真实机械臂(15) --- 视觉抓取之手眼标定
通过视觉传感器赋予机械臂"眼睛"的功能,配合ATI力和力矩传感器,就可以完成机械臂"手眼"结合的能力,完成视觉抓取过程.目前测试的视觉传感器为 ZED mini ...
- 通过ROS控制真实机械臂(2)----单轴运动,手柄控制
创建ROS包,包名redwall_arm ,通过自定义的消息,将手柄的数据发布 msg/ joycontrol.msg,内容如下,分别对应罗技手柄的按钮和遥杆轴. int32 button1 int3 ...
- 通过ROS控制真实机械臂(9)---上、下位机和PRU程序
上位机的程序redwall_arm_server.cpp 功能是作为ROS的move_group客户端接收ROS规划的机械臂路点信息,进行三次样条插补获得各个关节或自由度的运动PVAT数据,然后通过T ...
- 五轴机械臂实现视觉抓取--realsense深度相机和五自由度机械臂
前言:要实现视觉抓取,首先需要实现机械臂的驱动,深度相机的目标识别,能够反馈位置. 1.实现机械臂在ROS层的控制 2.基于深度相机目标物体的空间坐标反馈,需要知道摄像头中物体的像素坐标系到大地坐标系 ...
- 通过ROS控制真实机械臂(7)---三次样条插补
在之前的move_group界面中,当点击plan and execute之后,move_group就会帮我们规划出一条通往指定位姿的轨迹,发布在follow_joint_trajectory上,通过 ...
- 通过ROS控制真实机械臂(8)---延时时间精确控制
根据之前的配置,我们已经可以通过move_group发送出机械臂各关节运动的轨迹,并且通过三次样条插补的方法,赋予各个关节在特定角度时的速度和加速度,通过启动程序节点可以看到,本次运动规划使用了LBK ...
- ros melodic控制真实机械臂之获取moveit规划插补点
关于该点可查看前辈博客.本文对其中不一致的地方进行记录,但为了查阅方便,该文也记录了完整的操作步骤. 1.demo.launch文件中参数fake_execution的值改为false <arg ...
- ros kinetic-moveit驱动ur3机械臂------控制真实机械臂并且能动
ros kinetic-moveit驱动ur3机械臂------控制真实机械臂并且能动 本文工作环境配置: ubuntu16.04.6 ros-kinetic ur3 已验证本教程代码在Ubuntu1 ...
- ros通过moveit控制真实机械臂
1.demo.launch文件 在生成的demo.launch文件中,参数fake_execution的值改为false <include file="$(find tk7arm_mo ...
- 机器人学习必看系列:如何使用moveit控制真实机械臂?
大家好,我是你们可爱的小鱼.最近关于moveit相关的问题感觉非常多,毕竟机械臂+视觉的应用的确是非常的火爆,小鱼都想直接开课教机械臂运动规划相关的了. 有的同学问小鱼,怎么使用moveit控制真实机 ...
最新文章
- selenium多个窗口
- Linux服务配置:Vsftp的基本配置[转]
- python简单例子lof_Python的净值数据接口调用示例分享
- 以太坊PoA共识引擎算法介绍(1)
- [洛谷P3346][ZJOI2015]诸神眷顾的幻想乡
- 一个复杂的nf_conntrack实例全景解析
- Runtime 源码阅读
- 视频剪辑的方法,视频裂变
- chrome浏览器安装crx Mouse(鼠标手势)插件
- php程序的运行方法
- 国家省、市、县、镇/街道地址
- layui 树形表格 treeTable使用详细指南,不能折叠解决办法
- python tokenize()_tokenize- 用于Python源代码的Python – Python语言服务(Python教程)(参考资料)...
- php中文乱码问号,php中文问号乱码怎么办
- 【ESP 保姆级教程】 疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)+ 自定义微信告警
- SIFT算法特征描述子构建---关键点定位原理及代码
- 【Unifying Motion Deblurring and Frame Interpolation with Events】阅读笔记
- 又有程序员跳楼了 我们是有多累?
- 想做AR/VR相关创新项目,有什么好方向?要怎么做?
- c++中transform函数的应用