본문 바로가기

IT/ROS

[ROS] 15. CMakeLists.txt에서 QT 링크하기

반응형

☞ 메인보드 : Jetson Nano Developer Kit

☞ 운영 체제 : Ubuntu 18.04 - JetPack 4.4.3

☞ ROS 버전 : Melodic

☞ IDE : QtCreator, Visual Studio Code

☞ 언어 : C++

 

 

 

 


목차

1. 패키지 생성

2. CMakeLists.txt 작성하기

3. 실행 결과

 

 

 

 


 

 

안녕하세요. 야선입니다. 처음 인트로에 인사를 하고 시작하는 것은 처음인 것 같네요. 사실 이 포스트는 ROS에 포스트를 해야 하나 잡탕에 해야 하나 고민을 했는데요. ROS에 관심 있는 분이 보실 것이라 생각하여 이곳에 하게 되었고, 아무런 관계없이 타자를 많이 두드리고 싶어 인사와 함께 TMI 하고 있습니다. o(=´∇`=)o

 

이 글을 보셔서 도움이 될만한 분들은 아마 Nvidia Jetson 보드를 사용하시는 분 중에 Ubuntu 18.04와 ROS Melodic 버전을 사용해서 QTCreator에 ROS 플러그인을 연동시키려 했지만 아무런 정보가 없어 결국 해내지 못한... 레비 암스트롱 아저씨ros_qtc_plugin 깃허브 사이트를 정말 많이 들락날락한 그런 분들 모두 필자와 같을 것이라 생각한다. 결국은 Jetson의 아키텍처 ARM64 때문에 아무것도 할 수 없었다. 인텔과 AMD과 같은 메이저 회사의 CPU에만 익숙했던 우리는 아키텍쳐 때문에 응용프로그램을 실행할 수 없다는 것에 엄청난 절망을 느끼게 된다.

 

이 글 또한 결국에는 QT에서 Other Project - ROS Workspace를 클릭하여 프로젝트를 만들 수 있는 것은 아니지만 조금 많이 귀찮더라도 CMakeLists.txt에서 QT를 링크할 수 있는 방법을 소개하려고 한다.

 

 

 

※  ROS 설치

 

ROS 설치가 필요하다면 아래의 포스트를 참고하길 바란다.

 

 

[ROS] 3. ROS Melodic 설치

☞ 메인보드 : Jetson Nano Developer Kit ☞ 운영 체제 : Ubuntu 18.04 - JetPack 4.3 ☞ ROS 버전 : Melodic <이전 포스트> 1. 이미지 삽입, 포맷 그리고 백업 # 이미지 삽입 1) Rufus 다운로드 https://rufus.i..

95mkr.tistory.com

 

 

 

 

※  QT 설치

 

QT 홈페이지에서 설치를 하거나 터미널 창에서 입력해 설치하면 된다. QT 홈페이지에서 설치하면 본인이 원하는 버전을 다운로드할 수 있다. 타 소프트웨어마다 지원하는 버전이 다르기 때문에 이점 유의하고 설치하길 바란다.

 

☞ QT 홈페이지에서 설치

 

 

Download Qt | Develop Desktop & Embedded Systems | Qt

Download Qt, the software that allows you to reach all your target platforms — desktop and embedded systems — and try out our UI and UX design tools.

www.qt.io

 

 

 

☞ 터미널 창 설치

 

sudo apt install qtcreator

 

 

 

 

 

 

 

 

① 패키지 생성

 

※  ROS 패키지 생성

 

cd ~/catkin_ws/src
catkin_create_pkg ros_qt_test roscpp
cd ..
catkin_make
roscd ros_qt_test/src

 

먼저 터미널 창을 열어 위의 명령어 들을 차례대로 입력해준다. 패키지를 생성하고 catkin_make를 하면 오늘 작성에 꼭 필요한 CMakeLists.txt 가 생긴다.

 

 

 

 

※  QT 패키지 생성

 

qtcreator

 

 

터미널 창에서 qtcreator를 실행하고 빈 프로젝트를 하나 생성해준다.

 

 

 

 

생성하는 방법은 위와 같다. 여기서 중요한 것은 4번째 사진의 아랫부분이다. 프로젝트를 만들면서 생성될 파일들을 보여준다. 총 4개의 파일이 생성되는 것을 볼 수 있는데 디렉터리에는 5개의 파일이 생긴다.

 

 

 

 

이것들을 전부 끌어와서 아까 만들어줬던 ROS 패키지의 src 디렉터리에 옮겨준다. 소스코드 없이 패키지만 생성했기 때문에 그대로 5개의 파일이 ros_qt_test 패키지에 들어가 있는 상태가 된다.

 

 

 

 

여기까지 했으면 CMakeLists.txt 작성만 남았다 다른 것은 아무것도 건드릴 필요가 없다.

 

 


② CMakeLists.txt 작성하기

 

##############################################################################
# ROS Environment
##############################################################################

cmake_minimum_required(VERSION 3.0.2)
project(ros_qt_test)
find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
)

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES ros_qt_test
#  CATKIN_DEPENDS roscpp
#  DEPENDS system_lib
)

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)



##############################################################################
# Qt Environment
##############################################################################

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

find_package(Qt5 COMPONENTS Core Gui Widgets)



##############################################################################
# Sections
##############################################################################

file(GLOB QT_FORMS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ui/*.ui)
file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc)

QT5_ADD_RESOURCES(QT_RESOURCES_CPP ${QT_RESOURCES})
#QT5_WARP_UI(QT_FORMS_HPP ${QT_FORMS})

include_directories(
  ${Qt5Core_INCLUDE_DIRS}
  ${Qt5Gui_INCLUDE_DIRS}
  ${Qt5Widgets_INCLUDE_DIRS}
)

add_definitions( -std=c++11 -fPIC)



##############################################################################
# Sources
##############################################################################

set( QT_SOURCES
  src/main.cpp
  src/widget.h
  src/widget.cpp
)



##############################################################################
# Binaries
##############################################################################

add_executable(${PROJECT_NAME} ${QT_SOURCES} ${QT_RESOURCES_CPP} ${QT_FORMS_HPP} ${QT_MOC_HPP})
target_link_libraries(${PROJECT_NAME}
  ${catkin_LIBRARIES}
  Qt5::Core
  Qt5::Gui
  Qt5::Widgets
)
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

 

 

 

 


③ 실행 결과

 

 

 

 

QT 위젯 프로젝트를 생성하고 아무 작업도 하지 않았으니 이렇게 빈 창이 하나 나오면 성공적으로 빌드가 된 것이다.

 

 

 

정말 귀찮지만 QT로 소프트웨어를 개발하면서 ROS를 사용할 수 있다는 점에서 매력적이라 포스팅을 해보았다. 필자는 현재 학교에서 과제로 QT UI 소프트웨어 개발을 제출하려고 학습중이다. 로봇 팔이 움직이는 것을 모니터링하고 조작할 수 있는 소프트웨어를 직접 만들려고 하다보니 ROS와 QT를 함께 작업하고 싶다는 욕구가 있었다. 곧 Rviz와 Gazebo를 연동하고 수동 조작 시스템을 만들 것이라 갈 길이 멀은 도중에 하나 클리어 했다고 생각하니 배가 고파서 밥을 먹으러 가야겠다.

 

 

 

 

 

 

 

 

반응형