6 Commits

Author SHA1 Message Date
zhangxusong e783afb687 修复变体数据不能保存bug 2023-04-10 10:31:36 +08:00
zhangxusong d70ca3378c 增加变体数据文件 2023-04-10 09:47:30 +08:00
zhangxusong 6bf46fffa1 修改变体舵机信息 2023-04-07 17:18:16 +08:00
zhangxusong 9219fe364f 增加变体舵机信息 2023-04-07 15:23:30 +08:00
hm ef9f795a93 修改方向舵拟合系数 2022-12-28 09:07:22 +08:00
hm 8701e87ce5 根据需求修改使用数据源 2022-12-27 17:05:06 +08:00
8 changed files with 190 additions and 22 deletions
+13 -1
View File
@@ -36,7 +36,9 @@ StatusUI::StatusUI(QWidget *parent) :
install(base,0,"滚转角[°]",0,QMap<QVariant, StateWidget::state>{{-45,StateWidget::state::red},{45,StateWidget::state::green}});
install(base,0,"俯仰角[°]",0,QMap<QVariant, StateWidget::state>{{-20,StateWidget::state::red},{20,StateWidget::state::green}});
install(base,0,"爬升角[°]",0,QMap<QVariant, StateWidget::state>{{-45.0,StateWidget::state::red},{45,StateWidget::state::green}});
install(base,0,"海拔[m]",0,QMap<QVariant, StateWidget::state>{{970,StateWidget::state::red},{1800,StateWidget::state::orange},{999000,StateWidget::state::green}});
install(base,0,"GPS高度[m]",0,QMap<QVariant, StateWidget::state>{{970,StateWidget::state::red},{1800,StateWidget::state::orange},{999000,StateWidget::state::green}});
install(base,0,"气压高度[m]",0,QMap<QVariant, StateWidget::state>{{970,StateWidget::state::red},{1800,StateWidget::state::orange},{999000,StateWidget::state::green}});
install(base,0,"表速[m/s]",0,QMap<QVariant, StateWidget::state>{{65,StateWidget::state::red},{160,StateWidget::state::green}});
install(base,0,"真空速[m/s]",0,QMap<QVariant, StateWidget::state>{{50,StateWidget::state::red},{290,StateWidget::state::green}});
install(base,0,"地速[m/s]",0,QMap<QVariant, StateWidget::state>{{50,StateWidget::state::red},{290,StateWidget::state::green}});
@@ -182,6 +184,16 @@ StatusUI::StatusUI(QWidget *parent) :
{2,StateWidget::state::red},
{5,StateWidget::state::orange},
{15,StateWidget::state::green}});
install(battery, 0, "左变体电流[A]", 0, QMap<QVariant, StateWidget::state>{{0,StateWidget::state::green},
{5,StateWidget::state::orange},
{10,StateWidget::state::red}});
install(battery, 0, "右变体电流[A]", 0, QMap<QVariant, StateWidget::state>{{0,StateWidget::state::green},
{5,StateWidget::state::orange},
{10,StateWidget::state::red}});
install(battery, 0, "左变体转动方向", 0);
install(battery, 0, "右变体转动方向", 0);
/*
install(battery,0,"左轮速[RPM]",0,
QMap<QVariant, StateWidget::state>{{1,StateWidget::state::red},
+53 -1
View File
@@ -1,4 +1,4 @@
#include "Parse.h"
#include "Parse.h"
Parse::Parse(QObject *parent) : QObject(parent)
{
@@ -915,8 +915,38 @@ void Parse::run()
group.left_brake = data[data_count++];
group.right_brake = data[data_count++];
//变体舵机电流、方向
Variant var;
union
{
uint8_t c[2];
int t;
} test;
test.t = 0;
data = raw.mid(247);
test.c[0] = data[0];
test.c[1] = data[1];
var.l_var_current = test.t * 0.1;
test.t = 0;
test.c[0] = data[2];
test.c[1] = data[3];
var.r_var_current = test.t * 0.1;
var.l_var_dir = data[4];
var.r_var_dir = data[5];
qDebug() << "variant: " << data;
saveVariantToFile(var);
saveActuatorDataToFile(group);
emit actuator_info_brake(group);
emit variantInfo(var);
}
@@ -1849,6 +1879,28 @@ void Parse::parseData(const int id, const QByteArray data)
*/
}
void Parse::saveVariantToFile(const Variant &var)
{
QFile file(variant_file_name);
if(file.open(QIODevice::Append) )
{
qDebug() << u8"保存variant数据";
QTextStream stream(&file);
stream.setCodec("UTF-8");
stream << QDateTime::currentDateTime().toString("yyyyMMddHHmmss").toUtf8() << ",";
stream << var.l_var_current << ",";
stream << var.r_var_current << ",";
stream << (var.l_var_dir ? "inversion" : "foreward") << ",";
stream << (var.r_var_dir ? "inversion" : "foreward") << "\n";
stream.flush();
file.flush();
file.close();
}
}
void Parse::saveInsDataToFile(const _ins &ins)
{
QFile file(ins_file_name);
+23
View File
@@ -11,6 +11,18 @@
#include "QFile"
#include "QDateTime"
#include "QDataStream"
#include <QMetaType>
typedef struct
{
float l_var_current; //左变体电流
float r_var_current; //右变体电流
quint8 l_var_dir; //左变体方向
quint8 r_var_dir; //右变体方向
} Variant;
Q_DECLARE_METATYPE(Variant);
class Parse : public QObject, public QRunnable
{
@@ -497,6 +509,7 @@ public:
QString sspc_file_name;
QString vel_file_name;
QString pos_file_name;
QString variant_file_name;
explicit Parse(QObject *parent = nullptr);
~Parse();
@@ -533,8 +546,18 @@ signals:
void pos_info(Parse::_pos info);
void SSPC_Info_state(Parse::_sspc info);
/**
* @brief 变体舵机信息
* @param info
*/
void variantInfo(Variant const &info);
private:
/**
* @brief 将变体的信息保存到文件中
* @param var
*/
void saveVariantToFile(Variant const &var);
/**
* @brief 把ins解析的数据保存到文件
* @param ins 保存ins数据的结构体
+24 -1
View File
@@ -1,4 +1,4 @@
#include "ToolsUI.h"
#include "ToolsUI.h"
#include "ui_ToolsUI.h"
#include <QTextStream>
@@ -221,12 +221,15 @@ void ToolsUI::recieveDataSlot(const int &id, const QByteArray &data)
parse->sspc_file_name = sspc_file_name;
parse->vel_file_name = vel_file_name;
parse->pos_file_name = pos_file_name;
parse->variant_file_name = variant_file_name;
connect(this,&ToolsUI::parseData,
parse,&Parse::parseData);
if(id == 0)
{
connect(parse, SIGNAL(variantInfo(Variant) ) , this, SIGNAL(variantInfo(Variant) ) );
connect(parse,&Parse::INS_Info,
ins,&INS::INS_Info);
@@ -942,6 +945,26 @@ void ToolsUI::createRecordDataFiles()
file.flush(); //将数据刷新到文件中
file.close(); //关闭文件
}
variant_file_name = QString("./log/other/variant_%1.csv").arg(QDateTime::currentDateTime().toString("yyyyMMddHHmmss") );
file.setFileName(variant_file_name);
if(file.open(QIODevice::WriteOnly | QIODevice::Text) )
{
// QByteArray data;
QTextStream stream(&file);
stream.setCodec("utf-8");
stream << tr("time,");
stream << tr("l_var_current,");
stream << tr("r_var_current,");
stream << tr("l_var_dir,");
stream << tr("r_var_dir\n");
// stream << data;
file.flush(); //将数据刷新到文件中
file.close(); //关闭文件
}
}
+8
View File
@@ -78,6 +78,12 @@ private slots:
signals:
/**
* @brief 变体舵机信息
* @param info
*/
void variantInfo(Variant const &info);
void IndexChanged(const int &index);
void recieveData(const int &id,const QByteArray &data);
@@ -140,6 +146,8 @@ private:
QString sspc_file_name;
QString vel_file_name;
QString pos_file_name;
QString variant_file_name;
};
+63 -18
View File
@@ -171,6 +171,8 @@ MainWindow::MainWindow(QWidget *parent)
qRegisterMetaType<uint8_t>("uint8_t");
qRegisterMetaType<MavLinkNode::_vehicle>("MavLinkNode::_vehicle");
qRegisterMetaType<Variant>("Variant");
@@ -214,11 +216,14 @@ MainWindow::MainWindow(QWidget *parent)
toolsui = new ToolsUI(this);
toolsui->hide();
connect(toolsui, &ToolsUI::variantInfo, this, &MainWindow::showVariantInfo);
//状态
statusui = new StatusUI(this);
statusui->hide();
healthui = new HealthUI(this);
healthui->hide();
@@ -869,6 +874,14 @@ MainWindow::~MainWindow()
QCoreApplication::quit();//退出所有窗口
}
void MainWindow::showVariantInfo(const Variant &var)
{
statusui->setValue(1, 0, 12, QString::number(var.l_var_current, 'f', 1));
statusui->setValue(1, 0, 13, QString::number(var.r_var_current, 'f', 1));
statusui->setValue(1, 0, 14, var.l_var_dir ? "反转" : "正转");
statusui->setValue(1, 0, 15, var.r_var_dir ? "反转" : "正转");
}
void MainWindow::setBeep(QVariant state)
{
@@ -1380,8 +1393,9 @@ QList<double> vtr_fix{+7E-10,-2E-06,+0.0176,+37.809};
QList<double> dal_fix{-3E-09,-3E-06,-0.0343,+0.2415};
QList<double> dar_fix{-2E-09,-2E-06,-0.0340,+0.0294};
QList<double> drl_fix{-3E-09,-9E-07,-0.0334,-0.0413};
QList<double> drr_fix{+3E-09,+1E-06,+0.0334,+0.0183};
QList<double> drl_fix{-2E-09,-8E-07,-0.0336,-0.4362};
QList<double> drr_fix{+2E-09,+9E-07,+0.0335,-0.5028};
QList<double> del_fix{-1E-09,+2E-07,-0.0263,+0.3685};
QList<double> der_fix{-1E-09,+3E-07,-0.0264,+0.9127};
@@ -1419,8 +1433,8 @@ void MainWindow::update_servo_output_raw(int sysid,mavlink_servo_output_raw_t se
dal_fix = {-3E-09,-3E-06,-0.0343,+0.2415};
dar_fix = {-2E-09,-2E-06,-0.0340,+0.0294};
drl_fix = {-3E-09,-9E-07,-0.0334,-0.0413};
drr_fix = {+3E-09,+1E-06,+0.0334,+0.0183};
drl_fix = {-2E-09,-8E-07,-0.0336,-0.4362};
drr_fix = {+2E-09,+9E-07,+0.0335,-0.5028};
del_fix = {-9E-10,+3E-07,-0.0263,+0.9651};
der_fix = {-9E-10,+3E-07,-0.0265,+0.925};
@@ -1435,8 +1449,8 @@ void MainWindow::update_servo_output_raw(int sysid,mavlink_servo_output_raw_t se
dal_fix = {-3E-09,-3E-06,-0.0343,+0.2415};
dar_fix = {-2E-09,-2E-06,-0.0340,+0.0294};
drl_fix = {-3E-09,-9E-07,-0.0334,-0.0413};
drr_fix = {+3E-09,+1E-06,+0.0334,+0.0183};
drl_fix = {-2E-09,-8E-07,-0.0336,-0.4362};
drr_fix = {+2E-09,+9E-07,+0.0335,-0.5028};
del_fix = {-1E-09,+2E-07,-0.0263,+0.3685};
der_fix = {-1E-09,+3E-07,-0.0264,+0.9127};
@@ -1605,7 +1619,7 @@ void MainWindow::updateVehicle(MavLinkNode::_vehicle vehicle)//事件驱动式
break;
case 2://气压
copk->setHeight(vehicle.vfr_hud.alt);
//copk->setHeight(vehicle.vfr_hud.alt);
break;
@@ -1614,7 +1628,7 @@ void MainWindow::updateVehicle(MavLinkNode::_vehicle vehicle)//事件驱动式
copk->setOL(vehicle.ins1.az/(-9.8));
//copk->setOL(vehicle.ins1.az/(-9.8));
copk->setVerticalSpeed(vehicle.vfr_hud.climb);//朝上为正
@@ -1998,26 +2012,31 @@ void MainWindow::updateVehicle(MavLinkNode::_vehicle vehicle)//事件驱动式
}
statusui->setValue(0,0,5,QString::number(vehicle.global_position_int.alt * 10e-4,'f',1));
statusui->setValue(0,0,6,QString::number(vehicle.vfr_hud.airspeed,'f',1));
//statusui->setValue(0,0,7,QString::number(vehicle.emb_atom_com.Airspeed,'f',1));
//GPS高度
statusui->setValue(0,0,5,QString::number(vehicle.vfr_hud.alt,'f',1));
statusui->setValue(0,0,7,QString::number(vehicle.vfr_hud.airspeed,'f',1));
//statusui->setValue(0,0,8,QString::number(vehicle.emb_atom_com.Airspeed,'f',1));
if(vehicle.vfr_hud.groundspeed < 1)
{
statusui->setValue(0,0,8,QString::number(vehicle.vfr_hud.groundspeed,'f',3));
statusui->setValue(0,0,9,QString::number(vehicle.vfr_hud.groundspeed,'f',3));
}
else if(vehicle.vfr_hud.groundspeed < 10)
{
statusui->setValue(0,0,8,QString::number(vehicle.vfr_hud.groundspeed,'f',1));
statusui->setValue(0,0,9,QString::number(vehicle.vfr_hud.groundspeed,'f',1));
}
else
{
statusui->setValue(0,0,8,QString::number(vehicle.vfr_hud.groundspeed,'f',0));
statusui->setValue(0,0,9,QString::number(vehicle.vfr_hud.groundspeed,'f',0));
}
//statusui->setValue(0,0,9,QString::number(vehicle.emb_atom_com.mach,'f',2));
//statusui->setValue(0,0,10,QString::number(vehicle.emb_atom_com.mach,'f',2));
/*
@@ -2435,7 +2454,10 @@ void MainWindow::TotalDistance(double value)
void MainWindow::INS_Info(Parse::_ins info)
{
if(copk)
{
copk->setOL(info.az/(9.8));
}
}
void MainWindow::NAV_Info(Parse::_nav info)
@@ -2592,8 +2614,8 @@ void MainWindow::EADC_Info(Parse::_eadc info)
statusui->setValue(0,0,0,QString::number(info.aoat1,'f',1));
statusui->setValue(0,0,1,QString::number(info.aost1,'f',1));
statusui->setValue(0,0,7,QString::number(info.vt,'f',1));
statusui->setValue(0,0,9,QString::number(info.mi,'f',3));
statusui->setValue(0,0,8,QString::number(info.vt,'f',1));
statusui->setValue(0,0,10,QString::number(info.mi,'f',3));
}
@@ -2614,6 +2636,29 @@ void MainWindow::EADC_Info(Parse::_eadc info)
}
switch (copk->AltitudeFlag()) {
default:
case 0://绝对
//copk->setHeight(vehicle.global_position_int.alt * 10e-4);
break;
case 1://相对
//copk->setHeight(vehicle.global_position_int.relative_alt * 10e-4);
break;
case 2://气压
copk->setHeight(info.hp);
break;
}
//气压高度
statusui->setValue(0,0,6,QString::number(info.hp,'f',1));
Ma = info.mi;
copk->setAOA(info.aoai1);
+5
View File
@@ -75,6 +75,11 @@ public:
public slots:
/**
* @brief 显示变体舵机信息
* @param var
*/
void showVariantInfo(Variant const &var);
void showMessage(const QString &message,int TimeOut = 0);
void setCommunicationLostState(bool flag);
+1 -1
View File
@@ -1405,7 +1405,7 @@ void Cockpit::drawRightScale(QPainter *painter)
painter->drawRect(0,600,550,150);
painter->drawText(QRect(10,600,530,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.height,'f',0));
painter->drawText(QRect(10,600,530,150),Qt::AlignLeft|Qt::AlignVCenter,QString::number(m_State.height,'f',1));
QString alt_str;
switch (m_State.AltitudeFlag) {