基于C++实现的智慧农业移动巡检系统设计(附源码)

news2024/9/24 1:27:41

Overview

在这里插入图片描述

项目源码

https://download.csdn.net/download/DeepLearning_/87863659
此项目开始于2023年2月7日,项目内容为一种AGV图形化操作系统,采用ROS2GO开发,开发环境为Ubuntu18.04、ROS melodic、Qt5.9.9,该项目作为23年挑战杯项目的上位机。

已实现功能:

  • 用户登录(上位机IP地址与机载电脑主机名称,支持环境变量登录和保存登录设置)
  • 传感器运动信号可视化(线速度、角速度、转向、档位、电池电量)
  • 环境信号可视化(空气湿度、空气温度、二氧化碳含量、光照度、雨量、风速)
  • 话题更新与可视化(包括话题名和话题类型)
  • 图传信号可视化(通过话题名订阅)
  • 运行状态可视化与控制(继承rviz部分功能:Grid、TF、LaserScan、PointCloud2、RobotModel、Map、Global Map、Local Map,估计位姿(原2D Pose Estimate)、目标位姿(原2D Nav Goal)、更新返航点、返航)
  • 运动控制器(包括差速和全向轮控制器、线速度和角速度调节)
  • 终端模拟器(目前仅支持常规Linux命令,不具备杀死进程的功能)
  • 信号采集(用户名、bag名、bag路径,bag列表,回放、录制、停止录制与回放、删除bag文件)

由于版本更新、不同设备上环境存在差异,可能导致无法正常运行,请自行查找相关资料。


一. 运行软件

1. 安装ros对qt pkg的支持

sudo apt-get install ros-melodic-qt-create
sudo apt-get install ros-melodic-qt-build

2. 文件路径参考

rosbash放在根目录下:

  • /home/user/rosbash

robot_gui_app放在工作空间的src下:

  • /home/user/catkin_ws/src/robot_gui_app

3. 编译

cd /home/user/catkin_ws
catkin_make

编译结果如下:

4. 运行

roscore
rosrun ros_gui_app ros_gui_app

运行效果如下:
在这里插入图片描述

二. 功能说明

1. 登录界面

此界面需填写上位机IP地址:运行Robot GUI APP的电脑可通过终端查询:

ifconfig

若只在本地进行仿真测试,IP地址和主机名称一致即可,如下所示:
在这里插入图片描述

启动节点

roscore

点击连接即可实现ROS与软件的通讯,日志处会持续打印连接状态,此处还可以添加其他信息类型,例如后续加入传感器的状态检测。两个CheckBox处依次勾选后可实现环境变量启动连接和记住登录设置,实现在Master存在时自动连接。没有节点运行时会提示No Master且无法启动软件。

2. 传感器信息(Turtlebot3仿真环境下测试)

  • 构建仿真环境:
roslaunch turtlebot3_gazebo turtlebot3_world.launch
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
  • 运动信号:
    控制turtlebot运动
    在这里插入图片描述

仪表盘显示线速度,字母D、N、P、R表示档位,左侧是电量,箭头表示方向,中间的数值是角速度。
在这里插入图片描述

  • 环境数据
    此处未连接传感器,需根据硬件设置对应的接口函数,显示效果如下:
    在这里插入图片描述

  • 图传信号:
    由于不同使用场景下图像话题不一致,这里设计为在Line Edit中填写自己需要的图像话题名称来订阅图像,turtlebot3仿真环境中没有此类信号,我将会在下文Kitti数据集处演示。
    在这里插入图片描述

  • 话题:
    点击更新列表即可查看当前活跃的话题名及其类型,选中话题可通过CTRL+C复制文本(包括括号内的话题类型),因此在订阅图传信号以及下文Qviz中订阅话题时需删除类型信息。
    在这里插入图片描述

3. Qviz与运动状态(Turtlebot3仿真环境下测试)

  • 构建仿真环境:
    测试地图文件路径参考:
    /home/user/map.pgm
    /home/user/map.yaml
roslaunch turtlebot3_gazebo turtlebot3_world.launch
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=/home/user/map.yaml

运行软件后勾选Qviz处的控件,效果如下:
在这里插入图片描述

  • Display处控件使用逻辑与rviz一致,具备阉割版栅格、TF坐标变换、激光雷达、点云、机器人模型、地图、运动路径、全局代价地图及其路径规划、局部代价地图及其路径规划等常用功能,可根据后续场景继续完善。
    在这里插入图片描述

  • 运动控制器处可通过键盘或PushButtn控制机器人的运动,ODW处CheckBox用于切换全向轮控制(需适配全向轮底盘),下方两个Horizontal Slider用于调节运动线速度(cm/s)和角速度(rad/s)。
    在这里插入图片描述

  • 运行状态处显示画面,上方有4个PushButtn,其中估计位姿目标位姿与rviz中2D Pose Estimate2D Nav Goal作用一致,用于机器人的重定位和运动位姿设置,更新返航点可将当前位姿设定为返航点,任意位置点击开始返航后机器人都会运动到返航点处。
    在这里插入图片描述

4. 终端模拟器

此页面具备基本的Linux终端功能,便于快速查看信息,在Line Edit中输入命令并回车,结果会输出在下方的Text Browser中,如下所示:
在这里插入图片描述

5. 信号采集

此页面用于.bag文件的管理,便于采集和回放数据
在这里插入图片描述

  • 用户名处填写自己电脑系统对应的用户名,即根目录/home/user中的user,此信息会影响.sh文件的读取,务必填写正确

  • Bag路径处填写相对于/home/user的路径,例如要管理/home/user/rosbag下的bag文件,填写/rosbag即可,此处不填写默认路径为/home/user。

  • Bag名称处填写录制文件的名称,此处不填写默认为录制时间。

  • 点击Bag列表更新会过滤出该路径下全部的.bag文件,点击右侧Combo Box可列出全部.bag文件。

  • 点击播放会回放Combo Box处选中的文件,效果如下:

  • 点击录制会弹出终端并开始记录目前所有活跃的话题,效果如下:
    在这里插入图片描述

  • 点击停止会弹出终端询问需要kill掉的节点,录制时选则带有record关键字的节点并回车即可结束录制,同理回放时选择带有play关键字的节点即可结束回放(注意别kill错了!!!),效果如下:
    在这里插入图片描述

  • 点击删除可删除Combo Box处选中的文件,无法还原。

  • 日志会打印上述所有操作的信息,效果如下:
    在这里插入图片描述

  • 第三方数据集:
    任意.bag格式的数据集均可播放,这里以kitti数据集为例,路径填写为kitti数据集目录下,更新列表,选中kitti数据集,点击播放:
    在这里插入图片描述

此时到话题处刷新,可以看到数据集内的话题:
在这里插入图片描述

到上方图传信号处订阅所需画面的话题名即可显示相机图像:
在这里插入图片描述

到Qviz处修改Fixed_FrameTFPointCloud2的参数,即可看到坐标系和点云:
在这里插入图片描述

三. 二次开发

1. 安装qtcreator

安装Qt 5.9.9 linux版本
去官网下载:http://download.qt.io/archive/qt/5.9/5.9.9/qt-opensource-linux-x64-5.9.9.run
添加可执行权限:

sudo chmod a+x qt-opensource-linux-x64-xxxx.run

运行安装包,完成注册,组件选择Desktop gcc 64-bit,完成安装。

2. 配置环境变量:

sudo nano /usr/bin/qtcreator

添加内容如下:

#!/bin/sh 
export QT_HOME=/home/user/Qtxxx/Tools/QtCreator/bin 
$QT_HOME/qtcreator $*

更改可执行权限:

sudo chmod a+x /usr/bin/qtcreator

3. 运行qtcreator:

  • 点击qtcreator图标
  • 或从终端启动(ROS项目必须从终端启动刷新环境变量)
qtcreator

4. 项目展开:

  • 选择robot_gui_app/CMakeLists.txt展开
  • 若在ROS工作空间下,选择catkin_ws/src/CMakeLists.txt展开。

项目源码下载:

https://download.csdn.net/download/DeepLearning_/87863659

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

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

相关文章

js函数this指向

目录 this的绑定规则  绑定一:默认绑定; ​ 绑定二:隐式绑定; ​ 绑定三:显式绑定; 通过call或者apply绑定this对象  绑定四:new绑定; 内置函数的绑定 this绑定规则的…

给电脑重装系统的时间需要多久才能装好

在进行电脑重装系统时,如果遇到系统安装时间过长的情况,可能会引起用户的困惑和不安。本文将介绍一些常见的原因和解决方法,以帮助您理解并应对系统安装时间过长的情况。 ​工具/原料: 系统版本:Windows 10 专业版 品…

《Java并发编程实战》课程笔记(九)

Semaphore:如何快速实现一个限流器? 信号量模型 信号量模型还是很简单的,可以简单概括为:一个计数器,一个等待队列,三个方法。 在信号量模型里,计数器和等待队列对外是透明的,所以…

chatgpt赋能python:Python图片大小设置的SEO指南

Python 图片大小设置的SEO指南 在网站设计和开发中,图片大小通常是一个重要的问题。合适的图片大小可以极大地影响用户体验和搜索引擎优化(SEO)结果。Python是一种广泛使用的编程语言,可以用来控制和设置图片大小。在本文中&…

BUUCTF MD5

密文: e00cf25ad42683b3df678c61f42c6bda 简述: 一般MD5值是32位由数字“0-9”和字母“a-f”所组成的字符串,字母大小写统一;如果出现这个范围以外的字符说明这可能是个错误的md5值,就没必要再拿去解密了。 特征&…

SQL-DDL操作数据库、表

SQL-DDL操作数据库、表 1 DDL:操作数据库 1.1 查询数据库 查询所有的数据库 SHOW DATABASES; show databases;1.2 创建数据库 创建数据库 CREATE DATABASE 数据库名称; create database 数据库名称;创建数据库(判断,如果不存在则创建) CREATE DATABASE IF NOT…

SyntaxError:Unexpected end of JSON input while parsing near xxxxx 报错及解决

环境:Node 12.21.0、npm 6.14.11 (其他版本也会出现这样的问题) 找到报错日志并进行查看: less /Users/roc/.npm/_logs/2023-06-05T02_23_51_747Z-debug.log报错信息如下: 19067 verbose stack SyntaxError: Unexp…

【遇到的问题】JAVA应用程序处于安全原因被阻止。

遇到的问题: 直入正题,远程服务器用JAVA连接KVM报以下错(如图)。 应用程序处于安全原因被阻止 无法验证证书 将不执行该应用程序 名称:Java viewer 发行者:ATEN 位置:https://192.168.210:443 原因: 通过…

vue3实现高德地图多点标注(so easy)

vue3实现高德地图多点标注(so easy) 前言思路清晰,抽丝剥茧必要的准备工作最简单的部分处理数据之前(最关键的思路)效果完整代码 前言 非常感谢你能打开这篇博客,我想你一定是遇到了地图多点标注有关的问题…

采购管理系统对企业有什么作用?原来用零代码搭建如此便捷

什么是采购管理系统? 采购管理系统是一种企业内部管理软件,用于协调和管理企业的采购过程。它涵盖了采购计划、询价、比价、采购订单、采购合同、采购收货、发票等一系列采购环节,以及与供应商的信息和交流。其主要目的是:优化采…

M12圆形连接器公母对接带线3PIN4PIN

随着工业自动化的发展,M12圆形连接器公母对接带线3PIN4PIN作为一种重要的连接器件,被广泛应用于各种工业设备中。本文将详细介绍M12连接器的特点以及应用场景,为大家解答M12连接器的相关问题。 M12连接器主要由连接器头、插座和电缆组成&…

【Web网站服务】Nginx Rewrite重写模块

Nginx Rewrite 一、常用的Nginx 正则表达式二、location 匹配的范围2.1location实验 三、rewrite模块3.1rewrite跳转3.2rewrite执行顺3.3flag标记说明3.4rewrite中常用的全局变量3.5rewrite实验3.5.1 基于域名的跳转3.5.2基于客户端IP访问跳转3.5.3基于旧域名跳转到新域名后面加…

三、HAL_无源蜂鸣器的驱动

1、开发环境 (1)KeilMDK:V5.38.0.0 (2)STM32CubeMX:V6.8.1 (3)MCU:STM32F407ZGT6 2、无源蜂鸣器简介 无源蜂鸣器内部没有振荡源,需要采用一定频率的方波才能驱动发声。详情参开以下文章。 八、51单片机之蜂鸣器_51蜂鸣器_朱嘉…

DINO代码学习笔记(三)

DINO代码学习笔记(一)中已经将输入transformer之前的参数处理给捋了一遍 DINO代码学习笔记(二)中将encoder部分给捋了一遍 本篇进入decoder,这里先对encoder做一些假设,基于DINO代码学习笔记(…

使用Harbor 和 Kraken 优化镜像拉取速

一、P2P镜像分发简述 随着云原生架构被越来越多的企业接受,企业应用中容器集群的规模也越来越大。当容器集群达到一定的规模且单容器应用副本数达到一定级别时,集群中容器镜像的分发将面临挑战。   P2P(Peer-to-Peer,点对点&am…

股票策略社群实盘展示

量化策略开发,高质量社群,交易思路分享等相关内容 大家好,我是Le Chiffre 从今年1月份开始,我们开始了松鼠股票策略社群,历经5个月,发布了5个策略。其中有2个多因子,2个etf,1个网格…

一款企业级的供应链采购系统,已开源

介绍 基于pig微服务架构打造 供应链系统,采购配送系统。为客户提供仓储管理、订单管理、打单、货源采购、分拣、配送等系统功能。 软件架构 采用 J2EE 技术体系,基于Spring Cloud微服务框架进行封装,平台设计灵活可扩展、可移植、可应对高…

Java使用EasyCode自动生成代码工具分享

此为内容创作模板,在发布之前请将不必要的内容删除 做Java的项目开发,会使用各种代码自动生成工具,今天就来介绍一款EasyCode插件,废话不多说了,看看怎么安装和使用。 一、EasyCode插件 EasyCode的安装 在Idea的Sett…

在云服务器上安装MySQL (MariaDB) 数据库并与Python连接和互动

诸神缄默不语-个人CSDN博文目录 本文介绍如何在云服务器(CentOS)上安装MySQL数据库(其实是MariaDB数据库,但是当成MySQL用也没什么问题),并用pymysql与原生Python代码进行互动,或用Flask-SQLAl…

SpringSecurityOAuth已停更,来看一看进化版本Spring Authorization Server

Spring Authorization Server是Spring Security OAuth的进化版本,Spring Security OAuth官方已经宣布“End of Life”了。Spring Security OAuth使用的是OAuth2.0标准而Spring Authorization Serve引入了对OAuth 2.1和OpenID Connect 1.0规范的支持,并提…