ROS二维码识别以及OKR使用
二维码识别(ar_track_alvar)
安装
sudo apt-get install ros-kinetic-ar-track-alvar
生成二维码
rosrun ar_track_alvar createMarker AR_ID
eg:
rosrun ar_track_alvar createMarker 0
查看帮助
rosrun ar_track_alvar createMarker
创建一系列二维码标签
roscd robot_vision/config
rosrun ar_track_alvar createMarker -s 5 0
rosrun ar_track_alvar createMarker -s 5 1
rosrun ar_track_alvar createMarker -s 5 2
摄像头识别二维码
ar_track_alvar功能包支持USB和RGB-D摄像头作为识别二维码的视觉传感器,分别对应于individualMarkersNoKinect和invidualMarkers两个不同的识别节点。
asber@asber-X550VX:~$ rosrun ar_track_alvar
createMarker individualMarkers
findMarkerBundles individualMarkersNoKinect
findMarkerBundlesNoKinect trainMarkerBundle
因为不论是二维码还是物品都要坐标变换到全局
我们按照这篇文章教我们的来实践一下。
<launch><node pkg="tf" type="static_transform_publisher" name="world_to_cam" args="0 0 0 0 0 0 map usb_cam 10" />//map usb_cam 都是 frame_id. 这里切记 args 里边的结果 x,y,z 以及rpy会累加计算到<arg name="marker_size" default="12.0" /><arg name="max_new_marker_error" default="0.05" /><arg name="max_track_error" default="0.05" /><arg name="cam_image_topic" default="/usb_cam/image_raw" /><arg name="cam_info_topic" default="/usb_cam/camera_info" /><arg name="output_frame" default="/map" /><node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen"><param name="marker_size" type="double" value="$(arg marker_size)" /><param name="max_new_marker_error" type="double" value="$(arg max_new_marker_error)" /><param name="max_track_error" type="double" value="$(arg max_track_error)" /><param name="output_frame" type="string" value="$(arg output_frame)" /><remap from="camera_image" to="$(arg cam_image_topic)" /><remap from="camera_info" to="$(arg cam_info_topic)" /></node></launch>
修改为
<launch><arg name="marker_size" default="50" /> <!--定义marker最外框的尺寸,注意单位是厘米--><arg name="max_new_marker_error" default="0.09" /> <arg name="max_track_error" default="0.2" /><arg name="cam_image_topic" default="/camera/rgb/image_raw" /> <!--修改为自己发布的图像话题--><arg name="cam_info_topic" default="/camera/rgb/camera_info" /> <!--修改为自己发布的标定参数话题--><arg name="output_frame" default="/camera_link" /> <!--修改为图片所在的坐标系,关系到后续的坐标系自动转换--><node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen"args="$(arg marker_size) $(arg max_new_marker_error) $(arg max_track_error) $(arg cam_image_topic) $(arg cam_info_topic) $(arg output_frame)" />
</launch>
rosrun ar_track_alvar createMarker -1 toilet
rosrun ar_track_alvar createMarker -1 office_of_ye
rosrun ar_track_alvar createMarker -1 my_workspace
启动你的摄像头,启动标签检测节点,就可以看到有话题发布出来了,观察标签话题
在gazebo里面我们弄出一个带标签的box
https://zhuanlan.zhihu.com/p/92453712
<static>true</static>
把这句话插入link节点的上方,就可以使模型不能移动——https://blog.csdn.net/xk_t9_98568/article/details/21116575
下面是最后的sdf文件 可以看到我把牌子设定为0.496m的宽度
<?xml version='1.0'?>
<sdf version='1.4'><model name="mark_label"><static>true</static><link name='link'><pose>0 0 0.115 0 0 0</pose><inertial><mass>0.390</mass><inertia><ixx>0.00058</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.00058</iyy><iyz>0</iyz><izz>0.00019</izz></inertia></inertial><collision name='collision'><geometry><box><size>.496 .496 .01</size></box></geometry></collision><visual name='visual'><geometry><box><size>.496 .496 .01</size></box></geometry><material><script><uri>model://mark_label/materials/scripts</uri><uri>model://mark_label/materials/textures</uri><name>Mark/Diffuse</name></script></material></visual></link> </model>
</sdf>
虽然在gazebo中发现并不是很好的识别,但是在真实环境下使用电脑摄像头进行标定之后,识别效果很不错
/ar_pose_marker 这个topic列出了
---
header: seq: 1046stamp: secs: 0nsecs: 0frame_id: ''
markers: - header: seq: 0stamp: secs: 1583043220nsecs: 292708382frame_id: "/usb_cam"id: 0confidence: 0pose: header: seq: 0stamp: secs: 0nsecs: 0frame_id: ''pose: position: x: 0.0454303788343y: 0.0435731577591z: 0.713923954759orientation: x: 0.0652061198575y: 0.984560100669z: -0.137542302708w: 0.0864389094638
---
如果检测到多个会出现
header: seq: 175stamp: secs: 0nsecs: 0frame_id: ''
markers: - header: seq: 0stamp: secs: 1583043843nsecs: 832021582frame_id: "/usb_cam"id: 13confidence: 0pose: header: seq: 0stamp: secs: 0nsecs: 0frame_id: ''pose: position: x: -0.225492470716y: -0.0751703811534z: 2.33414874325orientation: x: 0.968313888783y: 0.185389896448z: -0.0393726493893w: 0.162630235703- header: seq: 0stamp: secs: 1583043843nsecs: 832021582frame_id: "/usb_cam"id: 16confidence: 0pose: header: seq: 0stamp: secs: 0nsecs: 0frame_id: ''pose: position: x: -0.326423448551y: 0.167249999227z: 2.2873627328orientation: x: 0.96040035328y: 0.190934984989z: 0.168130902833w: -0.113608945244
这样的情况(2个为例)
这里的frame_id都是/usb_cam
id: 16代表检测到16这个数字的arcode
之后测试如果是toilet这样的arcode id是什么
总之我们可以检测到了。下面我们
<launch><node pkg="tf" type="static_transform_publisher" name="world_to_cam" args="0 0 0.5 0 1.57 0 world usb_cam 10" /><arg name="marker_size" default="20" /><arg name="max_new_marker_error" default="0.08" /><arg name="max_track_error" default="0.2" /><arg name="cam_image_topic" default="/usb_cam/image_raw" /><arg name="cam_info_topic" default="/usb_cam/camera_info" /><arg name="output_frame" default="/usb_cam" /><node name="ar_track_alvar" pkg="ar_track_alvar" type="individualMarkersNoKinect" respawn="false" output="screen"><param name="marker_size" type="double" value="$(arg marker_size)" /><param name="max_new_marker_error" type="double" value="$(arg max_new_marker_error)" /><param name="max_track_error" type="double" value="$(arg max_track_error)" /><param name="output_frame" type="string" value="$(arg output_frame)" /><remap from="camera_image" to="$(arg cam_image_topic)" /><remap from="camera_info" to="$(arg cam_info_topic)" /></node><!-- rviz view /--><node pkg="rviz" type="rviz" name="rviz" args="-d $(find robot_vision)/config/ar_track_camera.rviz"/></launch>
接下去花另一csdn的章节来记录tf变换获取二维码的world pose。
https://zhuanlan.zhihu.com/p/59291168
参考:
https://blog.csdn.net/qq_23670601/article/details/91612289
http://chinaunix.net/uid-27875-id-5823988.html
http://wiki.ros.org/ar_track_alvar/
https://blog.csdn.net/zzu_seu/article/details/89289556
物体识别框架(OKR, Object Recognition Kitchen)
包含了多种三维物体识别的方法。
sudo apt-get install ros-indigo-object-recognition-kitchen-* 备注:没有安装成功(ubuntu16.04)
kinetic版本下的安装:
1)安装依赖库
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
2)下载源码安装
mkdir ork_ws && cd ork_ws (我是在另一个文件夹 不是catkin_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
cd src && git clone https://github.com/jbohren/xdot.git
cd … && catkin_make
echo “source ~/ork_ws/devel/setup.bash” >> ~/.bashrc
source ~/.bashrc
该命令会安装OKR中以下功能包:
1)object-recognition-core: 核心功能包,提供多种物体识别的算法,以及模型训练和模型数据库配置的工具
2)object-recognition-linemod:基于OpenCV中linemod方法的物体识别,擅长刚性物体的识别
3)object-recognition-tabletop:用于同一平面上pick-and-place操作中的物体识别方法
4)object-recognition-tod: Textured Object Recognition,基于物体外部文理的识别方法
5)object-recognition-reconstruction: 使用RGB-D摄像头构建物体3D模型
6)object-recognition-renderer: 渲染物体模型的可视化显示
7)object-recognition-msgs:定义object-recognition-core功能包中所需要的message和action
8)object-recognition-capture: 从3D视图中获取物体信息
9)object-recognition-transparent-objects:识别和估计物体的位姿
10)object-recognition-ros-visualization: 物体识别可视化显示的rviz插件
建立物体模型库
安装
sudo apt-get install couchdb
测试是否安装完成
curl -X GET http://localhost:5984
{“couchdb”:“Welcome”,“uuid”:“81d25f44640bec653fe2487894749418”,“version”:“1.6.0”,“vendor”:{“name”:“Ubuntu”,“version”:“15.10”}}
创建一条可乐罐模型
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可以看到
复制ID“be4814630fa4e7a722eecd7f1c000ae3”
下载可乐罐模型(注意下载的路径,把该文件包下载到ork_ws/src/下)
git clone https://github.com/wg-perception/ork_tutorials
rosrun object_recognition_core mesh_add.py be4814630fa4e7a722eecd7f1c000ae3 ~/ork_ws/src/ork_tutorials/data/coke.stl --commit
安装couchapp工具,在浏览器中查看具体模型
sudo pip install git+https://github.com/couchapp/couchapp.git
若执行上个命令,提示如下信息,则需要安装pip
sudo apt-get updatesudo apt-get upgrade
sudo apt-get install python-pip
rosrun object_recognition_core push.sh
在浏览器中查看: http://localhost:5984/or_web_ui/_design/viewer/index.html
点击object_listing,查看数据列表
点击mesh,查看模型,点击后,如下图:
(本应该如下图 但是我没看到)
rosrun object_recognition_core training -c `rospack find object_recognition_linemod`/conf/training.ork
Training 1 objects.
computing object_id: be4814630fa4e7a722eecd7f1c000ae3
Skipping object id "be4814630fa4e7a722eecd7f1c000ae3" : no mesh in the DB
Deleting the previous model be4814630fa4e7a722eecd7f1c001c0e of object be4814630fa4e7a722eecd7f1c000ae3
这样提示的话就是不对 没有载入,检查上面的步骤再实行一遍
正确提示:
Training 1 objects.
computing object_id: be4814630fa4e7a722eecd7f1c000ae3
Info, T0: Load /tmp/fileCZwTVI.stl
Info, T0: Found a matching importer for this file format
Info, T0: Import root directory is '/tmp/'
Info, T0: Entering post processing pipeline
Info, T0: Points: 0, Lines: 0, Triangles: 1, Polygons: 0 (Meshes, X = removed)
Error, T0: FindInvalidDataProcess fails on mesh normals: Found zero-length vector
Info, T0: FindInvalidDataProcess finished. Found issues ...
Info, T0: GenVertexNormalsProcess finished. Vertex normals have been calculated
Error, T0: Failed to compute tangents; need UV data in channel0
Info, T0: JoinVerticesProcess finished | Verts in: 1536 out: 258 | ~83.2%
Info, T0: Cache relevant are 1 meshes (512 faces). Average output ACMR is 0.669922
Info, T0: Leaving post processing pipeline
Deleting the previous model be4814630fa4e7a722eecd7f1c002927 of object be4814630fa4e7a722eecd7f1c000ae3
开启仿真或者Kinect
这里以我仿真为例,roslaunch turtlebot_gazebo turtlebot_world.launch发出的topic有
/camera/depth/camera_info
/camera/depth/image_raw
/camera/rgb/camera_info
/camera/rgb/image_raw
修改一下 detection.ros.ork 订阅的话题名
gedit `rospack find object_recognition_linemod`/conf/detection.ros.ork
原来是
source1:type: RosKinectmodule: 'object_recognition_ros.io'parameters:rgb_frame_id: 'camera_rgb_optical_frame'rgb_image_topic: '/camera/rgb/image_rect_color'rgb_camera_info: '/camera/rgb/camera_info'depth_frame_id: 'camera_depth_optical_frame'depth_image_topic: '/camera/depth_registered/image_raw'depth_camera_info: '/camera/depth_registered/camera_info'
改为
source1:type: RosKinectmodule: 'object_recognition_ros.io'parameters:rgb_frame_id: 'camera_rgb_optical_frame'rgb_image_topic: '/camera/rgb/image_raw'rgb_camera_info: '/camera/rgb/camera_info'depth_frame_id: 'camera_depth_optical_frame'depth_image_topic: '/camera/depth/image_raw'depth_camera_info: '/camera/depth/camera_info'
然后运行
rosrun object_recognition_core detection -c `rospack find object_recognition_linemod`/conf/detection.ros.ork
rviz
添加 Pointcloud2,选择话题 /camera/depth/color/points
添加 OrkObject,选择话题 /recognized_object_array (若能够成功识别,则会发布此话题)
查看 /recognized_object_array 话题的实时内容
rostopic echo /recognized_object_array
就会得到pose 那么经过tf变换就可以将可乐的位置提出来。
---
header: seq: 1809stamp: secs: 2491nsecs: 330000000frame_id: "camera_depth_optical_frame"
objects: - header: seq: 0stamp: secs: 2491nsecs: 330000000frame_id: "camera_depth_optical_frame"type: key: "be4814630fa4e7a722eecd7f1c000ae3"db: "{\"collection\":\"object_recognition\",\"root\":\"http://localhost:5984\",\"type\"\:\"CouchDB\"}"confidence: 93.6507949829point_clouds: []bounding_mesh: triangles: []vertices: []bounding_contours: []pose: header: seq: 0stamp: secs: 2491nsecs: 330000000frame_id: "camera_depth_optical_frame"pose: pose: position: x: 0.180100440979y: 0.13609431684z: 1.55801010132orientation: x: 0.556165874004y: -0.402824014425z: 0.429271042347w: 0.586633265018covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
cooccurrence: []
---
此处有使用教程:ROS kinetic + Realsens D435i + ORK + LINEMOD 物体识别
官方http://wg-perception.github.io/object_recognition_core/
感谢:
Ubuntu16.04+ ROS kinetic 使用kinect2 ORK功能包 linemod算法实现可乐罐识别
ROS IntelRealSenseZR300 PCL+ORK+Linemod 柱状物体检测 机械臂抓取 系列第二篇
KinectV2测试物体识别linemod算法 Ubuntu16 ROS-kinetic
通过ROS控制真实机械臂(17) — 视觉抓取之ORK实现三维物体识别
ORK包的安装与linemod算法识别测试 (使用kinect v2 出现很奇怪的问题和解决)
D435、linemod实现三维物体检测与识别
那么哪里可以下到更多的STL库 来做点云识别呢?
ROS二维码识别以及OKR使用相关推荐
- 基于多二维码识别的无人机运动真值获取
基于多二维码识别的三维运动真值获取 1.背景介绍 2.原理 2.1 二维码基础 2.2图像预处理 2.3 定位标轮廓提取 2.4 多二维码鲁棒识别 3 运行结果 3.1对单张图片进行多二维码识别 3. ...
- OpenCV(项目)二维码识别(二维码、条形码)
目录 过程 1.获取图片中的二维码信息 2.获取视频中的二维码信息 3.检测出二维码框 4.显示数据 5.添加数据,判断二维码是否授权 5-1:.添加数据 5-2.读取文件信息,放入数组 5-3.判断 ...
- android 图片二维码识别和保存(二)
续上一篇,开发图片二维码识别功能后,我们对功能进行性能分析内存占用显著提高了,不使用该功能内存占用大约是147M,使用这个功能多次以后,高达203M. 因此对功能进行研究,发现每次生成的图片没有即时的 ...
- Atitit java 二维码识别 图片识别
Atitit java 二维码识别 图片识别 1.1. 解码1 1.2. 首先,我们先说一下二维码一共有40个尺寸.官方叫版本Version.1 1.3. 二维码的样例:2 1.4. 定位图案2 1. ...
- 基于机器视觉的Data Matrix二维码识别
基于机器视觉的Data Matrix二维码识别 二维码识别,这个在视觉应用中占有很重要的比例,各种各样的二维码都有可能需要识别.常见的QR码.Data Matrix码.本方案是识别Data Matri ...
- 二维码识别超级解决方案,工业级别
二维码识别超级解决方案,工业级别 参考文章: (1)二维码识别超级解决方案,工业级别 (2)https://www.cnblogs.com/y114113/p/6255462.html 备忘一下.
- openmv和stm32串口通信完成二维码识别
openmv和stm32串口通信完成二维码识别 文章目录 前言 一.所用的硬件: 二.openmv端 2.stm32端 总结 前言 注:我只是个大一的小白,本文只完成基本功能,希望能帮助有困惑的人(我 ...
- python zxing 识别条码_Python zxing 库解析(条形码二维码识别)
各种扫码软件 最近要做个二维码识别的项目,查到二维码识别有好多开源的不开源的软件 Zbar 首先试了一下Zbar,python加载ZBar时各种报错.可能的原因是zbar的dll文件是32位的,而我系 ...
- Opencv4.5.1 微信二维码识别功能 QRCode 编译与使用 C++
日常生活中手机摄像头最常用的功能可能就是扫码了,而且大部分使用微信扫码,微信扫码的功能的确很强大,精度高.速度快.微信扫码近来加入了opencv开源项目了.现特地进行了尝试,并记录了整个过程,以上动图 ...
- iOS 花式二维码生成和二维码识别
iOS 原生的二维码识别非常之棒,反正比 ZXing 和 ZBar 效果都好些,所以以后打算尽量用原生的二维码识别,然后最近把原生的二维码生成也顺便做了一遍,并且在原有基础上加了一些样式参数,封了一个 ...
最新文章
- java设计模式---代理模式
- A1075.PAT Judge
- 三款最安全的Linux操作系统(适合从事网络安全工作者使用)
- 高清动漫壁纸,满足动漫视觉控的你
- django 坑~~
- oracle dba 连不上,Oracle10g的DBA无法登录解决方案
- smpt authentification 配置
- php startup memcache,centos php 安装memcache模块
- 部署django应用
- Java json与object互转
- 常用的英文单词2000
- 国内外sns源码搜集
- 徐思201771010132《面向对象程序设计(Java)》第十三周学习总结
- 三角形面积计算机方法,计算三角形面积 免费版
- 「第二部:容器和微服务架构」(2) 容器化单体应用
- Dialog 宽度占满全屏
- 汇川PLC如何连接工业网关实现远程编程和远程上下载程序?
- BPSK、2FSK、2ASK
- 抖音推出付费功能,花钱看抖音的时代来了
- 外媒:小米股票暗盘出价比发行价低9.4%