本文介绍如何将FLIR品牌的相机应用于ROS系统,将相机实时的数据以rostopic实时广播:

系统平台:Ubuntu16.04 LTS   ROS Kinetic

依赖:OpenCV(本例中所用版本为2.9), cv_bridge

硬件:FLIR Grasshopper GS3-PGE-23S6C-C

1.首先安装相机在Ubuntu16.04下的驱动:

本例直接安装于买设备时自带的安装盘,于官网也可以下载到相关驱动:

网址:www.flir.com/mv-techsupport/downloads

找到相同设备的下载列表,选择对应的系统版本即可

安装完成后,控制台输入flycap有软件弹出代表安装成功

点击Auto Force IP,可以为设备自动分配IP,可以通过flycap看到设备

点击确定,可以进入照相模式

2.ROS代码编写:

参考地址:https://blog.csdn.net/qq_27050183/article/details/51141998

https://blog.csdn.net/lixujie666/article/details/83303836

项目中用QT编写代码,用QMake的pro文件配置依赖目录:

 TEMPLATE = app
CONFIG += console c++ QMAKE_CXXFLAGS += -std=c++
CONFIG -= app_bundle
CONFIG -= qt SOURCES += \
main.cpp INCLUDEPATH += /usr/include/flycapture INCLUDEPATH += /usr/local/include/opencv2 LIBS += /usr/local/lib/libopencv_*.so \ LIBS += /usr/lib/libflycapture*.so LIBS += /usr/lib/libcv_bridge.so #---------------------ROS DEPENDS---------------------#
INCLUDEPATH += /opt/ros/kinetic/include DEPENDPATH += /opt/ros/kinetic/include LIBS += -L/opt/ros/kinetic/lib \
-L/usr/local/lib \
-lroscpp \
-lrospack \
-lpthread \
-lrosconsole \
-lrosconsole_log4cxx \
-lrosconsole_backend_interface \
-lxmlrpcpp \
-lroscpp_serialization \
-lrostime \
-lcpp_common \
-lroslib \
-ltf \ LIBS += -L /usr/lib \
-l Ice LIBS += /opt/ros/kinetic/lib/libroslib.so \
/usr/local/lib/liblog4cplus.so #---------------------ROS DEPENDS---------------------#

编写C++通信代码:

 #include <iostream>
#include <stdlib.h>
#include <sensor_msgs/Image.h>
#include <cv_bridge/cv_bridge.h>
#include <ros/ros.h>
using namespace std; #include "FLIR.h" using namespace FLIR;
unsigned int width=;
unsigned int height=; int main(int argc, char ** argv)
{
if(argc==){
width=atoi(argv[]);
height=atoi(argv[]);
}
GigECamera cam;
CameraInfo camInfo[];
unsigned int numCameras;
FlyCapture2::Error error;
error = BusManager::DiscoverGigECameras(camInfo, &numCameras);
if (error != PGRERROR_OK)
{
PrintError(error);
return false;
}
IPAddress ipAddress=camInfo[camIndex-].ipAddress;
sprintf(ipStr,"%d.%d.%d.%d",ipAddress.octets[],ipAddress.octets[],ipAddress.octets[],ipAddress.octets[]);
BusManager busMgr;
error=busMgr.GetCameraFromIPAddress(ipAddress,&guid);
if (error != PGRERROR_OK)
{
PrintError(error);
return false;
}
error = cam.Connect(&guid);
if (error != PGRERROR_OK)
{
PrintError(error);
return false;
} GigEImageSettingsInfo imageSettingsInfo;
error = cam.GetGigEImageSettingsInfo(&imageSettingsInfo);
if (error != PGRERROR_OK)
{
PrintError(error);
return false;
}
GigEImageSettings imageSettings;
imageSettings.offsetX = (unsigned int)(imageSettingsInfo.maxWidth-width)/;
imageSettings.offsetY = (unsigned int)(imageSettingsInfo.maxHeight-height)/;
imageSettings.height = height;
imageSettings.width = width;
imageSettings.pixelFormat = PIXEL_FORMAT_RGB;
error = cam.SetGigEImageSettings(&imageSettings);
if (error != PGRERROR_OK)
{
PrintError(error);
return false;
}
error = cam.StartCapture();
if (error != PGRERROR_OK)
{
PrintError(error);
return false;
}
cv::Mat img;
cam.RetrieveBGR(img);
ros::init(argc, argv, "camera_node");
ros::NodeHandle nh;
ros::Publisher pub_camera = nh.advertise<sensor_msgs::Image>("flir_camera", );
ros::Rate r = ros::Rate();
cv_bridge::CvImage cvi;
cvi.header.frame_id = "image";
cvi.encoding = "bgr8";
while (ros::ok()){
cam.RetrieveBGR(img);
sensor_msgs::Image image;
cvi.image = img;
cvi.toImageMsg(image);
pub_camera.publish(image);
r.sleep();
}
return ;
}

编译,运行

3.完成效果:

发布消息类型为sensor_msgs::Image的话题,话题名为"flir_camera",可以用rqt_image_view查看效果:

ROS使用FLIR品牌的相机的更多相关文章

  1. 相机标定 matlab opencv ROS三种方法标定步骤(3)

    三 ,  ROS 环境下 如何进行相机标定 刚开始做到的时候遇到一些问题没有记录下来,现在回头写的时候都是没有错误的结果了,首先使用ROS标定相机, 要知道如何查看节点之间的流程图  rosrun r ...

  2. 【项目实战】自备相机+IMU跑通Vins-Mono记录

    前言 初次接触SLAM,公司要求用自己的设备来跑通vinsmono这个程序,虽然已经跑通了别人的数据包,但是真正自己上手来运行这个程序,发现真的是困难重重,特意在此记载下来整个过程,以供大家参考. 我 ...

  3. 在DirectShow的视频图像上叠加线条和文字

    在DirectShow的视频图像上叠加线条和文字 最近一直在从事工业测量方面的开发工作,难免会用到各种各样的相机,其中支持DX的USB相机开发起来比较方便,由于工作需要经常要在视频图像上叠加线条和文字 ...

  4. 使用Java程序读取JPG Tif等格式图片的exif信息

    package com.util; import java.io.File;import java.util.Iterator; import com.drew.imaging.ImageProces ...

  5. halcon开发必读

    关于HALCON的新手入门问题简答(1) 无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异.什么原因引起? 答:初步诊断是,显示的时候调用的颜色查找表存 ...

  6. 相机标定 matlab opencv ROS三种方法标定步骤(1)

    一 . 理解摄像机模型,网上有很多讲解的十分详细,在这里我只是记录我的整合出来的资料和我的部分理解 计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系,实际上就是要用矩阵来表 示各个 ...

  7. ZED 相机 && ORB-SLAM2安装环境配置与ROS下的调试

    注:1. 对某些地方进行了更新(红色标注),以方便进行配置. 2. ZED ROS Wrapper官方github已经更新,根据描述新的Wrapper可能已经不适用与Ros Indigo了,如果大家想 ...

  8. ROS与深度相机入门教程-在ROS使用kinect v1摄像头

    ROS与深度相机入门教程-在ROS使用kinect v1摄像头 说明: 介绍在ros安装和使用kinect v1摄像头 介绍freenect包 安装驱动 deb安装 $ sudo apt-get in ...

  9. ROS标定IDS相机

    参考 ROS 相机标定http://blog.csdn.net/ArtistA/article/details/51125560 ROS里的标定程序只要使用了OPNCV的标定程序: opencv 相机 ...

随机推荐

  1. Appium TestNg Maven Android Eclipse java自动化环境搭建

    1.环境准备 1)Eclipse + maven + appium + TestNg 确保已经在Eclipse 上面安装maven TestNg的插件 2)打开Eclipse,新建一个maven项目 ...

  2. oracle 夸服务器、数据库查询

      create public database link 连接名 connect to 需要连接数据库名 identified by  需要连接数据库密码 USING '(DESCRIPTION = ...

  3. 模仿WC.exe的功能实现--node.js

    Github项目地址:https://github.com/102derLinmenmin/myWc WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要 ...

  4. 使用JS判断不同的终端设备

    const ua: string = window.navigator.userAgent; const isWeixin: boolean = /MicroMessenger/i.test(ua); ...

  5. dockerfile语法规则

    编写Dockerfile 在前面的章节,我们学习了通过docker命令来下载镜像,运行镜像,在容器中部署自己的程序,最后将容器提交到自己的镜像中.但是,这并不是Docker推荐的镜像构建方式.在这一章 ...

  6. linux 下mysql多实例安装

    1.软件下载 https://dev.mysql.com/downloads/file/?id=479096 免编译二进制包 mysql-5.6.21-linux-glibc2.5-x86_64.ta ...

  7. Java垃圾回收算法和内存分配策略

    垃圾回收算法和内存分配策略 Java垃圾回收 垃圾收集,也就是GC并不是Java的伴生物,而对于GC的所需要完成任务主要就是: 1.哪些内存是需要回收的? 2.何时去回收这些内存? 3.以何种方式去回 ...

  8. Jsoup解析获取品花社图片

    Jsoup解析获取品花社图片 emmmm,闲着没事,想起了之前一个学长做的品花社的APP,刚好之前有了解Jsoup这个Java解析HTML的库,便花了三四个小时写了这个东西,把网站上大大小小的MM的图 ...

  9. oracle数据库自学笔记(持续更新中……)

    以前的项目都是使用mysql数据库开发的,如今进了新的公司,开始接触到了Oracle数据库,而自己以前没有接触过,就自己挤时间来学习一下. 一.关系型数据库的概念 关系型数据理论由E.F.Codd博士 ...

  10. 2ci