Qt Creatorで作成したGUIのROSノード化
・Qt Creatorで生成したGUIでROSメッセージを扱いたく,まずROSノード化をしてみました
内容
1.Qt Creatorでプロジェクトを作成(ビルドシステムはcmakeを選択)
・qtcreatorでプロジェクトを作成します(※qtcreatorの基本的な使い方は割愛させていただきます)
・ビルドシステムの選択でcmake
を選択
2.qt creatorのcmake設定
qtcreatorのRUNボタン実行時にはCMAKE_PREFIX_PATH
へrosパッケージのパスが通っていないみたいなので以下のように,プロジェクトのビルド設定画面で/opt/ros/noetic
みたいにパスを追加してあげます.
そしてfind_package
でroscpp
を探索できるようにします.
するとプロジェクトのcmakeパス設定にroscpp関係のパッケージパスが追加されます.
これでrosパッケージへのパスが通るようになりました
3.メインプログラムをROSノード化
次にメインプログラムをノード化するように変更します
以下3点を追加すればOKです
・#include <ros/ros.h>
・ros::init(argc, argv, "aaa");
・ros::NodeHandle nh = ros::NodeHandle();
追加後のプログラムは以下のようになります
#include "mainwindow.h"
#include <QApplication>
#include <ros/ros.h> // 追加
int main(int argc, char *argv[])
{
ros::init(argc, argv, "aaa"); // 追加
ros::NodeHandle nh = ros::NodeHandle(); // 追加
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
4.CMakeLists.txt
でroscpp
パッケージを読み込む
roscppへのリンク設定などを行います.
以下3点を追加すればOK
・find_package( roscpp )
を追加(※手順2ですでに追加済み)
・include_directories( ${roscpp_INCLUDE_DIRS} )
を追加
・target_link_libraries(untitled26 PRIVATE Qt5::Widgets ${roscpp_LIBRARIES})
の${roscpp_LIBRARIES}
を追加
追加後のCMakeLists.txt
は以下のようになります
cmake_minimum_required(VERSION 3.5)
project(untitled26 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.
#if(ANDROID)
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
# if (ANDROID_ABI STREQUAL "armeabi-v7a")
# set(ANDROID_EXTRA_LIBS
# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so
# ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)
# endif()
#endif()
find_package(Qt5 COMPONENTS Widgets REQUIRED)
# 追加 ここから
find_package( roscpp )
include_directories(
${roscpp_INCLUDE_DIRS}
)
# 追加 ここまで
if(ANDROID)
add_library(untitled26 SHARED
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
else()
add_executable(untitled26
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
endif()
target_link_libraries(untitled26 PRIVATE Qt5::Widgets ${roscpp_LIBRARIES}) # 追加
5.実行
違うブラウザでroscore
実行
roscore
qt creatorのrunボタンで実行でGUIが表示されます
GUIがノードになったか確認
$ rosnode list
/aaa
/rosout
OKです.
まとめ
qt creatorで作成したプロジェクトのROSノード化ができました
Author And Source
この問題について(Qt Creatorで作成したGUIのROSノード化), 我々は、より多くの情報をここで見つけました https://qiita.com/hoshianaaa/items/59688c7e6bd31b0eafac著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .