无人狗前端界面完善

main
huaijin 1 week ago
parent 7d2e906199
commit d446c2d177

@ -29,6 +29,7 @@ SOURCES += \
src/core/database/DatabaseHelper.cpp \ src/core/database/DatabaseHelper.cpp \
src/ui/main/MainWindow.cpp \ src/ui/main/MainWindow.cpp \
src/ui/dialogs/DeviceDialog.cpp \ src/ui/dialogs/DeviceDialog.cpp \
src/ui/dialogs/RobotDogControlDialog.cpp \
src/ui/components/DeviceCard.cpp \ src/ui/components/DeviceCard.cpp \
src/ui/components/DeviceListPanel.cpp \ src/ui/components/DeviceListPanel.cpp \
src/ui/components/SystemLogPanel.cpp \ src/ui/components/SystemLogPanel.cpp \
@ -47,6 +48,7 @@ HEADERS += \
include/core/database/DatabaseHelper.h \ include/core/database/DatabaseHelper.h \
include/ui/main/MainWindow.h \ include/ui/main/MainWindow.h \
include/ui/dialogs/DeviceDialog.h \ include/ui/dialogs/DeviceDialog.h \
include/ui/dialogs/RobotDogControlDialog.h \
include/ui/components/DeviceCard.h \ include/ui/components/DeviceCard.h \
include/ui/components/DeviceListPanel.h \ include/ui/components/DeviceListPanel.h \
include/ui/components/SystemLogPanel.h \ include/ui/components/SystemLogPanel.h \

@ -34,6 +34,11 @@
#include <QCheckBox> #include <QCheckBox>
#include <QTimer> #include <QTimer>
#include <QFrame> #include <QFrame>
#include <QProcess>
#include <QWidget>
#include <QWindow>
#include <QApplication>
#include <QStackedLayout>
/** /**
* @class RobotDogControlDialog * @class RobotDogControlDialog
@ -59,44 +64,34 @@ public:
signals: signals:
/** /**
* @brief * @brief
*/ */
void startMapping(); void startSlamRadar();
/** /**
* @brief * @brief
*/ */
void stopMapping(); void stopSlamRadar();
/** /**
* @brief * @brief
*/ */
void startNavigation(); void startRadarMapping();
/** /**
* @brief * @brief
*/ */
void stopNavigation(); void stopRadarMapping();
/** /**
* @brief * @brief
*/ */
void startPhotoTransmission(); void startAutoNavMapping();
/** /**
* @brief * @brief
*/ */
void stopPhotoTransmission(); void stopAutoNavMapping();
/**
* @brief
*/
void startPersonRecognition();
/**
* @brief
*/
void stopPersonRecognition();
public slots: public slots:
/** /**
@ -149,29 +144,24 @@ private slots:
void onJumpClicked(); void onJumpClicked();
/** /**
* @brief * @brief
*/
void onMappingToggle();
/**
* @brief
*/ */
void onNavigationToggle(); void onEmergencyStop();
/** /**
* @brief * @brief
*/ */
void onPhotoTransmissionToggle(); void onSlamRadarToggle();
/** /**
* @brief * @brief
*/ */
void onPersonRecognitionToggle(); void onRadarMappingToggle();
/** /**
* @brief * @brief
*/ */
void onEmergencyStop(); void onAutoNavMappingToggle();
private: private:
/** /**
@ -224,12 +214,14 @@ private:
// 任务控制模块 // 任务控制模块
QGroupBox *m_missionControlGroup; QGroupBox *m_missionControlGroup;
QPushButton *m_mappingBtn; QPushButton *m_slamRadarBtn;
QPushButton *m_navigationBtn; QPushButton *m_radarMappingBtn;
QPushButton *m_photoBtn; QPushButton *m_autoNavMappingBtn;
QPushButton *m_recognitionBtn;
QComboBox *m_missionModeCombo; QComboBox *m_missionModeCombo;
// 雷达显示组件
QLabel *m_radarDisplayLabel;
// 状态监控模块 // 状态监控模块
QGroupBox *m_statusGroup; QGroupBox *m_statusGroup;
QLabel *m_batteryLabel; QLabel *m_batteryLabel;
@ -241,15 +233,46 @@ private:
QTextEdit *m_logTextEdit; QTextEdit *m_logTextEdit;
// 状态变量 // 状态变量
bool m_isMappingActive;
bool m_isNavigationActive;
bool m_isPhotoTransmissionActive;
bool m_isPersonRecognitionActive;
bool m_isMoving; bool m_isMoving;
QString m_currentPosture; QString m_currentPosture;
// 雷达状态变量
bool m_isSlamRadarActive;
bool m_isRadarMappingActive;
bool m_isAutoNavMappingActive;
// 定时器 // 定时器
QTimer *m_statusUpdateTimer; QTimer *m_statusUpdateTimer;
// SSH连接和命令执行
QProcess *m_sshProcess;
QString m_radarHost;
QString m_radarUser;
QString m_radarPassword;
// 雷达建图进程(本地执行)
QProcess *m_radarMappingProcess;
// 自动导航建图进程(本地执行)
QProcess *m_autoNavMappingProcess;
// 私有方法
void executeSlamRadarCommands();
void stopSlamRadarProcess();
void onSshProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
void onSshProcessError(QProcess::ProcessError error);
// 雷达建图相关方法
void executeRadarMappingCommands();
void stopRadarMappingProcess();
void onRadarMappingProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
void onRadarMappingProcessError(QProcess::ProcessError error);
// 自动导航建图相关方法
void executeAutoNavMappingCommands();
void stopAutoNavMappingProcess();
void onAutoNavMappingProcessFinished(int exitCode, QProcess::ExitStatus exitStatus);
void onAutoNavMappingProcessError(QProcess::ProcessError error);
}; };
#endif // ROBOTDOGCONTROLDIALOG_H #endif // ROBOTDOGCONTROLDIALOG_H

@ -44,8 +44,9 @@
#include "ui/components/DeviceListPanel.h" #include "ui/components/DeviceListPanel.h"
#include "ui/components/SystemLogPanel.h" #include "ui/components/SystemLogPanel.h"
#include "ui/components/RightFunctionPanel.h" #include "ui/components/RightFunctionPanel.h"
// #include "ui/dialogs/DroneControlDialog.h" #include "ui/dialogs/DeviceDialog.h"
// #include "ui/dialogs/RobotDogControlDialog.h" #include "ui/dialogs/RobotDogControlDialog.h"
#include "ui/components/DeviceCard.h"
// 标准库头文件 // 标准库头文件
#include <string> #include <string>
@ -357,9 +358,8 @@ private:
QVector<QPair<QString, QString>> m_robotList; ///< 机器人列表(名称-IP地址对 QVector<QPair<QString, QString>> m_robotList; ///< 机器人列表(名称-IP地址对
QVector<QPair<QString, QString>> m_uavList; ///< 无人机列表(名称-IP地址对 QVector<QPair<QString, QString>> m_uavList; ///< 无人机列表(名称-IP地址对
// 控制对话框(暂时注释掉以避免编译问题) // 控制对话框
// DroneControlDialog *m_droneControlDialog; ///< 无人机控制对话框 RobotDogControlDialog *m_robotDogControlDialog; ///< 机器狗控制对话框
// RobotDogControlDialog *m_robotDogControlDialog; ///< 机器狗控制对话框
// 人脸识别相关成员变量已移除(功能暂未实现) // 人脸识别相关成员变量已移除(功能暂未实现)
}; };

@ -214,7 +214,7 @@ void RightFunctionPanel::setupBattlefieldExplorationModule()
m_explorationCard = new ModuleCard("🎯 战场探索", "🎯", this); m_explorationCard = new ModuleCard("🎯 战场探索", "🎯", this);
m_explorationCard->setObjectName("ModuleCard"); m_explorationCard->setObjectName("ModuleCard");
m_explorationCard->setProperty("data-module", "battlefield"); m_explorationCard->setProperty("data-module", "battlefield");
// 简化设计:只显示两个主要功能入口按钮 // 简化设计:只显示两个主要功能入口按钮
QWidget *mainControlWidget = new QWidget(); QWidget *mainControlWidget = new QWidget();
mainControlWidget->setObjectName("main-control-widget"); mainControlWidget->setObjectName("main-control-widget");
@ -956,14 +956,14 @@ void RightFunctionPanel::onRobotDogControlClicked()
void RightFunctionPanel::onAIAnalysis() void RightFunctionPanel::onAIAnalysis()
{ {
emit requestAIAnalysis(); emit requestAIAnalysis();
// 显示分析状态 // 显示分析状态
m_aiAnalysisBtn->setText("🧠 分析中..."); m_aiAnalysisBtn->setText("🧠 分析中...");
m_aiAnalysisBtn->setProperty("class", "loading"); m_aiAnalysisBtn->setProperty("class", "loading");
m_aiAnalysisBtn->setEnabled(false); m_aiAnalysisBtn->setEnabled(false);
m_aiAnalysisBtn->style()->unpolish(m_aiAnalysisBtn); m_aiAnalysisBtn->style()->unpolish(m_aiAnalysisBtn);
m_aiAnalysisBtn->style()->polish(m_aiAnalysisBtn); m_aiAnalysisBtn->style()->polish(m_aiAnalysisBtn);
QTimer::singleShot(3000, [this]() { QTimer::singleShot(3000, [this]() {
m_aiAnalysisBtn->setText("🤖 AI分析"); m_aiAnalysisBtn->setText("🤖 AI分析");
m_aiAnalysisBtn->setProperty("class", "secondary-medium"); m_aiAnalysisBtn->setProperty("class", "secondary-medium");
@ -1020,21 +1020,21 @@ void RightFunctionPanel::updateDeviceStatus(const QString &deviceName, bool onli
} else { } else {
deviceType = "未知设备"; deviceType = "未知设备";
} }
QString statusMsg; QString statusMsg;
if (online) { if (online) {
if (battery > 80) { if (battery > 80) {
statusMsg = QString("%1 %2: 📶 连接质量 %3% (优秀)").arg(deviceType).arg(deviceName).arg(battery); statusMsg = QString("%1 %2: 📶 连接质量 %3% (优秀)").arg(deviceType).arg(deviceName).arg(battery);
} else if (battery > 50) { } else if (battery > 50) {
statusMsg = QString("%1 %2: 📶 连接质量 %3% (良好)").arg(deviceType).arg(deviceName).arg(battery); statusMsg = QString("%1 %2: 📶 连接质量 %3% (良好)").arg(deviceType).arg(deviceName).arg(battery);
} else if (battery > 20) { } else if (battery > 20) {
statusMsg = QString("%1 %2: ⚠️ 连接质量 %3% (一般)").arg(deviceType).arg(deviceName).arg(battery); statusMsg = QString("%1 %2: ⚠️ 连接质量 %3% (一般)").arg(deviceType).arg(deviceName).arg(battery);
} else { } else {
statusMsg = QString("%1 %2: ⚠️ 连接质量 %3% (较差)").arg(deviceType).arg(deviceName).arg(battery); statusMsg = QString("%1 %2: ⚠️ 连接质量 %3% (较差)").arg(deviceType).arg(deviceName).arg(battery);
} }
} else { } else {
statusMsg = QString("%1 %2: ❌ 设备离线").arg(deviceType).arg(deviceName); statusMsg = QString("%1 %2: ❌ 设备离线").arg(deviceType).arg(deviceName);
} }
SystemLogger::getInstance()->logInfo(statusMsg); SystemLogger::getInstance()->logInfo(statusMsg);
} }

File diff suppressed because it is too large Load Diff

@ -136,7 +136,7 @@ Visualization Manager:
Shaft Length: 0.8 Shaft Length: 0.8
Shaft Radius: 0.05000000074505806 Shaft Radius: 0.05000000074505806
Value: Arrow Value: Arrow
Topic: /robot_odom Topic: /robot_pose
Unreliable: false Unreliable: false
Value: true Value: true
@ -144,7 +144,7 @@ Visualization Manager:
- Alpha: 1 - Alpha: 1
Axes Length: 0.8 Axes Length: 0.8
Axes Radius: 0.08 Axes Radius: 0.08
Class: rviz/PoseWithCovariance Class: rviz/Pose
Color: 255; 25; 0 Color: 255; 25; 0
Enabled: true Enabled: true
Head Length: 0.30000001192092896 Head Length: 0.30000001192092896
@ -154,7 +154,7 @@ Visualization Manager:
Shaft Length: 1.2 Shaft Length: 1.2
Shaft Radius: 0.08 Shaft Radius: 0.08
Shape: Arrow Shape: Arrow
Topic: /robot_pose Topic: /robot_pose_arrow
Unreliable: false Unreliable: false
Value: true Value: true

Loading…
Cancel
Save