Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别

整个过程从安装ros到最后实现,一共花了一个星期的时间,在博客记录一下。把我在做的过程中出现的问题记一下,如果碰到类似问题的朋友可以参考一下。

进入正文:

参考博文:

https://blog.csdn.net/wajsy/article/details/81428108 这篇如果使用kinect2 还需要改一下源代码 

https://blog.csdn.net/u012057432/article/details/84068928 这篇已经很详细了 还有一些碰到的问题都有解决办法

 https://blog.csdn.net/u012424737/article/details/80609451这篇关于kinect2的驱动安装和ros中kinect2的配置

 http://wg-perception.github.io/object_recognition_core/install.html#install ORK的安装官网

除了以上的这些参考博文还有一本关于ROS的书 胡春旭写的《ROS机器人开发实战》 这里面也写的很好。ros的安装可以参考这书里面写的。

 

这里简单介绍一下 我环境的配置过程

1 将ros kinect安装好

2 将kinect2的驱动libfreenect2 和iai_kinect2安装好

3 将ork功能包安装好 这一步及其重要!!!一定要安装好 否则后面出现各种各样奇怪的问题

4 因为kinect2 的分辨率问题 需要改linemod和training.ork中的源程序

5 运行节点 detecting

 

显示一下如果前面的步骤没有问题的话应该会出现的画面

2 kinect2驱动成功图片 可以运行 libfreenect2/build/bin中的Protonect 可执行程序Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第1张图片

iai_kinect2安装好后可以看到点云图

Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第2张图片

 

 

现在是重头戏 也就是ORK功能包的安装和配置 当时就是因为这个没有配置好花了好几天的时间搞这个东西。

ork功能包

首先安装依赖库:

sudo apt-get install meshlab

sudo apt-get install libosmesa6-dev

sudo apt-get install python-pyside.qtcore

sudo apt-get install python-pyside.qtgui

下载源码编译:
mkdir ork_ws
cd ork_ws
wstool init src https://raw.github.com/wg-perception/object_recognition_core/master/doc/source/ork.rosinstall.kinetic.plus


cd src
wstool update -j8
cd ..
rosdep install --from-paths src -i -y

catkin_make

echo "source ~/ork_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
 

上面是安装ork用到代码

如果安装编译好后都没有问题 不代表你就是成功了 先贴上一个我当时遇到的一个问题

 

 

Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第3张图片

 

  这个问题是出现在我将可乐罐的数据加载到couchDB数据集后 要进行数据训练的时候出现的,就因为这个问题困扰了几天,一直在想是哪里出了问题,后面我就打开那个python源码看了一下,发现是少一个配置文件。我在网上找了很久好像都没有人出现过这种问题,我猜测是我配置环境的问题,之后我又从新下载编译安装了一下ORK功能包,竟然问题解决了,所以这告诉我们,当出现一些奇怪的问题的时候,从新再来几遍或许是最好的解决办法。Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第4张图片

下面这张图片是可乐罐数据,在数据库中训练的时候

 

Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第5张图片

 

另外,将可乐罐的数据加载到couchDB中并且训练的代码是

CouchDB 這個工具
sudo apt-get install couchdb
接下來檢查一下是否有安裝成功
用 curl -X GET http://localhost:5984


rosrun object_recognition_core object_add.py -n "coke " -d "A universal can of coke" --commit
執行上面這個指令之後,你可以去 http://localhost:5984/_utils/database.html?object_recognition/_design/objects/_view/by_object_name 看看自己的資料庫裡是否已經新增了這個物體:


git clone https://github.com/wg-perception/ork_tutorials
cd .. && catkin_make


rosrun object_recognition_core mesh_add.py --commit

[    9085f3469dffde7c1ae78413d900079d
rosrun object_recognition_core mesh_add.py 9085f3469dffde7c1ae78413d900079d /home/zx/ork_ws/src/ork_tutorials/data/coke.stl --commit
]


查看模型:
sudo pip install git+https://github.com/couchapp/couchapp.git
rosrun object_recognition_core push.sh

{安装pip:  sudo apt install python-pip}

 

训练模型:
rosrun object_recognition_core training -c `rospack find object_recognition_linemod`/conf/training.ork

 

完成这些你已经成功70%了,之后就是因为kinect2的问题需要改源程序

首先是问题,当你在训练完数据要运行以下这些节点去检测的时候

roslaunch kinect2_bridge kinect2_bridge.launch publish_tf:=true

rosrun topic_tools relay /kinect2/qhd/image_depth_rect /camera/depth_registered/image_raw
 
rosrun topic_tools relay /kinect2/qhd/image_color_rect /camera/rgb/image_rect_color
 
rosrun topic_tools relay /kinect2/qhd/camera_info /camera/rgb/camera_info
 
rosrun topic_tools relay /kinect2/qhd/camera_info /camera/depth_registered/camera_info
 
rosrun topic_tools relay /kinect2/qhd/points /camera/depth_registered/points
 
rosrun tf static_transform_publisher 0 0 0 0 0 0 kinect2_ir_opticalrame camera_depth_optical_frame 40
 
rosrun object_recognition_core detection -c  `rospack find object_recognition_linemod`/conf/detection.ros.ork


Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第6张图片

不出意外的话会出现上面图片中的问题,显示opencv Error 需要修改两个地方

1 先找到linemod源程序包中linemod_detect.cpp这个源程序包 找到橙色部分,将橙色部分代码注释掉,后面再加上几行代码,参考 https://github.com/wg-perception/linemod/issues/28

 

Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第7张图片

2 找到ork/src/ork_linemod/conf找到这个配置文件下的training.ork文件 把橙色的代码加上

最后,要重新编译运行一下!!

Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第8张图片

 

这样,这个linemod算法算是可以正常检测了。

最后再把那些节点运行一下

roslaunch kinect2_bridge kinect2_bridge.launch publish_tf:=true

rosrun topic_tools relay /kinect2/qhd/image_depth_rect /camera/depth_registered/image_raw
 
rosrun topic_tools relay /kinect2/qhd/image_color_rect /camera/rgb/image_rect_color
 
rosrun topic_tools relay /kinect2/qhd/camera_info /camera/rgb/camera_info
 
rosrun topic_tools relay /kinect2/qhd/camera_info /camera/depth_registered/camera_info
 
rosrun topic_tools relay /kinect2/qhd/points /camera/depth_registered/points
 
rosrun tf static_transform_publisher 0 0 0 0 0 0 kinect2_ir_opticalrame camera_depth_optical_frame 40
 
rosrun object_recognition_core detection -c  `rospack find object_recognition_linemod`/conf/detection.ros.ork

 

打开一个rviz看一下

rosrun rviz rviz

 

Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第9张图片

 

Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别_第10张图片

 

实际的测量有一些偏差,后面如果有问题可以再研究一下

 


 

你可能感兴趣的:(Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别)