使用QT5加载ROS和Opencv的方法以及遇到的一些问题

一、系统配置

ubuntu16.04 + ROS-Kinetic + Qt5.8.0 + Opencv3.3.1

1、利用Qt加载ROS的库

由于本人不太习惯qtcreator-plugin-ros的使用方法,所以想直接用Qtcreator直接导入ROS的库来运行ROS的Code。
导入的部分主要都是在Qt项目的pro文件中完成的。这里参考了一些前辈的教程,具体链接如下:

https://blog.csdn.net/ipfpm/article/details/83504491

其中主要有两部分工作,一部分是添加ROS包的include即头文件,另一部分是lib文件即链接库。

2、利用Qt加载Opencv的库

参考链接:

https://blog.csdn.net/wanzhen4330/article/details/82622664

同样的方法,一个是添加Opencv的 INCLUDEPATH,一个是添加Opencv的LIBS。

二、遇到的问题

由于在我的项目中需要在Qt的界面显示ROS发布的视频流,所以我参考了这位博主的教程

如何在Qt界面上显示ROS发布的视频消息!
https://blog.csdn.net/qq_30460905/article/details/80489841

但是他的项目是用qtcreator-plugin-ros框架完成的,并没有pro文件,所以在这方面有些差异。

参照着它的代码我写好之后报了如下的错误:

undefined reference to "image_import::....."
undefined reference to "cv_bridge::........"

查询资料后得知,这两个报错的模块都是ROS的头文件,因为ROS的INCLUDEPATH的设置正确,所以在写代码的过程中都能把文件包含到工程当中来,但是在编译过程中由于缺少上述头文件的源文件,所以编译失败。

而缺少源文件的原因是,在用QT导入ROS库的过程中,上述教程中添加的库文件并不全。在LIBS这一项缺少库文件。如果使用上述两个模块应该在LIBS这加上

LIBS += -L /opt/ros/kinetic/lib -lcv_bridge -limage_transport

加上这句话后,编译成功!

LIBS中的-l 和 -L参数
转https://blog.csdn.net/lieyanhaipo/article/details/17056011
-l 参数是用来指定程序要连接的库, -l参数紧接着就是库名, 库名和真正的库文件名的差别, 以数学库为例,其库名为 m , 其 库文件名为 libm.so,也就是把库名头文件的lib 和 .so 去掉就是库名。 放在/lib, /usr/lib 和 /usr/local/lib 中的库直接使用参数 -l 链接就可以了, 如果没有放在这三个文件中, 那么我们就要使用-L 加上库文件所在的文件夹, 然后再使用 -l 加上库名就好了。

你可能感兴趣的:(学习过程,ROS,QT)