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 相机 ...
随机推荐
- what API can do
APIs for manipulating documents loaded into the browser. The most obvious example is the DOM (Docume ...
- Mac OS X 绑定80端口,不装nginx的小技巧
Mac OS X 因为要绑定80端口需要ROOT权限, 但是如果用root权限启动eclipse或tomcat又会造成, 启动创建的各类文件是root的,普通用户无法删除. 为此, 我们可以通过pfc ...
- hdu6415 记忆化搜索或找规律
Rikka with Nash Equilibrium Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Sub ...
- CSAPP之阅读笔记-计算机系统漫游(1)
最近在看CSAPP(深入理解计算机系统第二版),其实最新版是第三版.但是,我看了一下价格100多大洋,于是去老夫子旧书网上买了本第二版的,花了30多块钱.哈哈. 网上看了一些关于此书的书评,都说是本好 ...
- MVP之高级MVP架构封装
MVP之高级MVP架构封装 No MVP: 我们一般会这样写: public class MainActivity extends AppCompatActivity { private EditTe ...
- java第六次课后作业
class Check{ public boolean validate(String name, String password){ if(name.equals("shenhaochen ...
- Ehlib 学习
似乎是为了垂直滚动条 SumList.Active := True; SumList.VirtualRecords := True; TDBGridEh 设计时 It is useful to use ...
- qr-mili Tekniskt stöd
qr-mili Är ett QR-kodverktyg Identifiera enkelt QR-koder Generera QR-kod Skapa en QR-kod med logotyp ...
- MySQL索引的原理,B+树、聚集索引和二级索引的结构分析
索引是一种用于快速查询行的数据结构,就像一本书的目录就是一个索引,如果想在一本书中找到某个主题,一般会先找到对应页码.在mysql中,存储引擎用类似的方法使用索引,先在索引中找到对应值,然后根据匹配的 ...
- layui在open弹出层回显,解决动态select数据回显问题
//监听数据表格工具条 table.on('tool(contentList)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 l ...