ros 开源物体检测_ROS kinetic + Realsens D435i + ORK + LINEMOD 物体识别

1. ORK

ORK (Object Recognition Kitchen) 是 ROS 集成的物体识别库,当前 Kinetic 版本的 ROS 只集成了部分功能包的二进制安装文件,所以需通过源码编译安装。

安装依赖库

sudo apt-get installmeshlabsudo apt-get install libosmesa6-devsudo apt-get install python-pyside.qtcoresudo 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 "export ~/ork_ws/devel/setup.bash" >> ~/.bashrc

source~/.bashrc

2. CouchDB 建立模型库

ORK 中的 LINEMOD 算法基于模板匹配,需要建立已知物体的数据模型,根据采集的信息逐一匹配,找到与数据库中匹配的物体。首先,用 CouchDB 工具创建数据库:

安装

sudo apt-get install couchdb

测试是否安装成功,如图所示,说明安装成功

curl -X GET http://localhost:5984

677e484f255c5a69653f4c7edc8c290c.png

在数据库中创建一条可乐罐模型的数据

rosrun object_recognition_core object_add.py -n "coke" -d "A universal can of coke" --commit

加载可乐罐的 3D 模型,在 ork_tutorials 中包含了一个可乐罐模型 coke.stl,直接下载使用。下载 ork_tutorials

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

将 coke.stl 模型加载到数据中

rosrun object_recognition_core mesh_add.py bb01ae7a23033bdef1a1c3b76000092c ~/ork_ws/src/ork_tutorials/data/coke.stl --commit

再次在浏览器中打开上面的网址,如下图所示

6e0471b62c8ca783852244fda811600e.png

安装 couchapp 工具,在浏览器中查看具体的模型

sudo pip install git+https://github.com/couchapp/couchapp.git

rosrun object_recognition_core push.sh

在浏览器中查看

10fbdd90b7db188862e111522dee5eb6.png

a3e0316b9e1d9b342d8dd1616a014054.png

c73fbba0bb9b394900fcab1862a3d69d.png

3. 模型训练

rosrun object_recognition_core training -c `rospack find object_recognition_linemod`/conf/training.ork

训练完如下图所示

77bbe94eaa2104d10af0546c334dfb75.png

4. 物体识别

启动 realsense d435i 相机

roslaunch realsense2_camera rs_camera.launch filters:=pointcloud

c33ddea9f6902fb1a07f49aba6c47544.png

运行下述命令,进行物体检测

rosrun object_recognition_core detection -c `rospack find object_recognition_linemod`/conf/detection.ros.ork

我们发现,detection.ros.ork 订阅了下面几个话题:

a0db55bf9c8bafef77f6b2289b1c1d4b.png

realsense 发布的对应的话题为:

/camera/depth/camera_info

/camera/depth/image_rect_raw

/camera/color/camera_info

/camera/color/image_raw

因此需要用 topic_tools relay 做话题映射,如下所示:

rosrun topic_tools relay /camera/depth/camera_info /camera/depth_registered/camera_info

rosrun topic_tools relay /camera/depth/image_rect_raw /camera/depth_registered/image_raw

rosrun topic_tools relay /camera/color/camera_info /camera/rgb/icamera_info

rosrun topic_tools relay /camera/color/image_raw /camera/rgb/image_rect_color

但每次都做映射太麻烦,干脆修改一下 detection.ros.ork 订阅的话题名:

gedit `rospack find object_recognition_linemod`/conf/detection.ros.ork

修改如下:

a20a66bb9aa1715bdfc6137d58b7d0c7.png

做完话题映射或上述设置后,再次运行 detection 命令:

rosrun object_recognition_core detection -c `rospack find object_recognition_linemod`/conf/detection.ros.ork

此时会出现下图所示信息:

db60f78b75f270fb6138060ada56c730.png

打开 rviz 查看

添加 Pointcloud2,选择话题 /camera/depth/color/points

添加 OrkObject,选择话题 /recognized_object_array (若能够成功识别,则会发布此话题)

0f6f883dd8fabb277ae222f6923b8bbd.png

查看   /recognized_object_array 话题的实时内容

rostopic echo /recognized_object_array

30e2724f3ffdda357a5173561ea3c1c1.png

查看节点图

rqt_graph

152ae4214f721c10d0ca127fe39a0e59.png

参考:

[2]. 《ROS机器人开发实践》胡春旭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雪碧图sprity 合并多图使用心得

介绍 sprity 是一个模块化的雪碧图生成工具会根据目录中的图片生成相应的雪碧图和样式文件,支持retina图,可以内嵌base64 编码格式的图,支持不同的图片格式和有不同的图片引擎可以选择。sprity 的前身是css-sprite,sprity的 git地址 sprity的…

团队项目第二次冲刺(4)

已经做到两个界面的链接。 今天对用到的数据进行定义及对程序进行完善。 遇到的问题:在进行页面之间的连接时用到的intent语句运用不好。出现了很多次的bug。转载于:https://www.cnblogs.com/cuipengbo/p/4586519.html

itil v4和v3的区别_ITIL从v3到v4 - 这是新的ITIL

ITIL 4即将发布(原计划2019年1月到3月),v4的领域要大得多,重点放在业务和技术领域,比如我们要如何运作,以及如何通过敏捷,DevOps和数字化转型在未来发挥作用?十年前,比特币推出,詹姆斯卡梅隆发…

面试题:根据Unix时间戳计算时间

根据Unix时间戳计算时间,不分年月大小,每月三十天,每年按360天计算。开始时间1970/01/01 00:00:00,输入秒数,显示时间 思路一:进位,60秒进1分钟,60分进1小时,24小时进1天&#xff0…

华为荣耀6 H60-L02/L12(联通版)救砖包【适用于无限重启】

本帖最后由 HOT米粒 于 2014-11-16 20:43 编辑 华为荣耀6 H60-L02/L12(联通版)救砖包【适用于无限重启】说明: 1、本工具包用于华为荣耀6 H60-L02(联通版); 2、本工具适用于在Honor Logo 无限重启的童鞋恢复…

linux常用命令技巧--更新中

cp –a ojects objects.ori 复制备份目录cp –r 123 123 如果含有子目录一并复制 cp –p 保留文件属性转载于:https://blog.51cto.com/beautifual/1733232

找出无序数组最小的K个数(基于快排,效率高)

快排: void QuickSort(int array[], int low, int high) { if (low > high) //为了防止无限递归下去,导致栈溢出,设置此条件 { return; } int pivotkey array[low]; //设置一个对照元素,把这个元素先暂时拿出来&…

php mysql 存储过程_php调用MySQL存储过程方法

php与mysql是天生的一对,下面我来介绍在php中怎么调用mysql存储过程并执行返回结果,下面我总结了一些常用的php调用MySQL存储过程的方法,有需要了解的同学可参考.MySQL从5.0开始才引入存储过程,反正以前做应用的时候从没碰过,不过现在因为主要作内部系统,所以很多应…

Mysql存储引擎中InnoDB与Myisam的区别

为什么80%的码农都做不了架构师?>>> 1. 事务处理 innodb 支持事务功能,myisam 不支持。 Myisam 的执行速度更快,性能更好。 2. select ,update ,insert ,delete 操作 MyISAM:如果执行大量的SELECT,MyISA…

Android AsyncTask 详解

在Android中实现异步任务机制有两种方式,Handler和AsyncTask。 Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是…

mysql的rows大小超过8126_mysql大字段(Row size too large8126)

使用mysql并写入数据时发生错误:Row size too large (> 8126).Changing some columns to TEXT or BLOB or using ROW_FORMATDYNAMIC or ROW_FORMATCOMPRESSED may help. In current row format,BLOB prefix of 768 bytes is stored inline.因为表中有多个text字段…

一步步学习javascript基础篇(8):细说事件

终于学到事件了,不知道为何听到“事件”就有一种莫名的兴奋。可能是之前的那些知识点过于枯燥无味吧,说起事件感觉顿时高大上了。今天我们就来好好分析下这个高大上的东西。 可以说,如果没有事件我们的页面就只能阅读了。有了事件&#xff0c…

剑指offer:二叉树中和为某一值的路径

题目描述:输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。 分析:路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。…

android mysql 数据库文件_android mysql数据库文件

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…

js常用DOM操作

在博客园看到了苏夏写的常用DOM整理文章&#xff0c;地址&#xff1a;http://www.cnblogs.com/cabbagen/p/4579412.html&#xff0c;然后抽时间都试了一下这些常用的DOM操作。在这里记录一下。 1 <!DOCTYPE html>2 <html lang"en">3 <head>4 &…

android传递数据bundle封装传递map对象

android开发默认情况下&#xff0c;通过Bundle bundlenew Bundle();传递值是不能直接传递map对象的&#xff0c;解决办法&#xff1a; 第一步&#xff1a;封装自己的map,实现序列化即可 ?12345678910111213141516/*** 序列化map供Bundle传递map使用* Created on 13-12-9.*/pu…

求1到n ,这n个整数的二进制表示比特1的个数(时间复杂度:O(n))

题目描述&#xff1a; 给定一个数字n&#xff0c;统计1&#xff5e;n之间的n个数字的二进制的1的个数 int Nums_Of_Bit_1(int num) { int* number new int[num]; int pow 1,before 1; int count 0; for(int i1; i<num; i){ if (i pow){ …

mysql支持cube_mysql聚合函数rollup和cube

一、with rollup&#xff1a;with rollup通常和group by语句一起使用&#xff0c;是根据维度在分组的结果集中进行聚合操作。——对group by的分组进行汇总。假设用户需要对N个纬度进行聚合查询操作&#xff0c;普通的groupby语句需要N个查询和N次group by操作。而rollup的有点…

域名详解

定义 是由一串用 “.” 分割的字符组成的Internet上某一台计算机或计算机组的名称&#xff0c;域名的本质是IP地址的一个映射&#xff0c;域名的目的是便于记忆和沟通的一组服务器的地址。 域名解析 域名解析的过程实际上是将域名还原为IP地址的过程 &#xff08;1&#xf…

navicat远程mysql_navicat 远程连接mysql

一、修改用户权限&#xff1a;需要手动增加可以远程访问数据库的用户。方法一(不推荐)、本地登入mysql&#xff0c;更改 "mysql" 数据库里的 "user" 表里的 "host" 项&#xff0c;将"localhost"改为"%"#mysql -u root -proo…