ROS使用FLIR品牌的相机
本文介绍如何将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品牌的相机的更多相关文章
- 相机标定 matlab opencv ROS三种方法标定步骤(3)
三 , ROS 环境下 如何进行相机标定 刚开始做到的时候遇到一些问题没有记录下来,现在回头写的时候都是没有错误的结果了,首先使用ROS标定相机, 要知道如何查看节点之间的流程图 rosrun r ...
- 【项目实战】自备相机+IMU跑通Vins-Mono记录
前言 初次接触SLAM,公司要求用自己的设备来跑通vinsmono这个程序,虽然已经跑通了别人的数据包,但是真正自己上手来运行这个程序,发现真的是困难重重,特意在此记载下来整个过程,以供大家参考. 我 ...
- 在DirectShow的视频图像上叠加线条和文字
在DirectShow的视频图像上叠加线条和文字 最近一直在从事工业测量方面的开发工作,难免会用到各种各样的相机,其中支持DX的USB相机开发起来比较方便,由于工作需要经常要在视频图像上叠加线条和文字 ...
- 使用Java程序读取JPG Tif等格式图片的exif信息
package com.util; import java.io.File;import java.util.Iterator; import com.drew.imaging.ImageProces ...
- halcon开发必读
关于HALCON的新手入门问题简答(1) 无论读入什么图像,读入图像显示效果明显和原始图像不一致,哪怕是从相机读入的图像,也是明显颜色差异.什么原因引起? 答:初步诊断是,显示的时候调用的颜色查找表存 ...
- 相机标定 matlab opencv ROS三种方法标定步骤(1)
一 . 理解摄像机模型,网上有很多讲解的十分详细,在这里我只是记录我的整合出来的资料和我的部分理解 计算机视觉领域中常见的三个坐标系:图像坐标系,相机坐标系,世界坐标系,实际上就是要用矩阵来表 示各个 ...
- ZED 相机 && ORB-SLAM2安装环境配置与ROS下的调试
注:1. 对某些地方进行了更新(红色标注),以方便进行配置. 2. ZED ROS Wrapper官方github已经更新,根据描述新的Wrapper可能已经不适用与Ros Indigo了,如果大家想 ...
- ROS与深度相机入门教程-在ROS使用kinect v1摄像头
ROS与深度相机入门教程-在ROS使用kinect v1摄像头 说明: 介绍在ros安装和使用kinect v1摄像头 介绍freenect包 安装驱动 deb安装 $ sudo apt-get in ...
- ROS标定IDS相机
参考 ROS 相机标定http://blog.csdn.net/ArtistA/article/details/51125560 ROS里的标定程序只要使用了OPNCV的标定程序: opencv 相机 ...
随机推荐
- sqlserver 查询表锁死,解除表锁死
查询锁死的表名以及ID select request_session_id id, OBJECT_NAME(resource_associated_entity_id) tableName FROM ...
- WPF前台界面显示“未将对象引用设置到对象的实例”
在做即时通信项目中,使用WPF的MVVM模式,如果在前台绑定VM,经常会显示波浪线,鼠标放上去提示未将对象引用设置到对象的实例,但程序能正常运行,后来发现如果前台不绑定VM,在后台cs里绑定就不会出现 ...
- python3 LDA主题模型以及TFIDF实现
import codecs #主题模型 from gensim import corpora from gensim.models import LdaModel from gensim import ...
- (转)Jquery on()事件委派
今天浏览jQuery的deprecated列表,发现live()和die()在里面了,赶紧看了一下,发现从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一 ...
- WebService调用SSAS教程
WebService调用SSAS教程 一.创建SSAS项目 使用SQL Server Business Intelligence Development Studio新建Analysis Servic ...
- echarts 自适应方法 x和y x2和y2
grid:{ x:65, y:20, x2:30, y2:30},
- vmstat监控工具
vmstat监控工具 一.前言 很显然从名字中我们就可以知道vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过vmstat来发现系统中的瓶颈呢?在回答这个问题前 ...
- webbench安装使用
简介 运行在linux上的一个性能测试工具 官网地址:http://home.tiscali.cz/~cz210552/webbench.html 如果不能打开的话,也可以直接到网盘下载:http:/ ...
- day42-python消息队列一
消息队列”是在消息的传输过程中保存消息的容器.消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不通的进程.生产者往管道中写消息,消费者从管道中读消息.操作系统提供了很 ...
- 21. Merge Two Sorted Lists★
题目内容:Merge two sorted linked lists and return it as a new list. The new list should be made by splic ...