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

2023-10-27

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) #设置工程包含当前目录
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[ROS学习之路]Ubuntu16.04下使用QT4 + ROS 的相关文章

  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • vim 中的 python 2 支持

    我正在尝试设置 YouCompleteMe 一个 vim 代码完成插件 当我运行 vim 时 它给我这个错误消息 YouCompleteMe unavailable 需要 python 2 x 我的 ubuntu 机器上安装了正确版本的 p
  • 如何将自定义 Qt 类型与 QML 信号一起使用?

    我在 Qt 5 2 qml 应用程序中创建了一个自定义类型 class Setting public QObject Q OBJECT Q PROPERTY QString key READ key WRITE setKey Q PROPE
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 无法启动 MySQL 服务器 - 控制进程退出并出现错误代码

    我的 mysql 服务器停止后无法启动 命令使用 sudo etc init d mysql restart Error 重新启动 mysql 通过 systemctl mysql serviceJob for mysql service
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • Qt(在 Windows 上)将权限级别设置为“requireAdministrator”

    我正在使用 Qt Creator 并努力制作 exe文件默认以管理员身份运行 在线阅读所有解决方案我试图将这一行放入我的 pro file QMAKE LFLAGS MANIFESTUAC level requireAdministrato
  • QML 列表视图拖放

    我想创建两个 qml 列表视图 可以执行两个功能 拖放一个列表中的项目以更改项目的顺序 跨列表拖放项目 项目将从一个列表中删除并添加到另一个列表中 根据 Qt 文档中的拖放示例 我决定创建两个访问同一列表模型的列表视图 列表模型中的每个项目
  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r
  • Q风格所有权

    在 Qt 应用程序中使用样式时 我遇到了一个有趣的问题QStyle所有权 QStyle继承自QObject 通常接受QObject parent作为构造函数参数来管理其子级的生命周期 但QStyle的构造函数没有此构造函数参数 第一个问题
  • docker 非 root 绑定安装权限,WITH --userns-remap

    all 尝试让绑定安装权限正常工作 我的目标是在容器中绑定安装卷 以便 a 容器不以 root 用户身份运行入口点 二 docker daemon 配置了 userns remap 这样容器 主机上没有 root c 我可以绑定挂载和读 写
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • Apache 2 中的“捕获 SIGWINCH”错误是什么?

    我的服务器 ubuntu 8 04 LAMP运行drupal 6 当流量较高时 它会停止提供页面 重新启动apache2将不起作用 所以我必须重新启动该服务 我在 apache2 error log 中找到了这条消息 通知 捕获SIGWIN
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 通过 Visual Studio 2017 使用远程调试时 Linux 控制台输出在哪里?

    我的Visual Studio 2017 VS2017 成功连接Linux系统 代码如下 include

随机推荐

  • 探讨UUID和Secrets:确保唯一性与数据安全的利器

    前言 在现代软件开发中 唯一标识符 UUID 和机密信息的处理是至关重要的 UUID是用于唯一标识数据记录和对象的128位值 确保了全球范围内的唯一性 同时 Python的secrets模块为处理机密信息提供了强大的随机数生成功能 适用于密
  • 《华为机试》刷题之HJ41 称砝码

    一 题目 二 示例 三 代码 while True try n int input m list map int input split x list map int input split list1 for i in range n l
  • FSDB 波形文件产生以及截取

    FSDB波形产生 FSDB Fast Signal Database 相比较于VCD文件 FSDB文件的大小比VCD波形小5 50倍 各家的仿真器都支持在simulation的过程中 直接生成FSDB文件 将VCD文件转换为FSDB文件的三
  • 键盘摄影:今天老李是一名动物摄影师

    键摄 全称键盘摄影师 原本是一个贬义词 是指那些没有相机 没有实拍经验 仅凭一副鼠标键盘 在家里打字 在网上头头是道地分享摄影技巧 同时对别人的作品指指点点 然后又无法秀出自己的作品的人 然而 在今天 有了Midjourney 键盘摄影师终
  • js逆向反调试笔记

    sojson反调试 遇到一调试就卡死的代码 现在js最开始位置打上debugger 如果打完debugger后还是直接卡死 那就多打几处 运行代码后 按单步跟 如图 发现正则new RegExp test toString 大概率是在检测代
  • java中金额计算

    撒欢的老猫 java中金额计算 在牵涉到金额的计算时 为了保持高精度的准确性 使用bigDecimal类型 在使用BigDecimal类来进行计算的时候 主要分为以下步骤 1 用float或者double变量构建BigDecimal对象 2
  • 关于路由传参与接收参数

    路由 跳转传参的方式有很多 下面我总结一下常用的传参方式及其相对应的接收参数方式 第一 参数是以 分隔 http localhost 8092 account manage issue id 161123434754052096 路由跳转方
  • 文本生成视频Make-A-Video,根据一句话就能一键生成视频 Meta新AI模型

    Meta公司 原Facebook 在今年9月29日首次推出一款人工智能系统模型 Make A Video 可以从给定的文字提示生成短视频 Make A Video研究基于文本到图像生成技术的最新进展 该技术旨在实现文本到视频的生成 可以仅用
  • 有序序列的二分查找

    二分算法思想 1 定义下标min指向第一个元素 定义max指向最后一个元素 2 定义下标mid等于 min max 2 3 判断arr mid 是否等于要查找的数 若等于返回mid值 若不等于 如果小于 则min mid 1 如果大于 则m
  • SSH远程访问控制

    目录 一 SSH概述 1 1什么是SSH 1 2SSH的作用 1 3SSH的主程序以及配置文件 二 SSH远程登录方式 2 1ssh 远程主机用户名 远程服务器主机名或IP地址 p port 2 2ssh l 远程主机用户名 远程服务器主机
  • Uboot初次编译、烧写、启动(启动界面log简析)

    目录 U Boot 初次编译 U Boot 烧写与启动 上述笔记第三点就是建立shell脚本实现的 第四点就是修改Makefile文件实现的 下面均有实现步骤讲解 U Boot 初次编译 先编译体验一下正点原子提供的UBOOT 首先在Ubu
  • 刷题之01 矩阵

    给定一个由 0 和 1 组成的矩阵 mat 请输出一个大小相同的矩阵 其中每一个格子是 mat 中对应位置元素到最近的 0 的距离 两个相邻元素间的距离为 1 示例 1 输入 mat 0 0 0 0 1 0 0 0 0 输出 0 0 0 0
  • 阅读文献1:Bootstrapping ViTs: Towards Liberating Vision Transformers from Pre-training(文章翻译及自身的理解和总结)

    目录 前言 一 文章标题 二 摘要 我在这里直接翻译过来 三 Introduction 这里也没有什么好解释哒 我也直接翻译过来 四 Related Work 1 Vision Transformers 2 Knowledge Distil
  • http之GET请求的传递参数的方式

    第一种 直接在URL后面加参数 localhost 21811 Handler1 ashx id 1 name abc 如下图 第二种 用超链接的方法传递参数 当点击超链接的时候 首先会跳转 localhost 21811 Handler1
  • B/S架构及其运行原理 #CSDN博文精选# #IT技术# #软件模式# #架构模式#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • vue导出自定义的excel表格

    1 Vue导出excel 1 1 安装依赖 npm install S file saver npm install S xlsx npm install D script loader 1 2 配置 在项目src文件夹下新建文件夹vend
  • git bash 操作 从github上pull代码再从客户端push上去

    如何将github上的代码拖到本地 1 cd切换目录到对应的仓库 2 git init来初始化这个仓库 3 用ssh keygen t rsa c 邮箱 来设置ssh 然后拷贝到对应的github上设置密钥 4 ls 可以把目录下的文件列出
  • 图文详解丨iOS App上架全流程及审核避坑指南

    目录 目录 引言 一 登录开发者账号注册账号 二 申请证书 描述文件 证书管理 描述文件管理 三 代码实现 四 总结 引言 到了2021年 虽然网上也有大牛写过很多IOS App上架流程资料 但随着苹果发布机制的微调有些 已经过时了 我就趁
  • 【半监督学习】1、Mean Teacher

    文章目录 一 背景 二 方法 三 效果 论文 Mean teachers are better role models Weight averaged consistency targets improvesemi supervised d
  • [ROS学习之路]Ubuntu16.04下使用QT4 + ROS

    1 环境声明 Ubuntu 16 04 ROS kenitic Levi Armstrong大佬已经开发了对应的qt插件 ros qtc plugin使我们能在qt creator上编译ROS程序 这个插件以前使用ppa的方式进行安装 现在