当前位置: 首页 > news >正文

【开源】基于Qt5的ROS1/ROS2人机交互软件(支持地图编辑/多点导航)

本项目基于Qt5开发,基于CMake进行构建,可以实现一套代码同时在ROS1/ROS2系统中使用(本项目已接入CI,保证多ROS版本/系统版本可用性)
项目地址:
https://github.com/chengyangkj/Ros_Qt5_Gui_App

软件在编译时会自动识别环境变量中的ROS1/ROS2环境并进行构建,实现ROS通信与界面隔离

软件所有功能均为自行绘制实现,因此可以轻松运行在一些性能比较低的边缘设备
在这里插入图片描述
在这里插入图片描述

功能/TODO:

功能状态备注
ROS1/ROS2通信
全局/局部地图显示
机器人实时位置显示
机器人速度仪表盘
机器人手动控制
机器人重定位
机器人单点/多点导航
机器人全局/局部规划轨迹显示
机器人拓扑地图功能
电池电量显示
地图编辑功能
机器人导航任务链
地图加载
地图保存
基于protobuf的通信🏷️
鹰眼视图🏷️
3D图层显示🏷️
相机图像显示🏷️
拓扑点位的路径规划🏷️

大家如果有什么有意思的界面/功能性需求,可以提在此处,如有Bug请提在issues,必将尽快修复!请在也欢迎大家发起Merge Request一起参与项目建设~

此仓库国内加速镜像链接:gitee

Star History Chart

目录

文章目录

    • 目录
  • 一,Release 版本下载使用
  • 二,编译
    • 1,环境安装
    • 2,克隆/下载本项目:
    • 3,编译项目
    • 4,运行项目
  • 三,IDE配置说明(QtCreator/Vscode)
      • 3.1 QtCreator打开项目教程
  • 四,使用说明
      • 4.1,多机通信配置
      • 4.2,配置文件
      • 4.3,重定位位姿态发布
      • 4.4,地图编辑
        • 4.4.1 拓扑地图(机器人导航点设置)
        • 4.4.2 橡皮擦
        • 4.4.3 画笔
        • 4.4.4 线段绘制
        • 4.4.5 地图保存
        • 4.4.6 地图加载
      • 4.5,手动控制机器人
      • 4.6,速度仪表盘
      • 4.7,电池电量显示
      • 4.8 多点连续导航

一,Release 版本下载使用

如果您只想使用本软件,并不想了解具体的代码实现,用户可以选择下载编译好的Release版本,不用自行手动编译,下载即用

使用Release版本的前提:系统ROS环境已安装,并且source到环境变量中

本仓库使用CI自动生成各平台的Release版本(目前只有X86_64版本,Arm环境需要自行编译),在项目的Release页面下载最新对应ROS版本的Release版本,理论上解压后即可使用。
使用方法:
在终端进入解压后的文件夹路径,执行如下命令:

sudo chmod a+x ./ros_qt5_gui_app
./ros_qt5_gui_app

如果Release版本下载后使用不了,可以参考二,编译进行自行编译使用

二,编译

注意,为了保证此项目同时兼容ROS1与ROS2,此项目不使用ROS1/ROS2的catkin_make/colcon构建系统进行够建,而是使用标准CMake进行构建,这也就意味着,本项目不会被ROS自动识别为功能包
可以参考以下教程从0开始构建/运行此项目:

1,环境安装

理论上只需要安装如下基础包就可以编译此项目:

sudo apt-get update
sudo apt-get install qtbase5-private-dev libqt5svg5-dev -y

如果以上安装后还不行,可以执行如下指令安装全部依赖:

sudo apt-get install qtbase5-dev qt5-qmake qtbase5-dev-tools libqt5svg5-dev qtbase5-private-dev libeigen3-dev libgtest-dev -y

2,克隆/下载本项目:

mkdir -p ~/qt_ws
cd ~/qt_ws
git clone https://github.com/chengyangkj/Ros_Qt5_Gui_App

note:如果github下载过慢,可以使用以下指令从gitee拉取

git clone https://gitee.com/chengyangkj/Ros_Qt5_Gui_App

3,编译项目

可以手动执行如下命令进行编译(会根据环境变量自动识别ROS1还是ROS2环境):

cd ~/qt_ws/ROS2_Qt5_Gui_App
mkdir -p build
cd build
cmake ..
make

或者执行如下脚本手动指定ROS版本并进行一键编译:

cd ~/qt_ws/ROS2_Qt5_Gui_App

ROS1:

sh ./build_ros1.sh

ROS2

sh ./build_ros2.sh

4,运行项目

cd ~/qt_ws/ROS2_Qt5_Gui_App/build
./ros_qt5_gui_app

软件配置文件路径(运行一次软件后会自动生成在可执行程序相对路径下):


~/qt_ws/ROS2_Qt5_Gui_App/build/config.json

三,IDE配置说明(QtCreator/Vscode)

此部分为针对新手做的温馨提示,如果你已经是一个ROS/C++/Qt老手,可以跳过此部分

很多ROS初学者学习Qt都存在一个误区:拼命的去下载QtCreator,如果QtCreator有问题安装失败,就卡在这,影响学习进度,但是其实QtCreator与Vscode一样,可以把他当作一个纯文本编辑器.
实际上Ubuntu系统默认都自带的有Qt库,就比如前面的3,编译项目,并没有要求安装QtCreator,只需要使用apt-get安装一些系统缺失的,没有默认安装的qt库,就能正常编译通过

当然安装QtCreator时也会同时下载一些Qt库,但是他仅仅是下载,如果你没有将下载的库添加到环境变量中(通常也不建议自己将下载的qt库添加到环境变量中,这样需要处理系统默认的qt库与你添加的qt库的冲突问题),所以,在没有额外配置的情况下,虽然下载了QtCreator,但是在编译代码时用的还是系统默认的库.

那么,我们为什么还要去额外下载QtCreator呢?
因为我们需要使用QtCreator去编辑我们的(.ui),(.resource)文件

本项目所有的界面,都是在代码中去手动创建,如果打开代码中的mainwindow.ui可以发现什么都没有,因为所有界面都是代码动态创建添加上去的.

本人在开发本项目的流程为:

  • 使用系统的Qt库,如果需要使用的qt库不存在,则使用apt-get安装即可
  • 所有ui界面均使用代码动态创建,并添加到主窗口中,没有使用qtcreator拖拽生成
  • 项目的开发IDE使用vscode,仅安装了基础的c/c++插件做代码提示
  • 如果需要编辑资源文件(.qrc),手动打开qtcreator,再打开qrc文件进行编辑保存
  • 编译时在终端使用make指令进行编译
  • 运行时在终端使用./ros_qt5_gui_app指令进行运行

可以发现,开发此项目只有需要编辑资源文件时才会用到QtCreator(一般图片添加上去后也不会做频繁的编辑)

虽然本人开发使用的Vscode,但是为了方便部分习惯使用QtCreator做开发的用户,这里介绍下如果使用QtCreator作为IDE开发此项目:

3.1 QtCreator打开项目教程

首先需要按照3,编译项目将项目成功编译,如果编译失败,则QtCreator打开后项目不会正常展开

本项目为标准CMake项目,因此按照在QtCreator中打开CMake项目的方式,打开本项目的根目录Cmakelist.txt即可(不区分ROS1/ROS2)

  • 1.安装QtCreator
sudo apt-get install qtcreator
  • 2.打开qtcreator

终端输入(必须终端打开):

qtcretor

打开后选择文件->打开文件或项目:

在这里插入图片描述

接着选择项目根目录下的Cmakelist.txt文件,点击打开即可:
在这里插入图片描述

接着会自动识别我们前面编译的build目录,选择config:
在这里插入图片描述

项目成功展开,点击绿色三角形编译并运行:

在这里插入图片描述

四,使用说明

4.1,多机通信配置

针对于ROS新手的温馨提示:此项配置,如果是单机使用即本软件运行在机器人身上,没有跨机器使用就不用配置,直接跳过即可.如果需要将本软件运行在自己的笔记本上,去连接远程的机器人的情况下需要进行配置

ROS1/ROS2的多机通信完全依赖ROS原生(环境变量添加ROS_MASTER_URI与ROS_IP/ROS_DOMAINID),不再由用户手动指定,减轻新手使用负担

ROS1:

配置参考:多机通讯教程csdn 博客

ROS2:

环境变量多机配置相同的ROS_DOMAINID

4.2,配置文件

第一次运行后,会在可执行程序同级目录生成config.json,修改此配置文件即可(需要注意Json格式),修改后重启生效,具体配置说明详见配置文件说明

4.3,重定位位姿态发布

程序可以拖动式的设置机器人初始位置(重定位),相对于Rviz,拖动时可以实时查看激光匹配情况,重定位更加精准(左键按住拖动,右键旋转方向)

在这里插入图片描述
注意:如果设置无效,需要检查config.json中设置:

{"display_name": "Reloc","topic": "/initialpose","enable": true
}

为自己机器人监听的重定位Topic名称

4.4,地图编辑

程序支持地图编辑功能:

在这里插入图片描述
在这里插入图片描述

4.4.1 拓扑地图(机器人导航点设置)

并且程序支持拓扑地图功能,可以拖动式的设置机器人导航目标点(导航)使用gif说明如下:

在这里插入图片描述

注意:如果导航点位发布无响应设置无效,需要检查config.json中设置:

{"display_name": "NavGoal","topic": "/move_base_simple/goal","enable": true
}

为自己机器人监听的导航目标点Topic名称

4.4.2 橡皮擦

点击橡皮擦后,可以擦除地图中的障碍物,使用gif说明如下:
在这里插入图片描述

4.4.3 画笔

画笔功能
在这里插入图片描述

4.4.4 线段绘制

线段绘制
在这里插入图片描述

4.4.5 地图保存

地图编辑完成后并不会自动保存,需要点击保存按钮,保存地图到指定文件夹,如果需要在ROS中使用,需要将该地图替换到自己对应导航包的map中

目前保存地图有如下:

  • *.pgm 图片数据
  • *.yaml 地图描述文件
  • *.topology 程序自定义的拓扑地图 保存了点位等信息

在这里插入图片描述

4.4.6 地图加载

地图加载同理 用户选择对应的PGM地图文件即可加载,并进行编辑

4.5,手动控制机器人

软件支持发布实时速度到底盘
在这里插入图片描述

对应按钮上的文字,可以由键盘对应按钮同步调用

注意:如果设置无效,需要检查config.json中设置:

{"display_name": "Speed","topic": "/cmd_vel","enable": true
}

为实际机器人监听的速度控制话题

4.6,速度仪表盘

软件支持实时显示机器人速度

注意:如果设置无效,需要检查config.json中设置:

{"display_name": "Odometry","topic": "/odom","enable": true
}

为机器人时机发布的里程计话题

4.7,电池电量显示

软件支持实时显示机器人电量,在配置中配置话题名,电池电量的Topic类型为:sensor_msgs::BatteryState

{"display_name": "Battery","topic": "/battery","enable": true
}

4.8 多点连续导航

软件支持多点连续导航,使用方法如下:

在这里插入图片描述

点击Start Task Chain即可开始任务

相关文章:

【开源】基于Qt5的ROS1/ROS2人机交互软件(支持地图编辑/多点导航)

本项目基于Qt5开发,基于CMake进行构建,可以实现一套代码同时在ROS1/ROS2系统中使用(本项目已接入CI,保证多ROS版本/系统版本可用性) 项目地址: https://github.com/chengyangkj/Ros_Qt5_Gui_App 软件在编译时会自动识别环境变量中的ROS1/ROS…...

Spring和SpringBoot的区别是什么

Spring 和 Spring Boot 是 Java 开发领域内两个极其重要且紧密相关的框架,它们各自在企业级应用开发中扮演着不同的角色,并带来了一系列革新性的变化。以下是关于两者之间主要区别的详细分析: 一、设计理念与定位 Spring Framework Spring 是…...

布局技巧及CSS初始化

一,margin负值巧妙应用 二,文字围绕浮动元素 三,行内块 四,CSS三角强化 五,CSS初始化 一,margin负值巧妙应用 制作盒子的细线边框: 鼠标经过li后变色: 二,文字围绕…...

excel怎么设置密码?轻松保护您的工作表

在数字化时代,数据的安全性显得尤为重要。excel作为我们日常工作中广泛使用的办公软件,其中可能包含了大量的敏感数据。为了确保这些数据不被未授权的人访问,本文将为您详细介绍excel怎么设置密码,从而有效地保护您的数据安全。 方…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TimePicker组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之TimePicker组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、TimePicker组件 TextClock组件通过文本将当前系统时间显示在设备上。支持不…...

Springboot集成Camunda并完成一条流程实例

💖专栏简介 ✔️本专栏将从Camunda(卡蒙达) 7中的关键概念到实现中国式工作流相关功能。 ✔️文章中只包含演示核心代码及测试数据,完整代码可查看作者的开源项目snail-camunda ✔️请给snail-camunda 点颗星吧😘 💖设计流程定…...

宠物用品/宠物自动饮水机方案

宠物自动饮水机方案原理 宠物自动饮水机,也叫做智能宠物饮水机,是一种为宠物设计的智能化饮水器。应用核心主要在于智能化水泵控制,以及外围传感器电路。 宠物自动饮水机使用方便,不用频繁的换水。另外,自来水的水质可…...

git小白进阶之路

git是最常用的版本控制工具,我对其进行了整理后续补充,这个文档欢迎大家来讨论,当前我的视频梳理: git小白进阶之路_哔哩哔哩_bilibili,非常希望大佬们能够批评指正,并多多交流。 目录 初始配置 配置账号…...

哈希表——C++

目录 一、首先使用拉链法: 二、开放寻址法 三、字符串哈希 1.具体如何使用进制的方式来存储字符前缀的可以看这个y总的这个图 2.接下来说一说算某个中间的区间的字符串哈希值 哈希表是一种数组之间互相映射的数据结构,比如举个简单的例子一个十个的数…...

LabVIEW叶片厚度远程监控

LabVIEW叶片厚度远程监控 随着网络技术的高速发展,远程监控广泛应用在各个领域。本文介绍了一种基于LabVIEW的植物叶片厚度远程监控系统,旨在实现对植物生长状况的精准监测和分析。 该系统利用LabVIEW软件开发工具,通过TCP网络协议实现数据…...

el-table动态合并

废话就不多说了&#xff0c;直接上代码&#xff01;&#xff01;&#xff01; 合并行 // 方法一 <template><div class"container"><el-table :data"dataSource" :border"true":header-cell-style"{ font-weight: normal,…...

【DevOps】产品需求文档(PRD)与常见原型软件

文章目录 1、PRD介绍1.1、概述1.2、前提条件1.3、主要目的1.4、关键内容1.5、表述方式1.6、需求评审人员1.7、一般内容结构 2、需求流程3、常见原型软件3.1、Word3.2、Axure3.2.1、详细介绍3.2.2、应用分类3.2.3、优缺点 3.3、摹客RP3.4、蓝湖3.5、GUI Design Studio 1、PRD介绍…...

【QT+QGIS跨平台编译】之十八:【Expat+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、Expat介绍二、文件下载三、文件分析四、pro文件五、编译实践一、Expat介绍 Expat库最初由James Clark创建,已经成为许多编程语言中常用的XML解析工具。它以其简单、快速和可靠的特点而受到广泛的认可和使用。 Expat库的优点包括: 快速:Expat的解析速度非常快…...

20240203

1.项目经理正在为新项目制订进度计划&#xff0c;项目的成功取决于使用需要政府颁发特殊环境许可证的设备&#xff0c;在网络图的设计过程中&#xff0c;项目经理应该做什么以确保正确的活动排序&#xff1f; A.使用滚动式规划考虑项目不确定性 B.分析外部依赖关系&#xff0c;…...

【Spark实践6】特征转换FeatureTransformers实践Scala版--补充算子

本节介绍了用于处理特征的算法&#xff0c;大致可以分为以下几组&#xff1a; 提取&#xff08;Extraction&#xff09;&#xff1a;从“原始”数据中提取特征。转换&#xff08;Transformation&#xff09;&#xff1a;缩放、转换或修改特征。选择&#xff08;Selection&…...

【知识点】设计模式

创建型 单例模式 Singleton&#xff1a;确保一个类只有一个实例&#xff0c;并提供该实例的全局访问点 使用一个私有构造方法、一个私有静态变量以及一个公有静态方法来实现。私有构造方法确保了不能通过构造方法来创建对象实例&#xff0c;只能通过公有静态方法返回唯一的私…...

WPS WORD 宏导出高亮文本

WPS手机版可以直接导出高亮文本&#xff0c;但只能导出手机编辑的部分&#xff0c;如果同时在电脑上编辑过&#xff0c;电脑上高亮的无法导出&#xff0c;因为作者不一样。 但WPS电脑版没有这个功能&#xff0c;只能通过宏编程实现。 这里利用了审阅模式&#xff0c;在文字高亮…...

python 基础知识点(蓝桥杯python科目个人复习计划32)

今日复习内容&#xff1a;基础算法中的位运算 1.简介 位运算就是对二进制进行操作的运算方式&#xff0c;分为与运算&#xff0c;或运算&#xff0c;异或运算&#xff0c;取反&#xff0c;左移和右移。 &#xff08;1&#xff09;与运算 xyx&y000010100111 (2)或运算 …...

(算法二)滑动窗口

滑动窗口&#xff1a;既一块区域进行滑动&#xff0c;且不回退 往往解决的是一段连续空间中满足条件的最长或者最短子数组&#xff08;串&#xff09; 是由暴力解法&#xff08;优化&#xff09;——>不回退的滑动窗口解法 长度最小的子数组 无重复字符的最长子数组 此类题…...

【Go语言成长之路】Hello Go

文章目录 Hello Go一、建立工程目录二、开启代码追踪三、编写代码四、测试代码 Hello Go 一、建立工程目录 pzspzs-ubuntu22:~$ mkdir go_study/hello -p pzspzs-ubuntu22:~$ cd go_study/hello​ 在hello目录下&#xff0c;我们会编写属于自己的第一个Go demo例子&#xff0…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

VSCode 使用CMake 构建 Qt 5 窗口程序

首先,目录结构如下图: 运行效果: cmake -B build cmake --build build 运行: windeployqt.exe F:\testQt5\build\Debug\app.exe main.cpp #include "mainwindow.h"#include <QAppli...

【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录

#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...