#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"); 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)), missionUI,SLOT(setallPoint(QMap))); 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="<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(event); QList 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("
数据强度:%1\t").arg(QString::number(100))); message.append(tr("定位类型:%1\t").arg(gps_str)); message.append(tr("卫星数目:%1
").arg(QString::number(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible))); message.append(tr("
电池电压:%1V\t").arg(QString::number(dlink->mavlinknode->vehicle.sys_status.voltage_battery * 0.001))); message.append(tr("剩余时间:%1
").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("
总航程:%1米\t
").arg(value)); message.append(tr("
最远距离:%1米\t
").arg(0)); message.append(tr("
预计飞行时间:%1小时\t
").arg(0)); showMessage(message); } }