ROS-Qt-转CMake编译以及qmake第三方库添加及其他

news2024/10/5 21:22:20

Qt 开发ROS 界面的方法

方法2 带ui的工作空间配置(以ROS节点执行)

步骤1

$ mkdir catkin_qt
$ cd catkin_qt
$ mkdir src
$ cd src
$ catkin_init_workpasce
$ cd ..
$ catkin_make
$ cd src
$ catkin_create_qt_pkg ros_ui roscpp rospy std_msgs
$ cd ..
$ catkin_make
...提示:build target ros_ui 即可
  • 如果提示: catkin_create_qt_pkg 找不到 则:
sudo apt-get install ros-melodic-qt-create
sudo apt-get install ros-melodic-qt-build

步骤2

打开qtcreate,前提是带ros创建的
这里我下载的已经配置好的qtcreator(离线与在线都行,离线我觉的快点)
https://ros-qtc-plugin.readthedocs.io/en/latest/_source/How-to-Install-Users.html#qt-installer-procedure
这个只是个QtCreater ,之前没装Qt的还是得装一个

  • 新建项目
  • other project ——> ROS Workspace
  • Name填(自己取)
  • Distributionmelodic(根据自己所在系统填)
  • Build SystemCatkinMake
  • Workspace Path : 选上面步骤1创建的catkin_qt文件夹,不要选到src
  • Next
  • Add to version control 填:Git (可以不选,即None
  • Finish

建立完成,下面修改编译配置

  • 点击左边的 Project(扳手图)
  • Build不变(检查一下是不是catkin_make)
  • Run 中修改, 运行配置选:ROS Run Configuration
  • Add Run Step ——> ROS run step , 会出现三个选项 (如果是运行launch 也是在这里选)
  • Package 选 步骤1 的功能包名: 如 ros_ui
  • Target 默认选 ros_qt (默认的那个,在CMakeList中觉得的), 第三个不填
  • 返回编辑界面,点击左下角的 “锤子” 编译
  • 此时再开一个终端,打开 roscore
  • 会到 Qt 点击左边的运行即可
  • 以上步骤 是默认Qt4,改Qt5 编译见下面
  • 在此基础上上的ui加新控件,一定要 在终端用 catkin_make 确保生成了新的ui_xxx.h 才行
    终端看到打印了[ 6%] Generating ui_form.h这样的信息才行

新增界面 并以Qt5 加载*

  • 1)右击 ros_ui (功能包)—— > Add New 。。
  • 2)选一个基类。其他(一定确保新建的路径在ros_ui下,不是在ros_ui 的子目录下)
  • 3)然后把 .h .cpp .ui 拉到对应的文件夹里
  • 4)【非常重要】修改CMakeList.txt
##############################################################################
# CMake
##############################################################################

cmake_minimum_required(VERSION 2.8.0)
project(qt_ui)
# 新增(Qt5)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#添加c++11的支持 新增(Qt5)
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")

##############################################################################
# Catkin
##############################################################################

# qt_build provides the qt cmake glue, roscpp the comms for a default talker
# 这里和 ros 添加依赖功能包一样
find_package(catkin REQUIRED COMPONENTS qt_build roscpp tf
    sensor_msgs
    cv_bridge
    std_msgs
    image_transport
    )
include_directories(${catkin_INCLUDE_DIRS} ./include) # (Qt5)
# Use this to define what the package will export (e.g. libs, headers).
# Since the default here is to produce only a binary, we don't worry about
# exporting anything. 
catkin_package()

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

# this comes from qt_build's qt-ros.cmake which is automatically 
# included via the dependency call in package.xml
# rosbuild_prepare_qt4(QtCore QtGui) # Add the appropriate components to the component list here

## 安装多个 Qt 版本时, 可能会导致无法使用特定的 Qt 版本. 需要设置 CMAKE_PREFIX_PATH 为所用 Qt 的安装路径, 但是还需要设置 Qt[Module]_DIR(例如: QtCore_DIR) 等变量. 下面这一段代码自动会修改 ModuleList 中的所有模块, 并自动设置 Qt[Module]_DIR变量; 同时 target_link_libraries.
# 如果是使用已经安装了ros_plugins_ros 的qtcreater的 最后是选择你Qt 的安装路径(就是找到/lib/cmake文件) # (Qt5)
set(CMAKE_PREFIX_PATH "/opt/qt512") 
set(ModuleList     # 需要加Qt 的 模块就在这里添加,和Qt 的 .pro 的 QT += Core一样
    Core
    Gui
    Widgets
    Network
)
foreach(QtModule ${ModuleList})
    set(Qt5${QtModule}_DIR ${CMAKE_PREFIX_PATH}/lib/cmake/Qt5${QtModule})
    message("foreach-> Qt5${QtModule}_DIR : ${Qt5${QtModule}_DIR}")

    set(QT_LIBRARIES ${QT_LIBRARIES} Qt5::${QtModule})
endforeach()
message("${QT_LIBRARIES}")

find_package(Qt5 REQUIRED ${ModuleList})
##############################################################################
# Sections
##############################################################################

file(GLOB QT_FORMS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ui/*.ui)
file(GLOB QT_RESOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} resources/*.qrc)
file(GLOB_RECURSE QT_MOC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} FOLLOW_SYMLINKS include/qt_ui/*.hpp *.h) # 这里新增 *.h (新建界面)

# 将QT4 改成 QT5 (Qt5)
QT5_ADD_RESOURCES(QT_RESOURCES_CPP ${QT_RESOURCES})
QT5_WRAP_UI(QT_FORMS_HPP ${QT_FORMS})
QT5_WRAP_CPP(QT_MOC_HPP ${QT_MOC})

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

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

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

add_executable(qt_ui ${QT_SOURCES} ${QT_RESOURCES_CPP} ${QT_FORMS_HPP} ${QT_MOC_HPP})
target_link_libraries(qt_ui ${QT_LIBRARIES} ${catkin_LIBRARIES})
install(TARGETS qt_ui RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})


  • 5)修改头文件(form是新建的),自动补偿选第一个form.h,一定先做这一步再继续下面的
#include "../include/ros_ui/form.h"
  • 6)保存了后,先在终端当工作空间 使用 catkin_make,终端直到看到终端提示生成了 ui_xxx.h 才行,这里如ui_from.h 不然是找不到 .ui 中的控件的, 比如:
[  6%] Generating ui_form.h

不要直接使用“锤子”因为 80%是不得行,关键就是看build文件夹的对应功能包名下是否生成了ui_xxx.h

  • 7)在.ui加新的控件,都有按照上一步(6)说的来,反正就是要看到生成了ui_xxx.h才行

如何添加第三方库

  • 这个部分是对纯Qt以 qmake 执行的程序而言的
  • 以 后面我将要提到的QSsh 这种第三方库的添加为例
  • 首先确保生成了QSsh 的 lib 文件(中含.so或者.dll),然后把lib 文件夹和 include 文件夹都放到qt的同.cpp.h的目录下(其实 确保 libinclude 文件夹在同一目录下即可)
  • 然后在QtCreater界面,点击.pro,在.pro界面下右键——>添加库
    在这里插入图片描述
  • 选择外部库,然后下一步
    在这里插入图片描述
  • 然后库文件选择路径,即是 lib 下的,点到 lib 下 会有对应的文件可供点,如果lib 和 include 在同一目录下 下面的包含路径会自己填充include 的路径
  • 然后是什么平台就勾选哪个平台就行了。我这里是以 Linux 为例的
  • 完成后 编译器会自己给你的.pro中加入连接语句,保存后编译即可用
  • 注意在调用头文件时用 "",同时不一定直接就是对应的头文件名,有可能是多层头文件比如:
    所以可尝试一下。
#include "ssh/sshconnection.h"
  • 这就算是完成了

开发中出现的知识

(1)自定义信号

xx.h 中
class MainWindow : public QMainWindow
{
    Q_OBJECT
。。。。
signals:			// 关键字signals 或者 Q_SIGNALS 也可
    void display();
    void isconnect(int x, float y);
    void isconnect(int, float);
。。。
};
xx.cpp 中
void MainWindow::test(){
	emit display(); //使用 emit 关键字 就可发送信号了
	emit isconnect(10,10.1); 
}

(2)QCoreApplication::processEvents();

QCoreApplication::processEvents();

(3)QSetting 的用法

  • 其实没有特别的去知道的深入作,比较简单就是,能够保存设置
    最常用的就是公司与组织的关系

(4)Qt 信号与槽的 Lambda 描述

# Qt4 以前的信号与槽
connect(信号发出对象, SIGNAL(信号),信号接收对象, SLOT(槽函数对象))

(5)QProcess 与 Qt与终端交互

(6)Qt 与 第三方库QSsh 开发 ssh

。。。。。。。 持续更新中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生成式AI时代,亚马逊云科技致力推动技术的普惠,让更多企业受益

当谈及AIGC时, 我们该谈些什么? 生成式AI技术与应用的不断发展,为各个行业都注入了全新的机会与活力。AIGC成为了今年最为激动人心的技术话题。亚马逊云科技也一马当先,在6月27-28日,2023亚马逊云科技中国峰会上分享…

堆的Top-K问题

⭐️ TOP-K问题 TOP-K问题:即求数据结合中前 k k k 个最大的元素或者最小的元素,一般情况数据量都比较大。 比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。 如果数据量过大,排序的方式就不太可取了。 思路&…

TikTok引流的新玩法,用AdsPower打开新大陆!

做跨境电商的人都知道,天上不会掉流量,想要产品火,就必须要引流。大佬的一个产品动不动就几千几万的观看量,可是自己的产品却无人问津。他们到底怎么做到的呢?很简单,注册AdsPower和TikTok的账号&#xff0…

el-input输入框的那些事

vue3element-plustses6 此帖只为记录开发中遇到的需求,技术问题,坑 1、文本域禁止自由拉伸 1、文本域禁止自由拉伸 el-input有一个枚举类型的resize属性,控制拉伸,‘none’ | ‘both’ | ‘horizontal’ | ‘vertical’&#xf…

找实拍高清视频网站,我推荐这6个

本期推荐6个高清视频素材网站,视频剪辑、自媒体必备,建议收藏~ 菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是一个设计网站,但它还有非常丰富的视频和音频素材,视频素材全部都是高清无水印&#xff0…

暑期代码每日一练Day1:Leetcode415. 字符串相加

题目 415. 字符串相加 分析 题目意思是给你两个纯数字 字符串(表示的是一个有意义的正整数),让你算出这两个字符串表示的数字的和,最后返回以字符串表示的结果,其中的过程不能直接将初始给定的两个字符串直接转化为…

ORB+FLANN

FLANN 代表 近似最近邻的快速库。它包含针对大型数据集中的快速最近邻搜索和高维特征优化的算法集合。对于大型数据集,它比BFMatcher工作得更快。 对于基于 FLANN 的匹配器,我们需要传递两个字典,指定要使用的算法、相关参数等。第一个是Ind…

2024考研408-操作系统 第三章-内存管理 学习笔记

文章目录 一、内存管理基础1.1、内存的基础知识1.1.1、什么是内存?有何作用?1.1.2、进程运行的基本原理1.1.2.1、指令的工作原理1.1.2.2、理解逻辑地址与物理地址1.1.2.3、从写程序到程序运行1.1.2.4、三种链接方式(静态、转入时动态、运行时…

openssl源码编译输出库-guidance-傻瓜式教程

目标: 下载openssl源码 编译输出目标版本,例如使用Android NDK编译输出Android使用的32位的库 1、下载源码 git clone https://github.com/openssl/openssl.git -b openssl-3.0.9 2、 请下载Linux版本的Android NDK 请下载Linux版本的Android NDK, 并完…

没看完这篇文章,别说你会用Ping

中午好,我的网工朋友。 网工生活里每天都和ping打交道,ping来ping去,很多人知道ping,却不知道怎么把ping用出更多花样出来。 今天,我特地给你关于ping命令的使用大全,在更多不同的项目场景里,…

解决访问127.0.0.1时,提示“127.0.0.1 拒绝了我们的连接请求”

目录 问题描述 解决方案 问题描述 我电脑是win10系统,刚刚在访问http://127.0.0.1时,浏览器显示“127.0.0.1 拒绝了我们的连接请求”,为何访问本机IP显示拒绝访问? 解决方案 1. windows徽标 I 打开设置,选择“应用…

3ds max高级教程:创建带有骨骼动画的机器人模型

推荐: NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 然而,下面我们示例机器人腿的第一个版本不是很现实,因为它会像没有肌肉的骨骼结构一样坍塌。在第二个版本中,我们将添加一些机器人“肌肉”,第三个版本将包括…

分布式运用存储系统Ceph

一、ceph的相关知识 1.ceph介绍与简介 Ceph是一个开源的分布式存储解决方案,旨在提供可扩展性、高性能和强大的数据可靠性。它采用了一种分布式对象存储架构,能够同时提供块存储和文件存储的功能。 Ceph使用C语言开发,是一个开放、自我修复和…

Makefile文件编写

文章目录 格式自动检查更新效率变量模式匹配函数clean 格式 目标:依赖 tab 命令 自动检查更新 当有文件发生修改后,重新make会自动对发生修改的依赖进行编译 效率 由于在 make时会进行检查更新,对于有修改的依赖会重新编译,为…

定位理论:引领企业变革的幕后推手

在商业的海洋中,如何能让你的企业像一座明亮的灯塔,独特而引人注目?这就需要我们掌握一种强大的工具——定位理论。那么,定位理论究竟是什么?我们为什么要学习它?它如何能为我们的企业创造价值?今天,让我们一起深入探索定位理…

vue3组件引用使用的坑

今天准备用el-tabs写个页面,发现点击后组件怎么都显示不了,后来才发现是组件引用的原因 这是页面是显示的效果: 乍一看确实是对的。。。 但是当我点击完这三个tab后再重新点击道路管理后,有意思的出现了: one组件消失…

UE4/5AI制作基础AI(适合新手入门,运用黑板,行为树,ai控制器,角色类,任务)

目录 制作流程 第一步:创建资产 然后创建一个AIController 之后创建一个黑板和行为树: 第二步:制作 黑板 行为树 任务 运行行为树 结果 制作流程 第一步:创建资产 第一步直接复制你的人物蓝图,做一个npc&…

【网关】ShenYu Gateway入门Demo体验,ShenYu网关2.6.0直接调用Dubbo服务

本次为新开源框架接入ShenYu网关做基础学习指导,特地来下载官网的demo体验一把,具体是想通过网关泛化调用dubbo服务。本次使用的是最新版本2.6.0。 官网文档: 如何通过 Apache ShenYu 网关代理 Dubbo 服务 | Apache Dubbo 环境准备 第一步&a…

nvm安装和使用,对node.js版本进行切换控制

文章目录 前言一、nvm是什么?二、安装三、nvm命令说明nvm ls(查看已安装版本)nvm list available(查看可下载安装的最新版本列表)nvm current(查看当前使用的版本)nvm install(下载安…

【Linux】网络基础之UDP协议

目录 🌈前言🌸1、传输层🌺2、重谈端口号🍨2.1、端口号范围划分🍧2.2、认识知名端口号 🍀3、UDP协议🍨3.1、UDP协议报文结构🍩3.2、UDP协议的特点🍪3.3、基于UDP的应用层协…