在ROS 使用摄像头 WebCam 完成图像处理(1) -- 获取图像数据

2023-05-16

在ROS 使用摄像头 WebCam 完成图像处理(1) -- 获取图像数据

我们要使用摄像头,先要能看到摄像头图像:(见附录)

然后我们这里是参考《ros_by_example》( volume1 hydro )书中的方法。
这里要注意的是:虚拟机里的Ubuntu使用cheese, guvcview这样的工具是可以获取图像的,但ros里提供的摄像头驱动,比如uvc_camera, 就不能很好的工作了。

1. 环境搭建的准备工作

ROS组织发布的基础包

开始之前,安装Prerequisites:(是一些ROS组织发布的基础包)

  -----
$ sudo apt-get install ros-hydro-turtlebot-* \
  ros-hydro-openni-camera ros-hydro-openni-launch \
  ros-hydro-uvc-camera \
  ros-hydro-openni-tracker ros-hydro-laser-* \
  ros-hydro-audio-common ros-hydro-joystick-drivers \
  ros-hydro-orocos-kdl ros-hydro-python-orocos-kdl \
  ros-hydro-dynamixel-motor-* ros-hydro-pocketsphinx \
  gstreamer0.10-pocketsphinx python-setuptools python-rosinstall \
  ros-hydro-opencv2 ros-hydro-vision-opencv \
  ros-hydro-depthimage-to-laserscan ros-hydro-arbotix-* \
  git subversion mercurial

  -----
这里有点洒拦河网的感觉,其实可以只安装这几个:
  $ sudo apt-get install ros-hydro-openni-camera \
  ros-hydro-openni-launch \
  ros-hydro-uvc-camera \
     python-setuptools \
  python-rosinstall \

     ros-hydro-opencv2 \
  ros-hydro-vision-opencv \

    git subversion mercurial

1. Installing Webcam Drivers(OPTIONAL)

To use a typical USB webcam, there are a number of possible driver packages available.
The one we will use here is from Eric Perko's repository. Type the following commands
to move into your personal ROS directory, retrieve the source code, then make the
package:


  $ sudo apt-get install git-core
  $ cd ~/catkin_ws/src
  $ git clone https://github.com/ericperko/uvc_cam.git
  $ cd ~/catkin_ws
  $ catkin_make
    
    Tips:如果你是ROS Electric, Fuerte, or Groovy, 自己看《ros_by_example》( volume1 hydro )书吧。

             如果你是Hydro,要用Git 工具下载 rbx1 代码再生成ROS Packages就像former教程写的一样.


2. 用Git 工具下载 rbx1 代码,生成rbx ros Package
    Commands:
$ cd ~/catkin_ws/src && git clone --depth=1 https://github.com/pirobot/rbx1.git
$ cd rbx1 && git checkout hydro-devel
$ cd ~/catkin_ws && catkin_make
$ source ~/catkin_ws/devel/setup.bash

  -----
   git clone 太慢怎么办 ?  所以我这里使用了 --depth=l 进行浅复制
   以上这几行命令,对于你应该很熟悉了,你是有基础的人。这里我们就用了'ROS By Example' 书提供的包了,All of the 'ROS By Example' packages begin with the letters rbx1。
  ===========
  To list the packages,
  move into the parent of the rbx1 meta-package and use the Linux ls command:

    $ roscd rbx1
    $ cd ..
    $ ls -F
  

  which should result in the following listing:

  rbx1/       rbx1_bringup/      rbx1_dynamixels/    rbx1_nav/     rbx1_vision/
  rbx1_apps/  rbx1_description/  rbx1_experimental/  rbx1_speech/  README.md

  For example, to move into the rbx1_speech package, you would use the command:

    $ roscd rbx1_speech  
  Note that you can run this command from any directory and ROS will find the package.

  ===========

2. 然后我们就测试一下rbx1_vision 下的uvc_can.launch文件:


  $ ls /dev/video*  
  看看是有video几,假设是 /dev/video0 , linux就通过这个文件来管理你的WebCam。运行rbx1提供的节点看看:

  $ roslaunch rbx1_vision uvc_cam.launch device:=/dev/video0  
you should see a stream of diagnostic messages describing various camera settings.  
Don't worry if some of these messages indicate that a parameter could not be set.

  但是我在这里遇到一个问题:
       ERROR: cannot launch node of type [uvc_cam/uvc_cam_node]: can't locate node [uvc_cam_node] in package [uvc_cam]

  我查了一下,http://wiki.ros.org/uvc_cam 说,已经不支持了。所以 ROS_by_Example 在这里有过期了。。。。也就是说,rbx_vision 用了过期的api.

  但 uvc_camera 这个Package是比较新的,所以我们使用 uvc_camera:

3. 安装测试 uvc_camera:

  我们要把 ROS by Example 作为参考,独立使用 WebCam 及 ROS 提供的包来完成工作。

任务: 用ROS提供的驱动包,从摄像头获取图像,然后把图像数据发布在 sensor_msgs/Image 主题上。
    从调研的情况看, uvc_cam is out of date. theusb_cam;uvc_camera;libuvc_camera 看起来都还可以用。

    经过尝试,最后我们推荐使用 uvc_camera : (实际上,开篇的 sudo apt-get install ros-hydro-uvc-camera 就已经替代下面5行命令)
    (读者可跳过下面5行命令)


  $ cd ~/catkin_ws/src
  $ git clone https://github.com/ktossell/camera_umd
  $ cd ~/catkin_ws
  $ catkin_make
  $ source ~/catkin_ws/devel/setup.bash
  
尝试运行:

   一个窗口: $ roscore,
   另一个窗口:


    $ rosrun uvc_camera uvc_camera_node device:=/dev/video0
or: $ rosrun uvc_camera uvc_camera_node width:=640 height:=480 frame:=camera device:=/dev/video0
  
   再开一个Terminal 窗口:

  $ rostopic echo /image_raw
  

   出来的数据应该就是图像数据了。 :)   , 我们可以再开一个Terminal来查看图像:


  $ rosrun image_view image_view image:=/image_raw   

    
    如果没有图像,是下面这样:(可能因为用了虚拟机,ros node对虚拟机兼容还不太好。)
  

    至此,我们要让rbx1_vision动起来,还要做个主题映射把/image_raw -> /camera/rgb/image_color
    还要修改 rbx1_vision/launch/uvc_cam.launch 文件中调用的 driver node : pkg=uvc_cam; node name=uvc_cam_node.
    为:
      name="uvc_camera_node" pkg="uvc_camera" type="uvc_camera_node"

    结束前面正在运行的nodes, 新建一个 .launch 文件:


  $ sudo gedit ~/catkin_ws/src/rbx1/rbx1_vision/launch/usb_cam.launch
  

    内容:

  <launch>
    <arg name="device" default="/dev/video0" />

    <node name="uvc_camera_node" pkg="uvc_camera" type="uvc_camera_node" output="screen">
    	<remap from="image_raw" to="camera/rgb/image_color" />
        <param name="device" value="$(arg device)" />
        <param name="width" value="640" />
        <param name="height" value="480" />
        <param name="frame_rate" value="30" />
        <param name="exposure" value="0" />
        <param name="gain" value="100" /> 
    </node>
  </launch> 

    这里我们在 launch 文件里指定了运行 uvc_camera 包下的 uvc_camera_node 节点作为 WebCam 的驱动节点,并且把 image_raw 这个主题映射到 camera/rgb/image_color这个topic 下,这是习惯,更直观一点。试试运行这个launch 文件,并用 image_view 这个工具查看 camera/rgb/image_color 上的图像数据:

4. 最终测试:

    试试运行这个launch 文件,并用 image_view 这个工具查看 camera/rgb/image_color 上的图像数据:


  $ roslaunch rbx1_vision usb_cam.launch device:=/dev/video0  

  $ rosrun image_view image_view image:=/camera/rgb/image_color  
  
    我得到正常的图像数据,并在image_view工具里显示图像:
          

========================================


--------- 调试手记 ---------

    我们要用ROS提供的驱动包,从摄像头获取图像,然后把图像数据发布在 sensor_msgs/Image 主题上。
    从调研的情况看, uvc_cam is out of date. theusb_cam; uvc_camera; libuvc_camera 看起来都还可以用。不过 usb_cam 被维护的力度看起来最大,我们就来玩玩它先。


  $ cd ~/catkin_ws/src
  $ git clone https://github.com/bosch-ros-pkg/usb_cam
  $ cd ~/catkin_ws
  $ catkin_make  
尝试运行:

   一个窗口: $ roscore, 另一个窗口:


  $ rosrun usb_cam usb_cam_node
  

  但是我没看到 sensor_msgs/Image 这个主题, 不过这里的 /image_raw 应该就是图像数据。但我得到的全是零。


   再试试 uvc_camera 这个Package,但是它的git 页面上说,libuvc_camera 更新,所以我们使用libuvc_camera, 在catkin_make这一步时出错。
   最后还是使用 uvc_camera :


  $ cd ~/catkin_ws/src
  $ git clone https://github.com/ktossell/camera_umd
  $ cd ~/catkin_ws
  $ catkin_make  
尝试运行:

   一个窗口: $ roscore, 另一个窗口:


  $ rosrun uvc_camera uvc_camera_node
  
   再开一个Terminal 窗口:

  $ rostopic echo /image_raw
  

   出来的数据应该就是图像数据了。 :)

    参考:ROS 教程之 vision : 用各种摄像头获取图像
  由于UVC图像采集卡出来的视频格式是MJPEG,这里
,ROS支持的摄像头开发包有很多,这里有一个列表进行了罗列,还有这里有一篇文章进行了各个驱动的简单对比。在查看usb_cam 的wiki说明的时候,发现pixel_format 一栏默认的是mjpeg,大喜!
  启用这个package:usb_cam.


  $ cd ~/catkin_ws/src
  $ git clone https://github.com/bosch-ros-pkg/usb_cam
  $ cd ~/catkin_ws
  $ catkin_make
  $ source ~/catkin_ws/devel/setup.bash
  
尝试运行:

   一个窗口: $ roscore, 另一个窗口:


  $ rosrun usb_cam usb_cam_node
  
  得到错误:[ERROR] [1440988422.600910989]: outbuf size mismatch.  pic_size: 460800 bufsize: 614400
  但是我没看到 sensor_msgs/Image 这个主题, 不过这里的 /image_raw 应该就是图像数据。但我得到的全是零。

  $ rosrun image_view image_view image:=/image_raw  

    得到的是黑色窗口。

------------------------------------

   参考:https://github.com/bosch-ros-pkg/usb_cam/issues/35


  $ sudo gedit ~/catkin_ws/src/rbx1/rbx1_vision/launch/usb_cam.launch  
<span style="color:#999999;">    <launch>  
        <arg name="device" default="/dev/video0" />  
        <node name="usb_cam_node" pkg="usb_cam" type="usb_cam_node" output="screen">  
        <remap from="usb_cam_node/image_raw" to="camera/rgb/image_color" />  
            <param name="video_device" value="$(arg device)" />  
            <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"/>
            <param name="framerate" value="30" />  
            <param name="brightness" value="128" />  
            <param name="contrast" value="128" />  
            <param name="saturation " value="70" />  
        </node>  
    </launch>  </span>

  $ roslaunch rbx1_vision usb_cam.launch device:=/dev/video0  

  $ rosrun image_view image_view image:=/camera/rgb/image_color  
  
结果,没有图像,是下面这样:
  


===================================================================================================

附录:虚拟机VirtualBox上运行 Ubuntu 14.04 LTS 使用WebCam摄像头


写在前面:
  •     '我的宿主机是Win 7系统。虚拟机工具VirtualBox 4.3.28. 虚拟系统:Ubuntu 14.04 LTS
  •     'VirtualBox上运行的Ubuntu系统,要使用摄像头,需打通VirtualBox对USB设备的支持,要安装对应的Oracle VM virtualBox Extension Pack(Google 搜索)
  •     '关于Ubuntu/Linux系统中cheese工具支持的摄像头类型,有一个叫做UVC的组织,提供了一套Linux UVC driver支持大部分型号的WebCam
    我的WebCam型号: Logitech HD Webcam C525

获取图像:
   参考: ubuntu12.04+virtualbox+winxp的关于摄像头无法使用,声音出不来的问题

安装cheese以测试:
    $ sudo apt-get install cheese

    或者通过 ubuntu 图形界面 软件app中心 搜索 cheese 进行 Install。

测试运行cheese:

   $  cheese

   应该能看到图像了~~
   如果没有,可以这样排查问题,第一步看摄像头采集卡有没有问题:在软件中心,查找 guvcview ,安装这个软件,然后在video&Files中device一栏选择为你的外部摄像头,看有没有图像。如果没有图像,说明你的视频采集卡有问题或者CCD摄像头有问题。



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

在ROS 使用摄像头 WebCam 完成图像处理(1) -- 获取图像数据 的相关文章

  • CentOS7.6 上安装 Docker-CE-19.03.05(详细安装步骤)

    Docker 的安装说明 Docker 是一个开源的商业产品 xff0c 有两个版本 xff1a 社区版 xff08 Community Edition xff0c 缩写为 CE xff09 和企业版 xff08 Enterprise Ed
  • 在VMware的虚拟机上安装ProXmoX-VE(PVE)

    1 ProXmoX VE简介 PVE xff08 ProXmoX VE xff09 是一个开源的虚拟化管理软件 xff0c 类似ESXI xff0c 用户可以通过网页的方式来管理服务器 xff0c 使用kvm以及lxc技术运行虚拟机 xff
  • 在Vue3中使用Element Plus时 el-icon无法显示的问题

    问题描述 按照官方文档安装了icons span class token function npm span span class token function install span 64 element plus icons 然后在页
  • 无法定位程序输入点GetOverlappedResultEx 于动态链接库 KERNEL32.dll 上。

    问题说明 在Windows7上安装配置instantclient 19 12用于访问Oracle的客户端 xff0c 在使用sqlplus连接的时候 xff0c 弹出对话框 提示 无法定位程序输入点GetOverlappedResultEx
  • NPM离线包的制作和使用

    说明 常规情况 xff0c node安装依赖库使用npm install命令安装 它会从互联网上的npm中央仓库中下载对应的包文件 但是在有些情况下需要在没有互联网的情况下安装依赖库 xff0c 比如有些公司中 xff0c 开发环境无法直接
  • Ubuntu安装Python3.8

    在ubuntu上安装Python有两种方法 在线安装和源码编译安装 方法1 xff1a 使用apt在线安装 1 更新软件包列表并安装必备组件 xff1a span class token function sudo span span cl
  • 使用免费负载生成器swingbench对oracle数据库进行压力测试(测试Oracle的功能或评估性能)

    1 Swingbench 简介 Swingbench 是一个免费负载生成器 xff08 和基准测试 xff09 xff0c 旨在对 Oracle 数据库 进行压力测试 目前最新版本 Swingbench 2 6 SwingBench 由负载
  • 在CentOS7上升级OpenSSL3和 OpenSSH9.0p1

    1 说明 CentOS7 自带的 OpenSSH 版本 xff08 OpenSSH 7 4p1 OpenSSL 1 0 2k fips 26Jan 2017 xff09 漏扫出很多高 风险漏洞 xff0c 预采用升级处理 xff08 升至
  • 编译升级OpenSSL报错:Can‘t locate IPC/Cmd.pm

    错误信息 span class token punctuation span root 64 dowhere openssl 3 0 3 span class token punctuation span span class token
  • 安装Paddlepaddle2.4.2以后导入模块报错: ImportError: libcudart.so.10.2: cannot open shared object file: No su

    问题描述 在使用 python3 8 安装 paddle 以后 xff0c 测试导入 paddle 报错 创建环境并安装 span class token builtin class name source span activate pa
  • 人工智能导论考前整理-思考题部分

    以下均为个人观点 xff08 也参考资料得到 侵删 xff09 xff0c 仅供参考 xff0c 可考试前用 我们学校的考点是基本都在上面了 xff08 考题雷达嘿嘿 xff09 xff0c 不同学校不太一样 xff0c 以下是我之前考前边
  • 自抗扰控制器中扩张状态观测器的设计

    状态观测器是根据系统的输入输出来确定系统内部状态变量的装置 xff0c 它的示意图如下 xff1a 在自抗扰控制器的设计过程中 xff0c 我们通常把未知的干扰都用 f f f 来表示 xff0c 如果利用状态观测器可以将未知的干扰观测出来
  • 前端页面小图标不显示问题

    这个问题困扰了我好久 xff0c 主要报错是Origin 39 http localhost 39 is therefore not allowed access 等 起因是我引入bootstrap框架后后端页面的一些小图标不显示 xff0
  • Thinkphp审核功能的实现

    审核功能经过几个小时的奋战终于完成了 xff0c 现在我就与广大网友分享我的成果 我定义未审核为 1 xff0c 审核通过为1 xff0c 审核不通过为0 下面请看HTML代码 lt div class 61 34 table respon
  • Thinkphp修改密码的实现

    密码修改是开发中很基础的一个功能 密码修改的HTML代码如下 span span lt form method 61 post class 61 form horizo ntal action 61 gt span span span st
  • 二维数组的输入和输出

    二维数组我知道的有两种方法 第一种方法是平时常见的方法 xff0c 用两个循环 xff0c 例如 for i 61 0 i lt 61 n 1 i 43 43 for j 61 0 j lt 61 n 1 j 43 43 cin gt gt
  • 怎样把网站前端页面扒取

    在网上经常看到一些很好看的页面 xff0c 这些页面其实都可以把代码扒取下来的 xff0c 可以用浏览器的另存为 xff0c 也有一些相应的软件 浏览器扒取 以火狐为例 右键鼠标点击网页另存为 然后保存即可 软件扒取 这种扒取的软件有很多种
  • 算法题1

    假设有这样一个国家 xff0c 其法律规定当公民月收入为x时 xff0c 若x gt 1 则每月应当缴纳的税金为x的因数中除了x之外的最大值 同时该国法律允许公民将月收入分成若干部分 每部分均为整数 xff0c 要求每部分收入都大于1 xf
  • 3.4日期处理

    include lt iostream gt include lt cstdio gt 平年和闰年的每月的天数 int month 13 2 61 0 0 31 31 28 29 31 31 30 30 31 31 30 30 31 31
  • 关于STL和Boost的理解

    xff11 xff0e STL STL是standard Template Library即标准模板库的英文缩写 xff0c 是惠普实验室开发的一系列软件的统称 从根本上讲 STL是一些 容器 的集合 xff0c 这些容器有list vec

随机推荐

  • Ubuntu 各版本号和名称对照

    版本开发代号中译发布日期支持结束时间内核版本桌面版服务器版4 10Warty Warthog多疣的疣猪2004 10 202006 04 302 6 85 04Hoary Hedgehog白发的刺猬2005 04 082006 10 312
  • 【无标题】安装ROS E: 无法定位软件包 ros-melodic-desktop-full

    一 遇到问题 二 可能的原因和解决方法 1 源换一下 xff1a xff08 1 xff09 我是看这位大佬的 5条消息 记录 解决Ubuntu安装ros报错E Unable to locate package ros kinetic de
  • 无线通信原理及协议栈(ZigBee、蓝牙等)解析

    1 天线 说起无线电通信 xff0c 不可不提起天线 在无线电设备中 xff0c 用来辐射和接收无线电波的装置称为天线 在发射端 xff0c 发射机产生的已调制的高频振荡电流 xff08 能量 xff09 经馈电 xff08 指被控制装置向
  • 串口Serial连接方式

    串口Serial连接方式 1 协议终端选择Serial 2 会话选项 xff0c 选择 串行 3 进入电脑 设备管理器 xff0c 查看USB Serial Port以及端口设置 串行选项根据端口设置配置 确定并连接即可
  • tcp/ip 协议栈实现2-socket文件系统

    core initcall sock init net socket c static int init sock init void int err Initialize sock SLAB cache sk init Initializ
  • VMware虚拟机安装Windows11(无需设置TPM密码)

    VMware虚拟机安装Windows11 xff08 无需设置TPM密码 xff09 注意 xff1a 需要新版VMware xff0c 目前小白的版本为 16 2 3 一 新建虚拟机向导 1 新建虚拟机 点击菜单栏文件 新建虚拟机 2 配
  • ROS相关:使用rospy 编写ros程序并使用rosbag存储数据

    为什么使用rospy ROS支持C 43 43 和Python xff0c 由于ROS的底层是由C 43 43 编写 xff0c 因此大多数的ROS程序都使用C 43 43 xff0c 但是Python语言接口简单 xff0c 更容易编写
  • C函数调用过程

    这几天在看GCC Inline Assembly xff0c 在C代码中通过asm或 asm 嵌入一些汇编代码 xff0c 如进行系统调用 xff0c 使用寄存器以提高性能能 xff0c 需要对函数调用过程中的堆栈帧 xff08 Stack
  • 【GitHub】Branches和Tags分别是做什么用的?

    在 GitHub 中 xff0c Branches xff08 分支 xff09 和 Tags xff08 标签 xff09 都是用于版本控制的重要工具 Branches xff08 分支 xff09 可以用来创建一个新的开发分支 xff0
  • git clone 指定分支

    我们在有一个工程的权限后 xff0c 按照常规操作去拉代码 xff0c 往往会拉到默认的master分支 若我们担心master分支拉下来后 xff0c 与其他代码有冲突 xff0c 想直接拉某分支的代码 xff0c 则该怎么操作呢 1 我
  • rocketmq的消息msgId和offsetMsgId

    1 rocketmq的消息发送时 xff0c producer客户端 生成msgId xff08 通过 ip 43 进程 43 自增值 43 当前与系统启动时间差值 xff09 xff0c 有另外的一个叫法uniqId 方法入口 xff1a
  • 算法 - 桶排序(Bucket Sort)

    执行流程 xff1a 创建一定数量的桶 xff08 比如用数组 链表作为桶 xff09 按照一定的规制 xff08 不同类型的数据 xff0c 规则不同 xff09 xff0c 将序列中的元素均匀分配到对应的桶分别对每个桶进行单独排序将所有
  • 测试Pangolin是否安装成功

    一 终端输入 cd Pangolin examples HelloPangolin cmake make HelloPangolin 二 显示这个结果则成功 三 顺便放一个 我可终于装完了ORB SLAM3 被内存不够折腾了好久 换个内存条
  • 交叉编译工具 aarch64-linux-gnu-gcc 的介绍与安装

    AArch64 是随 ARMv8 ISA 一起引入的 64 位架构 xff0c 用于执行 A64 指令的计算机 而且在 AArch64 状态下执行的代码只能使用 A64 指令集 xff0c 而不能执行 A32 或 T32 指令 但是 xff
  • 02 机器学习中的评估指标

    机器学习中的评估指标 1 机器学习的目标 根本目标 xff1a 在给定的训练数据上 xff0c 试图训练出能够归纳数据的规律的模型 xff0c 并且能在未知样本上也有好的效果 泛化能力强的模型最好 能很好地适用于未知样本 xff0c 如错误
  • 方便Git提交代码的几个工具

    团队使用git管理代码 xff0c 为了提交方便 xff0c 查看Log方便 xff0c 师傅告诉我先安装几个工具 xff0c 如下 xff1a cola gitk AnyEdit 一 gitk安装 xff08 备注 xff1a 开始我没走
  • git提交 本地分支和远程分支断开连接

    1级标题 当 git push origin branch name时遇到报错如下 xff1a fatal origin does not appear to be a git repository fatal Could not read
  • spring MVC中关于model.addAttribute的使用方法【翻译】

    关于model addAttribute的使用方法 http krams915 blogspot com 2010 12 spring 3 mvc using modelattribute in html 可能要 break the wal
  • ROS进阶学习手记 7 -- RViz仿真实例1

    任务2 xff1a 用simulator RViz 工具 xff0c 完成对小车的建模 xff0c 名字drive RViz 61 dvrv 用 dvrv node 发布topic和数据格式 xff0c 向它发送位置指令 xff0c 使它能
  • 在ROS 使用摄像头 WebCam 完成图像处理(1) -- 获取图像数据

    在ROS 使用摄像头 WebCam 完成图像处理 xff08 1 xff09 获取图像数据 我们要使用摄像头 xff0c 先要能看到摄像头图像 xff1a xff08 见附录 xff09 然后我们这里是参考 ros by example v