ROS系統學習13---界面開發1

在ROS系統中,我們可以用RVIZ直接看處理的結果,比較方便。但RVIZ可以展示的信息不夠全面,可定製化程度也不高,因此在要求比較高的需求中只能自己開發界面。而開發界面的工具則一般選用QT(似乎有人也使用PYQT來整活,但感覺速度應該跟不太上)。具體操作如下:

安裝Qt5

一般安裝完整版的ROS會自帶Qt4,如果只想做簡單的界面開發,Qt4也完全足夠,可能出於這種原因,使用下面兩個命令安裝帶QT界面的ROS包:

sudo apt-get install ros-melodic-qt-ros
sudo apt-get install ros-melodic-qt-build

之後通過命令

catkin_create_qt_pkg xxx

創建帶Qt界面的ROS包xxx,這個創建的包就是QT4版本的。

然而本人希望在Qt中使用librviz這個庫,而這個庫在ROS的kinetic以及以上版本是基於Qt5的(一個博客說的,沒有去查源頭,但本人在Qt4上編譯確實不成功,而且Qt5已經出了這麼久了,老用Qt4也不太對頭),因此事情就變得比較僵硬。本人花了兩天時間嘗試把這個包改成Qt5版本,但可能是水平有限的緣故,差點把系統搞崩了都沒改成功。因此本人直接放棄這種直接創建帶QT界面的ROS包的方式,選擇直接加載Qt庫的方法進行界面開發。總之不管怎麼說,需要先安裝Qt5,安裝的方法可以參考這裏,裝完就完事了。

安裝帶有ROS插件的Qt Creator

上面安裝Qt5的時候是可以選擇安裝Qt Creator的,但需要做一下配置。如果不想做這一步可以到這裏下載帶有ROS插件的Qt Creator。這裏用Qt Creator的原因是它可以幫我們可視化的管理Qt的工程,比如在界面上增加按鈕之類的,這個VSCode做不到。但因爲本人喜歡VSCode,因此用Qt Creator做的GUI,而具體的操作是用VSCode寫的,如果你熟悉Qt Creator則完全不需要這麼搞。

創建帶有Qt界面的ROS包

由於不太熟悉這套東西,本人直接是去下載了第一篇參考文章中作者弄好的"qt_ros_test"包,然後往ROS空間中一扔,把CMakeLists.txt修改如下:

cmake_minimum_required(VERSION 2.8.11)
project(qt_ros_test)

#添加QT5的安裝位置
set(Qt5_DIR /home/weixinhum/Qt5.9.8/5.9.8/gcc_64/lib/cmake/Qt5)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)
find_package(Qt5Widgets REQUIRED)
qt5_wrap_cpp(MOC src/qt_ros_test.h)
qt5_generate_moc(src/qt_ros_test.h qt_ros_test.moc)
qt5_wrap_ui(UIC src/qt_ros_test.ui)

## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()


###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if you package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
   INCLUDE_DIRS
#  LIBRARIES client_plugin
   CATKIN_DEPENDS roscpp std_msgs
#  DEPENDS system_lib
)

###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
  INCLUDE_DIRS include
  ${CMAKE_CURRENT_BINARY_DIR}/..
  ${catkin_INCLUDE_DIRS}
)

## Declare a C++ executable
add_executable(${PROJECT_NAME}_node src/main.cpp src/qt_ros_test.cpp src/qt_ros_test.h src/qt_ros_test.ui ${MOC} ${UIC} qt_ros_test.moc)
target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES} Qt5::Widgets)

就可以了,效果如下:
在這裏插入圖片描述

修改界面

修改界面需要使用之前安裝的Qt Creator將程序包導入,“文件”->“打開文件或項目”->選擇剛剛改的那個CMakeLists.txt文件即可。導入後選擇項目,然後將"CMAKE_PREFIX_PATH"的內容改爲"/opt/ros/melodic",然後點擊"Apply Configuration Changes"即可。

在這裏插入圖片描述
接下來就可以用Qt Creator整界面了,本人加了個按鈕如下:
在這裏插入圖片描述

使用librviz(這一步並不是必須的,而且在本人後來的嘗試中發現了其確實不太好用,想要了解情況可以看後續的第二篇文章介紹。另外,如果不用這個,除非像作者一樣有着強烈喜新厭舊的個性,用Qt4其實也OK)

rviz是ROS極爲有用的數據分析工具,可以用來看算法運行的情況等等。如果用Qt做界面,而自己又不想去寫一堆代碼來使用OpenGL做數據展示,那麼調用librviz來做這件事情就顯得非常有必要。在調用之前要確認已經把ROS+Qt5的環境搭建完成,如上面介紹的那樣。

之後本着能照抄絕不自己寫的原則,通過參考這個教程,到guihub上下載"myviz.h"和"myviz.cpp"兩個文件往ROS包裏面扔。然後在"qt_ros_test.cpp"引用"myviz.h",在構造函數中調用librviz即可。調用很簡單,代碼如下:

MyViz* myviz = new MyViz();
myviz->show();

修改CMakeLists.txt如下:

cmake_minimum_required(VERSION 2.8.11)
project(qt_ros_test)

#添加QT5的安裝位置
set(Qt5_DIR /home/weixinhum/Qt5.9.8/5.9.8/gcc_64/lib/cmake/Qt5)

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  rviz
)
find_package(Qt5 REQUIRED Core Widgets)#added
find_package(Qt5Widgets REQUIRED)


set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)

qt5_wrap_cpp(MOC src/qt_ros_test.h)
qt5_generate_moc(src/qt_ros_test.h qt_ros_test.moc)
qt5_wrap_ui(UIC src/qt_ros_test.ui)

## Uncomment this if the package has a setup.py. This macro ensures
## modules and global scripts declared therein get installed
## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
# catkin_python_setup()


###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if you package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
   INCLUDE_DIRS
#  LIBRARIES client_plugin
   CATKIN_DEPENDS roscpp std_msgs
#  DEPENDS system_lib
)

###########
## Build ##
###########

## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
  INCLUDE_DIRS include
  ${CMAKE_CURRENT_BINARY_DIR}/..
  ${catkin_INCLUDE_DIRS}
)

## Declare a C++ executable
add_executable(${PROJECT_NAME}_node src/myviz.cpp src/main.cpp src/qt_ros_test.cpp src/qt_ros_test.h src/qt_ros_test.ui ${MOC} ${UIC} qt_ros_test.moc)
target_link_libraries(${PROJECT_NAME}_node ${catkin_LIBRARIES} Qt5::Widgets)

運行效果如下:
在這裏插入圖片描述
到此就把調用librviz也搞定了,這篇搭建框架的文章也到此告一段落。後面的文章,我們將具體介紹怎麼用我們上面介紹的這些工具,去做出一個比較給力的界面。

這篇配置好的ros包也上傳了,如果有興趣的老哥可以去下載來看看。

ROS包下載:https://download.csdn.net/download/oHanTanYanYing/12420858

參考文章:

https://blog.csdn.net/u014610460/article/details/79355533

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

https://blog.csdn.net/LOVE1055259415/article/details/80575432

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章