保存程序
This commit is contained in:
@@ -12,6 +12,7 @@ QT += qml
|
||||
INCLUDEPATH += $$PWD/../ComponentUI/Inputter
|
||||
INCLUDEPATH += $$PWD/../ComponentUI/MultiSelector
|
||||
INCLUDEPATH += $$PWD/../ComponentUI/Selector
|
||||
INCLUDEPATH += $$PWD/../ComponentUI/Confirm
|
||||
|
||||
|
||||
DISTFILES += \
|
||||
|
||||
@@ -1532,27 +1532,44 @@ void propertyui::on_pushButton_Param7_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
//模仿qgc
|
||||
void propertyui::setLoad(QVariant value)
|
||||
{
|
||||
if(value.toBool() == true)
|
||||
{
|
||||
QFileDialog *dlg = new QFileDialog(this);
|
||||
dlg->setWindowTitle(tr("Select Loading File..."));
|
||||
dlg->show();
|
||||
|
||||
QStringList sFileDir;
|
||||
|
||||
int ret = dlg->exec();
|
||||
if (QDialog::Accepted == ret)
|
||||
{
|
||||
sFileDir = dlg->selectedFiles();
|
||||
|
||||
qDebug() << sFileDir.at(0);
|
||||
emit WPLoad(sFileDir.at(0));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void propertyui::on_pushButton_Load_clicked()
|
||||
{
|
||||
|
||||
QFileDialog *dlg = new QFileDialog(this);
|
||||
Confirm *conf = new Confirm(this);
|
||||
conf->setGeometry(0,0,this->width(),this->height());
|
||||
|
||||
dlg->setWindowTitle(tr("Select Loading File..."));
|
||||
dlg->show();
|
||||
|
||||
QStringList sFileDir;
|
||||
|
||||
int ret = dlg->exec();
|
||||
if (QDialog::Accepted == ret)
|
||||
{
|
||||
sFileDir = dlg->selectedFiles();
|
||||
|
||||
qDebug() << sFileDir.at(0);
|
||||
emit WPLoad(sFileDir.at(0));
|
||||
}
|
||||
conf->setNotice(tr("click to clear all points"));
|
||||
|
||||
connect(conf,SIGNAL(confirmValue(QVariant)),
|
||||
this,SLOT(setLoad(QVariant)));
|
||||
|
||||
conf->show();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "multiselector.h"
|
||||
#include "Selector.h"
|
||||
#include "Inputter.h"
|
||||
#include "Confirm.h"
|
||||
|
||||
#include "QFileDialog"
|
||||
|
||||
@@ -266,6 +267,8 @@ private slots:
|
||||
void setParam6(QVariant value);
|
||||
void setParam7(QVariant value);
|
||||
|
||||
void setLoad(QVariant value);
|
||||
|
||||
void WayPointPropertyUpdate(void);
|
||||
|
||||
void on_pushButton_friendlyName_clicked();
|
||||
|
||||
+1
-1
@@ -523,7 +523,7 @@ void MainWindow::updateUI()//事件驱动式更新数据
|
||||
+dlink->mavlinknode->vehicle.nav_controller_output.aspd_error,2);
|
||||
|
||||
|
||||
copk->setVerticalSpeed(-dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3);
|
||||
copk->setVerticalSpeed(dlink->mavlinknode->vehicle.global_position_int.vz * 10e-3);
|
||||
|
||||
|
||||
|
||||
|
||||
+48
-21
@@ -84,11 +84,11 @@ void Cockpit::UpdateTimeout(void)
|
||||
//如果已经设置了新的数据,那么刷新
|
||||
if(m_State.isUpdate == true)
|
||||
{
|
||||
m_State.airspeed = m_State.airspeed*0.9 + m_State.airspeed_t*0.1;
|
||||
m_State.airspeed = m_State.airspeed*0.75 + m_State.airspeed_t*0.25;
|
||||
|
||||
m_State.altitude = m_State.altitude*0.95 + m_State.altitude_t*0.05;
|
||||
m_State.altitude = m_State.altitude*0.75 + m_State.altitude_t*0.25;
|
||||
|
||||
m_State.verticalspeed = m_State.verticalspeed*0.8 + m_State.verticalspeed_t*0.2;
|
||||
m_State.verticalspeed = m_State.verticalspeed*0.75 + m_State.verticalspeed_t*0.25;
|
||||
|
||||
update();
|
||||
m_State.isUpdate = false;
|
||||
@@ -141,8 +141,8 @@ void Cockpit::setPitch(double Pitch)
|
||||
}
|
||||
#endif
|
||||
|
||||
if(Pitch > 360) Pitch = 360;
|
||||
else if(Pitch < -360) Pitch = -360;
|
||||
//if(Pitch > 360) Pitch = 360;
|
||||
//else if(Pitch < -360) Pitch = -360;
|
||||
|
||||
int n = Pitch/360;
|
||||
Pitch = Pitch - n*360;
|
||||
@@ -169,8 +169,8 @@ void Cockpit::setPitchTarget(double Pitch)
|
||||
}
|
||||
#endif
|
||||
|
||||
if(Pitch > 360) Pitch = 360;
|
||||
else if(Pitch < -360) Pitch = -360;
|
||||
//if(Pitch > 360) Pitch = 360;
|
||||
//else if(Pitch < -360) Pitch = -360;
|
||||
|
||||
int n = Pitch/360;
|
||||
Pitch = Pitch - n*360;
|
||||
@@ -198,8 +198,8 @@ void Cockpit::setRoll(double Roll)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
if(Roll > 360) Roll = 360;
|
||||
else if(Roll < -360) Roll = -360;
|
||||
//if(Roll > 360) Roll = 360;
|
||||
//else if(Roll < -360) Roll = -360;
|
||||
|
||||
int n = Roll/360;
|
||||
Roll = Roll - n*360;
|
||||
@@ -226,8 +226,8 @@ void Cockpit::setRollTarget(double Roll)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
if(Roll > 360) Roll = 360;
|
||||
else if(Roll < -360) Roll = -360;
|
||||
//if(Roll > 360) Roll = 360;
|
||||
//else if(Roll < -360) Roll = -360;
|
||||
|
||||
int n = Roll/360;
|
||||
Roll = Roll - n*360;
|
||||
@@ -1596,15 +1596,10 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
//画顶部紫色目标值 (紫色在白色下面,并且在刻度上面,并且有一部分会重叠)
|
||||
painter->save();
|
||||
//旋转
|
||||
float rotate_deg = m_State.yaw - m_Target.yaw;
|
||||
|
||||
if(rotate_deg < 0) rotate_deg += 360;
|
||||
else if(rotate_deg > 360) rotate_deg -= 360;
|
||||
|
||||
//qDebug() << rotate_deg;
|
||||
|
||||
float rotate_deg = -(m_State.yaw - m_Target.yaw);
|
||||
int n = rotate_deg/360;
|
||||
rotate_deg = rotate_deg - n*360;
|
||||
painter->rotate(rotate_deg);
|
||||
|
||||
static const QPointF Tarpoint[8] = {
|
||||
QPointF(-40,-500),
|
||||
QPointF(-40,-530),
|
||||
@@ -1626,6 +1621,29 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->restore();
|
||||
|
||||
|
||||
//画中间大罗盘
|
||||
painter->save();
|
||||
painter->rotate(-m_State.yaw);
|
||||
|
||||
static const QPointF Npoints[3] = {
|
||||
QPointF(-70,0),
|
||||
QPointF( 0,-300),
|
||||
QPointF( 70,0)};
|
||||
static const QPointF Spoints[3] = {
|
||||
QPointF(-70,0),
|
||||
QPointF( 0,300),
|
||||
QPointF( 70,0)};
|
||||
|
||||
painter->setPen(Qt::NoPen);
|
||||
painter->setBrush(QColor("#FF0000"));
|
||||
painter->drawPolygon(Npoints,3);
|
||||
|
||||
painter->setBrush(QColor("#0000FF"));
|
||||
painter->drawPolygon(Spoints,3);
|
||||
|
||||
painter->restore();
|
||||
|
||||
|
||||
//画一个中间小飞机
|
||||
painter->save();
|
||||
|
||||
@@ -1673,13 +1691,13 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
painter->save();
|
||||
painter->translate(i*100,0);
|
||||
|
||||
painter->drawEllipse(-5,-5,10,10);
|
||||
painter->drawEllipse(-8,-8,16,16);
|
||||
painter->restore();
|
||||
|
||||
painter->save();
|
||||
painter->translate(0,i*100);
|
||||
|
||||
painter->drawEllipse(-5,-5,10,10);
|
||||
painter->drawEllipse(-8,-8,16,16);
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
@@ -1774,15 +1792,21 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
QString Flag = "";
|
||||
if((i == 0)||(i == 18)||(i == 36)||(i == 54))
|
||||
{
|
||||
painter->save();
|
||||
|
||||
switch (i) {
|
||||
case 0:
|
||||
Flag = "N";
|
||||
ePen.setColor(QColor("#FF0000"));
|
||||
painter->setPen(ePen);
|
||||
break;
|
||||
case 18:
|
||||
Flag = "E";
|
||||
break;
|
||||
case 36:
|
||||
Flag = "S";
|
||||
ePen.setColor(QColor("#0000FF"));
|
||||
painter->setPen(ePen);
|
||||
break;
|
||||
case 54:
|
||||
Flag = "W";
|
||||
@@ -1791,7 +1815,10 @@ void Cockpit::drawYawScale(QPainter *painter)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
painter->drawText(QRect(-40,-450,80,80),Qt::AlignVCenter|Qt::AlignHCenter,Flag);
|
||||
painter->restore();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -153,10 +153,14 @@ void commandprocess::WriteCmd_long(float param1, float param2, float param3, fl
|
||||
//这个函数类似中断,专门处理接收到的状态
|
||||
void commandprocess::Parse(mavlink_message_t msg)
|
||||
{
|
||||
|
||||
|
||||
mavlink_command_int_t command_int;
|
||||
mavlink_command_long_t command_long;
|
||||
mavlink_command_ack_t command_ack;
|
||||
|
||||
|
||||
|
||||
switch (msg.msgid) {
|
||||
case MAVLINK_MSG_ID_COMMAND_INT://几乎不可能收到
|
||||
mavlink_msg_command_int_decode(&msg,&command_int);
|
||||
@@ -167,6 +171,11 @@ void commandprocess::Parse(mavlink_message_t msg)
|
||||
case MAVLINK_MSG_ID_COMMAND_ACK:
|
||||
mavlink_msg_command_ack_decode(&msg,&command_ack);
|
||||
|
||||
if(command_ack.target_system != Current_sysID)
|
||||
{
|
||||
break;//如果目标系统不是自己,那么就抛弃该指令
|
||||
}
|
||||
|
||||
if(command_ack.result == MAV_RESULT_ACCEPTED)
|
||||
{
|
||||
status.transmit.isWaitingforACK = false;
|
||||
@@ -417,7 +426,7 @@ void commandprocess::ack(uint16_t command,uint8_t result,uint8_t progress,int32_
|
||||
command_ack.progress = progress;
|
||||
command_ack.result_param2 = result_param2;
|
||||
|
||||
mavlink_msg_command_ack_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&command_ack);
|
||||
mavlink_msg_command_ack_encode(Current_sysID,Current_CompID, &msg,&command_ack);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,13 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
||||
//初始化buff
|
||||
initbuff();
|
||||
|
||||
//初始化ID
|
||||
int Current_sysID = 0xF1;
|
||||
int Current_CompID = MAV_COMP_ID_MISSIONPLANNER;
|
||||
|
||||
|
||||
Mission = new MissionProcess();
|
||||
Mission->setGCSID(Current_sysID,Current_CompID);
|
||||
connect(Mission,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
this,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);
|
||||
|
||||
@@ -31,6 +37,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
||||
|
||||
|
||||
Parameter = new ParameterProcess();
|
||||
Parameter->setGCSID(Current_sysID,Current_CompID);
|
||||
connect(Parameter,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
this,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);
|
||||
|
||||
@@ -39,6 +46,7 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
||||
|
||||
|
||||
Commander = new commandprocess();
|
||||
Commander->setGCSID(Current_sysID,Current_CompID);
|
||||
connect(Commander,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
this,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);
|
||||
|
||||
@@ -242,16 +250,13 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
|
||||
mavlink_message_t msg;
|
||||
mavlink_status_t status;
|
||||
|
||||
//qDebug() << "msg parsed";
|
||||
|
||||
for (QByteArray::const_iterator i = datagram.cbegin(); i != datagram.cend(); ++i)
|
||||
{
|
||||
if(MAVLINK_FRAMING_OK == mavlink_parse_char(src,*i,&msg,&status))
|
||||
{
|
||||
|
||||
emit recievemsg(msg); //将信息广播出去
|
||||
MAVLinkRcv_Handler(msg); //接收完一帧数据并处理
|
||||
//qDebug() << "msg parsed";
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -300,10 +305,10 @@ void MavLinkNode::Mavlinkparse(quint32 src,QByteArray datagram)
|
||||
//qDebug() << "MAVLINK_PARSE_STATE_GOT_CRC1";
|
||||
}break;
|
||||
case MAVLINK_PARSE_STATE_GOT_BAD_CRC1:{
|
||||
//qDebug() << "MAVLINK_PARSE_STATE_GOT_BAD_CRC1";
|
||||
qDebug() << "MAVLINK_PARSE_STATE_GOT_BAD_CRC1";
|
||||
}break;
|
||||
case MAVLINK_PARSE_STATE_SIGNATURE_WAIT:{
|
||||
//qDebug() << "MAVLINK_PARSE_STATE_SIGNATURE_WAIT";
|
||||
qDebug() << "MAVLINK_PARSE_STATE_SIGNATURE_WAIT";
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ private slots:
|
||||
protected:
|
||||
|
||||
int Current_sysID = 0xF1;
|
||||
int Current_CompID = 0xF1;
|
||||
int Current_CompID = MAV_COMP_ID_MISSIONPLANNER;
|
||||
|
||||
enum SourceType{
|
||||
c_sock = 0,
|
||||
|
||||
@@ -206,22 +206,29 @@ void MissionProcess::transmitPoint(float param1,float param2,float param3,float
|
||||
//这个函数类似中断,专门处理接收到的状态
|
||||
void MissionProcess::Parse(mavlink_message_t msg)
|
||||
{
|
||||
if(msg.sysid == Current_sysID)
|
||||
{
|
||||
qDebug() << "is my mission";
|
||||
}
|
||||
|
||||
switch (msg.msgid) {
|
||||
case MAVLINK_MSG_ID_MISSION_REQUEST_LIST: {
|
||||
mavlink_msg_mission_request_list_decode(&msg,&mission_request_list);
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_COUNT: {
|
||||
mavlink_msg_mission_count_decode(&msg,&mission_count);
|
||||
|
||||
if(mission_count.target_system != Current_sysID)
|
||||
{
|
||||
break;//如果目标系统不是自己,那么就抛弃该指令
|
||||
}
|
||||
|
||||
qDebug() << "mission_count" << mission_count.count;
|
||||
mission_status.recieve.isWaitingforCount = false;
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_REQUEST_INT: {
|
||||
mavlink_msg_mission_request_int_decode(&msg,&mission_request_int);
|
||||
|
||||
if(mission_count.target_system != Current_sysID)
|
||||
{
|
||||
break;//如果目标系统不是自己,那么就抛弃该指令
|
||||
}
|
||||
|
||||
qDebug() << "recieve mission_request_int ";
|
||||
emit sendItemOK(mission_item_int.seq,true);
|
||||
mission_item_int.seq++;
|
||||
@@ -229,6 +236,12 @@ void MissionProcess::Parse(mavlink_message_t msg)
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_REQUEST: {
|
||||
mavlink_msg_mission_request_decode(&msg,&mission_request);
|
||||
|
||||
if(mission_request.target_system != Current_sysID)
|
||||
{
|
||||
break;//如果目标系统不是自己,那么就抛弃该指令
|
||||
}
|
||||
|
||||
qDebug() << "recieve mission_request ";
|
||||
emit sendItemOK(mission_item_int.seq,true);
|
||||
mission_item_int.seq++;
|
||||
@@ -236,6 +249,12 @@ void MissionProcess::Parse(mavlink_message_t msg)
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_ITEM_INT: {
|
||||
mavlink_msg_mission_item_int_decode(&msg,&mission_item_int);
|
||||
|
||||
if(mission_item_int.target_system != Current_sysID)
|
||||
{
|
||||
break;//如果目标系统不是自己,那么就抛弃该指令
|
||||
}
|
||||
|
||||
qDebug() << "recieve mission " << mission_item_int.seq;
|
||||
|
||||
//把航点发出去
|
||||
@@ -254,20 +273,28 @@ void MissionProcess::Parse(mavlink_message_t msg)
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_ITEM: {
|
||||
mavlink_msg_mission_item_decode(&msg,&mission_item);
|
||||
|
||||
if(mission_item.target_system != Current_sysID)
|
||||
{
|
||||
break;//如果目标系统不是自己,那么就抛弃该指令
|
||||
}
|
||||
|
||||
mission_status.recieve.isWaitingforItem = false;
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_ACK: {
|
||||
mavlink_msg_mission_ack_decode(&msg,&mission_ack);
|
||||
|
||||
if(mission_ack.target_system != Current_sysID)
|
||||
{
|
||||
break;//如果目标系统不是自己,那么就抛弃该指令
|
||||
}
|
||||
|
||||
mission_status.transmit.isWaiteforACK = false;
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_CURRENT: {
|
||||
mavlink_msg_mission_current_decode(&msg,&mission_current);
|
||||
//if(mission_current.seq == mission_status.transmit.seq)
|
||||
{
|
||||
//收到设置当前点,对比如果一致,那么成功,否则失败
|
||||
//qDebug() << "mission_current" << mission_current.seq;
|
||||
emit currentPoint(mission_current.seq);
|
||||
}
|
||||
|
||||
emit currentPoint(mission_current.seq);
|
||||
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_MISSION_SET_CURRENT: {
|
||||
@@ -596,7 +623,7 @@ void MissionProcess::request_list(void)//读取整列请求
|
||||
mission_request_list.target_system = sysid;
|
||||
mission_request_list.target_component = compid;
|
||||
|
||||
mavlink_msg_mission_request_list_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_request_list);
|
||||
mavlink_msg_mission_request_list_encode(Current_sysID,Current_CompID, &msg,&mission_request_list);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -610,7 +637,7 @@ void MissionProcess::count(uint16_t count)//计数值
|
||||
mission_count.target_system = sysid;
|
||||
mission_count.target_component = compid;
|
||||
|
||||
mavlink_msg_mission_count_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_count);
|
||||
mavlink_msg_mission_count_encode(Current_sysID,Current_CompID, &msg,&mission_count);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -624,7 +651,7 @@ void MissionProcess::request_int(uint16_t seq)//读取请求
|
||||
mission_request_int.target_system = sysid;
|
||||
mission_request_int.target_component = compid;
|
||||
|
||||
mavlink_msg_mission_request_int_encode(Current_sysID, MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_request_int);
|
||||
mavlink_msg_mission_request_int_encode(Current_sysID, Current_CompID, &msg,&mission_request_int);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -637,7 +664,7 @@ void MissionProcess::request(uint16_t seq)//读取请求
|
||||
mission_request.seq = seq;
|
||||
mission_request.target_system = sysid;
|
||||
mission_request.target_component = compid;
|
||||
mavlink_msg_mission_request_encode(Current_sysID, MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_request);
|
||||
mavlink_msg_mission_request_encode(Current_sysID, Current_CompID, &msg,&mission_request);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -669,7 +696,7 @@ void MissionProcess::item_int(float param1,float param2,float param3,float param
|
||||
mission_item_int.autocontinue = autocontinue;
|
||||
mission_item_int.mission_type = mission_type;
|
||||
|
||||
mavlink_msg_mission_item_int_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_item_int);
|
||||
mavlink_msg_mission_item_int_encode(Current_sysID,Current_CompID, &msg,&mission_item_int);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -701,7 +728,7 @@ void MissionProcess::item(float param1,float param2,float param3,float param4,
|
||||
mission_item.autocontinue = autocontinue;
|
||||
mission_item.mission_type = mission_type;
|
||||
|
||||
mavlink_msg_mission_item_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_item);
|
||||
mavlink_msg_mission_item_encode(Current_sysID,Current_CompID, &msg,&mission_item);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -715,7 +742,7 @@ void MissionProcess::ack(void)
|
||||
mission_ack.mission_type = 0;
|
||||
mission_ack.type = 0;
|
||||
|
||||
mavlink_msg_mission_ack_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_ack);
|
||||
mavlink_msg_mission_ack_encode(Current_sysID,Current_CompID, &msg,&mission_ack);
|
||||
SendMessage(msg);
|
||||
|
||||
|
||||
@@ -726,7 +753,7 @@ void MissionProcess::current(void)
|
||||
static mavlink_message_t msg;
|
||||
static mavlink_mission_current_t mission_current;
|
||||
|
||||
mavlink_msg_mission_current_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_current);
|
||||
mavlink_msg_mission_current_encode(Current_sysID,Current_CompID, &msg,&mission_current);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -740,7 +767,7 @@ void MissionProcess::setcurrent(uint16_t seq)
|
||||
|
||||
mission_set_current.seq = seq;
|
||||
|
||||
mavlink_msg_mission_set_current_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_set_current);
|
||||
mavlink_msg_mission_set_current_encode(Current_sysID,Current_CompID, &msg,&mission_set_current);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -753,7 +780,7 @@ void MissionProcess::clear_all(void)
|
||||
mission_clear_all.target_component = compid;
|
||||
mission_clear_all.mission_type = 0;
|
||||
|
||||
mavlink_msg_mission_clear_all_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_clear_all);
|
||||
mavlink_msg_mission_clear_all_encode(Current_sysID,Current_CompID, &msg,&mission_clear_all);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -762,7 +789,7 @@ void MissionProcess::item_reached(void)
|
||||
static mavlink_message_t msg;
|
||||
static mavlink_mission_item_reached_t mission_item_reached;
|
||||
|
||||
mavlink_msg_mission_item_reached_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_item_reached);
|
||||
mavlink_msg_mission_item_reached_encode(Current_sysID,Current_CompID, &msg,&mission_item_reached);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -771,7 +798,7 @@ void MissionProcess::request_partial_list(void)
|
||||
static mavlink_message_t msg;
|
||||
static mavlink_mission_request_partial_list_t mission_request_partial_list;
|
||||
|
||||
mavlink_msg_mission_request_partial_list_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_request_partial_list);
|
||||
mavlink_msg_mission_request_partial_list_encode(Current_sysID,Current_CompID, &msg,&mission_request_partial_list);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -780,6 +807,6 @@ void MissionProcess::write_partial_list(void)
|
||||
static mavlink_message_t msg;
|
||||
static mavlink_mission_write_partial_list_t mission_write_partial_list;
|
||||
|
||||
mavlink_msg_mission_write_partial_list_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,&mission_write_partial_list);
|
||||
mavlink_msg_mission_write_partial_list_encode(Current_sysID,Current_CompID, &msg,&mission_write_partial_list);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -171,7 +171,6 @@ void ParameterProcess::Parse(mavlink_message_t msg)
|
||||
}break;
|
||||
case MAVLINK_MSG_ID_PARAM_VALUE:{//
|
||||
mavlink_msg_param_value_decode(&msg,¶m_value);
|
||||
//paramInspect->appendParameter(msg);//发送的时候需要连同当前的sysid 和 compid也发送下去
|
||||
|
||||
emit RecieveValue(msg);
|
||||
|
||||
@@ -367,7 +366,7 @@ void ParameterProcess::set(const char *id,uint8_t type,float value)//
|
||||
param_set.target_system = sysid;
|
||||
param_set.target_component = compid;
|
||||
|
||||
mavlink_msg_param_set_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,¶m_set);
|
||||
mavlink_msg_param_set_encode(Current_sysID,Current_CompID, &msg,¶m_set);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -385,7 +384,7 @@ void ParameterProcess::value(float value)//一般只接收不发送
|
||||
//param_value. = sysid;
|
||||
//param_value.target_component = compid;
|
||||
|
||||
mavlink_msg_param_value_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,¶m_value);
|
||||
mavlink_msg_param_value_encode(Current_sysID,Current_CompID, &msg,¶m_value);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -404,7 +403,7 @@ void ParameterProcess::ext_ack(float value)
|
||||
//param_ext_ack.target_system = sysid;
|
||||
//param_ext_ack.target_component = compid;
|
||||
|
||||
mavlink_msg_param_ext_ack_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,¶m_ext_ack);
|
||||
mavlink_msg_param_ext_ack_encode(Current_sysID,Current_CompID, &msg,¶m_ext_ack);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -421,7 +420,7 @@ void ParameterProcess::ext_set(const char *id,uint8_t type,float value)
|
||||
param_ext_set.target_system = sysid;
|
||||
param_ext_set.target_component = compid;
|
||||
|
||||
mavlink_msg_param_ext_set_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,¶m_ext_set);
|
||||
mavlink_msg_param_ext_set_encode(Current_sysID,Current_CompID, &msg,¶m_ext_set);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -438,7 +437,7 @@ void ParameterProcess::ext_value(float value)
|
||||
//param_ext_value.target_system = sysid;
|
||||
//param_ext_value.target_component = compid;
|
||||
|
||||
mavlink_msg_param_ext_value_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,¶m_ext_value);
|
||||
mavlink_msg_param_ext_value_encode(Current_sysID,Current_CompID, &msg,¶m_ext_value);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -450,7 +449,7 @@ void ParameterProcess::request_list(void)//
|
||||
param_request_list.target_system = sysid;
|
||||
param_request_list.target_component = compid;
|
||||
|
||||
mavlink_msg_param_request_list_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,¶m_request_list);
|
||||
mavlink_msg_param_request_list_encode(Current_sysID,Current_CompID, &msg,¶m_request_list);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
@@ -464,7 +463,7 @@ void ParameterProcess::request_read(const char *id, int16_t index)//
|
||||
param_request_read.target_system = sysid;
|
||||
param_request_read.target_component = compid;
|
||||
|
||||
mavlink_msg_param_request_read_encode(Current_sysID,MAV_COMP_ID_MISSIONPLANNER, &msg,¶m_request_read);
|
||||
mavlink_msg_param_request_read_encode(Current_sysID,Current_CompID, &msg,¶m_request_read);
|
||||
SendMessage(msg);
|
||||
}
|
||||
|
||||
|
||||
+19
-11
@@ -15,17 +15,11 @@ DLink::DLink(QObject *parent) : QObject(parent)
|
||||
connect(mavlinknode,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
this,SLOT(SendMessageTo(quint8,quint8*,quint16)),Qt::DirectConnection);//采用直连的方式,因为是多线程
|
||||
|
||||
//connect(mavlinknode,&MavLinkNode::SendMessageTo,
|
||||
// this,&DLink::SendMessageTo,Qt::DirectConnection);
|
||||
|
||||
//connect(mavlinknode,SIGNAL(SendMessageTo(quint8,quint8*,quint16)),
|
||||
// this,&DLink::SendMessageTo,Qt::DirectConnection);
|
||||
|
||||
connect(mavlinknode,SIGNAL(showMessage(QString,int)),
|
||||
this,SIGNAL(showMessage(QString,int)),Qt::DirectConnection);
|
||||
|
||||
|
||||
//mavlinknode->start();
|
||||
mavlinknode->start();
|
||||
|
||||
|
||||
connect(this,&DLink::REVMessageTo1,
|
||||
@@ -70,18 +64,20 @@ int DLink::SendMessageTo1(quint8 ch, quint8 *msg, quint16 len)
|
||||
{
|
||||
//这里有问题,无法发送数据
|
||||
|
||||
|
||||
/*
|
||||
QString num;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
num.append(QString::number(msg[i],16).toUpper());
|
||||
num.append(" ");
|
||||
}
|
||||
qDebug() << num;
|
||||
*/
|
||||
|
||||
//qDebug() << QThread::currentThread();
|
||||
|
||||
qint64 flag = DLink::serialPort->write((const char *)msg,len);
|
||||
|
||||
/*
|
||||
if(flag != -1)
|
||||
{
|
||||
qDebug() << "serial send Success,Send " << flag << "bytes";
|
||||
@@ -89,6 +85,7 @@ int DLink::SendMessageTo1(quint8 ch, quint8 *msg, quint16 len)
|
||||
|
||||
qDebug() << QThread::currentThread();
|
||||
|
||||
*/
|
||||
//qDebug() << "serialPort Send Msg" << msg;
|
||||
|
||||
}
|
||||
@@ -126,7 +123,7 @@ bool DLink::setupPort(const QString port, qint32 baudrate, QSerialPort::Parity p
|
||||
|
||||
qDebug() << QThread::currentThread();
|
||||
|
||||
mavlinknode->start();//启动之后串口就找不到了
|
||||
//mavlinknode->start();//启动之后串口就找不到了
|
||||
|
||||
connect(serialPort, SIGNAL(readyRead()), this, SLOT(readPendingDatagramsSerialPort()));
|
||||
|
||||
@@ -188,9 +185,9 @@ void DLink::connectSignal(QVariant m_state,
|
||||
}
|
||||
|
||||
|
||||
qDebug() << m_Type << m_Param1 << m_Param2 << parity;
|
||||
qDebug() << m_Type << m_Param1 << m_Param2.toString().toInt() << parity;
|
||||
|
||||
if(setupPort(m_Param1.toString(),m_Param2.toInt(),parity))
|
||||
if(setupPort(m_Param1.toString(),m_Param2.toString().toInt(),parity))
|
||||
{
|
||||
emit PortConnected(true,m_usrName,m_Type,m_Param1,m_Param2,m_Param3,m_Param4,m_Param5);
|
||||
}
|
||||
@@ -253,6 +250,8 @@ bool DLink::setupClient(const QHostAddress &remote_addr, int remote_port, int lo
|
||||
<< local_port
|
||||
<< remote_port;
|
||||
|
||||
//mavlinknode->start();//启动
|
||||
|
||||
isSuccess = true;
|
||||
emit showMessage(tr("UdpSocket open"));
|
||||
}
|
||||
@@ -278,6 +277,15 @@ void DLink::readPendingDatagramsSerialPort(void)
|
||||
QByteArray datagram = serialPort->readAll();
|
||||
mavlinknode->setbuff(SourceType::s_port,datagram);
|
||||
|
||||
/*
|
||||
QString num;
|
||||
for (int i = 0; i < datagram.size(); ++i) {
|
||||
num.append(QString::number((uint8_t)datagram.at(i) & 0xFF,16).toUpper());
|
||||
num.append(" ");
|
||||
}
|
||||
qDebug() << num;
|
||||
*/
|
||||
|
||||
//qDebug() << "reci";
|
||||
|
||||
}
|
||||
|
||||
@@ -1264,15 +1264,139 @@ void OPMapWidget::WPFollowPrevious(bool flag,WayPointItem *w)
|
||||
|
||||
}
|
||||
|
||||
|
||||
//先清除再读取
|
||||
void OPMapWidget::WPLoad(QString path)//带文件目录参数
|
||||
{
|
||||
qDebug() << "WPLoad" << path;
|
||||
//读取
|
||||
QFile jsonFile(path);
|
||||
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
||||
qWarning() << "Unable to open file" << path << jsonFile.errorString();
|
||||
return;
|
||||
}
|
||||
|
||||
QByteArray bytes = jsonFile.readAll();
|
||||
|
||||
jsonFile.close();
|
||||
QJsonParseError jsonParseError;
|
||||
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
|
||||
if (jsonParseError.error != QJsonParseError::NoError) {
|
||||
qWarning() << path << "Unable to open json document" << jsonParseError.errorString();
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonObject json = doc.object();
|
||||
|
||||
//解码
|
||||
QJsonValue jsonValue = json.value("mission");
|
||||
|
||||
qDebug() << jsonValue.toObject().keys();
|
||||
|
||||
}
|
||||
|
||||
void OPMapWidget::WPSave(QString path)//带文件目录参数
|
||||
{
|
||||
qDebug() << "WPSave" << path;
|
||||
//保存到文件 *.plan,使用qgc的协议 json读写
|
||||
QJsonDocument *doc = new QJsonDocument();
|
||||
QJsonObject root= doc->object();
|
||||
|
||||
QJsonObject geoFence;
|
||||
QJsonObject mission;
|
||||
QJsonObject rallyPoints;
|
||||
|
||||
|
||||
//geoFence节点写入
|
||||
{
|
||||
QJsonArray circles;
|
||||
QJsonArray polygons;
|
||||
|
||||
geoFence.insert("circles",circles);
|
||||
geoFence.insert("polygons",polygons);
|
||||
geoFence.insert("version",2);
|
||||
}
|
||||
|
||||
//mission节点写入
|
||||
{
|
||||
QJsonArray items;
|
||||
|
||||
foreach(QGraphicsItem * i, map->childItems()) {
|
||||
WayPointItem *w = qgraphicsitem_cast<WayPointItem *>(i);
|
||||
if (w) {//逐渐往下增加
|
||||
//存到items
|
||||
QJsonArray params;
|
||||
params.append(w->Param1());
|
||||
params.append(w->Param2());
|
||||
params.append(w->Param3());
|
||||
params.append(w->Param4());
|
||||
params.append(w->Coord().Lat());
|
||||
params.append(w->Coord().Lng());
|
||||
params.append(w->Alt());
|
||||
|
||||
//可能有点问题
|
||||
QJsonObject item;
|
||||
item.insert("AMSLAltAboveTerrain",0);
|
||||
item.insert("Altitude",w->Alt());
|
||||
item.insert("AltitudeMode",1);
|
||||
item.insert("autoContinue",w->AutoContinue());
|
||||
item.insert("command",w->Command());
|
||||
item.insert("doJumpId",w->Number());
|
||||
item.insert("frame",w->Frame());
|
||||
item.insert("params",params);
|
||||
item.insert("type","SimpleItem");
|
||||
|
||||
//这里有问题
|
||||
items.append(item);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
QJsonArray plannedHomePosition;
|
||||
plannedHomePosition.append(0);
|
||||
plannedHomePosition.append(1);
|
||||
plannedHomePosition.append(2);
|
||||
|
||||
|
||||
mission.insert("cruiseSpeed",2);
|
||||
mission.insert("firmwareType",2);
|
||||
mission.insert("hoverSpeed",2);
|
||||
mission.insert("items",items);
|
||||
mission.insert("plannedHomePosition",plannedHomePosition);
|
||||
mission.insert("vehicleType",20);
|
||||
mission.insert("version",2);
|
||||
}
|
||||
|
||||
//rallyPoints节点写入
|
||||
{
|
||||
QJsonArray points;
|
||||
rallyPoints.insert("points",points);
|
||||
rallyPoints.insert("version",2);
|
||||
}
|
||||
|
||||
//根节点写入
|
||||
root.insert("fileType","Plan");
|
||||
root.insert("geoFence",geoFence);
|
||||
root.insert("groundStation","GCS_nf");
|
||||
root.insert("mission", mission);
|
||||
root.insert("rallyPoints", rallyPoints);
|
||||
root.insert("version", 1);
|
||||
|
||||
//设置文档
|
||||
doc->setObject(root);
|
||||
|
||||
//如果没有后缀名,那就追加
|
||||
if(path.right(5) != ".plan")
|
||||
{
|
||||
path.append(".plan");
|
||||
}
|
||||
|
||||
QFile file(path);
|
||||
if(!file.open(QIODevice::ReadWrite|QFile::Truncate)) {
|
||||
qDebug() << "File open error";
|
||||
}
|
||||
|
||||
file.write(doc->toJson());
|
||||
file.close();
|
||||
}
|
||||
|
||||
void OPMapWidget::WPDownload(void)
|
||||
@@ -1283,8 +1407,6 @@ void OPMapWidget::WPDownload(void)
|
||||
WPDeleteAll();
|
||||
|
||||
emit signal_WPDownload(1,0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
void OPMapWidget::WPUpload(void)
|
||||
@@ -1292,7 +1414,6 @@ void OPMapWidget::WPUpload(void)
|
||||
//发送第一个
|
||||
QList<mapcontrol::WayPointItem *> list;
|
||||
//先发送一个清空指令
|
||||
|
||||
foreach(QGraphicsItem * i, map->childItems()) {
|
||||
WayPointItem *w = qgraphicsitem_cast<WayPointItem *>(i);
|
||||
if (w) {
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
|
||||
#include "AltitudeItem.h"
|
||||
|
||||
#include <QJsonObject>
|
||||
#include "QTextStream"
|
||||
|
||||
namespace mapcontrol {
|
||||
|
||||
|
||||
@@ -244,6 +244,16 @@ public:
|
||||
return property.command;
|
||||
}
|
||||
|
||||
uint8_t Frame(void)
|
||||
{
|
||||
return property.frame;
|
||||
}
|
||||
|
||||
uint8_t AutoContinue(void)
|
||||
{
|
||||
return property.autocontinue;
|
||||
}
|
||||
|
||||
uint16_t Group(void)
|
||||
{
|
||||
return property.group;
|
||||
|
||||
Reference in New Issue
Block a user