如何用cmake搭建ros工程,make编译而不是catkin_make
Posted lwlv
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用cmake搭建ros工程,make编译而不是catkin_make相关的知识,希望对你有一定的参考价值。
用ros的都知道一般是用catkin_create_pkg命令创建一个新的包,然后修改CMakeLists.txt文件,最后用catkin_make进行编译。
之前的文章《三种方法在ROS中加载Qt库进行GUI设计》也说过如何搭建环境并进行ros开发,而实际上catkin_make也是对cmake的一定封装,因此用cmake加make去开发ros程序更方便简洁。
我们知道qt工程实际用的qmake去编写pro和pri文件,对只开发qt gui程序还是挺方便的,但想扩展性更强,比如开发一个基于PCL,VTK,OpenCV, Eigen3, Sophus等其他的第三方库的qt项目时,发现用cmake还是更方便,而且更能体现出一个工程的架构,特别对于大型软件来说。
废话不说,直接上代码,基于ros,qt的cmake工程:
CMakeLists.txt文件里的内容如下:
cmake_minimum_required(VERSION 2.8.3)
project(ros_cmake)
## Add support for C++11, supported in ROS Kinetic and newer
add_definitions(-std=c++11)
add_definitions(-Wall)
add_definitions(-O0)
add_definitions(-g)
## 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
)
## System dependencies are found with CMake's conventions
find_package(Qt5Widgets) # Qt Environment
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
include_directories(
$CMAKE_CURRENT_BINARY_DIR
)
qt5_wrap_ui(UIC widget.ui)
add_executable($PROJECT_NAME main.cpp widget.cpp widget.ui)
target_link_libraries($PROJECT_NAME $catkin_LIBRARIES Qt5::Widgets)
解释:
还是一样,先找到需要用到的库,比如ROS,比如QT。如果用到Qt界面或者资源的话还得加上qt5_wrap_cpp,qt5_wrap_ui和qt5_add_resources。然后定义可执行程序及其所依赖的库。还是很简单的。
其次就开始写代码,实现所需要的功能了。关于选择什么样的IDE,本人这里用的Qt Creator,直接选择打开CMakeLists.txt文件即可看到所有的工程目录。
这里做了一个简单的demo,点击开始后开启定时器并不断pub一个ros话题topic。
最后,建立一个build目录,用make去编译,具体如下:
mkdir build
cd build
cmake ..
make
这样build目录下就会生成一个可执行程序,可以直接运行,效果如下:
如果想加入一个PCL或者OpenCV库,在find_package即可。这样会很方便,而且cmake工程一般而言跨平台,方便移植。
工程的源码在 https://github.com/WelinLee/ROS_QT_GUI 中的ros_cmake包中可以找到。
Enjoy!
以上是关于如何用cmake搭建ros工程,make编译而不是catkin_make的主要内容,如果未能解决你的问题,请参考以下文章