【ROS实践入门(八)ROS使用USB视觉传感器相机】

2023-05-16

【ROS实践入门(八)ROS使用USB视觉传感器相机】

本内容经官网实例以及一些参考书总结而成,欢迎留言评论交流~

联系方式:ziyuanw#foxmail.com(#换成@)

ROS对许多传感器诸如:游戏杆,游戏手柄,IMU,激光测距仪,Kinect(RGBD)传感器,USB视觉相机等都提供了支持,本文只探讨USB相机的使用方式包括:ROS下USB相机驱动安装, 相机节点编译执行,单目相机标定方式。

ROS对于图像处理和计算机视觉提供了摄像机标定过程,畸变矫正,颜色解码,等其他一些底层操作,更加复杂的图像处理任务可以借助OpenCV,cv_bridge和Image_transport库通过建立连接,订阅和发布图像主题进行交互,另外还提供了物体识别,增强现实,视觉里程计等算法功能包。

一、ROS下USB相机驱动

  • 准备设备:USB相机一个(某宝买一个能用即可)
  • 准备ROS版本USB摄像机驱动:(建议从ROS官网给出的USB驱动源码进行编译安装)
    https://github.com/ros-drivers/usb_cam

    因为当我们在使用USB相机时需要对其参数进行自行修改,此时从源码进行安装就能够非常方便设定,一般情况不需要对其源码进行修改。

  • 注意:下面所有步骤都是在我创建好的catkin_ws工作空间里面进行的,usb_cam驱动下载至catkin_ws/src文件夹下。若不知道如何创建该工作空间可参考我前面的第二篇博客。

1.源码安装usb_cam驱动包。

//1.克隆远程仓库 
git clone https://github.com/ros-drivers/usb_cam
//2.切换至usb_cam文件夹中
cd usb_cam/
//3.检查所有分支
git branch -av
//4.在本地建立一个master分支并保持与远程(remote)master仓库分支同步(该步骤可选)
git checkout -b master origin/master
//5.检查此时分支
git branch -av
//6.重新切换至develop分支
git checkout develop
//7.检查此时分支
git branch -av

2.修改launch文件。(使用笔记本电脑自带相机之外的usb相机时需要修改)

默认是第三行:"/dev/video0",我的usb相机设备号是2所以将其修改为video2。(根据个人设备号修改,0为电脑自带相机设备号,外置usb相机设备号一般为1,或2.)

或者查看设备号(把usb相机插拔前后看看哪个设备号变化了):

ls /dev/video*

查看一下usb_cam内部结构,并使用vim编辑launch文件:

<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video2" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

3.usb_cam相机驱动编译:

切换至catkin_ws工作空间,并编译:

ziyuan@zyub:~/catkin_ws/src/usb_cam$ cd ~/catkin_ws/
ziyuan@zyub:~/catkin_ws$ catkin_make

编译成功如下:(成功建立相机节点:usb_cam_node)

4.启动相机节点:

(同样,和之前博客提到的一样,source devel/setup.bash更新一下环境配置)

  • 打开第一个终端:
roscore
  • CTRL+Shift+T打开第二个终端:

执行相机usb_cam-test.launch文件(不熟悉launch文件启动方式可以参考上一篇博客):

source devel/setup.bash
roslaunch usb_cam usb_cam-test.launch

弹出一个小窗,效果如下:

如果相机启动时如下警告:(那是由于相机没有进行标定,因此会出警告。)

[ INFO] [1569724530.848204371]: Unable to open camera calibration file [/home/ziyuan/.ros/camera_info/head_camera.yaml]
[ WARN] [1569724530.848223218]: Camera calibration file /home/ziyuan/.ros/camera_info/head_camera.yaml not found.

下面对其进行标定。

二、相机标定方法
 

在ROS中已经集成了对相机完成标定以及畸变矫正的整个流程,用起来非常方便。通常使用张正友相机标定方法,即利用平面坐标的单应性关系,流程简洁。

1.准备黑白棋盘格:

在网上可以找到黑白相机棋盘格的pdf文档,这里给一个Matlab官方相机标定黑白棋盘格链接:

http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/pattern.pdf

下载之后将其打印在A3或者A4纸张上,然后量出其方格边长即可(自己量多少就写多少,单位换为国际单位m)。我这里使用的A3纸张,最终尺子量出来是0.03m,A4的是0.028m。

黑白棋盘格是由9×7的黑白格组成,但是使用时仅仅用到内部交点数即8×6的角点。

2.启动相机:

roscore

roslaunch usb_cam usb_cam-test.launch

3.启动标定程序:

rosrun camera_calibration cameracalibrator.py –size 8×6 –square 0.03 image:=/usb_cam/image_raw

注意标定过程中左右,上下,前后,对角方向前后倾斜标定板,这样使得右边X,Y,Size,Skew变成绿色后,CALIBRATE按钮变为蓝色,然后点击(等上半分钟左右)变为下面三个按钮都可以点击,依次点击SAVE(保存)和COMMIT(提交)到相机配置文件中。即可将标定结果保存至本地。

点击SAVE之后:('Wrote calibration data to', '/tmp/calibrationdata.tar.gz')

如果第三步点击COMMIT出现:

raise ServiceException("service [%s] unavailable"%self.resolved_name)
rospy.service.ServiceException: service [/camera/set_camera_info] unavailable

那么只能自行将标定参数移动至:~/.ros/camera_info

1.cd /tmp

2.tar -zxvf calibrationdata.tar.gz

3.将ost.yaml复制到~/.ros/camera_info

4.打开并重命名为head_camera.yaml

camera_name:head_camera

再次打开相机节点就不会出现如下警告:

[ INFO] [1569724530.848204371]: Unable to open camera calibration file [/home/ziyuan/.ros/camera_info/head_camera.yaml]
[ WARN] [1569724530.848223218]: Camera calibration file /home/ziyuan/.ros/camera_info/head_camera.yaml not found.

至此相机使用过程以及完成,后面将会实践ORB-SLAM的ROS版本。

 

上一篇:【ROS实践入门(七)launch文件和动态参数使用】

下一篇:【ROS实践入门(九)ROS编译ORB-SLAM2运行】

 

参考资料:

【1】ROS官网

【2 】ROS上基于usb_cam相机使用: https://blog.csdn.net/pengrui18/article/details/88958487

【3】ROS机器人高效编程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【ROS实践入门(八)ROS使用USB视觉传感器相机】 的相关文章

  • 三 机器人仿真软件Gazebo介绍

    ROS教程 这是小弟的学习笔记 xff0c 有错求请拍 xff0c 多指教 xff0c 谢谢 三 机器人仿真软件Gazebo介绍 Gazebo功能 1 构建机器人运动仿真模型 在Gazebo里 xff0c 提供了最基础的三个物体 xff0c
  • Protobuf生成Go代码指南

    这个教程中将会描述protocol buffer编译器通过给定的 proto会编译生成什么Go代码 教程针对的是proto3版本的protobuf 在阅读之前确保你已经阅读过Protobuf语言指南 编译器调用 Protobuf核心的工具集
  • ROS sensor_msgs/LaserScan Message简单说明

    std msgs Header header float32 angle min 开始扫描角度 float32 angle max 结束扫描角度 float32 angle increment 每次扫描增加的角度 xff08 角度分辨率 x
  • 双系统Ubuntu分区

    假设整个空闲空间有200G xff0c 主要分4个区 xff1a 1 给系统分区EFI xff1a 在唯一的一个空闲分区上添加 xff0c 大小200M xff0c 逻辑分区 xff0c 空间起始位置 xff0c 用于efi xff1b 这
  • 2 用D435i运行VINS-fusion

    文章目录 1 VINS fusion的安装1 1 环境和依赖的安装1 2 编译VINS Fusion1 3 编译错误解决方法 2 VINS Fusion跑数据集3 用相机运行VINS Fusion 环境 xff1a Ubuntu20 04
  • Python每日一个小程序

    前几天上网 xff0c 收集了20多道Python练习题 这些练习题还是很有价值的 xff0c 正好最近忙着复习准备校招 xff0c 可以用来练手 我会把每道题都写一篇博客详细阐述解题思路和源代码 xff0c 在每道题目后面附上博客地址 希
  • 数分下(第1讲):一阶微分方程的三类模型求解

    第1 1讲 xff1a 一阶微分方程的解法 第一周第一讲将用3个小时时间 xff0c 完整讲解一阶微分方程y 61 f x y 的三种典型模型求解方法 掌握以下知识点 xff0c 并熟练做题训练 对应同济高数教材第七章1 4节 知识点脑图如
  • 非常详细的 Linux C/C++ 学习路线总结!助我拿下腾讯offer

    点击关注上方 五分钟学算法 xff0c 设为 置顶或星标 xff0c 第一时间送达干货 转自后端技术学堂 正文 我的另一篇文章 腾讯 C 43 43 后台开发面试笔试知识点参考笔记 整理了 C 43 43 后台开发知识点 xff0c 本文尝
  • 一线互联网公司程序员技术面试的流程以及注意事项

    先来了解面试的流程是什么 xff0c 然后再一一做准备 xff01 企业一般通过几轮技术面试来考察大家的各项能力 xff0c 一般流程如下 xff1a 一面机试 xff1a 一般会考选择题和编程题 二面基础算法面 xff1a 就是基础的算法
  • 为什么C++永不过时?

    Linus曾说过 xff1a C 43 43 是一门很恐怖的语言 xff0c 而比它更恐怖的是很多不合格的程序员在使用着它 xff01 这足以说明C 43 43 有多难 xff01 不过 xff0c 你也要明白 难度越高意味着含金量与竞争力
  • STM32 USB学习笔记6

    主机环境 xff1a Windows 7 SP1 开发环境 xff1a MDK5 14 目标板 xff1a STM32F103C8T6 开发库 xff1a STM32F1Cube库和STM32 USB Device Library 现在来分
  • Invalid bound statement (not found)

    目录 一 遇到的问题 二 分析思路 1 映射文件 2 测试类 三 解决方案 一 遇到的问题 前几日 xff0c 有个工作不久的同事找我帮他解决一个 Mybatis 的问题 他写了一个增删改查 xff0c 但是在启动程序的时候报错 xff1a
  • ThinkPHP6 解决小程序调用接口返回错误是网页的尴尬

    背景 早在开始了解ThinkPHP时就一直记得一段话 xff1a 在一开始无知的我以为出现错误后能在调试阶段优雅的了解错误信息 xff0c 但结果大家试一下便知道 xff0c 十分尴尬 尤其是当在小程序里请求api xff0c 在过程中发生
  • 大数据技术Canal总结和详细案例

    0 Canal介绍 Canal 是用 Java 开发的基于数据库增量日志解析 xff0c 提供增量数据订阅 amp 消费的中间件 目前Canal 主要支持了 MySQL 的 Binlog 解析 xff0c 解析完成后才利用 Canal Cl
  • T507 Ubuntu18.04 LXDE桌面汉化

    本文硬件平台采用飞凌T507开发板 xff0c 主要讲解Ubuntu图形桌面LXDE如何修改为中文界面 xff0c 本文使用的思路和方法仅供参考使用 xff0c 其它arm开发板虽然芯片不同 xff0c 但思路和方法有很多的共性 xff0c
  • 工作站和台式机的区别

    转自 xff1a 微点阅读 xff08 www weidianyuedu com xff09 微点阅读 范文大全 免费学习网站 工作站电脑非常高配 xff0c 那么它和台式机有什么区别呢 下面由小编给你做出详细的工作站和台式机区别介绍 希望
  • 分布式锁-简单入门

    状态不是很好 xff0c 记一下以前学过的分布式锁吧 样例简介 不谈大概念 xff0c 就是简单入门以及使用 为什么要用分布式锁呢 xff1f 假设我需要一个定时操作 xff0c 每天在某个点 xff0c 我要处理一批数据 xff0c 要先
  • 深度神经网络的成功应用,深度神经网络发展历程

    深度学习与神经网络有什么区别 深度学习与神经网络关系2017 01 10最近开始学习深度学习 xff0c 基本上都是zouxy09博主的文章 xff0c 写的蛮好 xff0c 很全面 xff0c 也会根据自己的思路 xff0c 做下删减 x
  • Ubuntu22.04启用root账户 2208120941

    Ubuntu22 04启用root账户 2208120941 Ubuntu是有root账户的 只是没有密码 所以无法切换 所以启用的方法是 管理员账户用 sudo passwd root 给 root 设置密码 span class tok
  • WARNING: CLOCK SKEW DETECTED. YOUR BUILD MAY BE INCOMPLETE

    make时遇到这个问题几次了 xff0c 就记录一下吧 WARNING CLOCK SKEW DETECTED YOUR BUILD MAY BE INCOMPLETE 警告 xff1a 检测到时钟偏移 您的构建可能不完整 xff08 来自

随机推荐