使用Eclipse实现USB Camera的ROS Publisher

树莓派-WebCamera图像采集(OpenCV) (1)在树莓派USB接口中插入webcamera,使用如下命令检测是否检测到camera      cd /dev      ls | grep video 如果有个设备名字是videox(x是数字) (2)编写代码,流程很简单,首先获取摄像头,然后再while(1)中显示采集到的视频,按下esc退出图像采集。 #include #include #inc 阅读详情

USB Camera ROS Publisher

现在完成自己的第一个工程.由于之前在网上寻找过关于USB Camera在ROS中的数据采集方法.找了很久一直没有找到一个比较有用的资料.所以想将其作为自己的第一个程序.获取USB Camera采集到的图像,然后发布出来.编写一个数据采集的节点.

1. 创建ROS Package

依次执行下述命令:
        $ roscd
        $ cd camera
        $ roscreate-pkg usbcamera_pub sensor_msgs image_transport cv_bridge roscpp

这个时候完成package创建,并添加附加依赖项sensor_msgs, image_transport, cv_bridge.详见图1.
图1:   创建usbcamera_pub包
图1: 创建usbcamera_pub包

2. 导入ROS Package到Eclipse

(这部分内容与前一篇重复)现在ls可以看到我们新建的包文件夹 usbcamera_pub. cd到该文件夹内,然后执行下述命令.

        $ cd usbcamera_pub
        $ make eclipse-project
        $ cd ..
        $ rosmake --target=eclipse-project --specified-only *

图2:   为你的packages or stacks编译一些Eclipse文件
图2: 为你的packages or stacks编译一些Eclipse文件

现在打开Eclipse, 点击 File → Import → Existing Projects into Workspace → Next → Browse,选择上述我们新建的Package目录,点击Finish.现在可以在Eclipse中看到我们新建的Package了.详见图3.可以看见,现在src文件夹和bin文件夹均是空文件夹.

3. 编写USB Camera节点代码

首先,我们需要完成一些配置工作.首先打开CMakeList.txt, 在该文件的最后添加下述文字.

        find_package(OpenCV)
        include_directories(${OpenCV_INCLUDE_DIRS})

对于任何第三方package, 均需在CMakeList.txt中添加find_package.在这儿我们添加OpenCV的库,不用自己配,加入这两句话即可.OpenCV的库在安装ROS的时候已经安装到Ubuntu上.其中还会用到ROS提供的另外一个工具cv_bridge.前面我们在新建Package的时候已经添加了该附加依赖项.cv_bridge所实现的功能很重要,从名字中就可以看出来,它就是提供一个ROS和OpenCV之间的一座桥梁.见图4.如果你想了解更多,请参阅http://wiki.ros.org/vision_opencv

图3:   导入Eclipse之后文件结构
图3: 导入Eclipse之后文件结构

图4:   cv_bridge的作用
图4: cv_bridge的作用

现在鼠标右键点击src → New → Source File, 输入usb_cam_pub.cpp,点击Finish.然后将下述代码复制到文件中.代码很简单,我就步一一解释了.该代码原作者是一个大三的小学妹.大部分工作都是她完成的.我只是做了总结而已.

/*
 * usb_cam_pub.cpp
 *
 *  Created on: Apr 28, 2015
 *      Author: burial
 */
#include <ros/ros.h>
#include <image_transport/image_transport.h>
#include <cv_bridge/cv_bridge.h>
#include <sensor_msgs/image_encodings.h>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

int main(int argc, char **argv )
{
  // 初始化,函数声明
  ros::init(argc, argv, "usbcamer_pub" );
  ros::NodeHandle nodeHandler;
  image_transport::ImageTransport imageTransport(nodeHandler);

  std_msgs::Header header;
  cv::Mat frame;
  cv::VideoCapture videoCapture(0);

  image_transport::Publisher imgPub = imageTransport.advertise("/usb_camera/rgb8", 1);

  while (ros::ok())
  {
    if (videoCapture.isOpened()) // 如果摄像头开启,处理图像转化为ros image message
    {
      videoCapture >> frame;
      cv_bridge::CvImage cvImage(header, sensor_msgs::image_encodings::RGB8, frame); // 利用cvbridge 将图像信息转化为rosmessage
      imgPub.publish(cvImage.toImageMsg()); // 发布消息
    }

    ros::spinOnce();
  }

  return 0;
}

现在打开CMakeList.txt将下述文字复制到文件的最后.

rosbuild_add_executable(usb_cam_pub src/usb_cam_pub.cpp)

然后,点击 Project → Build All.编译结束,你会发现bin文件夹里多出来一个文件.这就是生成的可执行文件.见图5.
图5:   编译结束后工程目录
图5: 编译结束后工程目录

这个节点不同于之前那个节点.上一个示例节点,可以通过Eclipse直接运行.并且可以在Console中看见输出内容.这个节点编译完成后,在Eclipse中运行总是会提示运行错误.但是在Terminal中运行就没有任何错误.我也没弄明白到底是为什么.错误输出建图6.尝试很多方法均未能修复这个错误.所以也只有放弃,编译完成后在Terminal中运行该节点.
图6:   在Eclipse中运行所提示错误
图6: 在Eclipse中运行所提示错误

4. 运行USB Camera节点

现在打开Terminal, 运行 $ roscore, 在打开一个Terminal, 执行 $ rosrun usbcamera_pub usb_cam_pub .如果提示未找到usbcamera_pub包的话,说明你没有执行 $ source ~/workspace/ROS/setup.bash .在Terminal中输入该命令,再运行节点.
现在是见证奇迹的时刻了.再打开一个Terminal, 输入 $ rosrun rviz rviz, 会弹出ROS 的一个可视化工具rviz.在左边工具栏中点击Add.
图7:   ROS RVIZ工具点击Add
图7: ROS RVIZ工具点击Add

选择Image, 点击确定.左边工具栏出现Image条目.展开后如图8展示.在Topic选项中选择 /usb_camera/rgb8,就可看到当前Image窗口中显示出当前摄像头所采集到的画面了.

图8:   选择Image后Rviz所示图
图8: 选择Image后Rviz所示图

5. 后期工作

或许你对上图中图像颜色有疑问.这是由于我们在转换的时候是以rgb8的方式编码.在源码中可看到.而现在是以raw的方式显示的.故有这样的问题.后期再编辑自己的Subsciber接收图像,然后显示,就不会出现这样的颜色问题了.
另外,从源码中可以看到,当前是从运行该节点开始,我们就使用VideoCapture类获得摄像头控制权,然后获取图像开始Publish, 不管是否有节点订阅了该Topic.这一点应该是可以再进行完善的.在有节点订阅我们的Topic后开始开启摄像头,Publish图像Message.

ROS 2中间件选型实战指南:Fast DDS、Cyclone DDS与Connext深度对比 ROS 2并非自带通信能力的框架,其核心通信由可插拔的中间件(RMW)实现,本质是DDS(Data Distribution Service)标准的封装。理解RMW抽象层原理,是解决节点发现失败、QoS不生效、实时抖动等高频问题的前提。不同RMW实现——如开源的Fast DDS、Cyclone DDS,以及商业级RTI Connext——在QoS默认策略、线程模型、内存管理及实时性保障上存在根本差异,直接影响机器人控制环稳定性、嵌入式部署寿命与车载/工业场景合规性。本文聚焦工程落地,覆盖从环境切换、XML配 阅读详情

相关推荐

从零搭建水下机器人仿真环境:ROS2、Gazebo与ArduSub集成指南

机器人仿真技术是验证算法、测试硬件接口和进行安全训练的核心环节,尤其对于水下机器人这类复杂且昂贵的系统,仿真能有效降低开发成本与风险。其基本原理是通过物理引擎模拟真实世界的动力学特性,并利用软件框架构建传感器数据流与控制指令的闭环。这项技术的核心价值在于提供了一个高保真、可重复且安全的虚拟测试平台,广泛应用于无人潜航器(UUV)的自主导航、任务规划等算法开发。本文聚焦于如何将ROS2这一现代化的机器人软件框架、Gazebo物理仿真引擎与经过实战检验的ArduSub自动驾驶仪固件进行深度集成,详细指导开发者搭

weixin_34275734的博客 345

【TOOl】批量搜索缺少的依赖库

命令查找所需依赖库,遇到如下问题:多个依赖库 not found,接下来需要做的是需要把所需的依赖库给补齐。,即可在gene文件夹路径下得到 缺少的依赖库,后续将这些依赖库导入到缺少这些依赖库的新环境即可。在运行C++可执行程序时,运行不起来,通过。在完整环境创建如下 find.py。所缺链接库日志放在同一路径下,然后执行。

gene's blog 376

机器人中间件开发5个实战项目:从ROS通信到SLAM导航

机器人系统是典型的分层架构,除了备受关注的感知算法,中间件层同样决定系统能否稳定运行。中间件负责数据在合适的时间到达合适的地方,涵盖通信机制、系统调度、驱动接入等核心能力。对于学历普通、代码基础一般的开发者而言,中间件岗位门槛更友好,也更看重工程落地能力。文章基于ROS这一主流分布式通信框架,梳理了5个可写进简历的项目:手写Topic通信组件、基于激光雷达的SLAM建图与定位、动态避障路径规划、多传感器驱动接入与时间同步,以及Gazebo仿真测试平台。每个项目从背景、实现思路到踩坑经验逐步拆解,帮助理解C+

weixin_33508411的博客 350

ros使用opencv写自己的usb摄像头发布者(publiser)和订阅者(sublisher)

1.首先完成工作空间、编译空间的创立 2.完成功能包的的创建, catkin_creat_pkg camera_pkg std_msgs roscpp 3.进入camera_pkg/src目录,创建发布的文件并编写代码 touch camera_publisher.cpp vim camera_publisher.cpp 代码如下: #include <ros/ros.h> #include <opencv2/highgui/highgui.hpp> #includ

ShuiQunDeZhu的博客 966

ORB_SLAM3 安装、编译及测试

ORB_SLAM3 开源代码 论文地址:https://arxiv.org/abs/2007.11898 检查编译器 C++编译器这里用的是GCC。GCC原名GNU C Compiler,后来逐渐支持更多语言编译(C++, Fortran, Pascal, Objective-C, Java, Ada, Go等),所以变成了GNU Compiler Collection, 是一套由GNU工程开发的支持多种编程语言的编译器。 优点: 类Unix下的标准编译器,支持众多语言,支持交叉编译。 缺点:不支持Wind

清幽小路的博客 6896

RK3308实现usb webcamera功能

有时为了调试摄像头,但没有屏幕,就需要将摄像头数据通过USB输出在电脑端查看图像。主要就是将rk3308(RK 其他平台也可以)作为一个USB摄像头,可以插在Windows或linux PC上使用。本文将讲解驱动如何配置以及实现向usb web camera写数据再电脑端查看的demo 一、驱动配置 修改kernel对应的config文件 kernel config配置视原来配置进行修改,需要确保UVC配置的相关依赖都配置,否则可能不生效。 CONFIG_VIDEO_V4L2_SUBDEV_.

u013463707的专栏 3103

菜鸡的ROS学习笔记(image_transport)

菜鸡的ROS学习笔记(image_transport) image_transport 这一部分是搬运的ROS wiki中的介绍,主要是image_transport这个包的用法,之后我会把它尽量翻译成中文,希望各位大佬指教 Overview When working with images we often want specialized transport strategies, such ...

qq_43443531的博客 7962

usb web camera 资料

包括本人开发usb web camera 的相关资料,内容包含:USB Video Class及其实现,关于USB Class,USB Video Class 1_1.7 协议汇总,USB Camera CATA C Data 用catc抓取的usb stream!

使用USB摄像头(Webcam)拍照

你想不想使用webcam来自己拍张照片呢?首先你要通过capCreateCaptureWindow创建Capture 窗口,使用capDriverConnect连接WebCam,调用capSetVideoFormat设置视频格式,通过capSetCallbackOnFrame设置CallBack函数。int CWebCamCamera::StartWebCam(HWND hParent, in

phiger的专栏 1万+

usb camera (uvc)

在安卓手机上,接上USB在安卓手机上,接上USB摄像头,可以在手机上拍照和录像,并且存储

读取摄像头的ROS节点

作为一个ROS节点,读取摄像头数据,并将图像以消息的形式发布出去

ROS-节点发布/接收图片

ROS-节点发布/接收图片 ROS版本:indigo 摄像头:罗技C270(可以先用cheese来进行测试摄像头是否正常工作或者lsusb查看) 1 2 Indigo下OpenCV包的使用*  ROS从indigo开始就不再把opencv作为系统依赖包而是作为一个第三方包引入,如果直接使用会在rosmake编译阶段报错,no exist package “opencv2”,此时只需要在CMakeL...

weixin_41230454的博客 1687

USBCamera外接usb摄像头

分为eclipse和as两个版本,如果需要jni文件可在eclipse版里找到

error: /lib/x86_64-linux-gnu/libgdcmMSFF.so.3.0: undefined reference to `JpegLsReadHeader‘

warning: libcharls.so.2, needed by /lib/x86_64-linux-gnu/libgdcmMSFF.so.3.0, not found error: /lib/x86_64-linux-gnu/libgdcmMSFF.so.3.0: undefined reference to `JpegLsReadHeader' 找了半天资料,最后 apt-get install libcharls-dev解决

m0_38025027的博客 964

UVCDemo.rar

参见博客:http://blog.youkuaiyun.com/luzhenyuxfcy/article/details/50883910 主要实现了利用UVC驱动外界摄像头拍照、录像的功能

ansys workbench 静力结构分析 高阶教程

ansys workbench 静力结构分析 高阶教程 目录ansys workbench 静力结构分析 高阶教程新建工程模型导入设置材料模型简化: 主要内容: 材料设置、模型简化、网格细化、约束分析、接触设置、求解设置、报错处理、结果分析 基础教程: ansys workbench 静力结构分析 基础操作流程(入门) ansys版本: 19.0(16.0及以上均可) 参考资料: 推荐教学视频《有限元分析 张晔》(超详细 ???? )、ansys workbench 超级学习手册(查阅用) 说明:一些基

weixin_43434624的博客 5万+

ORBSLAM3编译错误/usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8:对‘uuid_generate@UUID_1.0’未定义的引用

/usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8:对‘uuid_generate@UUID_1.0’未定义的引用 /usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8:对‘uuid_parse@UUID_1.0’未定义的引用 /usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8:对‘uuid_unparse@UUID_1.0’未定义的引用

dbqbad的博客 1243

深入GD32/STM32引脚复用:你的JTAG/SWD接口是怎么‘消失’的?一次讲清原理与预防

本文深入解析GD32/STM32调试接口(JTAG/SWD)突然失效的原理与预防措施。通过分析MCU启动流程、引脚复用机制及典型错误代码模式,揭示调试接口'消失'的根本原因,并提供硬件设计检查清单、软件防护代码及开发流程优化方案,帮助开发者有效避免烧录失败问题。

weixin_42532938的博客 368

【深度学习】问题解决:运行._darknet命令时,报错缺少libopencv_highgui.so.3.2包

报错信息: ../darknet: error while loading shared libraries: libopencv_highgui.so.3.2: cannot open shared 经过安装数据库的折腾,丢失了libopencv_highgui.so.3.2:,导致darknet用不了,解决如下: 1、查看运行darknet需要哪些依赖库: 参考1 参考2 ldd darknet dj@dj:~/dingjing/darknet$ ldd darknet linux-vdso.so

qq_30885821的博客 5845

番茄(西红柿)叶片病害检测数据集:12k+图像,10类,yolo标注

本文介绍了包含12,250张图像的番茄叶片病害检测数据集,涵盖10种常见病害类型及健康叶片,采用YOLO格式标注。数据集具有三大核心价值:科研层面填补病害样本空白,推动算法创新;产业应用支持精准诊断、早期预警,降低损失20-40%;社会生态方面减少农药使用15-30%,助力绿色农业。该数据集作为AI与农业结合的数字基础设施,适用于计算机视觉项目、科研实验等场景。

m0_73878864的博客 1131

Windows 10/11下Drive Composer Pro 2.9.0完整安装与连接ACS880变频器实战教程

本文详细介绍了在Windows 10/11系统上安装Drive Composer Pro 2.9.0并连接ACS880变频器的完整教程。从系统环境准备、软件安装到许可证配置,再到USB、蓝牙和以太网三种连接方式的实战操作,帮助工业自动化工程师快速掌握ABB变频器的调试技巧。

weixin_32956805的博客 522
上一篇: Ubuntu14.04下ROS indigo Eclipse开发环境搭建
下一篇: <leetcode系列> Count And Say
小贝也沉默
博客等级 码龄16年 281粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值