使用QT界面运行roslaunch,roslaunch,roscore等

news2024/9/24 1:49:11

QT通过界面运行rosrun,roslaunch,roscore等

  • QT 运行roslaunch
  • 加入ui界面
    • 修改cmakelist
    • 运行
  • 使用qt界面运行rosrun,roscore,roslaunch等
    • 方法一
    • 方法二
    • 方法三

QT 运行roslaunch

首先需要使用QT安装好ROS插件,并且配置好环境,这个在之前的文章已经说过了,不再进行赘述

加入ui界面

右键src选择添加新文件->Qt设计器界面类->main mainwindow
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择下一步,就会生成这些文件
然后添加一个main.cpp

#include "mainwindow.h"
#include "QMainWindow"
#include "QApplication"
int main(int argc, char **argv)
{
    // ros::init(argc, argv, "tutorial_pkg1_pubnode1");
    // ros::NodeHandle nh;
    QApplication a(argc,argv);
    MainWindow w;
    w.show();
    return a.exec();
}

打开mainwidow.ui 手动添加一个按钮并保存
在这里插入图片描述

修改cmakelist

接下来是比较重要的一部,修改cmakelist才能使我们做的工作被正确的编译运行
首先要把QT链接到工程中来

set(CMAKE_AUTOMOC ON) # Meta-Object Compiler
set(CMAKE_AUTORCC ON) # Resource Compiler
set(CMAKE_AUTOUIC ON) # User Interface Compiler
find_package(Qt5 COMPONENTS
        Core
        Gui
        Widgets
        REQUIRED)
catkin_package(
  INCLUDE_DIRS include
#  LIBRARIES test
  CATKIN_DEPENDS roscpp rospy std_msgs
#  DEPENDS system_lib
)
add_executable(main src/main.cpp
                src/mainwindow.cpp
                src/mainwindow.h
                src/mainwindow.ui)
target_link_libraries(main
    ${catkin_LIBRARIES}
    Qt5::Core
    Qt5::Gui
    Qt5::Widgets)

可以根据自己的情况进行修改

运行

左上角构建->重新构建,构建完成之后配置一下项目->运行
在这里插入图片描述执行档这里选择一下,其他的不用管
然后切回到编辑页面点击右下角三角进行运行,可以看到我们刚才做好的界面

在这里插入图片描述
现在我们关闭它,接下来使用这个界面来代替命令行的操作。

使用qt界面运行rosrun,roscore,roslaunch等

页面切到mainwindow.ui
在这里插入图片描述右键控件之后选择槽函数,转到槽函数

方法一

例:启动rviz

	#include "mainwindow.h"
	#include "ui_mainwindow.h"
	#include "QProcess"
	#include "QDebug"
	#include <iostream>
    QProcess *process = new QProcess(this);
    process->start("rosrun", QStringList() << "rviz" << "rviz");
    // 等待rosrun命令执行完成,监测执行状态
    if (!process->waitForStarted()) {
        qDebug() << "Failed to start rosrun command:" << process->errorString();
    }

    if (!process->waitForFinished()) {
        qDebug() << "Failed to finish rosrun command:" << process->errorString();
    } else {
        qDebug() << "rosrun command output:";
        qDebug() << process->readAllStandardOutput();
    }
    delete process;

使用的时候要将ros运行起来,可以手动在终端打开使用roscore打开rosmaster

方法二

也可以直接在界面中运行roscore,方法如如下

    QString command = "roscore";
    QProcess *tprocess = new QProcess(this);
    tprocess->start("/bin/bash", QStringList() << "-c" << command);

方法三

以上两种方法会直接运行,如果我们想在终端终端中打开,查看终端里面输出的日志信息等,可以用下面这种方法

system("gnome-terminal -x bash -c 'rosrun rviz rviz' ");//打开一个终端并执行内容

运行之后就会发现在打开rviz的同时也会打开一个终端显示日志消息

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

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

相关文章

nvm ls-remote: N/A

背景&#xff1a; 项目因为node版本问题运行失败&#xff0c;在彻底删除node后再重新安装 问题描述&#xff1a; 原因分析&#xff1a; 可能是因为终端不能获取镜像包 解决办法&#xff1a; 【方法一】 输入&#xff1a; step1. export NVM_NODEJS_ORG_MIRRORIndex of …

数据处理与统计分析篇-day01-Linux基础与环境搭建

day01-Linux基础 计算机简介 概述 电子计算机, 电脑, PC, Computer, 就是由 软件 硬件组成的 电子设备. 组成 计算机硬件 CPU(运算器, 控制器) 存储器(内存, 外存) 输入设备 输出设备 计算机软件 系统软件: 充当 用户 和 计算机硬件之间的 桥梁的. PC端: windows, Linu…

Elasticsearch 使用误区之五——单次请求获取大量数据

在使用 Elasticsearch 进行数据查询时&#xff0c;很多开发者、读者会遇到这样的问题&#xff1a;一次性检索大量数据&#xff0c;导致查询速度缓慢、网络延迟增加&#xff0c;甚至影响系统的整体性能。 单次获取过多数据不仅增加了网络传输的负担&#xff0c;还会使查询过程复…

Vue 中的 Web Workers:提升性能与流畅度

大家可能都听到过 Web Workers&#xff0c;那究竟如何使用呢&#xff1f;可以往下了解一下。 1. 什么是 Web Workers&#xff1f; Web Workers 是现代浏览器提供的一种机制&#xff0c;允许我们在主线程之外运行 JavaScript 脚本&#xff0c;避免阻塞 UI 渲染和用户交互操作。…

verilog vscode 与AI 插件

Verilog 轻量化开发环境 背景 笔者常用的开发环境 VIAVDO, 体积巨大&#xff0c;自带编辑器除了linting 能用&#xff0c;编辑器几乎不能用&#xff0c;仿真界面很友好&#xff0c;但是速度比较慢。Sublime Text, 非常好用的编辑器&#xff0c;各种插件使用verilog 非常方便…

深入理解Java虚拟机:Jvm总结-Java内存区域与内存溢出异常

第二章 Java内存区域与内存溢出异常 2.1 意义 对于C、C程序开发来说&#xff0c;程序员需要维护每一个对象从开始到终结。Java的虚拟自动内存管理机制&#xff0c;让java程序员不需要手写delete或者free代码&#xff0c;不容易出现内存泄漏和内存溢出问题&#xff0c;但是如果…

CSGHub携手Nvidia NIM、阿里计算巢打造企业级私有化部署解决方案

强强联合 人工智能与大数据的迅速发展&#xff0c;大模型的推理应用和资产管理已成为企业数字化转型的重要组成部分&#xff0c;企业正寻求高效、安全的AI模型部署解决方案。为应对日益增长的计算需求和复杂的数据管理挑战&#xff0c;CSGHub、Nvidia和阿里云计算巢强强联手&a…

Frozen CLIP: A Strong Backbone for Weakly Supervised Semantic Segmentation

摘要 弱监督语义分割在图像级标签方面取得了巨大的成就。最近的几种方法使用CLIP模型生成伪标签来训练单个分割模型&#xff0c;而没有尝试将CLIP模型作为主干&#xff0c;直接分割具有图像级标签的对象。在本文中&#xff0c;我们提出了 WeCLIP&#xff0c;一个基于 CLIP 的单…

【笔记】自动驾驶预测与决策规划_Part1_自动驾驶决策规划简介

自动驾驶决策规划简介 0、前言1、自动驾驶概述1.1 预测&#xff08;Prediction&#xff09;1.2 决策&#xff08;Decision Making&#xff09;1.3 规划&#xff08;Planning&#xff09; 2、自动驾驶历史和背景3、自动驾驶级别和分类4、预测决策规划的重要性4.1 预测的重要性4.…

环境搭建---部署rabbitmq集群

rabbitmq下载&#xff1a;https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.34/rabbitmq-server-generic-unix-3.8.34.tar.xz erlang下载&#xff1a;https://github.com/erlang/otp/releases/download/OTP-24.3.4.1/otp_src_24.3.4.1.tar.gz 配置主机名 …

MySQL原理之UUID主键分析,插入或更新语法分析

文章目录 1 MySQL不能用UUID做主键1.1 前言1.2 mysql和程序实例1.2.1 准备工作1.2.2 开始测试1.2.3 程序写入结果1.2.4 效率测试结果 1.3 使用uuid和自增id的索引结构对比1.3.1 自增id1.3.2 uuid 1.4 自增id缺点1.5 雪花算法 2 插入或更新2.1 on duplicate key2.1.1 定义2.1.2 …

git版本问题Your branch is behind ‘origin/dev‘by 2 commits,

git版本问题 一个不小心点击了版本的修改&#xff0c;于是就进入了翻滚中&#xff0c;回不来了 遇事还是不要慌&#xff0c;出现这个问题&#xff0c;如果那些你不需要&#xff0c;只是需要回到某一个版本&#xff0c;那么就是需要 git reset --hard origin/master 上面这就…

Vue3入门 - 登录功能开发(Vue3+ts+Pinia+Element Plus)

Vue3中实现登录功能&#xff0c;通常涉及到创建一个表单&#xff0c;用户输入用户名和密码&#xff0c;然后将信息发送到后端进行验证&#xff0c;得到响应结果后作出相应操作。 一、创建项目 这里他用pnpm进行项目的创建的&#xff0c;所以需要事先全局安装pnpm&#xff08;在…

神经网络的非线性激活

文章目录 一、神经网络的非线性激活是什么二、非线性激活常用函数三、非线性激活的实际演示 一、神经网络的非线性激活是什么 神经网络的非线性激活函数的主要作用是引入非线性变换&#xff0c;从而使网络能够学习和逼近复杂的函数关系。在神经网络中&#xff0c;线性变换&…

[产品管理-4]:NPDP新产品开发 - 2 - 战略 - 制定企业经营战略目标的结构化方法与工具

目录 一、SWOT分析工具 1、SWOT分析工具概述 2、SWOT分析与企业战略目标制定的关系 3、SWOT分析在企业战略目标制定中的应用实例 4、SWOT分析的改进与应用建议 二、P E S T L E 分 析&#xff1a;外部环境分析 2.1 概述 1. 政治因素&#xff08;Political&#xff09; …

COCOS:(飞机大战08)子弹和飞机添加碰撞器和刚体

做两个物体的碰撞有2种方式&#xff1a;碰撞检测和触发检测 这里子弹不能和飞机使用碰撞检测&#xff0c;因为会影响到敌机的运动&#xff0c;所有选择使用触发检测 从预制体Prefabs文件中&#xff0c;将子弹Bullet1和Bullet2拖到Canvas下 选中子弹&#xff0c;添加组件&#…

多线程:java中的实现

实现1&#xff1a; 通过java.util.concurrent.atomic中的原子性数据实现 static class Counter {// 通过加锁实现同步public static int count 0;public static final Object obj new Object(); // 通过原子性的整型来实现同步public static AtomicInteger c…

DesignPattern设计模式

1 前言 1.1 内容概要 理解使用设计模式的目的掌握软件设计的SOLID原则理解单例的思想&#xff0c;并且能够设计一个单例理解工厂设计模式的思想&#xff0c;能够设计简单工厂&#xff0c;理解工厂方法了解建造者模式的思想&#xff0c;掌握其代码风格理解代理设计模式的思想&a…

应用层自定义协议与序列化

一、理解应用层 上一篇文章http://t.csdnimg.cn/931k6简单介绍了如何写tcp / udp 网络服务&#xff0c;但是其实始终是在应用层。 一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层。 二、再谈协议 协议是一种 "约定"。socket api 的接口, 在读…

TiDB从0到1学习笔记(精华篇)

历时四个月&#xff0c;恭喜赵老师的《TiDB从0到1》 系列文章顺利完结&#xff0c;小编再次梳理一遍文稿&#xff0c;并附注解分享给大家。 整体架构 从 TiDB 1.0 到 8.0&#xff0c;TiDB 的体系结构一直在不断演进。接下来让我们一起看看整体架构的变化。 TiDB v1 TiDB v1&…