博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ROS使用FLIR品牌的相机
阅读量:7226 次
发布时间:2019-06-29

本文共 4176 字,大约阅读时间需要 13 分钟。

本文介绍如何将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代码编写:

参考地址:

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

 

1 TEMPLATE = app 2 CONFIG += console c++11 3  4 QMAKE_CXXFLAGS += -std=c++11 5 CONFIG -= app_bundle 6 CONFIG -= qt 7  8 SOURCES += \ 9         main.cpp10 11 12 13 INCLUDEPATH += /usr/include/flycapture14 15 INCLUDEPATH += /usr/local/include/opencv216 17 LIBS += /usr/local/lib/libopencv_*.so \18 19 LIBS += /usr/lib/libflycapture*.so20 21 LIBS += /usr/lib/libcv_bridge.so22 23 #---------------------ROS DEPENDS---------------------#24 INCLUDEPATH += /opt/ros/kinetic/include25 26 DEPENDPATH += /opt/ros/kinetic/include27 28 LIBS += -L/opt/ros/kinetic/lib \29         -L/usr/local/lib \30         -lroscpp \31         -lrospack \32         -lpthread \33         -lrosconsole \34         -lrosconsole_log4cxx \35         -lrosconsole_backend_interface \36         -lxmlrpcpp \37         -lroscpp_serialization \38         -lrostime \39         -lcpp_common \40         -lroslib \41         -ltf \42 43 LIBS += -L /usr/lib \44         -l Ice45 46 LIBS += /opt/ros/kinetic/lib/libroslib.so \47         /usr/local/lib/liblog4cplus.so48 49 #---------------------ROS DEPENDS---------------------#

 

编写C++通信代码:

 

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 8 #include "FLIR.h" 9 10 using namespace FLIR;11 unsigned int width=640;12 unsigned int height=480;13 14 int main(int argc, char ** argv)15 {16 if(argc==3){17 width=atoi(argv[1]);18 height=atoi(argv[2]);19 }20 GigECamera cam;21 CameraInfo camInfo[10];22 unsigned int numCameras;23 FlyCapture2::Error error;24 error = BusManager::DiscoverGigECameras(camInfo, &numCameras);25 if (error != PGRERROR_OK)26 {27 PrintError(error);28 return false;29 }30 IPAddress ipAddress=camInfo[camIndex-1].ipAddress;31 sprintf(ipStr,"%d.%d.%d.%d",ipAddress.octets[0],ipAddress.octets[1],ipAddress.octets[2],ipAddress.octets[3]);32 BusManager busMgr;33 error=busMgr.GetCameraFromIPAddress(ipAddress,&guid);34 if (error != PGRERROR_OK)35 {36 PrintError(error);37 return false;38 }39 error = cam.Connect(&guid);40 if (error != PGRERROR_OK)41 {42 PrintError(error);43 return false;44 }45 46 GigEImageSettingsInfo imageSettingsInfo;47 error = cam.GetGigEImageSettingsInfo(&imageSettingsInfo);48 if (error != PGRERROR_OK)49 {50 PrintError(error);51 return false;52 }53 GigEImageSettings imageSettings;54 imageSettings.offsetX = (unsigned int)(imageSettingsInfo.maxWidth-width)/2;55 imageSettings.offsetY = (unsigned int)(imageSettingsInfo.maxHeight-height)/2;56 imageSettings.height = height;57 imageSettings.width = width;58 imageSettings.pixelFormat = PIXEL_FORMAT_RGB;59 error = cam.SetGigEImageSettings(&imageSettings);60 if (error != PGRERROR_OK)61 {62 PrintError(error);63 return false;64 }65 error = cam.StartCapture();66 if (error != PGRERROR_OK)67 {68 PrintError(error);69 return false;70 }71 cv::Mat img;72 cam.RetrieveBGR(img);73 ros::init(argc, argv, "camera_node");74 ros::NodeHandle nh;75 ros::Publisher pub_camera = nh.advertise
("flir_camera", 1);76 ros::Rate r = ros::Rate(1);77 cv_bridge::CvImage cvi;78 cvi.header.frame_id = "image";79 cvi.encoding = "bgr8";80 while (ros::ok()){81 cam.RetrieveBGR(img);82 sensor_msgs::Image image;83 cvi.image = img;84 cvi.toImageMsg(image);85 pub_camera.publish(image);86 r.sleep();87 }88 return 0;89 }

 

编译,运行

 

 

3.完成效果:

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

 

转载于:https://www.cnblogs.com/Asp1rant/p/10574204.html

你可能感兴趣的文章
IOS11 光标错位问题
查看>>
如何设计用户登录
查看>>
linux安装mysql5.7.19
查看>>
Zookeeper+ActiveMQ 集群实现
查看>>
加权有向图问题2----多源最短路径问题(Floyd算法)和关键路径算法
查看>>
logback logback.xml常用配置详解(三) <filter>
查看>>
KgMall B2B/B2B2c/C2C版店铺商号初始化
查看>>
Linux内核的ioctl函数学习
查看>>
Liunx Shell入门
查看>>
Thread的中断
查看>>
linux --- 内存管理
查看>>
PostgreSQL
查看>>
CPU 超线程、多核
查看>>
用ASCII码显示string.xml中的特殊字符
查看>>
网站301跳转到新域名
查看>>
codewars020: The Clockwise Spiral 数字顺时针螺旋矩阵
查看>>
ios 下拉刷新
查看>>
Django在Windows系统下的安装配置
查看>>
懒到极致:对mybatis的进一步精简
查看>>
Android学习之OTA Update
查看>>