如何在Ubuntu16.04下在QT界面下调用ROS的librviz?

一、 问题背景

 由于项目需要在qt下调用ros的librviz显示地图,Ubuntu14.04,ROS indigo,qt5.9.1,并已安插件ros_qtc_plugin,先于笔记本上调出来了librviz教程的界面,没问题,后来移植到Ubuntu16.04上时先是出现找不到default_plugin 插件,查了好久发现是kinetic的rviz是基于qt5,而indigo上的rviz是基于qt4(后来才发现),所以直接将对于indigo版本的librviz tutorial 移到kinetic下是肯定不行的,所以又去github上找到对应kinetic的教程,原来在CMakeLists.txt文件中加上了判断rviz_QT_VERSION,这时这才知道要用qt5的库来编译,用过catkin_create_qt_pkg 命令的应该知道,该命令直接创建的带Qt界面的ROS包是基于qt4的(反正我的是qt4这样,或许可以配置为qt5吧,有知道的可以留言),所以要想在带qt界面的ros项目里面调用librviz的关键就是更改CMakeLists.txt文件中的Qt库为Qt5,到此看懂了的,可以去自己尝试修改了!下面的详细步骤请略过,水平有限,有不对之处,还请指正!

librviz 源码: https://github.com/ros-visualization/visualization_tutorials/tree/kinetic-devel/librviz_tutorial
librviz 教程:  http://docs.ros.org/fuerte/api/librviz_tutorial/html/

二、 详细步骤

1. 创建工作空间

建立空间 catkin_qt,并创建带界面的ROS package test3,在界面上添加libriz 按钮,运行可以出现界面

2 .运行librviz

ok,下一步按照librviz教程建个包在运行一下,直接把代码复制过来就行,可以出现以下界面证明没问题

3 . 添加librviz到test3 package

将myviz.h放到test3包的include头文件下,myviz.cpp放到src文件夹下,在main_windows.cpp,和myviz.cpp文件中添加头文件

#include "../include/test3/myviz.h"
打开main_window.ui文件,在librviz按钮上右键点击转到槽,在实现函数中创建MyViz的类的对象,注意要包含在namespace test3 里面
...
void MainWindow::on_pushButton_clicked()
{
    MyViz* myviz = new MyViz();
    myviz->show();
    myviz->resize(600,400);
    myviz->setWindowTitle("Mapping Show");
}

}  // namespace test3

4.修改CMakeLists.txt 文件

这才是最关键的一步,废话不多说,直接放代码,对照原来的CMakeLists.txt文件就可以发现改了哪些地方,已标注added,deleted

cmake_minimum_required(VERSION 2.8.0)
project(test3)
set(CMAKE_INCLUDE_CURRENT_DIR ON)#added

find_package(catkin REQUIRED COMPONENTS  roscpp rviz)#deleted qt_build added rviz
find_package(Qt5 REQUIRED Core Widgets)#added
set(QT_LIBRARIES Qt5::Widgets)#added
include_directories(${catkin_INCLUDE_DIRS})

catkin_package()

#rosbuild_prepare_qt4(QtCore QtGui) #deleted

file(GLOB QT_FORMS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ui/*.ui)
file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/test3/*.hpp *.h)#added *.h

QT5_ADD_RESOURCES(QT_RESOURCES_CPP ${QT_RESOURCES})
QT5_WRAP_UI(QT_FORMS_HPP ${QT_FORMS})
QT5_WRAP_CPP(QT_MOC_HPP ${QT_MOC}) #change QT4 to QT5

file(GLOB_RECURSE QT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)

add_executable(test3 ${QT_SOURCES} ${QT_RESOURCES_CPP} ${QT_FORMS_HPP} ${QT_MOC_HPP})
target_link_libraries(test3 ${QT_LIBRARIES} ${catkin_LIBRARIES})
install(TARGETS test3 RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

5.修改package.xml

#deleted
#<build_depend>qt_build</build_depend>
#  <build_depend>libqt4-dev</build_depend>
# <run_depend>qt_build</run_depend>
# <run_depend>libqt4-dev</run_depend>
#added
<build_depend>rviz</build_depend>
<run_depend>rviz</run_depend>
<build_depend>qtbase5-dev</build_depend>
<run_depend>libqt5-core</run_depend>
<run_depend>libqt5-gui</run_depend>
<run_depend>libqt5-widgets</run_depend>

三、 运行结果

点击界面librviz按钮即可出现librviz教程窗口


猜你喜欢

转载自blog.csdn.net/qq_30460905/article/details/79210300