Files
gcs-nf/App/mainwindow.cpp
T
2020-10-28 15:40:27 +08:00

1430 lines
55 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include "mainwindow.h"
#include "QPushButton"
#include "QAction"
#include "QHBoxLayout"
//从0开始
bool getBit(uint32_t d,int32_t pos)
{
bool bit = false;
bit = (d >> pos) & 0x00000001;
return bit;
}
float to360deg(float raw)
{
float angle = 0;
if(raw > 360)
{
int a = (int)raw/360;
raw = raw - a *360;
}
else if(raw < -360)
{
int a = (int)raw/360;
raw = raw - a *360;
}
//0~360
if(raw < 0)
{
raw += 360;
}
angle = raw;
return angle;
}
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//setGeometry();
//检测qml文件夹,如果不存在,那么就新建一个,这里存着所有的qml文件
/*
QDir *qmlDir = new QDir;
if(!qmlDir->exists("./qml"))
qmlDir->mkdir("./qml");//如果文件夹不存在就新建
*/
setFocusPolicy(Qt::StrongFocus);
setAttribute(Qt::WA_AcceptTouchEvents);
tts = new QTextToSpeech(this);
//config
config = new Config();
//ui initial
//menubar
menuBarUI = new MenuBarUI(this);
connect(menuBarUI,SIGNAL(IndexChanged(int)),
this,SLOT(onTabIndexChanged(int)));
qDebug() << "menuBar init";
//---------------
//设置
setting = new Setting(this);
setting->hide();
//自检
checkUI = new CheckUI(this);
checkUI->hide();
//信息
toolsui = new ToolsUI(this);
toolsui->hide();
//状态
//statusui = new StatusUI(this);
//statusui->hide();
//healthui = new HealthUI(this);
//指令
commandUI = new CommandUI(this);
dlink = new DLink();
map = new mapcontrol::OPMapWidget(this);
map->SetShowHome(false);
map->SetShowCompass(false);
map->SetUseOpenGL(true);
map->setAttribute(Qt::WA_AlwaysStackOnTop);
//QString maptype = myinifile->ReadIni("GCS.ini","Map","Type");
map->SetMapType(mapcontrol::Helper::MapTypeFromString("BingHybrid"));
map->setWPLock(true);
map->setFocus();
map->setMouseTracking(true);
map->setGeometry(0,
0,
this->width(),
this->height());
map->SetZoom(10);
qDebug() << "map start";
copk = new Cockpit(this);
copk->setGeometry(this->width() - copk->width(),0,400,350);
missionUI = new propertyui(this);
missionUI->hide();
//commandbox ----- dlink
connect(toolsui->command,SIGNAL(cmd_long(float,float,float,float,float,float,float,uint16_t,uint8_t)),
dlink->mavlinknode->Commander,SLOT(WriteCmd_long(float,float,float,float,float,float,float,uint16_t,uint8_t)),Qt::DirectConnection);
connect(dlink->mavlinknode,SIGNAL(addVehicles(int,int)),
toolsui->command,SLOT(addVehicles(int,int)),Qt::DirectConnection);
connect(toolsui->command,SIGNAL(WriteCmd(uint8_t,uint8_t,const char*,uint8_t,float)),
dlink->mavlinknode->Parameter,SLOT(WriteCmd(uint8_t,uint8_t,const char*,uint8_t,float)),Qt::DirectConnection);
//command ----- map
connect(dlink->mavlinknode,SIGNAL(addVehicles(int,int)),
commandUI,SLOT(addVehicles(int,int)),Qt::DirectConnection);
connect(map,SIGNAL(PointNumber(int)),
commandUI,SLOT(setPointCount(int)),Qt::DirectConnection);
//this ----- dlink
connect(dlink->mavlinknode,SIGNAL(beep()),
this,SLOT(beep()),Qt::DirectConnection);
connect(dlink->mavlinknode,SIGNAL(CommuniationLost(bool)),
this,SLOT(setCommunicationLostState(bool)),Qt::DirectConnection);
//this ----- map
connect(map,SIGNAL(TotalDistanceUpdate(double)),
this,SLOT(TotalDistance(double)));
//tools ----- map
connect(dlink->mavlinknode,SIGNAL(recievemsg(mavlink_message_t)),
toolsui->index0->mavlinkinspector,SLOT(receiveMessage(mavlink_message_t)),Qt::DirectConnection);
//dlink ----- tools
connect(toolsui->index2,SIGNAL(setPlay(bool)),
dlink->mavlinknode->replay,SLOT(startReplay(bool)),Qt::DirectConnection);
connect(toolsui->index2,SIGNAL(setFileName(QString)),
dlink->mavlinknode,SLOT(setLogfile(QString)),Qt::DirectConnection);
connect(toolsui->index2,SIGNAL(setPercentage(float)),
dlink->mavlinknode->replay,SLOT(setPercentage(float)),Qt::DirectConnection);
connect(dlink->mavlinknode->replay,SIGNAL(currentPercentage(float)),
toolsui->index2,SLOT(setCurrentPercentage(float)),Qt::DirectConnection);
connect(dlink->mavlinknode->replay,SIGNAL(replayComplete()),
toolsui->index2,SLOT(ReplayComplete()),Qt::DirectConnection);
//setting ----- map
connect(setting->index0->mapsetting,SIGNAL(getMapTypes()),
map,SLOT(getMapTypes()));
connect(map,SIGNAL(MapTypes(QStringList)),
setting->index0->mapsetting,SLOT(MapTypes(QStringList)));
connect(setting->index0->mapsetting,SIGNAL(setMapTypes(QVariant)),
map,SLOT(setMapTypes(QVariant)));
//command ----- dlink
connect(commandUI,SIGNAL(cmd_long(float,float,float,float,float,float,float,uint16_t,uint8_t)),
dlink->mavlinknode->Commander,SLOT(WriteCmd_long(float,float,float,float,float,float,float,uint16_t,uint8_t)),Qt::DirectConnection);
connect(dlink->mavlinknode->Commander,SIGNAL(commandAccepted(bool,uint16_t,uint8_t)),
commandUI,SLOT(commandAccepted(bool,uint16_t,uint8_t)),Qt::DirectConnection);
//check ----- dlink
connect(checkUI,SIGNAL(cmd_long(float,float,float,float,float,float,float,uint16_t,uint8_t)),
dlink->mavlinknode->Commander,SLOT(WriteCmd_long(float,float,float,float,float,float,float,uint16_t,uint8_t)),Qt::DirectConnection);
connect(dlink->mavlinknode,SIGNAL(recievemsg(mavlink_message_t)),
checkUI,SLOT(RecieveMsg(mavlink_message_t)));
connect(dlink->mavlinknode,SIGNAL(addVehicles(int,int)),
checkUI,SLOT(addVehicles(int,int)));
//setting ----- dlink
connect(dlink,SIGNAL(PortConnected(QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)),
setting->index0->link,SIGNAL(PortConnect(QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)));
connect(dlink->mavlinknode,SIGNAL(state_updated()),
this,SLOT(updateUI()));
connect(setting->index0->link,SIGNAL(connectSignal(QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)),
dlink,SLOT(connectSignal(QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant,QVariant)));
qRegisterMetaType<mavlink_message_t>("mavlink_message_t");
connect(dlink->mavlinknode->Parameter,SIGNAL(RecieveValue(mavlink_message_t)),
setting->index1->paramInspect,SLOT(appendParameter(mavlink_message_t)));
connect(dlink->mavlinknode,SIGNAL(addVehicles(int,int)),
setting->index1->paramInspect,SLOT(addVehicles(int,int)),Qt::DirectConnection);
connect(setting->index1->paramInspect,SIGNAL(ReadCmd(uint8_t,uint8_t,uint8_t)),
dlink->mavlinknode->Parameter,SLOT(ReadCmd(uint8_t,uint8_t,uint8_t)),Qt::DirectConnection);
connect(setting->index1->paramInspect,SIGNAL(WriteCmd(uint8_t,uint8_t,const char*,uint8_t,float)),
dlink->mavlinknode->Parameter,SLOT(WriteCmd(uint8_t,uint8_t,const char*,uint8_t,float)),Qt::DirectConnection);
//mision ----- map
connect(map, SIGNAL(WPProperty(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)),
missionUI,SLOT(setWayPointProperty(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)));
connect(missionUI,SIGNAL(WayPointPropertyChanged(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)),
map,SIGNAL(setWPProperty(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)));
connect(missionUI,SIGNAL(WPotherPoint(int)),
map,SLOT(WPotherPoint(int)));
connect(missionUI,SIGNAL(WPDelete(int)),
map,SLOT(WPDelete(int)));
connect(missionUI,SIGNAL(WPInsert(int)),
map,SLOT(WPInsert(int)));
connect(missionUI,SIGNAL(WPUpload()),
map,SLOT(WPUpload()));
connect(missionUI,SIGNAL(WPDownload()),
map,SLOT(WPDownload()));
connect(missionUI,SIGNAL(WPSave(QString)),
map,SLOT(WPSave(QString)));
connect(missionUI,SIGNAL(WPLoad(QString)),
map,SLOT(WPLoad(QString)));
connect(map,SIGNAL(allPoint(QMap<int,int>)),
missionUI,SLOT(setallPoint(QMap<int,int>)));
connect(missionUI,SIGNAL(searchall()),
map,SLOT(WPsearchall()));
//dlink ----- map
connect(map,SIGNAL(signal_WPDownload(uint8_t, uint8_t)),
dlink->mavlinknode->Mission,SLOT(ReadCmd(uint8_t, uint8_t)),Qt::DirectConnection);
connect(map,SIGNAL(signal_WPUpload(uint8_t,uint8_t,uint32_t)),
dlink->mavlinknode->Mission,SLOT(WriteCmd(uint8_t,uint8_t,uint32_t)),Qt::DirectConnection);
//生成航线必须在map线程完成,因此不能直接连接
//停下来让ui、运行一下
connect(dlink->mavlinknode->Mission,SIGNAL(receivedPoint(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)),
map,SLOT(receivedPoint(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)),Qt::BlockingQueuedConnection);
connect(map,SIGNAL(WPProperty(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)),
dlink->mavlinknode->Mission,SLOT(transmitPoint(float,float,float,float,int32_t,int32_t,float,uint16_t,uint16_t,uint16_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t,uint8_t)),Qt::DirectConnection);
connect(dlink->mavlinknode->Mission,SIGNAL(clearWaypoint()),
map,SLOT(WPDeleteAll()));
connect(dlink->mavlinknode,SIGNAL(addVehicles(int,int)),
map,SLOT(addUAV(int,int)));
connect(map,SIGNAL(uav_selected(int,int)),
dlink->mavlinknode,SLOT(setCurrentSelected(int,int)),Qt::DirectConnection);
connect(dlink->mavlinknode->Mission,SIGNAL(sendItemOK(uint16_t,bool)),
map,SLOT(WPSendItemOK(uint16_t,bool)),Qt::DirectConnection);
//航点确认窗口
connect(map,SIGNAL(setCurrent(int)),
commandUI,SLOT(missionConfirm(int)),Qt::DirectConnection);
connect(commandUI,SIGNAL(SetCurrentPoint(int)),
dlink->mavlinknode->Mission,SLOT(SetCurrentPoint(int)),Qt::DirectConnection);
connect(dlink->mavlinknode->Mission,SIGNAL(currentPoint(int)),
map,SLOT(WPSetCurrent(int)),Qt::DirectConnection);
//==== showmessage=====
//connect(toolsui->command,SIGNAL(showMessage(QString,int)),this,SLOT(showMessage(QString,int)));
connect(commandUI,SIGNAL(showMessage(QString,int)),this,SLOT(showMessage(QString,int)));
connect(copk,SIGNAL(showMessage(QString,int)),this,SLOT(showMessage(QString,int)));
connect(dlink,SIGNAL(showMessage(QString,int)),this,SLOT(showMessage(QString,int)));
connect(map,SIGNAL(showMessage(QString,int)),this,SLOT(showMessage(QString,int)));
qDebug() << "main window start";
//监测ssl,用于网络连接
qDebug()<<"QSslSocket="<<QSslSocket::sslLibraryBuildVersionString();
qDebug() << "OpenSSL支持情况:" << QSslSocket::supportsSsl();
//showMessage(tr("航点传输有问题,无法传输最后一个点,航点计数可能有问题"));
}
MainWindow::~MainWindow()
{
if(tts)
{
tts->stop();
delete tts;
tts = nullptr;
}
if(map)
{
map->close();
delete map;
}
if(dlink)
{
//dlink->stopPort();
delete dlink;
}
if(copk)
{
copk->close();
delete copk;
}
QCoreApplication::quit();//退出所有窗口
}
void MainWindow::closeEvent(QCloseEvent *event)
{
event->accept();
QCoreApplication::quit();//退出所有
}
void MainWindow::resizeEvent(QResizeEvent *event)
{
qDebug() << event;
Q_UNUSED(event)
menuBarUI->setGeometry(0,0,this->width(),100);
qDebug() << "resize";
setting->setGeometry(0,menuBarUI->height(),
this->width(),this->height() - menuBarUI->height());
checkUI->setGeometry(0,menuBarUI->height(),
this->width(),this->height() - menuBarUI->height());
map->setGeometry(0,menuBarUI->height(),
this->width()- copk->width(),this->height() - menuBarUI->height());
if(MainIndex == 2)//renwu
{
map->setGeometry(0,menuBarUI->height(),
this->width()- copk->width(),this->height() - menuBarUI->height());
}
//if(MainIndex == 5)//renwu
{
/*
if(statusui->isHidden())
map->setGeometry(0,menuBarUI->height(),
this->width()- copk->width(),this->height() - menuBarUI->height());
*/
}
copk->setGeometry(this->width() - copk->width(),menuBarUI->height(),
copk->width(),copk->height());
missionUI->setGeometry(this->width() - copk->width(),menuBarUI->height(),
copk->width(),this->height() - menuBarUI->height());
commandUI->setGeometry(this->width() - copk->width(),menuBarUI->height() + copk->height(),
copk->width(),this->height() - menuBarUI->height() - copk->height());
toolsui->setGeometry(0,menuBarUI->height(),
this->width(),this->height() - menuBarUI->height());
update();
}
//这个是不必要的,因为每个部件都有自己相应的动作
void MainWindow::mousePressEvent(QMouseEvent* event)
{
Q_UNUSED(event)
}
void MainWindow::keyPressEvent(QKeyEvent *event) //键盘按下事件
{
qInfo() << "key" << event;
//qDebug() << event;
switch(event->key())
{
case Qt::Key_Up:
qDebug() << "Key_Up";
break;
case Qt::Key_Down:
qDebug() << "Key_Down";
break;
case Qt::Key_Left:
qDebug() << "Key_Left";
break;
case Qt::Key_Right:
qDebug() << "Key_Right";
break;
case Qt::Key_D:
if(event->modifiers() == Qt::AltModifier)
{
qInfo() << "alt + D";
}
break;
case Qt::Key_U :
{
if(event->modifiers() == Qt::AltModifier)
{
qInfo() << "atl + U";
}
}break;
case Qt::Key_P :
{
if(event->modifiers() == Qt::AltModifier)
{//下载参数
qInfo() << "atl + P";
}
}break;
case Qt::Key_O :
{
if(event->modifiers() == Qt::AltModifier)
{//上传参数
qInfo() << "atl + O";
}
}break;
case Qt::Key_S:
break;
case Qt::Key_W:
break;
case Qt::Key_K :
{
if(event->modifiers() == Qt::ControlModifier)
{
}
}
break;
case Qt::Key_Space :
{
//map->setcu
map->SetCurrentPosition();
//根据选中的飞机设置当前位置
}
break;
case Qt::Key_Equal :
{
if(event->modifiers() == Qt::ShiftModifier)
{
}
else
{
map->SetZoom(map->ZoomReal() + 1);
}
}
break;
case Qt::Key_Plus :
{
if(event->modifiers() == Qt::ShiftModifier)
{
}
}
break;
case Qt::Key_Minus:
{
if(event->modifiers() == Qt::ShiftModifier)
{
}
else
{
map->SetZoom(map->ZoomReal() - 1);
}
}
break;
case Qt::Key_C:
{
if(event->modifiers() == Qt::AltModifier)
{
map->DeleteTrail();
}
}
break;
}
}
bool MainWindow::event(QEvent *event)
{
/*
switch (event->type()) {
case QEvent::TouchBegin:
case QEvent::TouchUpdate:
case QEvent::TouchEnd:
{
qDebug() <<"CProjectionPicture::event";
QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();
if (touchPoints.count() == 2) {
//m_bIsTwoPoint = true;//两指时不让移动
const QTouchEvent::TouchPoint &touchPoint0 = touchPoints.first();
const QTouchEvent::TouchPoint &touchPoint1 = touchPoints.last();
qreal currentScaleFactor =
QLineF(touchPoint0.pos(), touchPoint1.pos()).length()
/ QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length();
if (touchEvent->touchPointStates() & Qt::TouchPointReleased) {
if(QLineF(touchPoint0.pos(), touchPoint1.pos()).length() > QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length())
map->SetZoom(map->ZoomReal() + currentScaleFactor);
else if(QLineF(touchPoint0.pos(), touchPoint1.pos()).length() < QLineF(touchPoint0.startPos(), touchPoint1.startPos()).length())
map->SetZoom(map->ZoomReal() - currentScaleFactor);
qDebug() << "currentScaleFactor" << currentScaleFactor;
}
update();
}
else if(touchPoints.count() == 1){
//m_bIsTwoPoint = false;
}
return true;
}
default:
break;
}
*/
return QWidget::event(event);
}
void MainWindow::onTabIndexChanged(const int &index)//界面选择管理
{
//记录主界面目录
MainIndex = index;
//设置
if(index == 0) setting->show();
else setting->hide();
//自检
if(index == 1) checkUI->show();
else checkUI->hide();
//任务
if(index == 2)
{
map->setWPLock(false);
map->setWPCreate(true);
missionUI->show();
}
else
{
map->setWPLock(true);
map->setWPCreate(false);
missionUI->hide();
}
if((index == 2)||(index == 3)||(index == 5)) map->show();
else map->hide();
//飞行
if(index == 3)
{
copk->show();
commandUI->show();
//statusui->show();
//healthui->show();
}
else
{
copk->hide();
commandUI->hide();
//statusui->hide();
//healthui->hide();
}
//信息
if(index == 4) toolsui->show();
else toolsui->hide();
if(index == 5)
{
copk->show();
commandUI->show();
//statusui->hide();
//healthui->show();
}
else
{
//statusui->hide();
}
resizeEvent(nullptr);
}
void MainWindow::showMessage(const QString &message, int TimeOut)
{
menuBarUI->showMessage(message,TimeOut);
}
void MainWindow::beep(void)
{
QApplication::beep();
}
void MainWindow::setCommunicationLostState(bool flag)
{
static bool last = false;
isCommunicationLost = flag;
//healthui->setState(6,(dlink->mavlinknode->isCommunicationLost)?(HealthUI::state::failure):(HealthUI::state::success));//DLINK
if(flag == true)//通讯丢失
{
if(last != flag)
{
showMessage(tr("Communication Lost"),3000);
tts->say(tr("Communication Lost"));
}
/*
healthui->setState(1,HealthUI::state::failure);
healthui->setState(2,HealthUI::state::failure);
healthui->setState(4,HealthUI::state::failure);
healthui->setState(3,HealthUI::state::failure);
healthui->setState(5,HealthUI::state::failure);
healthui->setState(6,HealthUI::state::failure);
healthui->setState(7,HealthUI::state::failure);
healthui->setState(8,HealthUI::state::failure);
healthui->setState(11,HealthUI::state::failure);
healthui->setState(12,HealthUI::state::failure);
healthui->setState(13,HealthUI::state::failure);
healthui->setState(14,HealthUI::state::failure);
healthui->setState(15,HealthUI::state::failure);
healthui->setState(21,HealthUI::state::failure);
healthui->setState(22,HealthUI::state::failure);
healthui->setState(23,HealthUI::state::failure);
healthui->setState(24,HealthUI::state::failure);
healthui->setState(25,HealthUI::state::failure);
healthui->setState(30,HealthUI::state::failure);
*/
}
else
{
if(last != flag)
{
showMessage(tr("Communication Regain"),3000);
tts->say(tr("Communication Regain"));
}
}
last = flag;
}
// 16~20Hz左右 运行频率可能太高
void MainWindow::updateUI()//事件驱动式更新数据
{
static uint32_t custommode_old = 0;
static uint8_t state_old = 0;
bool isCustomChanged = false;
bool isStateChanged = false;
static quint64 lastTime = QDateTime::currentMSecsSinceEpoch();
static qint64 frq_time = 0;
if((QDateTime::currentMSecsSinceEpoch() - frq_time) <= 200)
{
return;
}
frq_time = QDateTime::currentMSecsSinceEpoch();
copk->setAttitude(dlink->mavlinknode->vehicle.attitude.pitch * 57.3,
dlink->mavlinknode->vehicle.attitude.roll * 57.3,
dlink->mavlinknode->vehicle.attitude.yaw * 57.3);
copk->setAltitude(dlink->mavlinknode->vehicle.global_position_int.relative_alt * 10e-4);
copk->setAltitudeTarget(dlink->mavlinknode->vehicle.global_position_int.relative_alt * 10e-4
+dlink->mavlinknode->vehicle.nav_controller_output.alt_error);
//dlink->mavlinknode->vehicle.vfr_hud.airspeed //表速
//dlink->mavlinknode->vehicle.gps_raw_int.vel//地速
copk->setAirSpeed(dlink->mavlinknode->vehicle.emb_atom_com.Airspeed,5);//真空速
copk->setAirSpeedTarget(dlink->mavlinknode->vehicle.emb_atom_com.Airspeed
+dlink->mavlinknode->vehicle.nav_controller_output.aspd_error,5);
//c t g m
switch (copk->AirSpeedFlag()) {
case 0:
copk->setSpeed(dlink->mavlinknode->vehicle.vfr_hud.airspeed,copk->AirSpeedFlag());//表速
break;
case 1:
copk->setSpeed(dlink->mavlinknode->vehicle.emb_atom_com.Airspeed,copk->AirSpeedFlag());//真空速
break;
case 2:
copk->setSpeed(dlink->mavlinknode->vehicle.gps_raw_int.vel * 0.01,copk->AirSpeedFlag());//地速
break;
case 3:
copk->setSpeed(dlink->mavlinknode->vehicle.emb_atom_com.mach,copk->AirSpeedFlag());//马赫
break;
}
copk->setAOA(dlink->mavlinknode->vehicle.emb_atom_com.alpha);
copk->setOL(dlink->mavlinknode->vehicle.ins1.az/(-9.8));
copk->setVerticalSpeed(-dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3);//速度朝下为正
copk->setAlt_err(dlink->mavlinknode->vehicle.nav_controller_output.alt_error);//高度差 飞机在航线下面为正
copk->setXTrack(dlink->mavlinknode->vehicle.nav_controller_output.xtrack_error);//侧偏距 飞机在航线右侧为正
copk->setRollTarget(dlink->mavlinknode->vehicle.nav_controller_output.nav_roll);//
copk->setPitchTarget(dlink->mavlinknode->vehicle.nav_controller_output.nav_pitch);//
copk->setYawTarget(dlink->mavlinknode->vehicle.nav_controller_output.nav_bearing);//
QString gps_str;
gps_str.clear();
switch (dlink->mavlinknode->vehicle.gps_raw_int.fix_type) {
case 1:
case 2:
case 3:
gps_str.append(tr("%1D[%2颗]").arg(dlink->mavlinknode->vehicle.gps_raw_int.fix_type).arg(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible));
break;
case 4:
gps_str.append(tr("fix[%1颗]").arg(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible));
break;
case 5:
gps_str.append(tr("float[%1颗]").arg(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible));
break;
default:
gps_str.append(tr("err[%1颗]").arg(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible));
break;
}
copk->setGPS(gps_str);
QString arm_str;
arm_str.clear();
uint8_t state = 0;
state = (dlink->mavlinknode->vehicle.heartbeat.base_mode&MAV_MODE_FLAG::MAV_MODE_FLAG_SAFETY_ARMED);
if(state != state_old)
{
isStateChanged = true;
//解锁后清除航迹
if(state == MAV_MODE_FLAG::MAV_MODE_FLAG_SAFETY_ARMED)
{
map->DeleteTrail();
}
}
else
{
isStateChanged = false;
}
state_old = state;
switch (state) {
case MAV_MODE_FLAG_SAFETY_ARMED:
arm_str.append(tr("ARM"));
break;
case 0:
arm_str.append(tr("DISARM"));
break;
default:
break;
}
copk->setState(arm_str);
uint32_t custommode = dlink->mavlinknode->vehicle.heartbeat.custom_mode;
if(custommode != custommode_old)
{
isCustomChanged = true;
}
else
{
isCustomChanged = false;
}
custommode_old = custommode;
QString mode_str;
switch (custommode) {
case 1<<16:
mode_str.append(tr("MANUAL"));
break;
case 2<<16:
mode_str.append(tr("ALTCTL"));
break;
case 3<<16:
mode_str.append(tr("POSCTL"));
break;
case 4<<16:
mode_str.append(tr("AUTO"));
break;
case 5<<16:
mode_str.append(tr("ACRO"));
break;
case 6<<16:
mode_str.append(tr("OFFBOARD"));
break;
case 7<<16:
mode_str.append(tr("STABILIZED"));
break;
case 8<<16:
mode_str.append(tr("RATTITUDE"));
break;
case 9<<16:
mode_str.append(tr("STANDBY"));
break;
case 10<<16:
mode_str.append(tr("BIT"));
break;
case (4<<16)+(1<<24):
mode_str.append(tr("AUTO_READY"));
break;
case (4<<16)+(2<<24):
mode_str.append(tr("AUTO_TAKEOFF"));
break;
case (4<<16)+(3<<24):
mode_str.append(tr("AUTO_LOITER"));
break;
case (4<<16)+(4<<24):
mode_str.append(tr("AUTO_MISSION"));
break;
case (4<<16)+(5<<24):
mode_str.append(tr("AUTO_RTL"));
break;
case (4<<16)+(6<<24):
mode_str.append(tr("AUTO_LAND"));
break;
case (4<<16)+(7<<24):
mode_str.append(tr("AUTO_RTGS"));
break;
case (4<<16)+(8<<24):
mode_str.append(tr("AUTO_FOLLOW_TARGET"));
break;
default:
//mode_str.append(tr("unsported"));
break;
}
copk->setMode(mode_str);
//这里会一直生成一个,导致无法释放
if(isStateChanged == true)
{
tts->say(arm_str);
}
if(isCustomChanged == true)
{
mode_str.append(tr("flight mode"));
tts->say(mode_str);
}
//经纬度大于正常值,将舍弃
double lat = (double)(dlink->mavlinknode->vehicle.gps_raw_int.lat * 10e-8);
double lng = (double)(dlink->mavlinknode->vehicle.gps_raw_int.lon * 10e-8);
if(((lat > -90)&&(lat < 90))&&((lng > -180)&&(lng < 180)))
{
map->setUAVPos(dlink->mavlinknode->vehicle.sysid,
dlink->mavlinknode->vehicle.compid,
(double)(dlink->mavlinknode->vehicle.gps_raw_int.lat * 10e-8),
(double)(dlink->mavlinknode->vehicle.gps_raw_int.lon * 10e-8),
(double)(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4));
}
map->setUAVHeading(dlink->mavlinknode->vehicle.sysid,
dlink->mavlinknode->vehicle.compid,
dlink->mavlinknode->vehicle.attitude.yaw * 57.3);
if(MainIndex == 3)//飞行界面
{
//刷新时间1Hz
//显示状态信息 数据链信号状态,定位信号状态,电池状态,解锁状态,剩余飞行时间等
QString message;
message.append(tr("<h6>数据强度:<font color=red>%1</font>\t").arg(QString::number(100)));
message.append(tr("定位类型:<font color=red>%1</font>\t").arg(gps_str));
message.append(tr("卫星数目:<font color=red>%1</font>颗</h6>").arg(QString::number(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible)));
message.append(tr("<h6>电池电压:<font color=red>%1</font>V\t").arg(QString::number(dlink->mavlinknode->vehicle.sys_status.voltage_battery * 0.001)));
message.append(tr("剩余时间:<font color=red>%1</font></h6>").arg(QString::number(0)));
showMessage(message);
}
/*
//实测,r,le,e,la,a
//有符号16位,-32767 ~ 32767
le = dlink->mavlinknode->vehicle.servo_output_raw.servo1_raw
re =
ru =
la =
ra =
thr = (1000 ~2000)
afb = (1000/2000)
0
0
healt
sbus = feedback (ra)
sbus = feedback (re)
sbus = feedback (ru)
sbus = feedback (la)
15 sbus = feedback (le)
health = 0 000 000 000 000 000 //顺序和上面sbus一样
GBIT zero SBIT
//指令
舵机指令
自检 2004
*/
/*
//设置舵机显示
int ServoPort = 0;
int16_t servos[16];
ServoPort = dlink->mavlinknode->vehicle.servo_output_raw.port;
servos[0] = dlink->mavlinknode->vehicle.servo_output_raw.servo1_raw;
servos[1] = dlink->mavlinknode->vehicle.servo_output_raw.servo2_raw;
servos[2] = dlink->mavlinknode->vehicle.servo_output_raw.servo3_raw;
servos[3] = dlink->mavlinknode->vehicle.servo_output_raw.servo4_raw;
servos[4] = dlink->mavlinknode->vehicle.servo_output_raw.servo5_raw;
servos[5] = dlink->mavlinknode->vehicle.servo_output_raw.servo6_raw;
servos[6] = dlink->mavlinknode->vehicle.servo_output_raw.servo7_raw;
servos[7] = dlink->mavlinknode->vehicle.servo_output_raw.servo8_raw;
servos[8] = dlink->mavlinknode->vehicle.servo_output_raw.servo9_raw;
servos[9] = dlink->mavlinknode->vehicle.servo_output_raw.servo10_raw;
servos[10] = dlink->mavlinknode->vehicle.servo_output_raw.servo11_raw;
servos[11] = dlink->mavlinknode->vehicle.servo_output_raw.servo12_raw;
servos[12] = dlink->mavlinknode->vehicle.servo_output_raw.servo13_raw;
servos[13] = dlink->mavlinknode->vehicle.servo_output_raw.servo14_raw;
servos[14] = dlink->mavlinknode->vehicle.servo_output_raw.servo15_raw;
servos[15] = dlink->mavlinknode->vehicle.servo_output_raw.servo16_raw;
toolsui->index4->setChannel(ServoPort,servos);
toolsui->powersystem->setTurbineState(&dlink->mavlinknode->vehicle.turbinstate);
toolsui->powersystem->setCCMState(&dlink->mavlinknode->vehicle.ccmstate);
toolsui->powersystem->setMa(dlink->mavlinknode->vehicle.emb_atom_com.mach);
toolsui->powersystem->setAlt(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4);
toolsui->servosystem->setBUMState(&dlink->mavlinknode->vehicle.bmustate);
toolsui->servosystem->setServoState(&dlink->mavlinknode->vehicle.servo_output_raw);
bool v28_Low = false,v56_Low = false;
v28_Low = (((float)dlink->mavlinknode->vehicle.bmustate.BAT1_remain_perc * 0.1) < 10)?(false):(true);
v56_Low = (((float)dlink->mavlinknode->vehicle.bmustate.BAT2_remain_perc * 0.1) < 10)?(false):(true);
// qDebug() << "v28_Low" << v28_Low << "v56_Low" << v56_Low;
toolsui->servosystem->setCheckState(1,v28_Low || v56_Low);
toolsui->servosystem->setCheckState(2,v28_Low);
toolsui->servosystem->setCheckState(3,v56_Low);
toolsui->servosystem->setCheckState(4,0);
toolsui->servosystem->setCheckState(5,(dlink->mavlinknode->vehicle.bmustate.p500w_enabled)?(0):(1));
uint32_t health = dlink->mavlinknode->vehicle.sys_status.onboard_control_sensors_health;
// 0000 0000 0000 0000 0000 0000 0000 0000
// 选通内置(1| |fl ccm ecu bmu sbg 内置
//qDebug() << getBit(0x00000001,0) << getBit(0x00000002,0);
//0 ok,1 fail ,2 warn
if(isCommunicationLost == false)
{
healthui->setState(1,getBit(health,6)?(getBit(health,0)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//IMU
healthui->setState(2,getBit(health,7)?(getBit(health,1)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//SBG
healthui->setState(4,getBit(health,8)?(getBit(health,2)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//BMU
healthui->setState(3,getBit(health,9)?(getBit(health,3)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//ECU
healthui->setState(5,getBit(health,10)?(getBit(health,4)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//CCM
healthui->setState(6,(dlink->mavlinknode->isCommunicationLost)?(HealthUI::state::failure):(HealthUI::state::success));//DLINK
// 22 23 24 25 26 27
// 5525D 5803A 5607A 4525D atteck slide
healthui->setState(7,(getBit(health,26)&getBit(health,27))?(HealthUI::state::success):(HealthUI::state::failure));//AIR
healthui->setState(8,getBit(health,5)?(getBit(health,11)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//FL
//dlink->mavlinknode->vehicle.servo_output_raw.servo5_raw
uint16_t servoHealt = dlink->mavlinknode->vehicle.servo_output_raw.servo10_raw;
*/
/*
sbus = feedback (ra)
sbus = feedback (re)
sbus = feedback (ru)
sbus = feedback (la)
15 sbus = feedback (le)
health = 0 le la ru re ra //顺序和上面sbus一样
GBIT zero SBIT
*/
//舵机反馈是有符号16b/
//qDebug() << getBit(health,16);
/*
healthui->setState(11,getBit(health,16)?(getBit(servoHealt,3)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//LA
healthui->setState(12,getBit(health,13)?(getBit(servoHealt,0)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//RA
healthui->setState(13,getBit(health,17)?(getBit(servoHealt,4)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//LE
healthui->setState(14,getBit(health,14)?(getBit(servoHealt,1)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//RE
healthui->setState(15,getBit(health,15)?(getBit(servoHealt,2)?(HealthUI::state::success):(HealthUI::state::warning)):(HealthUI::state::failure));//RU
//19~24
healthui->setState(21,getBit(health,18)?(HealthUI::state::failure):(HealthUI::state::success));//开伞
healthui->setState(22,getBit(health,19)?(HealthUI::state::failure):(HealthUI::state::success));//开气囊
healthui->setState(23,getBit(health,20)?(HealthUI::state::failure):(HealthUI::state::success));//充气
healthui->setState(24,getBit(health,21)?(HealthUI::state::failure):(HealthUI::state::success));//抛伞
healthui->setState(25,((dlink->mavlinknode->vehicle.turbinstate.SysState & 0x000F) == 0x04)?(HealthUI::state::failure):(HealthUI::state::inital));//停车
//healthui->setState(24,((dlink->mavlinknode->vehicle.turbinstate.SysState & 0x000F) == 0x04)?(HealthUI::state::failure):(HealthUI::state::inital));//ENG stop
//healthui->setState(25,(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible > 7)?(HealthUI::state::success):(HealthUI::state::failure));//GPS
//healthui->setValueState(25,QString::number(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible) + tr("颗星"));//GPS
healthui->setState(30,getBit(health,12)?(HealthUI::state::warning):(HealthUI::state::success));//sel
healthui->setValueState(30,getBit(health,12)?(tr("连接内置惯导")):(tr("连接SBG")));//sel
}
else
{
healthui->setState(1,HealthUI::state::failure);
healthui->setState(2,HealthUI::state::failure);
healthui->setState(4,HealthUI::state::failure);
healthui->setState(3,HealthUI::state::failure);
healthui->setState(5,HealthUI::state::failure);
healthui->setState(6,HealthUI::state::failure);
healthui->setState(7,HealthUI::state::failure);
healthui->setState(8,HealthUI::state::failure);
healthui->setState(11,HealthUI::state::failure);
healthui->setState(12,HealthUI::state::failure);
healthui->setState(13,HealthUI::state::failure);
healthui->setState(14,HealthUI::state::failure);
healthui->setState(15,HealthUI::state::failure);
healthui->setState(21,HealthUI::state::failure);
healthui->setState(22,HealthUI::state::failure);
healthui->setState(23,HealthUI::state::failure);
healthui->setState(24,HealthUI::state::failure);
healthui->setState(25,HealthUI::state::failure);
healthui->setState(30,HealthUI::state::failure);
}
//===================status ui =============================================
statusui->setDigitalAtmosphereSystem(1,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.alpha,'f',1),tr(" "));
statusui->setDigitalAtmosphereSystem(2,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.beta,'f',1),tr(" "));
statusui->setState(1,QString::number(dlink->mavlinknode->vehicle.attitude.roll * 57.3,'f',1),
QString::number(dlink->mavlinknode->vehicle.nav_controller_output.nav_roll,'f',1));
statusui->setState(2,QString::number(dlink->mavlinknode->vehicle.attitude.pitch * 57.3,'f',1),
QString::number(dlink->mavlinknode->vehicle.nav_controller_output.nav_pitch,'f',1));
statusui->setState(3,QString::number(to360deg(dlink->mavlinknode->vehicle.gps_raw_int.cog * 0.01),'f',1),
QString::number(to360deg(dlink->mavlinknode->vehicle.nav_controller_output.nav_bearing),'f',1));
statusui->setState(4,QString::number(to360deg(dlink->mavlinknode->vehicle.attitude.yaw * 57.3),'f',1),tr(" "));
statusui->setState(5,QString::number(dlink->mavlinknode->vehicle.nav_controller_output.xtrack_error,'f',1),tr(" "));
statusui->setState(6,QString::number(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4,'f',1),tr(" "));
statusui->setState(7,QString::number(dlink->mavlinknode->vehicle.vfr_hud.airspeed,'f',1),tr(" "));
statusui->setState(8,QString::number(-dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3,'f',1),tr(" "));
statusui->setServo(1,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo14_raw)/32767.0 * 35.0,'f',2),
QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo4_raw)/32767.0 * 35.0,'f',2));
statusui->setServo(2,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo11_raw)/32767.0 * 35.0,'f',2),
QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo5_raw)/32767.0 * 35.0,'f',2));
statusui->setServo(3,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo15_raw)/32767.0 * 35.0,'f',2),
QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo1_raw)/32767.0 * 35.0,'f',2));
statusui->setServo(4,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo12_raw)/32767.0 * 35.0,'f',2),
QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo2_raw)/32767.0 * 35.0,'f',2));
statusui->setServo(5,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo13_raw)/32767.0 * 35.0,'f',2),
QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo3_raw)/32767.0 * 35.0,'f',2));
statusui->setEngine(1,QString::number((dlink->mavlinknode->vehicle.servo_output_raw.servo6_raw - 1000) * 0.1,'f',0));
statusui->setEngine(2,QString::number(dlink->mavlinknode->vehicle.turbinstate.RPM_mea,'f',1));
statusui->setEngine(3,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[0] * 0.1,'f',1));
statusui->setEngine(4,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[1] * 0.1,'f',1));
statusui->setEngine(5,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[3],'f',1));//剩余油量
statusui->setEngine(6,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[2],'f',0));//油压
statusui->setBattery(1,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT1_group_voltage_mv * 0.001,'f',1));
statusui->setBattery(2,QString::number((float)((int16_t)dlink->mavlinknode->vehicle.bmustate.BAT1_group_current_dA) *0.1f,'f',1));
statusui->setBattery(3,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT1_remain_perc *0.1f,'f',1));
statusui->setBattery(4,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT2_group_voltage_mv * 0.001,'f',1));
statusui->setBattery(5,QString::number((float)((int16_t)dlink->mavlinknode->vehicle.bmustate.BAT2_group_current_dA) *0.1f,'f',1));
statusui->setBattery(6,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT2_remain_perc *0.1f,'f',1));
statusui->setDlink(1,QString::number(dlink->mavlinknode->rssi,'f',0));
statusui->setDlink(2,QString::number(dlink->mavlinknode->bitrate));
statusui->setAttitude1(1,QString::number(dlink->mavlinknode->vehicle.ins1.ax,'f',1));
statusui->setAttitude1(2,QString::number(dlink->mavlinknode->vehicle.ins1.ay,'f',1));
statusui->setAttitude1(3,QString::number(dlink->mavlinknode->vehicle.ins1.az,'f',1));
statusui->setAttitude1(4,QString::number(dlink->mavlinknode->vehicle.ins1.gx,'f',1));
statusui->setAttitude1(5,QString::number(dlink->mavlinknode->vehicle.ins1.gy,'f',1));
statusui->setAttitude1(6,QString::number(dlink->mavlinknode->vehicle.ins1.gz,'f',1));
statusui->setAttitude1(7,QString::number(dlink->mavlinknode->vehicle.ins1.roll * 57.3,'f',1));
statusui->setAttitude1(8,QString::number(dlink->mavlinknode->vehicle.ins1.pitch * 57.3,'f',1));
statusui->setAttitude1(9,QString::number(to360deg(dlink->mavlinknode->vehicle.ins1.yaw * 57.3),'f',1));
statusui->setAttitude2(1,QString::number(dlink->mavlinknode->vehicle.ins2.ax,'f',1));
statusui->setAttitude2(2,QString::number(dlink->mavlinknode->vehicle.ins2.ay,'f',1));
statusui->setAttitude2(3,QString::number(dlink->mavlinknode->vehicle.ins2.az,'f',1));
statusui->setAttitude2(4,QString::number(dlink->mavlinknode->vehicle.ins2.gx,'f',1));
statusui->setAttitude2(5,QString::number(dlink->mavlinknode->vehicle.ins2.gy,'f',1));
statusui->setAttitude2(6,QString::number(dlink->mavlinknode->vehicle.ins2.gz,'f',1));
statusui->setAttitude2(7,QString::number(dlink->mavlinknode->vehicle.ins2.roll * 57.3,'f',1));
statusui->setAttitude2(8,QString::number(dlink->mavlinknode->vehicle.ins2.pitch * 57.3,'f',1));
statusui->setAttitude2(9,QString::number(to360deg(dlink->mavlinknode->vehicle.ins2.yaw * 57.3),'f',1));
statusui->setGPS1(1,QString::number(dlink->mavlinknode->vehicle.ins1.lat,'f',8));
statusui->setGPS1(2,QString::number(dlink->mavlinknode->vehicle.ins1.lon,'f',8));
statusui->setGPS1(3,QString::number(dlink->mavlinknode->vehicle.ins1.alt,'f',1));
statusui->setGPS1(4,QString::number(sqrt(pow(dlink->mavlinknode->vehicle.ins1.v_north,2) +
pow(dlink->mavlinknode->vehicle.ins1.v_east,2) +
pow(dlink->mavlinknode->vehicle.ins1.v_up,2)),'f',1));
statusui->setGPS1(5,QString::number(atan2(dlink->mavlinknode->vehicle.ins1.v_east,
dlink->mavlinknode->vehicle.ins1.v_north),'f',1));
statusui->setGPS1(6,QString::number(dlink->mavlinknode->vehicle.ins1.satellites_visible,'f',0));
QString gpsFix1;
switch (dlink->mavlinknode->vehicle.ins1.gps_status) {
case 0:
case 1:
gpsFix1.append(tr("GPS Unlocated"));
break;
case 2:
case 3:
gpsFix1.append(tr("%1D").arg(dlink->mavlinknode->vehicle.ins1.gps_status));
break;
case 4:
gpsFix1.append(tr("fixed"));
break;
case 5:
gpsFix1.append(tr("float"));
break;
default:
break;
}
statusui->setGPS1(7,gpsFix1);
statusui->setGPS2(1,QString::number(dlink->mavlinknode->vehicle.ins2.lat,'f',8));
statusui->setGPS2(2,QString::number(dlink->mavlinknode->vehicle.ins2.lon,'f',8));
statusui->setGPS2(3,QString::number(dlink->mavlinknode->vehicle.ins2.alt,'f',1));
statusui->setGPS2(4,QString::number(sqrt(pow(dlink->mavlinknode->vehicle.ins2.v_north,2) +
pow(dlink->mavlinknode->vehicle.ins2.v_east,2) +
pow(dlink->mavlinknode->vehicle.ins2.v_up,2)),'f',1));
statusui->setGPS2(5,QString::number(atan2(dlink->mavlinknode->vehicle.ins2.v_east,
dlink->mavlinknode->vehicle.ins2.v_north),'f',1));
statusui->setGPS2(6,QString::number(dlink->mavlinknode->vehicle.ins2.satellites_visible,'f',0));
QString gpsFix2;
switch (dlink->mavlinknode->vehicle.ins2.gps_status) {
case 0:
case 1:
gpsFix2.append(tr("GPS Unlocated"));
break;
case 2:
case 3:
gpsFix2.append(tr("%1D").arg(dlink->mavlinknode->vehicle.ins2.gps_status));
break;
case 4:
gpsFix2.append(tr("fixed"));
break;
case 5:
gpsFix2.append(tr("float"));
break;
default:
break;
}
statusui->setGPS2(7,gpsFix2);
//===================diagram ui =============================================
toolsui->diagram->setDigitalAtmosphereSystem(1,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.alpha,'f',1),tr(" "));
toolsui->diagram->setDigitalAtmosphereSystem(2,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.beta,'f',1),tr(" "));
toolsui->diagram->setState(1,QString::number(dlink->mavlinknode->vehicle.attitude.roll * 57.3,'f',1),
QString::number(dlink->mavlinknode->vehicle.nav_controller_output.nav_roll,'f',1));
toolsui->diagram->setState(2,QString::number(dlink->mavlinknode->vehicle.attitude.pitch * 57.3,'f',1),
QString::number(dlink->mavlinknode->vehicle.nav_controller_output.nav_pitch,'f',1));
toolsui->diagram->setState(3,QString::number(to360deg(dlink->mavlinknode->vehicle.global_position_int.hdg),'f',1),
QString::number(to360deg(dlink->mavlinknode->vehicle.nav_controller_output.nav_bearing),'f',1));
toolsui->diagram->setState(4,QString::number(to360deg(dlink->mavlinknode->vehicle.attitude.yaw * 57.3),'f',1),tr(" "));
toolsui->diagram->setState(5,QString::number(dlink->mavlinknode->vehicle.nav_controller_output.xtrack_error,'f',1),tr(" "));
toolsui->diagram->setState(6,QString::number(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4,'f',1),tr(" "));
toolsui->diagram->setState(7,QString::number(dlink->mavlinknode->vehicle.vfr_hud.airspeed,'f',1),tr(" "));
toolsui->diagram->setState(8,QString::number(-dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3,'f',1),tr(" "));
toolsui->diagram->setServo(1,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo14_raw)/32767.0 * 35.0,'f',2),
QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo4_raw)/32767.0 * 35.0,'f',2));
toolsui->diagram->setServo(2,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo11_raw)/32767.0 * 35.0,'f',2),
QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo5_raw)/32767.0 * 35.0,'f',2));
toolsui->diagram->setServo(3,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo15_raw)/32767.0 * 35.0,'f',2),
QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo1_raw)/32767.0 * 35.0,'f',2));
toolsui->diagram->setServo(4,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo12_raw)/32767.0 * 35.0,'f',2),
QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo2_raw)/32767.0 * 35.0,'f',2));
toolsui->diagram->setServo(5,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo13_raw)/32767.0 * 35.0,'f',2),
QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo3_raw)/32767.0 * 35.0,'f',2));
toolsui->diagram->setEngine(1,QString::number((dlink->mavlinknode->vehicle.servo_output_raw.servo6_raw - 1000) * 0.1,'f',0));
toolsui->diagram->setEngine(2,QString::number(dlink->mavlinknode->vehicle.turbinstate.RPM_mea,'f',1));
toolsui->diagram->setEngine(3,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[0] * 0.1,'f',1));
toolsui->diagram->setEngine(4,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[1] * 0.1,'f',1));
toolsui->diagram->setEngine(5,QString::number(dlink->mavlinknode->vehicle.ccmstate.fuel_level,'f',1));
toolsui->diagram->setEngine(6,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[2],'f',0));
toolsui->diagram->setBattery(1,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT1_group_voltage_mv * 0.001,'f',1));
toolsui->diagram->setBattery(2,QString::number((float)((int16_t)dlink->mavlinknode->vehicle.bmustate.BAT1_group_current_dA) *0.1f,'f',1));
toolsui->diagram->setBattery(3,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT1_remain_perc *0.1f,'f',1));
toolsui->diagram->setBattery(4,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT2_group_voltage_mv * 0.001,'f',1));
toolsui->diagram->setBattery(5,QString::number((float)((int16_t)dlink->mavlinknode->vehicle.bmustate.BAT2_group_current_dA) *0.1f,'f',1));
toolsui->diagram->setBattery(6,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT2_remain_perc *0.1f,'f',1));
toolsui->diagram->setDlink(1,QString::number(dlink->mavlinknode->rssi,'f',0));
toolsui->diagram->setDlink(2,QString::number(dlink->mavlinknode->bitrate));
toolsui->diagram->setAttitude1(1,QString::number(dlink->mavlinknode->vehicle.ins1.ax,'f',1));
toolsui->diagram->setAttitude1(2,QString::number(dlink->mavlinknode->vehicle.ins1.ay,'f',1));
toolsui->diagram->setAttitude1(3,QString::number(dlink->mavlinknode->vehicle.ins1.az,'f',1));
toolsui->diagram->setAttitude1(4,QString::number(dlink->mavlinknode->vehicle.ins1.gx * 57.3,'f',1));
toolsui->diagram->setAttitude1(5,QString::number(dlink->mavlinknode->vehicle.ins1.gy * 57.3,'f',1));
toolsui->diagram->setAttitude1(6,QString::number(dlink->mavlinknode->vehicle.ins1.gz * 57.3,'f',1));
toolsui->diagram->setAttitude1(7,QString::number(dlink->mavlinknode->vehicle.ins1.roll * 57.3,'f',1));
toolsui->diagram->setAttitude1(8,QString::number(dlink->mavlinknode->vehicle.ins1.pitch * 57.3,'f',1));
toolsui->diagram->setAttitude1(9,QString::number(to360deg(dlink->mavlinknode->vehicle.ins1.yaw * 57.3),'f',1));
toolsui->diagram->setAttitude2(1,QString::number(dlink->mavlinknode->vehicle.ins2.ax,'f',1));
toolsui->diagram->setAttitude2(2,QString::number(dlink->mavlinknode->vehicle.ins2.ay,'f',1));
toolsui->diagram->setAttitude2(3,QString::number(dlink->mavlinknode->vehicle.ins2.az,'f',1));
toolsui->diagram->setAttitude2(4,QString::number(dlink->mavlinknode->vehicle.ins2.gx * 57.3,'f',1));
toolsui->diagram->setAttitude2(5,QString::number(dlink->mavlinknode->vehicle.ins2.gy * 57.3,'f',1));
toolsui->diagram->setAttitude2(6,QString::number(dlink->mavlinknode->vehicle.ins2.gz * 57.3,'f',1));
toolsui->diagram->setAttitude2(7,QString::number(dlink->mavlinknode->vehicle.ins2.roll * 57.3,'f',1));
toolsui->diagram->setAttitude2(8,QString::number(dlink->mavlinknode->vehicle.ins2.pitch * 57.3,'f',1));
toolsui->diagram->setAttitude2(9,QString::number(to360deg(dlink->mavlinknode->vehicle.ins2.yaw * 57.3),'f',1));
toolsui->diagram->setGPS1(1,QString::number(dlink->mavlinknode->vehicle.ins1.lat,'f',8));
toolsui->diagram->setGPS1(2,QString::number(dlink->mavlinknode->vehicle.ins1.lon,'f',8));
toolsui->diagram->setGPS1(3,QString::number(dlink->mavlinknode->vehicle.ins1.alt,'f',1));
toolsui->diagram->setGPS1(4,QString::number(sqrt(pow(dlink->mavlinknode->vehicle.ins1.v_north,2) +
pow(dlink->mavlinknode->vehicle.ins1.v_east,2) +
pow(dlink->mavlinknode->vehicle.ins1.v_up,2)),'f',1));
toolsui->diagram->setGPS1(5,QString::number(atan2(dlink->mavlinknode->vehicle.ins1.v_east,
dlink->mavlinknode->vehicle.ins1.v_north),'f',1));
toolsui->diagram->setGPS1(6,QString::number(dlink->mavlinknode->vehicle.ins1.satellites_visible,'f',0));
toolsui->diagram->setGPS1(7,gpsFix1);
toolsui->diagram->setGPS2(1,QString::number(dlink->mavlinknode->vehicle.ins2.lat,'f',8));
toolsui->diagram->setGPS2(2,QString::number(dlink->mavlinknode->vehicle.ins2.lon,'f',8));
toolsui->diagram->setGPS2(3,QString::number(dlink->mavlinknode->vehicle.ins2.alt,'f',1));
toolsui->diagram->setGPS2(4,QString::number(sqrt(pow(dlink->mavlinknode->vehicle.ins2.v_north,2) +
pow(dlink->mavlinknode->vehicle.ins2.v_east,2) +
pow(dlink->mavlinknode->vehicle.ins2.v_up,2)),'f',1));
toolsui->diagram->setGPS2(5,QString::number(atan2(dlink->mavlinknode->vehicle.ins2.v_east,
dlink->mavlinknode->vehicle.ins2.v_north),'f',1));
toolsui->diagram->setGPS2(6,QString::number(dlink->mavlinknode->vehicle.ins2.satellites_visible,'f',0));
toolsui->diagram->setGPS2(7,gpsFix2);
*/
}
void MainWindow::TotalDistance(double value)
{
if(MainIndex == 2)//任务界面
{
QString message;
message.append(tr("<h6>总航程:<font color=red>%1</font>米\t</h6>").arg(value));
message.append(tr("<h6>最远距离:<font color=red>%1</font>米\t</h6>").arg(0));
message.append(tr("<h6>预计飞行时间:<font color=red>%1</font>小时\t</h6>").arg(0));
showMessage(message);
}
}