用cmake搭建ros工程,make编译而不是catkin_make

版权声明: https://blog.csdn.net/u014610460/article/details/83589983

用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!

猜你喜欢

转载自blog.csdn.net/u014610460/article/details/83589983