[ROS学习之路]Ubuntu16.04下使用QT4 + ROS

1.环境声明

Ubuntu 16.04

ROS kenitic

   Levi-Armstrong大佬已经开发了对应的qt插件:ros_qtc_plugin使我们能在qt creator上编译ROS程序。这个插件以前使用ppa的方式进行安装,现在大佬已经把该插件集成到qt creator里面了,安装和使用文档。

2.安装Qt Creator for ROS

附上下载链接

    How to Install (Users) — ROS Qt Creator Plug-in documentation

下载对应系统的Qt安装包:分为在线和离线安装两种方式,然后运行.run安装包完成带插件的qt creator的安装。

2.1配置Qt Creator for ROS

    教程里面配置了Qt Creator的各种选项,但其实只有第一项:配置Ubuntu允许debugging/ptrace是必要的。过程为:

    (1.Open file: sudo gedit /etc/sysctl.d/10-ptrace.conf

    (2.Change the value of kernel.yama.ptrace_scope to 0

    (3.Reload the kernel configuration with sudo systemctl restart procps.service

    其它的都是可选的。

3 ROS程序创建

    在Qt Creator中创建catkin工作空间、创建功能包和节点。

3.1首先创建catkin工作空间

    打开 “新建文件或项目”,选择ROS Workspace:

    下面填写工作空间名称和路径,ps:创建工作空间不会独立创建文件夹,因此最好先新建一个与该工作空间同名的文件夹作为路径。

3.2创建功能包

    在工作空间下有一个src目录(默认是隐藏的,先设置显示空目录),右键该目录新建文件打开对话框,选择Package。

    填入功能包的名称、和依赖的功能包。

3.3创建节点

    右键功能包目录下的src文件夹,新建文件打开对话框。选择对应节点类型。

我这里需要订阅雷达scan话题选择subscriber

    然后填入节点名称,比如Laserscan_node.cpp。

3.4配置CMakeLists.txt

    跟普通的ROS程序一样,需要配置功能包的CMakeLists.txt文件才能编译。一个典型的CMakeLists.txt文件如下:

  

  cmake_minimum_required(VERSION 2.8.0)
    project(Laserscan)
     
    find_package(catkin REQUIRED COMPONENTS
      roscpp
      sensor_msgs
      std_msgs
    )
     
    catkin_package(
    )
     
    include_directories(
      ${catkin_INCLUDE_DIRS}
    )
     
    add_executable(Laserscan_node src/Laserscan_node.cpp)
    target_link_libraries(Laserscan_node ${catkin_LIBRARIES} )

3.5.配置ROS程序

    点击项目,首先配置编译选项,使用CatkinMake编译系统。

    配置运行选项,设置运行的功能包和节点。

  到此, 配置完成后,编译程序,然后ROS就可以运行了。

4 ROS程序使用QT4库

    在前面的基础上,添加Qt的GUI界面踩了不少坑。网上多是QT5 for ROS教程,踩坑到底还是对CMake了解不充分。

4.1右键功能包新建文件,打开对话框,选择QT界面类:

    然后选择主窗口类:

    最后填入类名、头文件名、源文件名、界面文件名等完成创建。

    上面创建了一个qt窗口,但是只是增加了几个文件,并没有添加到编译系统。下面修改CMakeLists.txt使得catkin可以编译qt组件。一个典型的配置如下:

cmake_minimum_required(VERSION 2.8.0)
project(Laserscan)

## Compile as C++11, supported in ROS Kinetic and newer
 add_compile_options(-std=c++11)

## 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 std_msgs qt_build
)

FIND_PACKAGE (Qt4)


catkin_package()

set(CMAKE_AUTOMOC ON) #QT中使用moc元对象编译器分析QT语句,然后才交给标准的C++编译器。
set(CMAKE_AUTOUIC ON) #QT中使用uic分析ui代码
set(CMAKE_INCLUDE_CURRENT_DIR ON)


QT4_WRAP_UI(QT_FORMS_HPP ${QT_FORMS})
QT4_WRAP_CPP(QT_MOC_HPP ${QT_MOC})


include_directories(
# include
  include/Laserscan/src
  ${catkin_INCLUDE_DIRS}
)

rosbuild_prepare_qt4(QtCore QtGui)


file(GLOB QT_FORMS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.ui)
file(GLOB_RECURSE QT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.h)


add_executable(${PROJECT_NAME}_node ${QT_SOURCES} ${QT_FORMS_HPP} ${QT_MOC_HPP})

target_link_libraries(
    ${PROJECT_NAME}_node
    ${QT_LIBRARIES}
    ${catkin_LIBRARIES} ${LIBS}
)

    然后编译运行即可。

5.踩的坑以及对于个人有效的解决方法

5.1找不到库

检查CmakeLIst中添加库部分

检查文件路径

FIND_PACKAGE (Qt4)

rosbuild_prepare_qt4(QtCore QtGui)


file(GLOB_RECURSE QT_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS src/*.cpp)

add_executable(${PROJECT_NAME}_node ${QT_SOURCES} ${QT_FORMS_HPP})
target_link_libraries(
    ${PROJECT_NAME}_node
    ${QT_LIBRARIES}
    ${catkin_LIBRARIES} ${LIBS}
)

5.2 ui头文件未创建

这部分中的u_*.h理应自动创建并使用

原因是在CmakeLIst中没有使用uic工具分析ui代码生成.h头文件

set(CMAKE_AUTOMOC ON) #QT中使用moc元对象编译器分析QT语句,然后才交给标准的C++编译器。
set(CMAKE_AUTOUIC ON) #QT中使用uic分析ui代码

set(CMAKE_INCLUDE_CURRENT_DIR ON) #设置工程包含当前目录
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值