ROS講座69 Qtを使う1(ビルドの設定)


環境

この記事は以下の環境で動いています。

項目
CPU Core i5-8250U
Ubuntu 20.04
ROS Noetic
Qt 5.12.8

インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。

概要

GUIを1から作るのは大変などでいくつかのツールがあります。その中でもROSではQtがよく使われます。
ROSのGUIプログラムであるrqtは「Ros QT」という意味です。またRvizにもQtは使われています。
本来QtのプログラムはQtの統合開発環境(QtCreator)とビルドシステム(qmake)でビルドすることが多いのですが、ここでは統合開発環境を使わずにQtのプログラムを作成して、それをcatkinでビルドします。

バージョン

ROS indigo以前はQt4が標準でしたが、KineticからはQt5に変わりました。

ソースコード

C++ファイル

メインのプログラムです。今回は基本としてウィンドウを表示するだけのプログラムを書きます。
C++の実行の中ではROSを使わずにQtの作法で書いています。

qt_lecture/src/qt_basic1.cpp
#include <QApplication>
#include <QLabel>

int main(int argc, char** argv){
  QApplication app(argc, argv);
  QLabel* label = new QLabel("######## basic1 ########");
  label->show();
  return app.exec();
}

6行目のQLabel* label = new QLabel("######## basic1 ########");では今回表示するlabelを製作しています。
7行目ではこのLabelを表示して、8行目でループに入っています。

6、7行目はポインターを使わずに

×ポインターを使わない例
  QLabel label("######## basic1 ########");
  label.show();

と書くこともできます(なお、今回の例は同じように実行できます)。c++として言うとこちらのほうが良いのですが、Qtではすべてのオブジェクトはヒープ領域に存在するというお約束があります。ポインターを使わない方法だとスタック領域にメモリが確保されてしまうのでポインターを使用する方法を使うみたいです。

CmakeList.txt

Cmakeの設定です。Qt用の設定は少し複雑です。
まずQt全体としての設定が以下です。Qtのバージョンを設定するのですが、今回は便宜的にrvizとバージョンをそろえるようにコンフィグを書きます。

qt_lecture/CMakeLists.txtに追加
#Qt5 configulation
set(CMAKE_AUTOMOC ON)
find_package(Qt5 ${rviz_QT_VERSION} EXACT REQUIRED
  Core
  Widgets
)
set(QT_LIBRARIES Qt5::Widgets)
add_definitions(-DQT_NO_KEYWORDS)

こちらはいつものC++のソースコードをビルドする設定です。${QT_LIBRARIES}を足します。

qt_lecture/CMakeLists.txtに追加
add_executable(qt_basic1 src/qt_basic1.cpp)

target_link_libraries(qt_basic1
  ${catkin_LIBRARIES}
  ${QT_LIBRARIES}
)

package.xml

Qt5の依存を書く必要があります。

qt_lecture/package.xmlに追加
  <build_depend>qtbase5-dev</build_depend>
  <build_depend>rviz</build_depend>

  <exec_depend>libqt5-core</exec_depend>
  <exec_depend>libqt5-gui</exec_depend>
  <exec_depend>libqt5-widgets</exec_depend>
  <exec_depend>rviz</exec_depend>

ビルド

cd ~/catkin_ws
catkin build

実行

以下のコマンドを打つと下の図のようなウィンドウが表示されます。
各ターミナルごとに実行前にsource ~/catkin_ws/devel/setup.bashを実行する必要があります。

rosrun qt_lecture qt_basic1

参考

Qtプログラミング入門
Dockable panel tutorial
Qtバージョン確認
QtWidgetはヒープ上に作る

目次ページへのリンク

ROS講座の目次へのリンク