热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【ROS教程008】机器视觉

在ROS系统中,对机器视觉的支持是通过添加摄像头驱动,集成OpenCV算法库,集成基于机器人位置对摄像头光学坐标系进行坐标变换(tf)的工

在ROS系统中,对机器视觉的支持是通过添加摄像头驱动,集成OpenCV算法库,集成基于机器人位置对摄像头光学坐标系进行坐标变换(tf)的工具和一系列第三方工具实现的,包括视觉测量、增强现实、物体检测和智能感知等各种算法。
(1)连接和运行摄像头
ROS系统提供官方支持的FireWire摄像头,由于实验条件限制没有这种设备,使用USB摄像头进行展示。有两个主要的选项能用于USB摄像头驱动。
num1 usb_cam
如果想安装usb_cam需要运行以下命令:

$ cd ~/dev/rosbook
$ svn co http://svn.code.sf.net/p/bosch-ros-pkg/code/trunk/stacks/bosch_drivers/usb_cam
$ cd usb_cam
$ rosmake usb_cam

在这之后运行以下命令,显示摄像头数据,其本身就是USB摄像头的原始图像,即为彩色。

$ roslaunch chapter6_tutorials usb_cam.launch view:=true

这里写图片描述
类似地其他好的选择还有gscam。
(2)使用OpenCV制作USB摄像头驱动程序
驱动是通过调用OpenCV的cv::VideoCapture类来实现的,它能驱动摄像头并且允许我们去修改它的一些书本所支持的参数。然而,事实上使用usb_cam不可能实现这些功能,因为CameraInfo消息是不可用的,因此camera_info_url并不能在参数文件params/usb_cam/logitech.yaml中设置。而在gscam中,我们可以进行更多的控制。
使用OpenCV实现摄像头驱动主要有两种方法。第一是根据每秒钟给定的图像数量(FPS)进行轮询,第二是能够根据FPS设定一个计时器并在计时器的回调函数中完成实际的读取。主要包括的技术有创建USB摄像头驱动功能包、使用ImageTransport API发布摄像头帧、使用cv_bridge进行OpenCV和ROS图像处理、使用ImageTransport发布图像、在ROS中使用OpenCV等。
以下为camera_polling的显示结果。

$ roslaunch chapter6_tutorials camera_polling.launch camera_index:=0 fps:=15 view:=true

这里写图片描述
(3)标定摄像头
在USB摄像头驱动下进行的标定

$ roslaunch chapter6_tutorials camera.launch calibrate:=true

这里写图片描述
双目标定

$ sudo apt-get install v4l-utils qv4l2
$ roslaunch chapter6_tutorials camera_stereo.launch view:=true

这里写图片描述
这里我的实验效果并不好,有时间再仔细研究。
使用viso2执行视觉测距
在ROS Fuerte和Groovy中都包含了当前版本的viso2,然而这两个版本中都需要使用catkin编译系统。我们已经介绍了rosmake经典的编译系统,在此我们为基于catkin安装的viso2进行详细的指导,运行如下命令:

$ cd ~
$ mkdir ros
$ cd ros
$ mkdir -p catkin_ws/src
$ cd catkin_ws/src/

References:
[1]. Aaron Martinez Enrique Fern andez, ROS机器人程序设计[B], P126-160, 2014.
http://wiki.ros.org/gscam
http://wangsx.cn/?p=604
https://www.cnblogs.com/Jessica-jie/p/6520061.html


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
author-avatar
林斯诺_SNOW
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有