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 相机 ...
随机推荐
- Appium TestNg Maven Android Eclipse java自动化环境搭建
1.环境准备 1)Eclipse + maven + appium + TestNg 确保已经在Eclipse 上面安装maven TestNg的插件 2)打开Eclipse,新建一个maven项目 ...
- oracle 夸服务器、数据库查询
create public database link 连接名 connect to 需要连接数据库名 identified by 需要连接数据库密码 USING '(DESCRIPTION = ...
- 模仿WC.exe的功能实现--node.js
Github项目地址:https://github.com/102derLinmenmin/myWc WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要 ...
- 使用JS判断不同的终端设备
const ua: string = window.navigator.userAgent; const isWeixin: boolean = /MicroMessenger/i.test(ua); ...
- dockerfile语法规则
编写Dockerfile 在前面的章节,我们学习了通过docker命令来下载镜像,运行镜像,在容器中部署自己的程序,最后将容器提交到自己的镜像中.但是,这并不是Docker推荐的镜像构建方式.在这一章 ...
- linux 下mysql多实例安装
1.软件下载 https://dev.mysql.com/downloads/file/?id=479096 免编译二进制包 mysql-5.6.21-linux-glibc2.5-x86_64.ta ...
- Java垃圾回收算法和内存分配策略
垃圾回收算法和内存分配策略 Java垃圾回收 垃圾收集,也就是GC并不是Java的伴生物,而对于GC的所需要完成任务主要就是: 1.哪些内存是需要回收的? 2.何时去回收这些内存? 3.以何种方式去回 ...
- Jsoup解析获取品花社图片
Jsoup解析获取品花社图片 emmmm,闲着没事,想起了之前一个学长做的品花社的APP,刚好之前有了解Jsoup这个Java解析HTML的库,便花了三四个小时写了这个东西,把网站上大大小小的MM的图 ...
- oracle数据库自学笔记(持续更新中……)
以前的项目都是使用mysql数据库开发的,如今进了新的公司,开始接触到了Oracle数据库,而自己以前没有接触过,就自己挤时间来学习一下. 一.关系型数据库的概念 关系型数据理论由E.F.Codd博士 ...
- 2ci