【六足机器人】04上位机开发

图:QT界面效果图

 一、主要功能介绍

1.1 登录界面

        登录界面,用来判断是否账号密码输入正确,错误将会弹出消息框。

void first::on_enroll_clicked(){
    if(ui->account->text()=="共创芯未来"&&ui->password->text()=="2024"){
        my_next->show();
        this->hide();
    }else
        QMessageBox::about(this,"提示","密码错误");
}

1.2 创建服务器

        在主窗口的的构造函数中,初始化TCP服务器并监听指定的端口。并实现newConnection函数来处理新的连接请求。当有客户端尝试连接时,这个函数将被调用。

// 初始化TCP服务器:
my_server = new QTcpServer(this);
connect(my_server,SIGNAL(newConnection()),this,SLOT(newConnection_Slot()));
// 处理连接
void next::newConnection_Slot(){
    my_socket = my_server->nextPendingConnection();//得到通信的套接字对象
    connect(my_socket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));
}

1.3 编辑发送指令

//发送指令
void next::on_pushButton_TX_clicked(){
    QString SendCon = ui->lineEdit_TxAT->text().toLocal8Bit().data();
    //封装编码
    QByteArray receiveDate;
    QTextCodec *tc = QTextCodec::codecForName("GBK");  //编码转换,否则乱码
    //向输出框打印发送的数据,同时向下位机发送指令
    ui->plainTextEdit_Rxdata->appendPlainText(str2);
    my_socket->write(ui->lineEdit_TxAT->text().toLocal8Bit().data());
}

1.4 实现按键切换效果

        设置标志位,实现UI界面的切换效果。

int flag_forward = 0;   //前进标志位
int flag_back = 0;      //后退标志位
int flag_left = 0;      //左转标志位
int flag_right = 0;     //右转标志位
int flag_mode = 0;      //避障模式标志位

效果如下图所示:

图:UI界面按键切换效果

二、上位机代码

2.1 first.c

#include "first.h"
#include "ui_first.h"

first::first(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::first)
{
    ui->setupUi(this);

    my_next = new next;

    this->setWindowIcon(QIcon(":/myResource/APP3.png"));
    this->setWindowTitle("登录");

    ui->account->setStyleSheet(
                               "border-style: solid;" /* 边框样式 */
                               "color: rgb(255, 255, 255);"
                               //"font: 15pt "华文中宋";"
                               "background-color: rgb(0, 0, 0);"
                               "border-width: 7px;" /* 边框宽度 */
                               "border-radius: 10px;" /* 边框圆角 */
                               );
    ui->account->setAlignment(Qt::AlignCenter); // 设置文本水平居中
    ui->account->setText("共创芯未来");
    ui->password->setStyleSheet(
                                "border-style: solid;" /* 边框样式 */
                                "color: rgb(255, 255, 255);"
                                //"font: 15pt "华文中宋";"
                                "background-color: rgb(0, 0, 0);"
                                "border-width: 7px;" /* 边框宽度 */
                                "border-radius: 10px;" /* 边框圆角 */
                                );

    ui->password->setAlignment(Qt::AlignCenter); // 设置文本水平居中
    ui->password->setText("2024");
}

first::~first()
{
    delete ui;
}

void first::on_enroll_clicked()
{
    if(ui->account->text()=="共创芯未来"&&ui->password->text()=="2024"){
        my_next->show();
        this->hide();
    }
    else
    {
        QMessageBox::about(this,"提示","密码错误");
        //ui->lineEdit->clear();
        //ui->lineEdit_2->clear();
    }
}

2.2 first.h

#ifndef FIRST_H
#define FIRST_H

#include <QWidget>
#include <QMessageBox>
#include "next.h"

namespace Ui {
class first;
}

class first : public QWidget
{
    Q_OBJECT

public:
    explicit first(QWidget *parent = 0);
    ~first();

private slots:
    void on_enroll_clicked();

private:
    Ui::first *ui;

    next * my_next;
};

#endif // FIRST_H

2.3 next.c

#include "next.h"
#include "ui_next.h"
#include <QTextCodec>

int flag_connect = 0;

next::next(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::next)
{
    ui->setupUi(this);

    this->setWindowIcon(QIcon(":/myResource/APP4.png"));
    this->setWindowTitle("六足机器人控制系统                                                                 2024共创芯未来");

    //QPixmap *pixmap = new QPixmap(":/myResource/2024应用赛道作品视频封面.png");
    //pixmap->scaled(ui->label->size(), Qt::KeepAspectRatio);
    //ui->label->setScaledContents(true);
    //ui->label->setPixmap(*pixmap);

    //实例化对象
    my_socket = new QTcpSocket;
    my_server = new QTcpServer(this);
    my_timer = new QTimer;

    //关联信号与槽
    //套接字对象存在一个信号connected,该信号触发的时机是套接字连接成功,当信号触发由该界面的connect_success函数进行响应
    connect(my_socket,SIGNAL(connected()),this,SLOT(connect_success()));
    //套接字对象存在一个信号readyread,该信号触发的时机是套接字内存在数据可读,当信号触发则由该界面的recv_data_from_server函数进行响应
    connect(my_socket,SIGNAL(readyRead()),this,SLOT(recv_data_from_server()));
    connect(my_timer,SIGNAL(timeout()),this,SLOT(time_out()));

    //初始化TCP服务器:在主窗口的构造函数中,初始化TCP服务器并监听指定的端口。
    //my_server = new QTcpServer(this);
    connect(my_server,SIGNAL(newConnection()),this,SLOT(newConnection_Slot()));
    //my_server->listen(QHostAddress::Any, port); // 监听任意地址的****端口
    //QHostAddress serverAddress("192.168.45.36");
    //my_server->listen(serverAddress, 6666);
}

next::~next()
{
    delete ui;
}

//处理连接:实现NewConnection函数来处理新的连接请求。当有客户端尝试连接时,这个函数将被调用。
void next::newConnection_Slot(){

    flag_connect = 1;
    my_socket = my_server->nextPendingConnection();//得到通信的套接字对象
    connect(my_socket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));

    connect(my_socket,SIGNAL(disconnected()),this,SLOT(disconnected_Slot()));
    ui->label_3->setStyleSheet("border-image: url(:/myResource/connect.png)");
}

//服务器或客户机连接状态
void next::disconnected_Slot(){
    flag_connect = 0;
    my_socket->close();
    ui->label_3->setStyleSheet("border-image: url(:/myResource/discon.png)");
}

void next::readyRead_Slot()
{
    QByteArray receivedData = my_socket->readAll(); // 直接读取所有可用数据

    if (!receivedData.isEmpty())
    {
        QTextCodec *tc = QTextCodec::codecForName("GBK"); // 只在需要时创建编码器
        QString strBuf = tc->toUnicode(receivedData); // 编码转换
        ui->plainTextEdit_Rxdata->appendPlainText(strBuf);
    }
    // receivedData.clear(); 在这里不需要被清除,因为它是局部变量
}

//开启服务器
void next::on_pushButton_connect_clicked()
{
    QString port = ui->lineEdit_port->text();
    my_server->listen(QHostAddress::Any, atoi(port.toStdString().data())); // 监听任意地址的****端口
    //QString ip=ui->lineEdit_ip->text();
    //QString port=ui->lineEdit_port->text();
    //my_socket->connectToHost(QHostAddress(ip),atoi(port.toStdString().data()));
}


//开启定时器计时
void next::on_pushButton_oncamera_clicked()
{
    my_timer->start(1000);
}
//暂停定时器计时
void next::on_pushButton_offcamera_clicked()
{
    my_timer->stop();
}

void next::recv_data_from_server()
{
    if(flag_camera == 0){
        //获取图像大小
        char pic_len_buf[10] = {0};
        my_socket->read(pic_len_buf,10);
        pic_len = atoi(pic_len_buf);
        flag_camera = 1;
    }else if(flag_camera == 1){
        //当套接字内数据还没累计到一张图像时暂时不做读取
        if(my_socket->bytesAvailable()<pic_len){
            return ;
        }
        //获取图像内容,并显示
        char pic_buf[1024*1024] = {0};
        my_socket->read(pic_buf,pic_len);
        //定义一个QPixmap对象
        QPixmap my_pixmap;
        my_pixmap.loadFromData((uchar*)pic_buf,pic_len);
        my_pixmap = my_pixmap.scaled(ui->label_2->size());
        ui->label_2->setScaledContents(true);
        ui->label_2->setPixmap(my_pixmap);
        flag_camera = 0;
    }
}

void next::connect_success()
{
    QMessageBox::about(this,"连接提示","连接成功");
}

void next::time_out()
{
    char buf[1024] = "get_pic";
    my_socket->write(buf,sizeof(buf));
}


//清空接收区
void next::on_pushButton_clear_clicked()
{
    ui->plainTextEdit_Rxdata->clear();
}
//发送指令
void next::on_pushButton_TX_clicked()
{
    QString SendCon = ui->lineEdit_TxAT->text().toLocal8Bit().data();
    if(flag_connect){
        if(SendCon!=""){

            //封装编码
            QByteArray receiveDate;
            QTextCodec *tc = QTextCodec::codecForName("GBK");  //编码转换,必须转换编码,否则乱码

            //对发送框编码
            receiveDate =  ui->lineEdit_TxAT->text().toLocal8Bit().data();
            QString strBuf=tc->toUnicode(receiveDate);

            //整合符号 ->
            QString  str = "->";
            QString str2 = str.append(strBuf);

             //向输出框打印发送的数据
             ui->plainTextEdit_Rxdata->appendPlainText(str2);
             my_socket->write(ui->lineEdit_TxAT->text().toLocal8Bit().data());
        }
        else{
            QMessageBox::critical(this,"警告","不能发送空白信息!");
        }
    }
    else
    {
        QMessageBox::critical(this,"提示","发送失败,未连接!");
    }
}
//前进指令
void next::on_pushButton_forward_clicked()
{
    if(flag_forward == 0){
        //char buff[20]="forward_on";
        char buff[20]="2";
        ui->pushButton_forward->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    //"font: 15pt "华文中宋";"
                    "color: rgb(0, 255, 255);"
                    "border-width: 7px;" /* 边框宽度 */
                    "border-radius: 10px;" /* 边框圆角 */
                    "border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 0, 0, 0), stop:0.52 rgba(0, 0, 0, 0), stop:0.565 rgba(82, 121, 76, 33), stop:0.65 rgba(159, 235, 148, 64), stop:0.721925 rgba(255, 238, 150, 129), stop:0.77 rgba(255, 128, 128, 204), stop:0.89 rgba(191, 128, 255, 64), stop:1 rgba(0, 0, 0, 0));"
                    );

        my_socket->write(buff,strlen(buff));
        flag_forward = 1;
    }else{
        ui->pushButton_forward->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    //"font: 15pt "华文中宋";"
                    "color: rgb(139, 139, 139);"
                    "border-width: 7px;" /* 边框宽度 */
                    "border-radius: 10px;" /* 边框圆角 */
                    "border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 0, 0, 0), stop:0.52 rgba(0, 0, 0, 0), stop:0.565 rgba(82, 121, 76, 33), stop:0.65 rgba(159, 235, 148, 64), stop:0.721925 rgba(255, 238, 150, 129), stop:0.77 rgba(255, 128, 128, 204), stop:0.89 rgba(191, 128, 255, 64), stop:1 rgba(0, 0, 0, 0));"
                    );

        //char buff[20]="forward_off";
        char buff[20]="22";
        my_socket->write(buff,strlen(buff));
        flag_forward = 0;
    }
}

void next::on_pushButton_right_clicked()
{
    if(flag_right== 0){
        char buff[20]="5";
        ui->pushButton_right->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    //"font: 15pt "华文中宋";"
                    "color: rgb(0, 255, 255);"
                    "border-width: 7px;" /* 边框宽度 */
                    "border-radius: 10px;" /* 边框圆角 */
                    "border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 0, 0, 0), stop:0.52 rgba(0, 0, 0, 0), stop:0.565 rgba(82, 121, 76, 33), stop:0.65 rgba(159, 235, 148, 64), stop:0.721925 rgba(255, 238, 150, 129), stop:0.77 rgba(255, 128, 128, 204), stop:0.89 rgba(191, 128, 255, 64), stop:1 rgba(0, 0, 0, 0));"
                    );

        my_socket->write(buff,strlen(buff));
        flag_right = 1;
    }else{
        ui->pushButton_right->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    //"font: 15pt "华文中宋";"
                    "color: rgb(139, 139, 139);"
                    "border-width: 7px;" /* 边框宽度 */
                    "border-radius: 10px;" /* 边框圆角 */
                    "border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 0, 0, 0), stop:0.52 rgba(0, 0, 0, 0), stop:0.565 rgba(82, 121, 76, 33), stop:0.65 rgba(159, 235, 148, 64), stop:0.721925 rgba(255, 238, 150, 129), stop:0.77 rgba(255, 128, 128, 204), stop:0.89 rgba(191, 128, 255, 64), stop:1 rgba(0, 0, 0, 0));"
                    );

        char buff[20]="55";
        my_socket->write(buff,strlen(buff));
        flag_right = 0;
    }
}

void next::on_pushButton_left_clicked()
{
    if(flag_left== 0){
        char buff[20]="4";
        ui->pushButton_left->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    //"font: 15pt "华文中宋";"
                    "color: rgb(0, 255, 255);"
                    "border-width: 7px;" /* 边框宽度 */
                    "border-radius: 10px;" /* 边框圆角 */
                    "border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 0, 0, 0), stop:0.52 rgba(0, 0, 0, 0), stop:0.565 rgba(82, 121, 76, 33), stop:0.65 rgba(159, 235, 148, 64), stop:0.721925 rgba(255, 238, 150, 129), stop:0.77 rgba(255, 128, 128, 204), stop:0.89 rgba(191, 128, 255, 64), stop:1 rgba(0, 0, 0, 0));"
                    );

        my_socket->write(buff,strlen(buff));
        flag_left = 1;
    }else{
        ui->pushButton_left->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    //"font: 15pt "华文中宋";"
                    "color: rgb(139, 139, 139);"
                    "border-width: 7px;" /* 边框宽度 */
                    "border-radius: 10px;" /* 边框圆角 */
                    "border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 0, 0, 0), stop:0.52 rgba(0, 0, 0, 0), stop:0.565 rgba(82, 121, 76, 33), stop:0.65 rgba(159, 235, 148, 64), stop:0.721925 rgba(255, 238, 150, 129), stop:0.77 rgba(255, 128, 128, 204), stop:0.89 rgba(191, 128, 255, 64), stop:1 rgba(0, 0, 0, 0));"
                    );

        char buff[20]="44";
        my_socket->write(buff,strlen(buff));
        flag_left = 0;
    }
}

void next::on_pushButton_back_clicked()
{
    if(flag_back== 0){
        char buff[20]="3";
        ui->pushButton_back->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    //"font: 15pt "华文中宋";"
                    "color: rgb(0, 255, 255);"
                    "border-width: 7px;" /* 边框宽度 */
                    "border-radius: 10px;" /* 边框圆角 */
                    "border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 0, 0, 0), stop:0.52 rgba(0, 0, 0, 0), stop:0.565 rgba(82, 121, 76, 33), stop:0.65 rgba(159, 235, 148, 64), stop:0.721925 rgba(255, 238, 150, 129), stop:0.77 rgba(255, 128, 128, 204), stop:0.89 rgba(191, 128, 255, 64), stop:1 rgba(0, 0, 0, 0));"
                    );

        my_socket->write(buff,strlen(buff));
        flag_back = 1;
    }else{
        ui->pushButton_back->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    //"font: 15pt "华文中宋";"
                    "color: rgb(139, 139, 139);"
                    "border-width: 7px;" /* 边框宽度 */
                    "border-radius: 10px;" /* 边框圆角 */
                    "border-color: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0 rgba(0, 0, 0, 0), stop:0.52 rgba(0, 0, 0, 0), stop:0.565 rgba(82, 121, 76, 33), stop:0.65 rgba(159, 235, 148, 64), stop:0.721925 rgba(255, 238, 150, 129), stop:0.77 rgba(255, 128, 128, 204), stop:0.89 rgba(191, 128, 255, 64), stop:1 rgba(0, 0, 0, 0));"
                    );

        char buff[20]="33";
        my_socket->write(buff,strlen(buff));
        flag_back = 0;
    }
}


void next::on_pushButton_mode_clicked()
{
    if(flag_mode == 0){
        char buff[20]="1";
        ui->pushButton_mode->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    "border-color: rgb(170, 255, 255);"
                    "color: rgb(0, 255, 255);"
                    "border-width: 7px;"/* 边框宽度 */
                    "border-radius: 25px;" /* 边框圆角 */
                    "background-color: rgb(148, 148, 148);");

        my_socket->write(buff,strlen(buff));
        flag_mode = 1;
    }else{
        ui->pushButton_mode->setStyleSheet(
                    "border-style: solid;" /* 边框样式 */
                    "color: rgb(176, 176, 176);"
                    "border-width: 7px;" /* 边框宽度 */
                    "border-radius: 25px;" /* 边框圆角 */);

        char buff[20]="0";
        my_socket->write(buff,strlen(buff));
        flag_mode = 0;
    }
}

2.4 next.h

#ifndef NEXT_H
#define NEXT_H

#include <QWidget>

#include <QTcpSocket>
#include <QTcpServer>
#include <QHostAddress>

#include <QPixmap>
#include <QMessageBox>

//定时器类头文件
#include <QTimer>

namespace Ui {
class next;
}

class next : public QWidget
{
    Q_OBJECT

public:
    explicit next(QWidget *parent = 0);
    ~next();

private slots:
    void on_pushButton_oncamera_clicked();

    void on_pushButton_offcamera_clicked();

    void recv_data_from_server();

    void connect_success();

    void time_out();

    void on_pushButton_connect_clicked();

    void on_pushButton_forward_clicked();

    void newConnection_Slot();
    void disconnected_Slot();
    void readyRead_Slot();

    void on_pushButton_clear_clicked();

    void on_pushButton_TX_clicked();

    void on_pushButton_right_clicked();

    void on_pushButton_left_clicked();

    void on_pushButton_back_clicked();


    void on_pushButton_mode_clicked();

private:
    Ui::next *ui;

    QTcpSocket * my_socket;

    QTcpServer * my_server;
    //定时器对象指针
    QTimer * my_timer;

    int flag_camera = 0;
    int pic_len;
    int flag_forward = 0;
    int flag_back = 0;
    int flag_left = 0;
    int flag_right = 0;
    int flag_mode = 0;
};

#endif // NEXT_H

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RockyLinux9编译安装MySQL5.7

原文链接&#xff1a;RockyLinux9编译安装MySQL5.7 - Liu Zijians Blog | 刘子健的博客 本文最后更新于 2024年12月15日 使用源码编译安装MySQL5.7 1.下载 打开MySQL-Community-Server官方下载页面:https://downloads.mysql.com/archives/community/ 筛选出要下载的版本&…

什么是3DEXPERIENCE SOLIDWORKS,它有哪些角色和功能?

将业界领先的 SOLIDWORKS 3D CAD 解决方案连接到基于单一云端产品开发环境 3DEXPERIENCE 平台。您的团队、数据和流程全部连接到一个平台进行高效的协作工作&#xff0c;从而能快速的做出更好的决策。 目 录&#xff1a; ★ 1 什么是3DEXPERIENCE SOLIDWORKS ★ 2 3DEXPERIE…

OpenCVE:一款自动收集NVD、MITRE等多源知名漏洞库的开源工具,累计收录CVE 27万+

漏洞库在企业中扮演着至关重要的角色&#xff0c;不仅提升了企业的安全防护能力&#xff0c;还支持了安全决策、合规性要求的满足以及智能化管理的发展。前期博文《业界十大知名权威安全漏洞库介绍》介绍了主流漏洞库&#xff0c;今天给大家介绍一款集成了多款漏洞库的开源漏洞…

《Redis设计与实现》读书笔记-客户端

目录 1.Client简介 2.客户端属性 1&#xff09;&#xff08;本文重点&#xff09;比较通用的属性 2&#xff09;&#xff08;后续分享&#xff09;另外一类是和特定功能相关的属性 2.1套接字文件描述符 2.2名字 2.3标志&#xff08;flag&#xff09; 2.4输入缓冲区 2.…

Oracle Database 21c Express Edition数据库 和 Sqlplus客户端安装配置

目录 一. 前置条件二. Win10安装配置Oracle数据库2.1 数据库获取2.2 数据库安装2.3 数据库配置确认2.4 数据库访问 三. Win10配置Oracle数据库可对外访问3.1 打开文件和打印机共享3.2 开放1521端口 四. 端口与地址确认4.1 查看监听器的状态4.2 Win10查看1521端口是否被监听4.3 …

10篇--图像噪点消除

概念 何为噪点&#xff1f; 噪点&#xff1a;指图像收到的一些干扰因素&#xff0c;通常是由图像采集设备、传输信道等因素造成的&#xff0c;表现为图像中随机的亮度&#xff0c;也可以理解为有那么一些点的像素值与周围的像素值格格不入。 常见的噪声类型 高斯噪声&#…

【开源免费】基于Vue和SpringBoot的渔具租赁系统(附论文)

本文项目编号 T 005 &#xff0c;文末自助获取源码 \color{red}{T005&#xff0c;文末自助获取源码} T005&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 渔…

Linux网络基础-----传输层UDP协议

目录 端口号&#xff1a; 查询各类服务的端口号 加深理解端口号&#xff1a; UDP协议 UDP协议特点&#xff1a; 关于缓冲区&#xff1a; 内核层面理解UDP报文 端口号&#xff1a; 知名端口号&#xff1a;0 ~ 1023&#xff1a;被HTTP、SSH等应用层协议广泛使用的端口号&…

XXE靶场

XXE-lab 靶场 靶场网址&#xff1a;http://172.16.0.87/ 第一步我们看到网站有登录框我们试着用 bp 去抓一下包 将抓到的包发到重放器中 然后我们构建palody <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "php://filter/readconvert.base64-encode/resourceC:/flag/fla…

ubuntu+ros新手笔记(三):21讲没讲到的MoveIt2

1 安装MoveIt2 安装参照在ROS2中&#xff0c;通过MoveIt2控制Gazebo中的自定义机械手 安装 MoveIt2可以选择自己编译源码安装&#xff0c;或者直接从二进制安装。 个人建议直接二进制安装&#xff0c;可以省很多事。 sudo apt install ros-humble-moveitmoveit-setup-assistan…

运维 mysql、redis 、RocketMQ性能排查

MySQL查看数据库连接数 1. SHOW STATUS命令-查询当前的连接数 MySQL 提供了一个 SHOW STATUS 命令&#xff0c;可以用来查看服务器的状态信息&#xff0c;包括当前的连接数。 SHOW STATUS LIKE Threads_connected;这个命令会返回当前连接到服务器的线程数&#xff0c;即当前…

jmeter连接mysql

查询mysql数据库版本 SELECT VERSION(); 下载jmeter mysql 驱动jar包&#xff0c;版本低于mysql版本&#xff0c;放在jmeter的lib 路径下 MySQL :: Download MySQL Connector/J (Archived Versions) 添加JDBC Connection Configuration 填写 variable name 及数据库信息 注意…

Docker的容器

目录 1. 什么是容器&#xff1f;2. 容器的生命周期2.1 容器处理OOM事件2.2 容器异常退出2.3 容器暂停 3. 容器命令详解3.1 容器命令清单3.2 docker create命令3.3 docker run命令3.4 docker ps命令3.5 docker logs命令3.6 docker attach命令3.7 docker exec命令3.8 docker stat…

JAVA题目笔记(二十六)反射

一、保存信息 Student类&#xff1a; package testpackage;import java.io.IOException;public class Student {private String name;private String area;public String testfield;private int age;public Student() {}public Student(String name, String area, int age) {t…

python 配置 oracle instant client

1.问题描述 想用python连接oracle数据库&#xff0c;百度得知需要cx_Oracle这个第三方库 import cx_Oracle# 设置Oracle数据源名称 dsn cx_Oracle.makedsn(host, port, service_nameservice_name)# 创建数据库连接 connection cx_Oracle.connect(userusername, passwordpas…

皮肤伤口分割数据集labelme格式248张5类别

数据集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数)&#xff1a;284 标注数量(json文件个数)&#xff1a;284 标注类别数&#xff1a;5 标注类别名称:["bruises","burns","cu…

Ollama配置与webUI本地部署-学习记录

Ollama 前言一、Ollama的下载与安装设置(windows)1.下载2.安装与配置1.查看环境变量&#xff1a;2.设置环境变量&#xff1a;3.设置变量 二、使用步骤1.查找模型2.使用Ollama1.下载模型2.使用 三、WebUI部署WebUI 总结 前言 Ollama是一款可以开始使用本地的大型语言模型。启动…

vscode不同项目使用不同插件

转载请注明出处&#xff1a;小帆的帆的博客 在使用vscode开发不同项目时可能会用到不同的插件。手动管理不够优雅&#xff0c;本文介绍使用Profiles的方式的来管理不同项目的插件。 手动管理不同项目的插件 本来vscode安装了有三个插件 这时需要新建一个项目&#xff0c;新…

数据结构 ——前缀树查词典的实现

数据结构 ——前缀树查词典的实现 一、前缀树的概念 前缀树是一种多叉树结构&#xff0c;主要用于存储字符串。每个节点代表一个字符&#xff0c;路径从根节点到叶节点表示一个完整的字符串。前缀树的关键特征是 共享前缀&#xff0c;也就是说&#xff0c;如果两个字符串有相…

H5 中 van-popup 的使用以及题目的切换

H5 中 van-popup 的使用以及题目的切换 在移动端开发中&#xff0c;弹窗组件是一个常见的需求。vant 是一个轻量、可靠的移动端 Vue 组件库&#xff0c;其中的 van-popup 组件可以方便地实现弹窗效果。本文将介绍如何使用 van-popup 实现题目详情的弹窗展示&#xff0c;并实现…