diff --git a/App/CheckUI/CheckUI.cpp b/App/CheckUI/CheckUI.cpp index 0ddeb53..2d4c9df 100644 --- a/App/CheckUI/CheckUI.cpp +++ b/App/CheckUI/CheckUI.cpp @@ -41,9 +41,11 @@ CheckUI::CheckUI(QWidget *parent) : ui->setupUi(this); //检测文件夹,如果不存在,那么就新建一个 + /* QDir *Dir = new QDir; if(!Dir->exists("./checks")) Dir->mkdir("./checks");//如果文件夹不存在就新建 + */ //load qss QFile file(":/qss/CheckUI.qss"); @@ -55,7 +57,7 @@ CheckUI::CheckUI(QWidget *parent) : //载入json - LoadCheckFiles("./checks"); + //LoadCheckFiles("./checks"); //loadCommandJson(":/json/Check.json"); //loadCommandJson("./json/Check.json"); diff --git a/App/GCS_zh_CN.qm b/App/GCS_zh_CN.qm index abe637d..6bfb77f 100644 Binary files a/App/GCS_zh_CN.qm and b/App/GCS_zh_CN.qm differ diff --git a/App/GCS_zh_CN.ts b/App/GCS_zh_CN.ts index 6c403e7..d4cf330 100644 --- a/App/GCS_zh_CN.ts +++ b/App/GCS_zh_CN.ts @@ -252,23 +252,23 @@ 自检 - - - - - + + + + + Vehicle %1 无人机 %1 - - + + not Contains special check file 未包含指定检查文件 - - + + not Contains Default check file 未包含默认检查文件 @@ -2175,8 +2175,8 @@ - - + + 未定位 @@ -2395,65 +2395,64 @@ - mission group has changed, current group is %1 - 航线切换,当前航线为 %1 + 航线切换,当前航线为 %1 - + VERT_OFF OFF 纵向制导关闭 - + VNAV2THT 消除纵向偏差 - + HDOT2THT 控制升降速率 - + GAMMA2THT 控制航迹角 - + AS2THT 俯仰控制速度 - + H2THT 控制绝对高度 - + AGL2THT 控制相对高度 - + LAT_OFF 横向制导关闭 - + LNAV2PHI 滚转消除侧偏 - + PSI2PHI 滚转控制航向 - - - + + + @@ -2462,156 +2461,156 @@ 未定位 - - + + 未初始化 - - + + 垂直陀螺 - - + + AHRS - - + + 速度导航 - - + + 位置导航 - - - - - - - - + + + + + + + + 正常 - - - - - - - - - - + + + + + + + + + + 无效 - - + + 解算正常 - - + + 卫星数不足 - - + + 内部错误 - - + + 速度超限 - - - - + + + + 未知 - - + + 多普勒 - - + + 微分 - - - - 单点 - - - - - - 伪距差分 - - - SBAS广域差分 + 单点 - 广域差分 + 伪距差分 - RTK_FLOAT + SBAS广域差分 - RTK_INT + 广域差分 - PPP_FLOAT + RTK_FLOAT - PPP_INT + RTK_INT + PPP_FLOAT + + + + + + PPP_INT + + + + + FIXED @@ -2769,7 +2768,7 @@ 开始... - + %1Group%2Point %1组%2点 @@ -2782,38 +2781,43 @@ 界面 - + save 保存 - + insert 插入 - + upload 上传 - + add 增加 - + download downlload 下载 - + + mission table + 任务表格 + + + load 打开 - + delete 删除 @@ -2823,7 +2827,7 @@ 围栏 - + clean 清空 @@ -2847,6 +2851,11 @@ Mission 4 航线4 + + + Instructions + 说明 + del 删除 @@ -2873,32 +2882,32 @@ 起飞 - + number 航点 - + command 类型 - + par1 参数1 - + par2 参数2 - + par3 参数3 - + par4 参数4 @@ -2927,19 +2936,19 @@ 经度 - + group 组别 - - - - - - - - + + + + + + + + inclusion 安控区 @@ -2956,41 +2965,41 @@ 海拔 - - - - - - - + + + + + + + Circle 圆形 - - - - - - - + + + + + + + exclusion 禁飞区 - - - - - - - - + + + + + + + + Polygon 多边形 - + shape 形状 @@ -2999,97 +3008,97 @@ 点数(个)/半径(米) - - + + lat(deg) 纬度(度) - - + + lng(deg) 经度(度) - + Polygon(num) Circle(radius) - 点数(多边形) -半径(圆形) + 点数[个](多边形) +半径[米](圆形) - + points - + 点号 - + alt(m) 海拔(米) - - + + 航点 - - + + 返航 - - + + 降落 - - + + 起飞 - - + + 保持 - - + + 表速 - - + + 快升 - - + + 开加力 - - + + 关加力 - - + + Selete Way Point File... 选择载入文件... - - + + plan file (*.plan) 任务文件 (*.plan) diff --git a/App/MissionUI/MissionUI.cpp b/App/MissionUI/MissionUI.cpp index 752f78f..56fcb6d 100644 --- a/App/MissionUI/MissionUI.cpp +++ b/App/MissionUI/MissionUI.cpp @@ -19,6 +19,11 @@ MissionUI::MissionUI(QWidget *parent) : this->setWhatsThis(tr("mission table")); + ui->label_Notice->adjustSize(); + ui->label_Notice->setAlignment(Qt::AlignLeft | Qt::AlignTop); + ui->label_Notice->setWordWrap(true); + + //围栏编辑 CustomButton *btn_addCircle = new CustomButton(this); CustomButton *btn_addPolygon = new CustomButton(this); @@ -505,6 +510,15 @@ MissionUI::MissionUI(QWidget *parent) : btn_delete->setEnabled(false); btn_clean->setEnabled(false); btn_add->setEnabled(false); + + + //从文件打开一个叫做mission_Instructions.txt的文档,把里面的内容写进来 + QFile Instructions("./Config/mission_Instructions.txt"); + Instructions.open(QFile::ReadOnly); + QTextStream filetext(&Instructions); + QString text = filetext.readAll(); + ui->label_Notice->setText(text); + Instructions.close(); } @@ -532,6 +546,14 @@ void MissionUI::resizeEvent(QResizeEvent *event) } +void MissionUI::clearTable() +{ + +} + + + + void MissionUI::createFenceCircle(int group,qreal radius,bool inclusion,qreal lat,qreal lng) { QTableWidget *tableWidget = tablelist.value(1); diff --git a/App/MissionUI/MissionUI.h b/App/MissionUI/MissionUI.h index dab6c47..0296c70 100644 --- a/App/MissionUI/MissionUI.h +++ b/App/MissionUI/MissionUI.h @@ -55,6 +55,8 @@ public slots: void FenceGroupChanged(int old,int cur); + void clearTable(); + protected slots: void closeEvent(QCloseEvent *event); void resizeEvent(QResizeEvent *event); diff --git a/App/MissionUI/MissionUI.ui b/App/MissionUI/MissionUI.ui index 893a0f4..961ce06 100644 --- a/App/MissionUI/MissionUI.ui +++ b/App/MissionUI/MissionUI.ui @@ -157,8 +157,17 @@ - Notice + Instructions + + + + + + + + + diff --git a/App/MissionUI/propertyui.cpp b/App/MissionUI/propertyui.cpp index 50077d3..7dcad50 100644 --- a/App/MissionUI/propertyui.cpp +++ b/App/MissionUI/propertyui.cpp @@ -209,6 +209,9 @@ propertyui::propertyui(QWidget *parent) : table,&MissionUI::FenceGroupChanged); + connect(this,&propertyui::clearTable, + table,&MissionUI::clearTable); + //初始化参数 setWayPointProperty(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3); diff --git a/App/MissionUI/propertyui.h b/App/MissionUI/propertyui.h index 8a63185..a9b4a04 100644 --- a/App/MissionUI/propertyui.h +++ b/App/MissionUI/propertyui.h @@ -281,6 +281,8 @@ Q_SIGNALS: void FenceGroupChanged(int old,int cur); + void clearTable(); + private slots: void GroupChanged(int value); diff --git a/App/main.cpp b/App/main.cpp index a21f137..c0d5f31 100644 --- a/App/main.cpp +++ b/App/main.cpp @@ -84,6 +84,27 @@ void CheckDirs(const QString &path, const QStringList &dirs) { } } +QStringList getFiles(const QString &filePath,const QString &fileSuffix) +{ + QStringList list; + list.clear(); + + QDir Dir(filePath); //查看工作路径是否存在 + if(!Dir.exists()){ return list;} //如果文件夹不存在则返回 + Dir.setFilter(QDir::Files); //设置过滤器只查看文件 + QStringList filelist = Dir.entryList(QDir::Files); //获取所有文件 + foreach (QFileInfo file, filelist) //遍历只加载.txt到文件列表 + { + if(file.fileName().split(".").back() == fileSuffix) //判断进行再次确认是.fileSuffix + { + list.push_back(file.absoluteFilePath()); + } + } + + return list; +} + + void LoadLang(QApplication *a) { @@ -99,29 +120,20 @@ void LoadLang(QApplication *a) qWarning() << "Fail to load translator " <load(lang, QCoreApplication::applicationDirPath()) - && a->installTranslator(myappTranslator)) - { - qDebug() << "Success to load translator " <load(lang, QCoreApplication::applicationDirPath()) - && a->installTranslator(mapTranslator)) - { - qDebug() << "Success to load translator " <load(lang, QCoreApplication::applicationDirPath()) + && a->installTranslator(Translator)) + { + qDebug() << "Success to load translator " <mavlinknode->Mission,SLOT(WriteCmd(uint8_t,uint8_t,uint32_t,int)),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)), @@ -525,7 +522,15 @@ MainWindow::MainWindow(QWidget *parent) dlink->mavlinknode->Mission,SLOT(sendFence(qreal,qreal,qreal,qreal,uint16_t,uint16_t,uint16_t,uint16_t,uint16_t)),Qt::DirectConnection); - //航点确认窗口 + connect(map,SIGNAL(getMissionFromVehicle(int)), + dlink->mavlinknode->Mission,SLOT(checkoutVehicle(int)),Qt::DirectConnection); + + + connect(dlink->mavlinknode->Mission,SIGNAL(vehicleChanged(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(vehicleChanged(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 ----- commandui connect(map,SIGNAL(setCurrent(int)), commandUI,SLOT(missionConfirm(int))); @@ -1108,8 +1113,6 @@ void MainWindow::setServoOffset(QVariant dirla, QVariant dirra, QVariant dirle, // 16~20Hz左右 运行频率可能太高 void MainWindow::updateUI()//事件驱动式更新数据 { - - static uint32_t custommode_old = 0; static uint8_t state_old = 0; bool isCustomChanged = false; @@ -1133,98 +1136,123 @@ void MainWindow::updateUI()//事件驱动式更新数据 } - //QElapsedTimer ElapsedTimer; + //经纬度大于正常值,将舍弃 更新所有飞机的信息, + foreach (MavLinkNode::_vehicle v, dlink->mavlinknode->vehicleList) { + double lat = (double)(v.gps_raw_int.lat * 10e-8); + double lng = (double)(v.gps_raw_int.lon * 10e-8); - //ElapsedTimer.start(); + if(((lat > -90)&&(lat < 90))&&((lng > -180)&&(lng < 180))) + { + map->setUAVPos(v.sysid, + v.compid, + (double)(v.gps_raw_int.lat * 10e-8), + (double)(v.gps_raw_int.lon * 10e-8), + (double)(v.gps_raw_int.alt * 10e-4)); + } + + map->setUAVHeading(v.sysid, + v.compid, + v.attitude.yaw * 57.3); - copk->setAttitude(dlink->mavlinknode->vehicle.attitude.pitch * 57.3, - dlink->mavlinknode->vehicle.attitude.roll * 57.3, - dlink->mavlinknode->vehicle.attitude.yaw * 57.3); + map->setUAVSpeed(v.sysid, + v.compid, + v.emb_atom_com.mach, + v.emb_atom_com.Airspeed); + } + + //只更新当前选择的飞机信息 + MavLinkNode::_vehicle vehicle = dlink->mavlinknode->vehicleList.value(currentUAV); - copk->setAltitude(dlink->mavlinknode->vehicle.global_position_int.alt * 10e-4); - copk->setAltitudeTarget(dlink->mavlinknode->vehicle.global_position_int.alt * 10e-4 - +dlink->mavlinknode->vehicle.nav_controller_output.alt_error); + + copk->setAttitude(vehicle.attitude.pitch * 57.3, + vehicle.attitude.roll * 57.3, + vehicle.attitude.yaw * 57.3); + + + copk->setAltitude(vehicle.global_position_int.alt * 10e-4); + copk->setAltitudeTarget(vehicle.global_position_int.alt * 10e-4 + +vehicle.nav_controller_output.alt_error); switch (copk->AltitudeFlag()) { default: case 0://绝对 - copk->setHeight(dlink->mavlinknode->vehicle.global_position_int.alt * 10e-4); + copk->setHeight(vehicle.global_position_int.alt * 10e-4); break; case 1://相对 - copk->setHeight(dlink->mavlinknode->vehicle.global_position_int.relative_alt * 10e-4); + copk->setHeight(vehicle.global_position_int.relative_alt * 10e-4); break; case 2://气压 - copk->setHeight(dlink->mavlinknode->vehicle.vfr_hud.alt); + copk->setHeight(vehicle.vfr_hud.alt); break; } - //dlink->mavlinknode->vehicle.vfr_hud.airspeed //表速 - //dlink->mavlinknode->vehicle.gps_raw_int.vel//地速 + //vehicle.vfr_hud.airspeed //表速 + //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); + copk->setAirSpeed(vehicle.emb_atom_com.Airspeed,5);//真空速 + copk->setAirSpeedTarget(vehicle.emb_atom_com.Airspeed + +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());//表速 + copk->setSpeed(vehicle.vfr_hud.airspeed,copk->AirSpeedFlag());//表速 break; case 1: - copk->setSpeed(dlink->mavlinknode->vehicle.emb_atom_com.Airspeed,copk->AirSpeedFlag());//真空速 + copk->setSpeed(vehicle.emb_atom_com.Airspeed,copk->AirSpeedFlag());//真空速 break; case 2: - copk->setSpeed(dlink->mavlinknode->vehicle.gps_raw_int.vel * 0.01,copk->AirSpeedFlag());//地速 + copk->setSpeed(vehicle.gps_raw_int.vel * 0.01,copk->AirSpeedFlag());//地速 break; case 3: - copk->setSpeed(dlink->mavlinknode->vehicle.emb_atom_com.mach,copk->AirSpeedFlag());//马赫 + copk->setSpeed(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->setAOA(vehicle.emb_atom_com.alpha); + copk->setOL(vehicle.ins1.az/(-9.8)); - copk->setVerticalSpeed(-dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3);//速度朝下为正 + copk->setVerticalSpeed(-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->setAlt_err(vehicle.nav_controller_output.alt_error);//高度差 飞机在航线下面为正 + copk->setXTrack(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);// + copk->setRollTarget(vehicle.nav_controller_output.nav_roll);// + copk->setPitchTarget(vehicle.nav_controller_output.nav_pitch);// + copk->setYawTarget(vehicle.nav_controller_output.nav_bearing);// QString gps_str; gps_str.clear(); - switch (dlink->mavlinknode->vehicle.gps_raw_int.fix_type) { + switch (vehicle.gps_raw_int.fix_type) { case 1: gps_str.append(tr("未定位")); break; 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)); + gps_str.append(tr("%1D[%2颗]").arg(vehicle.gps_raw_int.fix_type).arg(vehicle.gps_raw_int.satellites_visible)); break; case 4: - gps_str.append(tr("fix[%1颗]").arg(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible)); + gps_str.append(tr("fix[%1颗]").arg(vehicle.gps_raw_int.satellites_visible)); break; case 5: - gps_str.append(tr("float[%1颗]").arg(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible)); + gps_str.append(tr("float[%1颗]").arg(vehicle.gps_raw_int.satellites_visible)); break; default: - gps_str.append(tr("err[%1颗]").arg(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible)); + gps_str.append(tr("err[%1颗]").arg(vehicle.gps_raw_int.satellites_visible)); break; } @@ -1245,7 +1273,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 uint8_t state = 0; - state = (dlink->mavlinknode->vehicle.heartbeat.base_mode&MAV_MODE_FLAG::MAV_MODE_FLAG_SAFETY_ARMED); + state = (vehicle.heartbeat.base_mode&MAV_MODE_FLAG::MAV_MODE_FLAG_SAFETY_ARMED); if(state != state_old) { @@ -1291,7 +1319,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 } copk->setState(arm_str); - uint32_t custommode = dlink->mavlinknode->vehicle.heartbeat.custom_mode; + uint32_t custommode = vehicle.heartbeat.custom_mode; if(custommode != custommode_old) { @@ -1382,37 +1410,9 @@ void MainWindow::updateUI()//事件驱动式更新数据 - - - - //经纬度大于正常值,将舍弃 - - 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); - - - map->setUAVSpeed(dlink->mavlinknode->vehicle.sysid, - dlink->mavlinknode->vehicle.compid, - dlink->mavlinknode->vehicle.emb_atom_com.mach, - dlink->mavlinknode->vehicle.emb_atom_com.Airspeed); - - - uint32_t health = dlink->mavlinknode->vehicle.sys_status.onboard_control_sensors_health; - uint32_t enable = dlink->mavlinknode->vehicle.sys_status.onboard_control_sensors_enabled; - uint32_t present = dlink->mavlinknode->vehicle.sys_status.onboard_control_sensors_present; + uint32_t health = vehicle.sys_status.onboard_control_sensors_health; + uint32_t enable = vehicle.sys_status.onboard_control_sensors_enabled; + uint32_t present = vehicle.sys_status.onboard_control_sensors_present; uint64_t time; uint64_t date; @@ -1420,16 +1420,16 @@ void MainWindow::updateUI()//事件驱动式更新数据 if(getBit(health,12)?(true):(false)) { - time = ((uint64_t)dlink->mavlinknode->vehicle.ins1.time)% 1000000; - date = ((uint64_t)dlink->mavlinknode->vehicle.ins1.time)/ 1000000; + time = ((uint64_t)vehicle.ins1.time)% 1000000; + date = ((uint64_t)vehicle.ins1.time)/ 1000000; } else { - time = ((uint64_t)dlink->mavlinknode->vehicle.ins2.time)% 1000000; - date = ((uint64_t)dlink->mavlinknode->vehicle.ins2.time)/ 1000000; + time = ((uint64_t)vehicle.ins2.time)% 1000000; + date = ((uint64_t)vehicle.ins2.time)/ 1000000; } - menuBarUI->setTargetAlt(dlink->mavlinknode->vehicle.sys_status.load); + menuBarUI->setTargetAlt(vehicle.sys_status.load); uint8_t hour = time / 10000; @@ -1450,36 +1450,15 @@ void MainWindow::updateUI()//事件驱动式更新数据 menuBarUI->setTagetAirspeed(tim_str); - menuBarUI->setX(dlink->mavlinknode->vehicle.nav_controller_output.xtrack_error); - - menuBarUI->setwp_Dist(((float)dlink->mavlinknode->vehicle.nav_controller_output.wp_dist) * 0.01); - - - - /* - 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); - - } - */ + menuBarUI->setX(vehicle.nav_controller_output.xtrack_error); + menuBarUI->setwp_Dist(((float)vehicle.nav_controller_output.wp_dist) * 0.01); /* //实测,r,le,e,la,a //有符号16位,-32767 ~ 32767 - le = dlink->mavlinknode->vehicle.servo_output_raw.servo1_raw + le = vehicle.servo_output_raw.servo1_raw re = ru = la = @@ -1503,26 +1482,26 @@ void MainWindow::updateUI()//事件驱动式更新数据 */ - toolsui->powersystem->setTurbineState(&dlink->mavlinknode->vehicle.turbinstate); - toolsui->powersystem->setCCMState(&dlink->mavlinknode->vehicle.ccmstate); + toolsui->powersystem->setTurbineState(&vehicle.turbinstate); + toolsui->powersystem->setCCMState(&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->powersystem->setMa(vehicle.emb_atom_com.mach); + toolsui->powersystem->setAlt(vehicle.gps_raw_int.alt * 10e-4); - toolsui->powersystem->setFuel(QString::number(dlink->mavlinknode->vehicle.ccmstate.volts[2],'f',0), - QString::number(dlink->mavlinknode->vehicle.ccmstate.fuel_level * 10.0 / 65536.0f,'f',1)); + toolsui->powersystem->setFuel(QString::number(vehicle.ccmstate.volts[2],'f',0), + QString::number(vehicle.ccmstate.fuel_level * 10.0 / 65536.0f,'f',1)); - toolsui->servosystem->setBUMState(&dlink->mavlinknode->vehicle.bmustate); + toolsui->servosystem->setBUMState(&vehicle.bmustate); //在这里设置 - toolsui->servosystem->setServoState(&dlink->mavlinknode->vehicle.servo_output_raw); + toolsui->servosystem->setServoState(&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); + v28_Low = (((float)vehicle.bmustate.BAT1_remain_perc * 0.1) < 10)?(false):(true); + v56_Low = (((float)vehicle.bmustate.BAT2_remain_perc * 0.1) < 10)?(false):(true); // qDebug() << "v28_Low" << v28_Low << "v56_Low" << v56_Low; @@ -1595,7 +1574,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 //舵机反馈是有符号16b/ - uint16_t servoHealt = dlink->mavlinknode->vehicle.servo_output_raw.servo10_raw; + uint16_t servoHealt = vehicle.servo_output_raw.servo10_raw; 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 @@ -1606,8 +1585,8 @@ void MainWindow::updateUI()//事件驱动式更新数据 //19~24 - if(((dlink->mavlinknode->vehicle.turbinstate.SysState & 0x000F) == 0x04) || - ((dlink->mavlinknode->vehicle.turbinstate.SysState & 0x000F) == 0x00)) + if(((vehicle.turbinstate.SysState & 0x000F) == 0x04) || + ((vehicle.turbinstate.SysState & 0x000F) == 0x00)) { healthui->setState(21,HealthUI::state::failure);//停车 } @@ -1616,17 +1595,17 @@ void MainWindow::updateUI()//事件驱动式更新数据 healthui->setState(21,HealthUI::state::inital);//停车 } - //healthui->setState(21,((dlink->mavlinknode->vehicle.turbinstate.SysState & 0x000F) == 0x04)?(HealthUI::state::failure):(HealthUI::state::inital));//停车 + //healthui->setState(21,((vehicle.turbinstate.SysState & 0x000F) == 0x04)?(HealthUI::state::failure):(HealthUI::state::inital));//停车 healthui->setState(22,getBit(health,18)?(HealthUI::state::failure):(HealthUI::state::inital));//开伞 healthui->setState(23,getBit(health,19)?(HealthUI::state::failure):(HealthUI::state::inital));//开气囊 healthui->setState(24,getBit(health,20)?(HealthUI::state::failure):(HealthUI::state::inital));//充气 healthui->setState(25,getBit(health,21)?(HealthUI::state::failure):(HealthUI::state::inital));//抛伞 - //healthui->setState(26,((dlink->mavlinknode->vehicle.turbinstate.SysState & 0x000F) >= 0x0d)?(HealthUI::state::success):(HealthUI::state::inital));//开加力 + //healthui->setState(26,((vehicle.turbinstate.SysState & 0x000F) >= 0x0d)?(HealthUI::state::success):(HealthUI::state::inital));//开加力 - if((dlink->mavlinknode->vehicle.turbinstate.SysState & 0x000F) >= 0x0d) + if((vehicle.turbinstate.SysState & 0x000F) >= 0x0d) { - uint8_t sta = dlink->mavlinknode->vehicle.turbinstate.SysState & 0x000F; + uint8_t sta = vehicle.turbinstate.SysState & 0x000F; switch (sta) { case 0x0d: @@ -1664,9 +1643,9 @@ void MainWindow::updateUI()//事件驱动式更新数据 } - //healthui->setState(26,(((dlink->mavlinknode->vehicle.servo_output_raw.servo6_raw - 1000)/10) > 110)?(HealthUI::state::success):(HealthUI::state::inital));//开加力 + //healthui->setState(26,(((vehicle.servo_output_raw.servo6_raw - 1000)/10) > 110)?(HealthUI::state::success):(HealthUI::state::inital));//开加力 - switch (dlink->mavlinknode->vehicle.ins1.sys_status & 0x0F) { + switch (vehicle.ins1.sys_status & 0x0F) { default: case 0: { @@ -1690,7 +1669,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 }break; } - switch (dlink->mavlinknode->vehicle.ins2.sys_status & 0x0F) { + switch (vehicle.ins2.sys_status & 0x0F) { default: case 0: { @@ -1738,7 +1717,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 //得到航线组数,数据为1,2,3,4 //group = (int)(getBit(enable,11) << 2) | (int)(getBit(enable,10) << 1) | (int)(getBit(enable,9)); - //group = dlink->mavlinknode->vehicle. + //group = vehicle. /* @@ -1815,35 +1794,35 @@ void MainWindow::updateUI()//事件驱动式更新数据 //======================== - statusui->setState(1,QString::number(dlink->mavlinknode->vehicle.ins1.az,'f',1),0); - statusui->setState(2,QString::number(dlink->mavlinknode->vehicle.ins1.ay,'f',1),0); + statusui->setState(1,QString::number(vehicle.ins1.az,'f',1),0); + statusui->setState(2,QString::number(vehicle.ins1.ay,'f',1),0); - statusui->setState(3,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(3,QString::number(vehicle.attitude.roll * 57.3,'f',1), + QString::number(vehicle.nav_controller_output.nav_roll,'f',1)); - statusui->setState(4,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(4,QString::number(vehicle.attitude.pitch * 57.3,'f',1), + QString::number(vehicle.nav_controller_output.nav_pitch,'f',1)); - statusui->setState(5,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(5,QString::number(to360deg(vehicle.gps_raw_int.cog * 0.01),'f',1), + QString::number(to360deg(vehicle.nav_controller_output.nav_bearing),'f',1)); - statusui->setState(6,QString::number(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4,'f',1), - QString::number(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4 - +dlink->mavlinknode->vehicle.nav_controller_output.alt_error,'f',1)); + statusui->setState(6,QString::number(vehicle.gps_raw_int.alt * 10e-4,'f',1), + QString::number(vehicle.gps_raw_int.alt * 10e-4 + +vehicle.nav_controller_output.alt_error,'f',1)); - statusui->setState(7,QString::number(dlink->mavlinknode->vehicle.vfr_hud.airspeed,'f',1), - QString::number(dlink->mavlinknode->vehicle.vfr_hud.airspeed - +dlink->mavlinknode->vehicle.nav_controller_output.aspd_error,'f',1)); + statusui->setState(7,QString::number(vehicle.vfr_hud.airspeed,'f',1), + QString::number(vehicle.vfr_hud.airspeed + +vehicle.nav_controller_output.aspd_error,'f',1)); - statusui->setState(8,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.Airspeed,'f',1), - QString::number(dlink->mavlinknode->vehicle.emb_atom_com.Airspeed - +dlink->mavlinknode->vehicle.nav_controller_output.aspd_error,'f',1)); + statusui->setState(8,QString::number(vehicle.emb_atom_com.Airspeed,'f',1), + QString::number(vehicle.emb_atom_com.Airspeed + +vehicle.nav_controller_output.aspd_error,'f',1)); - statusui->setState(9,QString::number(dlink->mavlinknode->vehicle.gps_raw_int.vel * 10e-3,'f',1),tr(" ")); + statusui->setState(9,QString::number(vehicle.gps_raw_int.vel * 10e-3,'f',1),tr(" ")); - statusui->setState(10,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.mach,'f',2),tr(" ")); + statusui->setState(10,QString::number(vehicle.emb_atom_com.mach,'f',2),tr(" ")); - statusui->setState(11,QString::number(-dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3,'f',1),tr(" ")); + statusui->setState(11,QString::number(-vehicle.global_position_int.vz * 10e-3,'f',1),tr(" ")); @@ -1852,48 +1831,48 @@ void MainWindow::updateUI()//事件驱动式更新数据 if(toolsui->senser) { - toolsui->senser->setAltChart("海拔高度",dlink->mavlinknode->vehicle.global_position_int.alt * 10e-4,2); - toolsui->senser->setAltChart("气压高度",dlink->mavlinknode->vehicle.vfr_hud.alt,1); + toolsui->senser->setAltChart("海拔高度",vehicle.global_position_int.alt * 10e-4,2); + toolsui->senser->setAltChart("气压高度",vehicle.vfr_hud.alt,1); - toolsui->senser->setAttChart("滚转角度值",dlink->mavlinknode->vehicle.attitude.roll*57.3,3); - toolsui->senser->setAttChart("俯仰角度值",dlink->mavlinknode->vehicle.attitude.pitch*57.3,1); + toolsui->senser->setAttChart("滚转角度值",vehicle.attitude.roll*57.3,3); + toolsui->senser->setAttChart("俯仰角度值",vehicle.attitude.pitch*57.3,1); - toolsui->senser->setGyroChart("滚转角速度",dlink->mavlinknode->vehicle.attitude.rollspeed * 57.3,3); - toolsui->senser->setGyroChart("俯仰角速度",dlink->mavlinknode->vehicle.attitude.pitchspeed * 57.3,1); - toolsui->senser->setGyroChart("偏航角速度",dlink->mavlinknode->vehicle.attitude.yawspeed * 57.3,2); + toolsui->senser->setGyroChart("滚转角速度",vehicle.attitude.rollspeed * 57.3,3); + toolsui->senser->setGyroChart("俯仰角速度",vehicle.attitude.pitchspeed * 57.3,1); + toolsui->senser->setGyroChart("偏航角速度",vehicle.attitude.yawspeed * 57.3,2); - toolsui->senser->setAccChart("轴向加速度",dlink->mavlinknode->vehicle.ins1.ax,3); - //toolsui->senser->setAccChart("外置ax",dlink->mavlinknode->vehicle.ins2.ax,3); - toolsui->senser->setAccChart("侧向加速度",dlink->mavlinknode->vehicle.ins1.ay,1); - //toolsui->senser->setAccChart("外置ay",dlink->mavlinknode->vehicle.ins2.ay,1); - toolsui->senser->setAccChart("法向加速度",dlink->mavlinknode->vehicle.ins1.az,2); - //toolsui->senser->setAccChart("外置az",dlink->mavlinknode->vehicle.ins2.az,2); + toolsui->senser->setAccChart("轴向加速度",vehicle.ins1.ax,3); + //toolsui->senser->setAccChart("外置ax",vehicle.ins2.ax,3); + toolsui->senser->setAccChart("侧向加速度",vehicle.ins1.ay,1); + //toolsui->senser->setAccChart("外置ay",vehicle.ins2.ay,1); + toolsui->senser->setAccChart("法向加速度",vehicle.ins1.az,2); + //toolsui->senser->setAccChart("外置az",vehicle.ins2.az,2); - toolsui->senser->setSpeedChart("地速",dlink->mavlinknode->vehicle.gps_raw_int.vel * 10e-3,3); - toolsui->senser->setSpeedChart("真空速",dlink->mavlinknode->vehicle.emb_atom_com.Airspeed,2); - toolsui->senser->setSpeedChart("表速",dlink->mavlinknode->vehicle.vfr_hud.airspeed,0); - toolsui->senser->setSpeedChart("目标表速",dlink->mavlinknode->vehicle.vfr_hud.airspeed - +dlink->mavlinknode->vehicle.nav_controller_output.aspd_error,1); + toolsui->senser->setSpeedChart("地速",vehicle.gps_raw_int.vel * 10e-3,3); + toolsui->senser->setSpeedChart("真空速",vehicle.emb_atom_com.Airspeed,2); + toolsui->senser->setSpeedChart("表速",vehicle.vfr_hud.airspeed,0); + toolsui->senser->setSpeedChart("目标表速",vehicle.vfr_hud.airspeed + +vehicle.nav_controller_output.aspd_error,1); } - qreal la_command = dir_la.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo14_raw)/32767.0 * max_la.toDouble()/scale_la.toDouble() + bias_la.toDouble() * 57.295; - qreal la_angle = dir_la.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo4_raw) /32767.0 * max_la.toDouble()/scale_la.toDouble() + bias_la.toDouble() * 57.295; - qreal ra_command = dir_ra.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo11_raw)/32767.0 * max_ra.toDouble()/scale_ra.toDouble() + bias_ra.toDouble() * 57.295; - qreal ra_angle = dir_ra.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo5_raw)/ 32767.0 * max_ra.toDouble()/scale_ra.toDouble() + bias_ra.toDouble() * 57.295; + qreal la_command = dir_la.toInt() * ((int16_t)vehicle.servo_output_raw.servo14_raw)/32767.0 * max_la.toDouble()/scale_la.toDouble() + bias_la.toDouble() * 57.295; + qreal la_angle = dir_la.toInt() * ((int16_t)vehicle.servo_output_raw.servo4_raw) /32767.0 * max_la.toDouble()/scale_la.toDouble() + bias_la.toDouble() * 57.295; + qreal ra_command = dir_ra.toInt() * ((int16_t)vehicle.servo_output_raw.servo11_raw)/32767.0 * max_ra.toDouble()/scale_ra.toDouble() + bias_ra.toDouble() * 57.295; + qreal ra_angle = dir_ra.toInt() * ((int16_t)vehicle.servo_output_raw.servo5_raw)/ 32767.0 * max_ra.toDouble()/scale_ra.toDouble() + bias_ra.toDouble() * 57.295; - qreal le_command = dir_le.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo15_raw)/32767.0 * max_le.toDouble()/scale_le.toDouble() + bias_le.toDouble() * 57.295; - qreal le_angle = dir_le.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo1_raw) /32767.0 * max_le.toDouble()/scale_le.toDouble() + bias_le.toDouble() * 57.295; - qreal re_command = dir_re.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo12_raw)/32767.0 * max_re.toDouble()/scale_re.toDouble() + bias_re.toDouble() * 57.295; - qreal re_angle = dir_re.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo2_raw) /32767.0 * max_re.toDouble()/scale_re.toDouble() + bias_re.toDouble() * 57.295; + qreal le_command = dir_le.toInt() * ((int16_t)vehicle.servo_output_raw.servo15_raw)/32767.0 * max_le.toDouble()/scale_le.toDouble() + bias_le.toDouble() * 57.295; + qreal le_angle = dir_le.toInt() * ((int16_t)vehicle.servo_output_raw.servo1_raw) /32767.0 * max_le.toDouble()/scale_le.toDouble() + bias_le.toDouble() * 57.295; + qreal re_command = dir_re.toInt() * ((int16_t)vehicle.servo_output_raw.servo12_raw)/32767.0 * max_re.toDouble()/scale_re.toDouble() + bias_re.toDouble() * 57.295; + qreal re_angle = dir_re.toInt() * ((int16_t)vehicle.servo_output_raw.servo2_raw) /32767.0 * max_re.toDouble()/scale_re.toDouble() + bias_re.toDouble() * 57.295; - qreal ru_command = dir_ru.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo13_raw)/32767.0 * max_ru.toDouble()/scale_ru.toDouble() + bias_ru.toDouble() * 57.295; - qreal ru_angle = dir_ru.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo3_raw) /32767.0 * max_ru.toDouble()/scale_ru.toDouble() + bias_ru.toDouble() * 57.295; + qreal ru_command = dir_ru.toInt() * ((int16_t)vehicle.servo_output_raw.servo13_raw)/32767.0 * max_ru.toDouble()/scale_ru.toDouble() + bias_ru.toDouble() * 57.295; + qreal ru_angle = dir_ru.toInt() * ((int16_t)vehicle.servo_output_raw.servo3_raw) /32767.0 * max_ru.toDouble()/scale_ru.toDouble() + bias_ru.toDouble() * 57.295; statusui->setServo(1,QString::number(la_command,'f',2), @@ -1924,216 +1903,31 @@ void MainWindow::updateUI()//事件驱动式更新数据 } - statusui->setEngine(1,QString::number((dlink->mavlinknode->vehicle.servo_output_raw.servo6_raw - 1000) * 0.1,'f',0), - QString::number(dlink->mavlinknode->vehicle.turbinstate.RPM_mea,'f',0)); + statusui->setEngine(1,QString::number((vehicle.servo_output_raw.servo6_raw - 1000) * 0.1,'f',0), + QString::number(vehicle.turbinstate.RPM_mea,'f',0)); - statusui->setEngine(2,QString::number(dlink->mavlinknode->vehicle.ccmstate.fuel_level * 10.0 / 65536.0f,'f',1), - QString::number(dlink->mavlinknode->vehicle.servo_output_raw.servo7_raw * 0.01,'f',1));//剩余油量 - statusui->setEngine(3,QString::number(dlink->mavlinknode->vehicle.ccmstate.volts[2],'f',0),0);//油压 + statusui->setEngine(2,QString::number(vehicle.ccmstate.fuel_level * 10.0 / 65536.0f,'f',1), + QString::number(vehicle.servo_output_raw.servo7_raw * 0.01,'f',1));//剩余油量 + statusui->setEngine(3,QString::number(vehicle.ccmstate.volts[2],'f',0),0);//油压 - statusui->setEngine(4,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[1] * 0.1,'f',1),//温度 - QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[0] * 0.1,'f',1)); + statusui->setEngine(4,QString::number(vehicle.ccmstate.temp[1] * 0.1,'f',1),//温度 + QString::number(vehicle.ccmstate.temp[0] * 0.1,'f',1)); - statusui->setBattery(1,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT1_group_voltage_mv * 0.001,'f',1), - QString::number((float)((int16_t)dlink->mavlinknode->vehicle.bmustate.BAT1_group_current_dA) *0.1f,'f',1)); + statusui->setBattery(1,QString::number(vehicle.bmustate.BAT1_group_voltage_mv * 0.001,'f',1), + QString::number((float)((int16_t)vehicle.bmustate.BAT1_group_current_dA) *0.1f,'f',1)); - statusui->setBattery(2,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT2_group_voltage_mv * 0.001,'f',1), - QString::number((float)((int16_t)dlink->mavlinknode->vehicle.bmustate.BAT2_group_current_dA) *0.1f,'f',1)); + statusui->setBattery(2,QString::number(vehicle.bmustate.BAT2_group_voltage_mv * 0.001,'f',1), + QString::number((float)((int16_t)vehicle.bmustate.BAT2_group_current_dA) *0.1f,'f',1)); - - - - //QApplication::processEvents(); - - - - //===================diagram ui ============================================= - - - /* - void setAttitude(uint8_t source, - float ax,float ay,float az, - float p,float q,float r, - float rol,float pit,float yaw); - - void setBaseState(uint32_t pos,QVariant real,QVariant meas); - void setServo(uint32_t pos,QVariant real,QVariant meas); - void setEngine(uint32_t pos,QVariant value); - void setBattery(uint32_t pos,QVariant value); - void setDlink(uint32_t pos,QVariant value); - void setNavigation(uint32_t pos,QVariant value); - void setControlState(uint32_t pos,QVariant value); - - - */ -/* - toolsui->diagram->setAttitude(1, - dlink->mavlinknode->vehicle.ins1.ax, - dlink->mavlinknode->vehicle.ins1.ay, - dlink->mavlinknode->vehicle.ins1.az, - dlink->mavlinknode->vehicle.ins1.gx, - dlink->mavlinknode->vehicle.ins1.gy, - dlink->mavlinknode->vehicle.ins1.gx, - dlink->mavlinknode->vehicle.ins1.roll * 57.3, - dlink->mavlinknode->vehicle.ins1.pitch * 57.3, - dlink->mavlinknode->vehicle.ins1.yaw * 57.3);//ins - toolsui->diagram->setAttitude(2, - dlink->mavlinknode->vehicle.ins2.ax, - dlink->mavlinknode->vehicle.ins2.ay, - dlink->mavlinknode->vehicle.ins2.az, - dlink->mavlinknode->vehicle.ins2.gx, - dlink->mavlinknode->vehicle.ins2.gy, - dlink->mavlinknode->vehicle.ins2.gx, - dlink->mavlinknode->vehicle.ins2.roll * 57.3, - dlink->mavlinknode->vehicle.ins2.pitch * 57.3, - dlink->mavlinknode->vehicle.ins2.yaw * 57.3);//sbg - - toolsui->diagram->setAttitude(3, - 0, - 0, - 0, - dlink->mavlinknode->vehicle.attitude.rollspeed * 57.3, - dlink->mavlinknode->vehicle.attitude.pitchspeed * 57.3, - dlink->mavlinknode->vehicle.attitude.yawspeed * 57.3, - dlink->mavlinknode->vehicle.attitude.roll * 57.3, - dlink->mavlinknode->vehicle.attitude.pitch * 57.3, - dlink->mavlinknode->vehicle.attitude.yaw * 57.3);//use - - - - toolsui->diagram->setBaseState(1,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.alpha,'f',1),0); - toolsui->diagram->setBaseState(2,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.beta,'f',1),0); - - toolsui->diagram->setBaseState(3,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->setBaseState(4,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->setBaseState(5,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)); - - toolsui->diagram->setBaseState(6,QString::number(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4,'f',1), - QString::number(dlink->mavlinknode->vehicle.gps_raw_int.alt * 10e-4 - +dlink->mavlinknode->vehicle.nav_controller_output.alt_error,'f',1)); - - toolsui->diagram->setBaseState(7,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.Airspeed,'f',1), - QString::number(dlink->mavlinknode->vehicle.emb_atom_com.Airspeed - +dlink->mavlinknode->vehicle.nav_controller_output.aspd_error,'f',1)); - - toolsui->diagram->setBaseState(8,QString::number(dlink->mavlinknode->vehicle.vfr_hud.airspeed,'f',1), - QString::number(dlink->mavlinknode->vehicle.vfr_hud.airspeed - +dlink->mavlinknode->vehicle.nav_controller_output.aspd_error,'f',1)); - - toolsui->diagram->setBaseState(9,QString::number(dlink->mavlinknode->vehicle.gps_raw_int.vel * 10e-3,'f',1),0); - toolsui->diagram->setBaseState(10,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.mach,'f',2),0); - toolsui->diagram->setBaseState(11,QString::number(-dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3,'f',1),0); - - - - - toolsui->diagram->setServo(1,QString::number(dir_la.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo14_raw)/32767.0 * max_la.toDouble()/scale_la.toDouble() - bias_la.toDouble(),'f',2), - QString::number(dir_la.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo4_raw) /32767.0 * max_la.toDouble()/scale_la.toDouble() - bias_la.toDouble(),'f',2)); - toolsui->diagram->setServo(2,QString::number(dir_ra.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo11_raw)/32767.0 * max_ra.toDouble()/scale_ra.toDouble() - bias_ra.toDouble(),'f',2), - QString::number(dir_ra.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo5_raw) /32767.0 * max_ra.toDouble()/scale_ra.toDouble() - bias_ra.toDouble(),'f',2)); - toolsui->diagram->setServo(3,QString::number(dir_le.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo15_raw)/32767.0 * max_le.toDouble()/scale_le.toDouble() - bias_le.toDouble(),'f',2), - QString::number(dir_le.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo1_raw) /32767.0 * max_le.toDouble()/scale_le.toDouble() - bias_le.toDouble(),'f',2)); - toolsui->diagram->setServo(4,QString::number(dir_re.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo12_raw)/32767.0 * max_re.toDouble()/scale_re.toDouble() - bias_re.toDouble(),'f',2), - QString::number(dir_re.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo2_raw) /32767.0 * max_re.toDouble()/scale_re.toDouble() - bias_re.toDouble(),'f',2)); - toolsui->diagram->setServo(5,QString::number(dir_ru.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo13_raw)/32767.0 * max_ru.toDouble()/scale_ru.toDouble() - bias_ru.toDouble(),'f',2), - QString::number(dir_ru.toInt() * ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo3_raw) /32767.0 * max_ru.toDouble()/scale_ru.toDouble() - bias_ru.toDouble(),'f',2)); -*/ -/* - toolsui->diagram->setServo(1,QString::number( ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo14_raw)/32767.0 * 35.0 / 1.12 - m_la,'f',2), - QString::number( ((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo4_raw)/32767.0 * 35.0 / 1.12 - m_la,'f',2)); - toolsui->diagram->setServo(2,QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo11_raw)/32767.0 * 35.0 / 1.117 - m_ra,'f',2), - QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo5_raw)/32767.0 * 35.0 / 1.117 - m_ra,'f',2)); - toolsui->diagram->setServo(3,QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo15_raw)/32767.0 * 25.0 - m_le,'f',2), - QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo1_raw)/32767.0 * 25.0 - m_le,'f',2)); - toolsui->diagram->setServo(4,QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo12_raw)/32767.0 * 25.0 - m_re,'f',2), - QString::number(((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo2_raw)/32767.0 * 25.0 - m_re,'f',2)); - toolsui->diagram->setServo(5,QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo13_raw)/32767.0 * 25.0 - m_ru,'f',2), - QString::number(-((int16_t)dlink->mavlinknode->vehicle.servo_output_raw.servo3_raw)/32767.0 * 25.0 - m_ru,'f',2)); - -*/ - - - /* - QString Fix; - switch (dlink->mavlinknode->vehicle.gps_raw_int.fix_type) { - case 0: - case 1: - Fix.append(tr("GPS Unlocated")); - break; - case 2: - case 3: - Fix.append(tr("%1D").arg(dlink->mavlinknode->vehicle.gps_raw_int.fix_type)); - break; - case 4: - Fix.append(tr("fixed")); - break; - case 5: - Fix.append(tr("float")); - break; - default: - Fix.append(tr("%1").arg(dlink->mavlinknode->vehicle.gps_raw_int.fix_type)); - break; - } - - */ - -/* - toolsui->diagram->setNavigation(1,Fix);//定位状态 - toolsui->diagram->setNavigation(2,QString::number(dlink->mavlinknode->vehicle.gps_raw_int.satellites_visible));//微型数 - toolsui->diagram->setNavigation(3,getBit(health,12)?(tr("内置惯导")):(tr("外置SBG")));//数据源 - //toolsui->diagram->setNavigation(4,QString::number(dlink->mavlinknode->bitrate));//目标点 - toolsui->diagram->setNavigation(5,QString::number(dlink->mavlinknode->vehicle.nav_controller_output.xtrack_error,'f',1));//侧偏距 - toolsui->diagram->setNavigation(6,QString::number(dlink->mavlinknode->vehicle.nav_controller_output.wp_dist * 0.001,'f',2));//待飞距 - - toolsui->diagram->setControlState(1,0);//控制模式 - toolsui->diagram->setControlState(2,mode_str);//飞行模式 - toolsui->diagram->setControlState(3,0);//纵向模态 - toolsui->diagram->setControlState(4,0);//横向模态 - - - - - //单位? - 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.volts[2],'f',0))); - toolsui->diagram->setEngine(4,QString::number(dlink->mavlinknode->vehicle.ccmstate.fuel_level * 10.0 / 65536.0f,'f',1) - + "/" + - QString::number(dlink->mavlinknode->vehicle.servo_output_raw.servo7_raw * 0.01,'f',1)); - toolsui->diagram->setEngine(5,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[1] * 0.1,'f',1)); - toolsui->diagram->setEngine(6,QString::number(dlink->mavlinknode->vehicle.ccmstate.temp[0] * 0.1,'f',1)); - - 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((int16_t)dlink->mavlinknode->vehicle.bmustate.BAT1_low_temp_degC,'f',1)); - - toolsui->diagram->setBattery(5,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT2_group_voltage_mv * 0.001,'f',1)); - toolsui->diagram->setBattery(6,QString::number((float)((int16_t)dlink->mavlinknode->vehicle.bmustate.BAT2_group_current_dA) *0.1f,'f',1)); - toolsui->diagram->setBattery(7,QString::number(dlink->mavlinknode->vehicle.bmustate.BAT2_remain_perc *0.1f,'f',1)); - toolsui->diagram->setBattery(8,QString::number((int16_t)dlink->mavlinknode->vehicle.bmustate.BAT2_low_temp_degC,'f',1)); - - toolsui->diagram->setDlink(1,QString::number(dlink->mavlinknode->rssi,'f',0)); - toolsui->diagram->setDlink(2,QString::number(dlink->mavlinknode->rate_in)); -*/ - - //dlink->mavlinknode->vehicle.turbinstate.RPM_mea = 12000; - - - if((isEngineStartUp == false)&&(dlink->mavlinknode->vehicle.turbinstate.RPM_mea >= 10000)) + if((isEngineStartUp == false)&&(vehicle.turbinstate.RPM_mea >= 10000)) { StartupTime->setTime(QDateTime::currentDateTime().time()); isEngineStartUp = true; } - else if((isEngineStartUp == true)&&(dlink->mavlinknode->vehicle.turbinstate.RPM_mea < 8000)) + else if((isEngineStartUp == true)&&(vehicle.turbinstate.RPM_mea < 8000)) { isEngineStartUp = false; } @@ -2145,7 +1939,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 QString bit1; - switch (dlink->mavlinknode->vehicle.ins1.BIT & 0x0F) { + switch (vehicle.ins1.BIT & 0x0F) { default: case 0: { @@ -2171,7 +1965,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 } QString att1; - if(dlink->mavlinknode->vehicle.ins1.BIT & 0x10) + if(vehicle.ins1.BIT & 0x10) { att1.append(tr("正常")); } @@ -2180,7 +1974,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 } QString heading1; - if(dlink->mavlinknode->vehicle.ins1.BIT & 0x20) + if(vehicle.ins1.BIT & 0x20) { heading1.append(tr("正常")); } @@ -2189,7 +1983,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 } QString spd1; - if(dlink->mavlinknode->vehicle.ins1.BIT & 0x40) + if(vehicle.ins1.BIT & 0x40) { spd1.append(tr("正常")); } @@ -2198,7 +1992,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 } QString pos1; - if(dlink->mavlinknode->vehicle.ins1.BIT & 0x80) + if(vehicle.ins1.BIT & 0x80) { pos1.append(tr("正常")); } @@ -2209,7 +2003,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 QString sys1; - switch (dlink->mavlinknode->vehicle.ins1.sys_status & 0x0F) { + switch (vehicle.ins1.sys_status & 0x0F) { default: case 0: { @@ -2231,7 +2025,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 QString com1; - switch (dlink->mavlinknode->vehicle.ins1.com_status & 0x0F) { + switch (vehicle.ins1.com_status & 0x0F) { default: case 0: { @@ -2253,7 +2047,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 QString gps1; - switch (dlink->mavlinknode->vehicle.ins1.gps_status) { + switch (vehicle.ins1.gps_status) { case 0: gps1.append(tr("未定位")); case 1: @@ -2293,7 +2087,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 - toolsui->senser->setINS(1,1,QString::number(dlink->mavlinknode->vehicle.ins1.satellites_visible)); + toolsui->senser->setINS(1,1,QString::number(vehicle.ins1.satellites_visible)); toolsui->senser->setINS(1,2,bit1);//bit toolsui->senser->setINS(1,3,att1);//bit1 toolsui->senser->setINS(1,4,heading1);//bit2 @@ -2302,34 +2096,34 @@ void MainWindow::updateUI()//事件驱动式更新数据 toolsui->senser->setINS(1,7,sys1);//sys toolsui->senser->setINS(1,8,com1);//com toolsui->senser->setINS(1,9,gps1);//gps - toolsui->senser->setINS(1,10,QString::number(dlink->mavlinknode->vehicle.ins1.lon,'f',8)); - toolsui->senser->setINS(1,11,QString::number(dlink->mavlinknode->vehicle.ins1.lat,'f',8)); - toolsui->senser->setINS(1,12,QString::number(dlink->mavlinknode->vehicle.ins1.alt,'f',1)); - toolsui->senser->setINS(1,13,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->senser->setINS(1,14,QString::number(dlink->mavlinknode->vehicle.ins1.roll * 57.3,'f',1)); - toolsui->senser->setINS(1,15,QString::number(dlink->mavlinknode->vehicle.ins1.pitch * 57.3,'f',1)); - toolsui->senser->setINS(1,16,QString::number(to360deg(dlink->mavlinknode->vehicle.ins1.yaw * 57.3),'f',1)); + toolsui->senser->setINS(1,10,QString::number(vehicle.ins1.lon,'f',8)); + toolsui->senser->setINS(1,11,QString::number(vehicle.ins1.lat,'f',8)); + toolsui->senser->setINS(1,12,QString::number(vehicle.ins1.alt,'f',1)); + toolsui->senser->setINS(1,13,QString::number(sqrt(pow(vehicle.ins1.v_north,2) + + pow(vehicle.ins1.v_east,2) + + pow(vehicle.ins1.v_up,2)),'f',1)); + toolsui->senser->setINS(1,14,QString::number(vehicle.ins1.roll * 57.3,'f',1)); + toolsui->senser->setINS(1,15,QString::number(vehicle.ins1.pitch * 57.3,'f',1)); + toolsui->senser->setINS(1,16,QString::number(to360deg(vehicle.ins1.yaw * 57.3),'f',1)); - if((dlink->mavlinknode->vehicle.ins1.v_east != 0)|| - (dlink->mavlinknode->vehicle.ins1.v_north != 0)) + if((vehicle.ins1.v_east != 0)|| + (vehicle.ins1.v_north != 0)) { - toolsui->senser->setINS(1,17,QString::number(to360deg(atan2(dlink->mavlinknode->vehicle.ins1.v_east, - dlink->mavlinknode->vehicle.ins1.v_north) * 57.3),'f',1)); + toolsui->senser->setINS(1,17,QString::number(to360deg(atan2(vehicle.ins1.v_east, + vehicle.ins1.v_north) * 57.3),'f',1)); } - toolsui->senser->setINS(1,18,QString::number(dlink->mavlinknode->vehicle.ins1.gx,'f',1)); - toolsui->senser->setINS(1,19,QString::number(dlink->mavlinknode->vehicle.ins1.gy,'f',1)); - toolsui->senser->setINS(1,20,QString::number(dlink->mavlinknode->vehicle.ins1.gz,'f',1)); - toolsui->senser->setINS(1,21,QString::number(dlink->mavlinknode->vehicle.ins1.ax,'f',1)); - toolsui->senser->setINS(1,22,QString::number(dlink->mavlinknode->vehicle.ins1.ay,'f',1)); - toolsui->senser->setINS(1,23,QString::number(dlink->mavlinknode->vehicle.ins1.az,'f',1)); + toolsui->senser->setINS(1,18,QString::number(vehicle.ins1.gx,'f',1)); + toolsui->senser->setINS(1,19,QString::number(vehicle.ins1.gy,'f',1)); + toolsui->senser->setINS(1,20,QString::number(vehicle.ins1.gz,'f',1)); + toolsui->senser->setINS(1,21,QString::number(vehicle.ins1.ax,'f',1)); + toolsui->senser->setINS(1,22,QString::number(vehicle.ins1.ay,'f',1)); + toolsui->senser->setINS(1,23,QString::number(vehicle.ins1.az,'f',1)); QString bit2; - switch (dlink->mavlinknode->vehicle.ins2.BIT & 0x0F) { + switch (vehicle.ins2.BIT & 0x0F) { default: case 0: { @@ -2354,7 +2148,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 } QString att2; - if(dlink->mavlinknode->vehicle.ins2.BIT & 0x10) + if(vehicle.ins2.BIT & 0x10) { att2.append(tr("正常")); } @@ -2363,7 +2157,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 } QString heading2; - if(dlink->mavlinknode->vehicle.ins2.BIT & 0x20) + if(vehicle.ins2.BIT & 0x20) { heading2.append(tr("正常")); } @@ -2372,7 +2166,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 } QString spd2; - if(dlink->mavlinknode->vehicle.ins2.BIT & 0x40) + if(vehicle.ins2.BIT & 0x40) { spd2.append(tr("正常")); } @@ -2381,7 +2175,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 } QString pos2; - if(dlink->mavlinknode->vehicle.ins2.BIT & 0x80) + if(vehicle.ins2.BIT & 0x80) { pos2.append(tr("正常")); } @@ -2392,7 +2186,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 QString sys2; - switch (dlink->mavlinknode->vehicle.ins2.sys_status & 0x0F) { + switch (vehicle.ins2.sys_status & 0x0F) { default: case 0: { @@ -2414,7 +2208,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 QString com2; - switch (dlink->mavlinknode->vehicle.ins2.com_status & 0x0F) { + switch (vehicle.ins2.com_status & 0x0F) { default: case 0: { @@ -2436,7 +2230,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 QString gps2; - switch (dlink->mavlinknode->vehicle.ins2.gps_status) { + switch (vehicle.ins2.gps_status) { case 0: gps2.append(tr("未定位")); case 1: @@ -2475,7 +2269,7 @@ void MainWindow::updateUI()//事件驱动式更新数据 - toolsui->senser->setINS(2,1,QString::number(dlink->mavlinknode->vehicle.ins2.satellites_visible)); + toolsui->senser->setINS(2,1,QString::number(vehicle.ins2.satellites_visible)); toolsui->senser->setINS(2,2,bit2); toolsui->senser->setINS(2,3,att2);//bit1 toolsui->senser->setINS(2,4,heading2);//bit2 @@ -2484,44 +2278,44 @@ void MainWindow::updateUI()//事件驱动式更新数据 toolsui->senser->setINS(2,7,sys2); toolsui->senser->setINS(2,8,com2); toolsui->senser->setINS(2,9,gps2); - toolsui->senser->setINS(2,10,QString::number(dlink->mavlinknode->vehicle.ins2.lon,'f',8)); - toolsui->senser->setINS(2,11,QString::number(dlink->mavlinknode->vehicle.ins2.lat,'f',8)); - toolsui->senser->setINS(2,12,QString::number(dlink->mavlinknode->vehicle.ins2.alt,'f',1)); - toolsui->senser->setINS(2,13,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->senser->setINS(2,14,QString::number(dlink->mavlinknode->vehicle.ins2.roll * 57.3,'f',1)); - toolsui->senser->setINS(2,15,QString::number(dlink->mavlinknode->vehicle.ins2.pitch * 57.3,'f',1)); - toolsui->senser->setINS(2,16,QString::number(to360deg(dlink->mavlinknode->vehicle.ins2.yaw * 57.3),'f',1)); + toolsui->senser->setINS(2,10,QString::number(vehicle.ins2.lon,'f',8)); + toolsui->senser->setINS(2,11,QString::number(vehicle.ins2.lat,'f',8)); + toolsui->senser->setINS(2,12,QString::number(vehicle.ins2.alt,'f',1)); + toolsui->senser->setINS(2,13,QString::number(sqrt(pow(vehicle.ins2.v_north,2) + + pow(vehicle.ins2.v_east,2) + + pow(vehicle.ins2.v_up,2)),'f',1)); + toolsui->senser->setINS(2,14,QString::number(vehicle.ins2.roll * 57.3,'f',1)); + toolsui->senser->setINS(2,15,QString::number(vehicle.ins2.pitch * 57.3,'f',1)); + toolsui->senser->setINS(2,16,QString::number(to360deg(vehicle.ins2.yaw * 57.3),'f',1)); - if((dlink->mavlinknode->vehicle.ins2.v_east != 0)|| - (dlink->mavlinknode->vehicle.ins2.v_north != 0)) + if((vehicle.ins2.v_east != 0)|| + (vehicle.ins2.v_north != 0)) { - toolsui->senser->setINS(2,17,QString::number(to360deg(atan2(dlink->mavlinknode->vehicle.ins2.v_east, - dlink->mavlinknode->vehicle.ins2.v_north) * 57.3),'f',1)); + toolsui->senser->setINS(2,17,QString::number(to360deg(atan2(vehicle.ins2.v_east, + vehicle.ins2.v_north) * 57.3),'f',1)); } - toolsui->senser->setINS(2,18,QString::number(dlink->mavlinknode->vehicle.ins2.gx,'f',1)); - toolsui->senser->setINS(2,19,QString::number(dlink->mavlinknode->vehicle.ins2.gy,'f',1)); - toolsui->senser->setINS(2,20,QString::number(dlink->mavlinknode->vehicle.ins2.gz,'f',1)); - toolsui->senser->setINS(2,21,QString::number(dlink->mavlinknode->vehicle.ins2.ax,'f',1)); - toolsui->senser->setINS(2,22,QString::number(dlink->mavlinknode->vehicle.ins2.ay,'f',1)); - toolsui->senser->setINS(2,23,QString::number(dlink->mavlinknode->vehicle.ins2.az,'f',1)); + toolsui->senser->setINS(2,18,QString::number(vehicle.ins2.gx,'f',1)); + toolsui->senser->setINS(2,19,QString::number(vehicle.ins2.gy,'f',1)); + toolsui->senser->setINS(2,20,QString::number(vehicle.ins2.gz,'f',1)); + toolsui->senser->setINS(2,21,QString::number(vehicle.ins2.ax,'f',1)); + toolsui->senser->setINS(2,22,QString::number(vehicle.ins2.ay,'f',1)); + toolsui->senser->setINS(2,23,QString::number(vehicle.ins2.az,'f',1)); - toolsui->senser->setDAS(1,3,QString::number(dlink->mavlinknode->vehicle.vfr_hud.alt,'f',1)); - toolsui->senser->setDAS(1,4,QString::number(dlink->mavlinknode->vehicle.vfr_hud.airspeed,'f',1)); - toolsui->senser->setDAS(1,5,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.Airspeed,'f',1)); - toolsui->senser->setDAS(1,6,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.mach,'f',3)); - toolsui->senser->setDAS(1,7,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.qbar * 0.01,'f',3)); - toolsui->senser->setDAS(1,8,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.ps * 0.01,'f',3)); + toolsui->senser->setDAS(1,3,QString::number(vehicle.vfr_hud.alt,'f',1)); + toolsui->senser->setDAS(1,4,QString::number(vehicle.vfr_hud.airspeed,'f',1)); + toolsui->senser->setDAS(1,5,QString::number(vehicle.emb_atom_com.Airspeed,'f',1)); + toolsui->senser->setDAS(1,6,QString::number(vehicle.emb_atom_com.mach,'f',3)); + toolsui->senser->setDAS(1,7,QString::number(vehicle.emb_atom_com.qbar * 0.01,'f',3)); + toolsui->senser->setDAS(1,8,QString::number(vehicle.emb_atom_com.ps * 0.01,'f',3)); - toolsui->senser->setDAS(2,1,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.alpha,'f',1)); - toolsui->senser->setDAS(2,2,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.beta,'f',1)); - //toolsui->senser->setDAS(2,3,QString::number(dlink->mavlinknode->vehicle.emb_atom_com.)); - toolsui->senser->setDAS(2,4,QString::number(dlink->mavlinknode->vehicle.vfr_hud.airspeed,'f',1)); - toolsui->senser->setDAS(2,7,QString::number(dlink->mavlinknode->vehicle.scaled_pressure.press_diff,'f',3)); + toolsui->senser->setDAS(2,1,QString::number(vehicle.emb_atom_com.alpha,'f',1)); + toolsui->senser->setDAS(2,2,QString::number(vehicle.emb_atom_com.beta,'f',1)); + //toolsui->senser->setDAS(2,3,QString::number(vehicle.emb_atom_com.)); + toolsui->senser->setDAS(2,4,QString::number(vehicle.vfr_hud.airspeed,'f',1)); + toolsui->senser->setDAS(2,7,QString::number(vehicle.scaled_pressure.press_diff,'f',3)); toolsui->senser->setDAS(2,8,QString::number(dlink->mavlinknode->vehicle.scaled_pressure.press_abs,'f',3)); diff --git a/MavLinkNode/mavlinknode.cpp b/MavLinkNode/mavlinknode.cpp index 737ceb7..4d077b4 100644 --- a/MavLinkNode/mavlinknode.cpp +++ b/MavLinkNode/mavlinknode.cpp @@ -937,22 +937,11 @@ void MavLinkNode::MAVLinkRcv_Handler(mavlink_message_t msg) void MavLinkNode::StatusParse(mavlink_message_t msg) { - //_vehicle vehicle = vehicleList.value(msg.sysid); + _vehicle vehicle = vehicleList.value(msg.sysid); vehicle.sysid = msg.sysid; vehicle.compid = msg.compid; -/* - if(LocationTime) - { - - gpsTimer.ms = LocationTime->msec(); - - qDebug() << LocationTime->hour() << LocationTime->minute() << LocationTime->msec(); - } - */ - - gpsTimer.ms = QDateTime::currentDateTime().currentMSecsSinceEpoch() % 1000; @@ -1166,17 +1155,6 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) gpsTimer.min = min; gpsTimer.sec = sec; - /* - if(vehicle.ins1.satellites_visible >= 7) - { - if(!LocationTime) - { - LocationTime = new QTime(); - LocationTime->setHMS(hour,min,sec); - LocationTime->start(); - } - } - */ @@ -1707,7 +1685,7 @@ void MavLinkNode::StatusParse(mavlink_message_t msg) - //vehicleList.insert(msg.sysid,vehicle);//直接覆盖 + vehicleList.insert(msg.sysid,vehicle);//直接覆盖 //emit signal_vehicle(vehicle); diff --git a/MavLinkNode/mavlinknode.h b/MavLinkNode/mavlinknode.h index 998cb32..72c6777 100644 --- a/MavLinkNode/mavlinknode.h +++ b/MavLinkNode/mavlinknode.h @@ -123,8 +123,7 @@ public: - QByteArray rtkrawdata; - + QByteArray rtkrawdata; QFile * autopilot_version_file = nullptr; QFile * sys_status_file = nullptr; diff --git a/MavLinkNode/missionprocess.cpp b/MavLinkNode/missionprocess.cpp index d72ce7c..51feba2 100644 --- a/MavLinkNode/missionprocess.cpp +++ b/MavLinkNode/missionprocess.cpp @@ -52,6 +52,93 @@ void MissionProcess::process()//线程函数 } } + +void MissionProcess::checkoutVehicle(int sysid) +{ + QMap> missionGroup = missions.value(sysid);//读出一个飞机的所有航线 + + QMap group1 = missionGroup.value(1); + QMap group3 = missionGroup.value(3); + QMap group4 = missionGroup.value(4); + QMap group5 = missionGroup.value(5); + QMap group6 = missionGroup.value(6); + + + foreach (mavlink_mission_item_int_t item, group1) { + //把航点发出去 + emit vehicleChanged(item.param1,item.param2,item.param3,item.param4, + item.x,item.y,item.z, + item.seq,item.mission_type, + item.command, + item.target_system, + item.target_component, + item.frame, + item.current, + item.autocontinue, + item.mission_type); + } + + foreach (mavlink_mission_item_int_t item, group3) { + //把航点发出去 + emit vehicleChanged(item.param1,item.param2,item.param3,item.param4, + item.x,item.y,item.z, + item.seq,item.mission_type, + item.command, + item.target_system, + item.target_component, + item.frame, + item.current, + item.autocontinue, + item.mission_type); + } + + foreach (mavlink_mission_item_int_t item, group4) { + //把航点发出去 + emit vehicleChanged(item.param1,item.param2,item.param3,item.param4, + item.x,item.y,item.z, + item.seq,item.mission_type, + item.command, + item.target_system, + item.target_component, + item.frame, + item.current, + item.autocontinue, + item.mission_type); + } + + foreach (mavlink_mission_item_int_t item, group5) { + //把航点发出去 + emit vehicleChanged(item.param1,item.param2,item.param3,item.param4, + item.x,item.y,item.z, + item.seq,item.mission_type, + item.command, + item.target_system, + item.target_component, + item.frame, + item.current, + item.autocontinue, + item.mission_type); + } + + foreach (mavlink_mission_item_int_t item, group6) { + //把航点发出去 + emit vehicleChanged(item.param1,item.param2,item.param3,item.param4, + item.x,item.y,item.z, + item.seq,item.mission_type, + item.command, + item.target_system, + item.target_component, + item.frame, + item.current, + item.autocontinue, + item.mission_type); + } + +} + + + + void MissionProcess::ReadCmd(uint8_t m_sysid, uint8_t m_compid,int m_group) { if(mission_status.m_Mode == Nop_Mode)//没有任务正在下载 @@ -239,9 +326,17 @@ void MissionProcess::Parse(mavlink_message_t msg) if(mission_item_int.seq == 0) { emit clearWaypoint(); + + QMap> missionGroup = missions.value(msg.sysid);//读出一个飞机的所有航线 + QMap points = missionGroup.value(mission_item_int.mission_type);//读出一组 + + points.clear(); + missionGroup.insert(mission_item_int.mission_type,points); + missions.insert(msg.sysid,missionGroup); + } - //把航点发出去 + //把航点发出去 emit receivedPoint(mission_item_int.param1,mission_item_int.param2,mission_item_int.param3,mission_item_int.param4, mission_item_int.x,mission_item_int.y,mission_item_int.z, mission_item_int.seq,mission_item_int.mission_type, @@ -255,6 +350,15 @@ void MissionProcess::Parse(mavlink_message_t msg) qDebug() << "recieve mission type" << mission_item_int.mission_type; + + QMap> missionGroup = missions.value(msg.sysid);//读出一个飞机的所有航线 + QMap points = missionGroup.value(mission_item_int.mission_type);//读出一组 + + points.insert(mission_item_int.seq,mission_item_int); + missionGroup.insert(mission_item_int.mission_type,points); + missions.insert(msg.sysid,missionGroup); + + mission_status.recieve.isWaitingforItem = false;//已经收到航点,不用再等待 }break; case MAVLINK_MSG_ID_MISSION_ITEM: { diff --git a/MavLinkNode/missionprocess.h b/MavLinkNode/missionprocess.h index 66aba9f..0c70188 100644 --- a/MavLinkNode/missionprocess.h +++ b/MavLinkNode/missionprocess.h @@ -70,6 +70,11 @@ public: int currentGroup = 3; + + QMap>> missions;//SysID 航线组 航线 + + + public slots: void Parse(mavlink_message_t msg); @@ -104,6 +109,9 @@ public slots: uint16_t compid, uint16_t mission_type); + + void checkoutVehicle(int sysid); + private slots: //线程私有接口 void process(); @@ -163,6 +171,18 @@ signals: uint8_t autocontinue, uint8_t mission_type); + void vehicleChanged(float param1,float param2,float param3,float param4, + int32_t x,int32_t y,float z, + uint16_t seq, + uint16_t group, + uint16_t command, + uint8_t target_system, + uint8_t target_component, + uint8_t frame, + uint8_t current, + uint8_t autocontinue, + uint8_t mission_type); + //void currentGroup(int group); void currentPoint(int seq); diff --git a/dlink/DLINK_zh_CN.qm b/dlink/DLINK_zh_CN.qm new file mode 100644 index 0000000..7a9d2a2 Binary files /dev/null and b/dlink/DLINK_zh_CN.qm differ diff --git a/dlink/DLINK_zh_CN.ts b/dlink/DLINK_zh_CN.ts new file mode 100644 index 0000000..59db536 --- /dev/null +++ b/dlink/DLINK_zh_CN.ts @@ -0,0 +1,35 @@ + + + + + DLink + + Serial Port Open Success + 串口打开成功 + + + Serial Port Open Fail + 串口打开失败 + + + Serial Port close + 关闭串口 + + + UdpSocket open + UDP端口打开 + + + Bind and join the gdt multicast group + 绑定并加入UDP组播 + + + Fail to join gdt multicast group. + 加入UDP组播失败. + + + Fail to bind gdt multicast socket. + 绑定UDP组播失败. + + + diff --git a/dlink/dlink.pro b/dlink/dlink.pro index f5ce802..eb937ba 100644 --- a/dlink/dlink.pro +++ b/dlink/dlink.pro @@ -104,6 +104,9 @@ unix { system(cp $$src_dir $$dst_dir -arf ) } +TRANSLATIONS += DLINK_zh_CN.ts + + diff --git a/opmap/MAP_zh_CN.ts b/opmap/MAP_zh_CN.ts index d96b48a..ae5cfa7 100644 --- a/opmap/MAP_zh_CN.ts +++ b/opmap/MAP_zh_CN.ts @@ -93,67 +93,67 @@ Please first select the area of the map to rip with <CTRL>+Left mouse clic 停止缓存地图 - + Load Geo Fence File :%1 导入围栏文件:%1 - + Load Mission File:Group %1,%2 导入航线文件:第%1组航线,%2 - + Save Fence File:%1 保存围栏文件:%1 - + Save Mission File:Group %1,%2 保存航线文件:第%1组航线,%2 - + please load fence first 请先导入围栏 - + start upload fence,total:%1 开始上传围栏,总数%1 - + please load mission first 请先导入航线 - + start upload mission %1,total %2 开始上传航线%1,总数%2 - + upload fail %1 上传失败 %1 - + recieve fence polygon inclusion: %1 接收到多边形安控区 :%1 - + recieve fence polygon exclusion: %1 接收到多边形禁飞区 :%1 - + recieve fence circle inclusion: %1 接收到圆形安控区 :%1 - + recieve fence circle exclusion: %1 接收到圆形禁飞区 :%1 @@ -162,7 +162,7 @@ Please first select the area of the map to rip with <CTRL>+Left mouse clic 围栏 - + recieve way point group:%1 seq:%2 收到航点:第%1组,第%2点 diff --git a/opmap/mapwidget/opmapwidget.cpp b/opmap/mapwidget/opmapwidget.cpp index 5cf6fb4..adec1ea 100644 --- a/opmap/mapwidget/opmapwidget.cpp +++ b/opmap/mapwidget/opmapwidget.cpp @@ -347,6 +347,12 @@ void OPMapWidget::addUAV(int sysid,int compid) connect(uavItem,SIGNAL(selected(int,int)), this,SIGNAL(uav_selected(int,int))); + connect(uavItem,SIGNAL(vehicleChanged(int,int)), + this,SLOT(checkoutVehicle(int,int))); + + + + uavItem->setOpacity(overlayOpacity); //检测,如果只有一个飞机,那么就选中 @@ -3178,6 +3184,278 @@ void OPMapWidget::receivedPoint(float param1,float param2,float param3,float par } + +void OPMapWidget::checkoutVehicle(int sys,int comp) +{ + //检查并发送读取航线的信号 + + //删除一个组 + foreach(QGraphicsItem * i, map->childItems()) { + WayPointItem *w = qgraphicsitem_cast(i); + + if (w) { + emit WPDeleted(w->Number(), w); + delete w; + } + } + + foreach(QGraphicsItem * i, map->childItems()) { + geoFencecircle *w = qgraphicsitem_cast(i); + if (w) { + delete w; + } + } + + foreach(QGraphicsItem * i, map->childItems()) { + geoFenceitem *w = qgraphicsitem_cast(i); + if (w) { + delete w; + } + } + + //发送信号清除表格所有东西 + + emit clearTable(); + + //发送切换的信号,从缓存读取航线 + + emit getMissionFromVehicle(sys); + +} + +//这个有可能是其他线程运行,导致生成的航点不对,下载得到 +void OPMapWidget::vehicleChanged(float param1,float param2,float param3,float param4, + int32_t x,int32_t y,float z, + uint16_t seq, + uint16_t group, + uint16_t command, + uint8_t target_system, + uint8_t target_component, + uint8_t frame, + uint8_t current, + uint8_t autocontinue, + uint8_t mission_type) +{ + + if((mission_type - 2) == -1) + { + qDebug() << command << seq << param1 << param2 << param3 << param4 << x << y; + + if(command == MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION ) + { + static int PolygonCount = 0; + static QList PolygonPoints; + + PolygonCount ++; + bool inclusion = true; + + PolygonPoints.push_back(internals::PointLatLng(x * 10e-8,y * 10e-8)); + + if(PolygonCount >= param1) + { + + QList latlng; + qreal lat_sum = 0; + qreal lng_sum = 0; + + for (internals::PointLatLng point: PolygonPoints) { + qreal lat = point.Lat(); + qreal lng = point.Lng(); + + lat_sum += lat; + lng_sum += lng; + + latlng.push_back(QPointF(lat,lng)); + } + + internals::PointLatLng center; + + center.SetLat(lat_sum/latlng.size()); + center.SetLng(lng_sum/latlng.size()); + + geoFenceitem *polyitem = new geoFenceitem(fenceCount,inclusion,0,center,QColor("#FF8000"),map); + + polyitem->setPoints(PolygonPoints); + + emit createFencePolygon(fenceCount++,PolygonPoints.size(),inclusion,latlng); + + connect(polyitem,SIGNAL(updateFencePolygon(int,qreal,bool,QList)), + this,SIGNAL(updateFencePolygon(int,qreal,bool,QList))); + + PolygonCount = 0; + PolygonPoints.clear(); + } + } + else if(command == MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION ) + { + static int PolygonCount = 0; + static QList PolygonPoints; + + PolygonCount ++; + bool inclusion = false; + + PolygonPoints.push_back(internals::PointLatLng(x * 10e-8,y * 10e-8)); + + if(PolygonCount >= param1) + { + + QList latlng; + qreal lat_sum = 0; + qreal lng_sum = 0; + + for (internals::PointLatLng point: PolygonPoints) { + qreal lat = point.Lat(); + qreal lng = point.Lng(); + + lat_sum += lat; + lng_sum += lng; + + latlng.push_back(QPointF(lat,lng)); + } + + internals::PointLatLng center; + + center.SetLat(lat_sum/latlng.size()); + center.SetLng(lng_sum/latlng.size()); + + geoFenceitem *polyitem = new geoFenceitem(fenceCount,inclusion,0,center,QColor("#FF8000"),map); + + polyitem->setPoints(PolygonPoints); + + emit createFencePolygon(fenceCount++,PolygonPoints.size(),inclusion,latlng); + + connect(polyitem,SIGNAL(updateFencePolygon(int,qreal,bool,QList)), + this,SIGNAL(updateFencePolygon(int,qreal,bool,QList))); + + PolygonCount = 0; + PolygonPoints.clear(); + } + } + else if(command == MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION ) + { + bool inclusion = true; + qreal radius = param1; + + geoFencecircle *c = new geoFencecircle(fenceCount,inclusion,0,internals::PointLatLng(x * 10e-8,y * 10e-8),radius,QColor("#FF8000"),map); + emit createFenceCircle(fenceCount++,radius,inclusion,x * 10e-8,y * 10e-8); + + connect(c,SIGNAL(updateFenceCircle(int,qreal,bool,qreal,qreal)), + this,SIGNAL(updateFenceCircle(int,qreal,bool,qreal,qreal))); + } + else if(command == MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION ) + { + bool inclusion = false; + qreal radius = param1; + + geoFencecircle *c = new geoFencecircle(fenceCount,inclusion,0,internals::PointLatLng(x * 10e-8,y * 10e-8),radius,QColor("#FF8000"),map); + emit createFenceCircle(fenceCount++,radius,inclusion,x * 10e-8,y * 10e-8); + + connect(c,SIGNAL(updateFenceCircle(int,qreal,bool,qreal,qreal)), + this,SIGNAL(updateFenceCircle(int,qreal,bool,qreal,qreal))); + } + else if(command == MAV_CMD_NAV_RALLY_POINT ) + { + + } + } + else + { + bool isExist = false; + foreach(QGraphicsItem * i, map->childItems()) { + WayPointItem *w = qgraphicsitem_cast(i); + if (w) { + if(w->MissionType() == mission_type)//如果组别一样,那么就赋值 + { + if(w->Number() == (seq+1)) + { + + isExist = true; + + internals::PointLatLng LatLng; + + LatLng.SetLat(x * 10e-8); + LatLng.SetLng(y * 10e-8); + + + w->SetLat(LatLng.Lat()); + LatLng.SetLng(LatLng.Lng()); + w->SetNumber(seq+1); + + emit setWPProperty(param1,param2,param3,param4, + x,y,z, + seq+1, + group, + command, + target_system, + target_component, + frame, + current, + autocontinue, + mission_type); + + + w->emitWPProperty(); + + } + } + } + } + + + if(!isExist) + { + internals::PointLatLng LatLng; + + LatLng.SetLat(x * 10e-8); + LatLng.SetLng(y * 10e-8); + + //获取当前组下面的seq最大值 + WayPointItem *Item = new WayPointItem(LatLng, z,seq+1,mission_type, map); + + ConnectWP(Item); + Item->setParentItem(map); + Item->SetMissionType(mission_type); + int position = Item->Number(); + emit WPCreated(position, Item); + setOverlayOpacity(overlayOpacity); + + + emit setWPProperty(param1,param2,param3,param4, + x,y,z, + seq+1, + group, + command, + target_system, + target_component, + frame, + current, + autocontinue, + mission_type); + + + Item->emitWPProperty(); + Item->setisShowTip(isShowTip); + + //===========连线 + WayPointItem *w_last = WPFind(Item->MissionType(),Item->Number() - 1); + + if(w_last) + { + WPLineCreate(w_last,Item,Qt::green,false,2); + } + } + } + +} + + + + + + + + + void OPMapWidget::getMapTypes(void) { emit MapTypes(Helper::MapTypes()); diff --git a/opmap/mapwidget/opmapwidget.h b/opmap/mapwidget/opmapwidget.h index b128f4c..d43c271 100644 --- a/opmap/mapwidget/opmapwidget.h +++ b/opmap/mapwidget/opmapwidget.h @@ -675,6 +675,11 @@ signals: void FenceGroupChanged(int old,int cur); + void getMissionFromVehicle(int sys); + + void clearTable(); + + public slots: void getAllPoints(int group); @@ -713,6 +718,23 @@ public slots: uint8_t mission_type); + void vehicleChanged(float param1,float param2,float param3,float param4, + int32_t x,int32_t y,float z, + uint16_t seq, + uint16_t group, + uint16_t command, + uint8_t target_system, + uint8_t target_component, + uint8_t frame, + uint8_t current, + uint8_t autocontinue, + uint8_t mission_type); + + + void checkoutVehicle(int sys,int comp); + + + void WPLineDelete(WayPointItem *from, WayPointItem *to); WayPointLine *WPLineFind(WayPointItem *from, WayPointItem *to); diff --git a/opmap/mapwidget/uavitem.cpp b/opmap/mapwidget/uavitem.cpp index 3eee7a3..e17b47d 100644 --- a/opmap/mapwidget/uavitem.cpp +++ b/opmap/mapwidget/uavitem.cpp @@ -49,7 +49,7 @@ UAVItem::UAVItem(MapGraphicItem *map, OPMapWidget *parent, QString uavPic ,uint8 localposition = map->FromLatLngToLocal(mapwidget->CurrentPosition()); this->setPos(localposition.X(), localposition.Y()); - this->setZValue(4); + this->setZValue(7); trail = new QGraphicsItemGroup(this); trail->setParentItem(map); trailLine = new QGraphicsItemGroup(this); @@ -99,11 +99,11 @@ void UAVItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q { if (isSelected) { - this->setZValue(5); + this->setZValue(6); } else { - this->setZValue(4); + this->setZValue(7); } } @@ -200,11 +200,11 @@ void UAVItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, Q } + /* painter->save(); - painter->drawRect(boundingRect()); - painter->restore(); + */ } @@ -230,23 +230,28 @@ void UAVItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton) { - isSelected = true; - //查找所有 - foreach(QGraphicsItem * i, map->childItems()) { - UAVItem *uav = qgraphicsitem_cast(i); - if (uav) { - if(uav != this) - { - uav->setSelect(false); + if(isSelected == false) + { + isSelected = true; + //查找所有 + foreach(QGraphicsItem * i, map->childItems()) { + UAVItem *uav = qgraphicsitem_cast(i); + if (uav) { + if(uav != this) + { + uav->setSelect(false); + } } } - } - qDebug() << "emit select" << sysid << compid; - emit selected(sysid,compid); + qDebug() << "emit select" << sysid << compid; + emit selected(sysid,compid); - isShowTip = (isShowTip)?(false):(true); + isShowTip = (isShowTip)?(false):(true); - update(); + emit vehicleChanged(sysid,compid); + + update(); + } } //QGraphicsItem::mouseReleaseEvent(event); @@ -284,7 +289,7 @@ void UAVItem::setEdit(bool value) } else { - this->setZValue(4); + this->setZValue(7); } } diff --git a/opmap/mapwidget/uavitem.h b/opmap/mapwidget/uavitem.h index d450d25..cb566d8 100644 --- a/opmap/mapwidget/uavitem.h +++ b/opmap/mapwidget/uavitem.h @@ -286,6 +286,8 @@ signals: void selected(int sys,int comp); + void vehicleChanged(int sys,int comp); + void UAVReachedWayPoint(int const & waypointnumber, WayPointItem *waypoint); void UAVLeftSafetyBouble(internals::PointLatLng const & position); void setChildPosition();