diff --git a/artwork/Logo/CopterControl Logo.svg b/artwork/Logo/CopterControl Logo.svg new file mode 100644 index 000000000..359f05e70 --- /dev/null +++ b/artwork/Logo/CopterControl Logo.svg @@ -0,0 +1,270 @@ + + + +CopterControl Logoimage/svg+xmlCopterControl Logodankerscc-by-saOpenPilot Projectcc logoCopterControl Logo OpenPilotThe CopterControl Logo \ No newline at end of file diff --git a/flight/Modules/Attitude/attitude.c b/flight/Modules/Attitude/attitude.c index ab9d24df6..d6b52d2fa 100644 --- a/flight/Modules/Attitude/attitude.c +++ b/flight/Modules/Attitude/attitude.c @@ -307,7 +307,6 @@ static void settingsUpdatedCb(UAVObjEvent * objEv) { AttitudeSettingsData attitudeSettings; AttitudeSettingsGet(&attitudeSettings); - float rotationQuat[4]; accelKp = attitudeSettings.AccelKp; accelKi = attitudeSettings.AccelKi; @@ -319,37 +318,22 @@ static void settingsUpdatedCb(UAVObjEvent * objEv) { accelbias[2] = attitudeSettings.AccelBias[ATTITUDESETTINGS_ACCELBIAS_Z]; // Indicates not to expend cycles on rotation - if(attitudeSettings.RotationQuaternion[0] == 126) { - rotate = 0; - rotationQuat[0] = 1; - rotationQuat[1] = rotationQuat[2] = rotationQuat[3] = 0; - return; - } - - rotate = 1; - - rotationQuat[0] = (float) attitudeSettings.RotationQuaternion[0] / 127.0; - rotationQuat[1] = (float) attitudeSettings.RotationQuaternion[1] / 127.0f; - rotationQuat[2] = (float) attitudeSettings.RotationQuaternion[2] / 127.0f; - rotationQuat[3] = (float) attitudeSettings.RotationQuaternion[3] / 127.0f; - - float len = sqrt(rotationQuat[0] * rotationQuat[0] + rotationQuat[1] * rotationQuat[1] + - rotationQuat[2] * rotationQuat[2] + rotationQuat[3] * rotationQuat[3]); - - // Sanitize input. Shouldn't do anything functional. - if(len < 1e-3) { - // Really wrong value - rotationQuat[0] = 1; - rotationQuat[1] = rotationQuat[2] = rotationQuat[3] = 0; + if(attitudeSettings.BoardRotation[0] == 0 && attitudeSettings.BoardRotation[1] == 0 && + attitudeSettings.BoardRotation[2] == 0) { rotate = 0; + + // Shouldn't be used but to be safe + float rotationQuat[4] = {1,0,0,0}; + Quaternion2R(rotationQuat, R); } else { - rotationQuat[0] /= len; - rotationQuat[1] /= len; - rotationQuat[2] /= len; - rotationQuat[3] /= len; - } - - Quaternion2R(rotationQuat, R); + float rotationQuat[4]; + const float rpy[3] = {attitudeSettings.BoardRotation[ATTITUDESETTINGS_BOARDROTATION_ROLL], + attitudeSettings.BoardRotation[ATTITUDESETTINGS_BOARDROTATION_PITCH], + attitudeSettings.BoardRotation[ATTITUDESETTINGS_BOARDROTATION_YAW]}; + RPY2Quaternion(rpy, rotationQuat); + Quaternion2R(rotationQuat, R); + rotate = 1; + } } /** * @} diff --git a/flight/Modules/Osd/OsdEtStd/OsdEtStd.c b/flight/Modules/Osd/OsdEtStd/OsdEtStd.c index 16820c461..69c4c222d 100644 --- a/flight/Modules/Osd/OsdEtStd/OsdEtStd.c +++ b/flight/Modules/Osd/OsdEtStd/OsdEtStd.c @@ -34,6 +34,7 @@ #include "flightbatterystate.h" #include "gpsposition.h" #include "attitudeactual.h" +#include "baroaltitude.h" // // Configuration @@ -62,6 +63,8 @@ #define OSD_ADDRESS 0x30 #define OSDMSG_V_LS_IDX 10 +#define OSDMSG_BALT_IDX1 11 +#define OSDMSG_BALT_IDX2 12 #define OSDMSG_A_LS_IDX 17 #define OSDMSG_VA_MS_IDX 18 #define OSDMSG_LAT_IDX 33 @@ -99,14 +102,15 @@ static const char *DumpConfFilePath = "/etosd/dump.ocf"; // Private variables // -// | Header / cmd?| | V | | V | | LAT: 37 57.0000 | LONG: 24 00.4590 | | Hom<-179| Alt 545.4 m | |#sat|stat| +// | Header / cmd?| | V | E3 | V | | LAT: 37 57.0000 | LONG: 24 00.4590 | | Hom<-179| Alt 545.4 m | |#sat|stat| // 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 uint8_t msg[63] = - { 0x03, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + { 0x03, 0x3F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x0A, 0x00, 0xE4, 0x30, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x60, 0x10, 0x02, 0x00, 0x00, 0x90, 0x00, 0x54, 0x54, 0x00, 0x00, 0x33, 0x28, 0x13, 0x00, 0x00, 0x08, 0x00, 0x00, 0x90, 0x0A }; static volatile bool newPosData = FALSE; static volatile bool newBattData = FALSE; +static volatile bool newBaroData = FALSE; static enum { @@ -167,6 +171,16 @@ static void SetCourse(uint16_t dir) WriteToMsg16(OSDMSG_HOME_IDX, dir); } +static void SetBaroAltitude(int16_t altitudeMeter) +{ + // calculated formula + // ET OSD uses first update as zeropoint and then +- from that + altitudeMeter=(4571-altitudeMeter)/0.37; + msg[OSDMSG_BALT_IDX1] = (uint8_t)(altitudeMeter&0x00FF); + msg[OSDMSG_BALT_IDX2] = (altitudeMeter >> 8)&0x3F; +} + + static void SetAltitude(uint32_t altitudeMeter) { WriteToMsg32(OSDMSG_ALT_IDX, altitudeMeter * 10); @@ -202,6 +216,11 @@ static void GPSPositionUpdatedCb(UAVObjEvent * ev) newPosData = TRUE; } +static void BaroAltitudeUpdatedCb(UAVObjEvent * ev) +{ + newBaroData = TRUE; +} + static bool Read(uint32_t start, uint8_t length, uint8_t * buffer) { uint8_t cmd[5]; @@ -451,6 +470,14 @@ static void Run(void) } else { msg[OSDMSG_GPS_STAT] &= ~OSDMSG_GPS_STAT_HB_FLAG; } + if (newBaroData) { + BaroAltitudeData baroData; + + BaroAltitudeGet(&baroData); + SetBaroAltitude(baroData.Altitude); + + newBaroData = FALSE; + } DEBUG_MSG("SendMsg %d\n",cnt); { @@ -470,7 +497,6 @@ static void Run(void) } cnt++; - } static void onTimer(UAVObjEvent * ev) @@ -522,6 +548,7 @@ int32_t OsdEtStdInitialize(void) { GPSPositionConnectCallback(GPSPositionUpdatedCb); FlightBatteryStateConnectCallback(FlightBatteryStateUpdatedCb); + BaroAltitudeConnectCallback(BaroAltitudeUpdatedCb); memset(&ev,0,sizeof(UAVObjEvent)); EventPeriodicCallbackCreate(&ev, onTimer, 100 / portTICK_RATE_MS); diff --git a/ground/openpilotgcs/src/plugins/config/ccattitude.ui b/ground/openpilotgcs/src/plugins/config/ccattitude.ui index 42bd28b5e..59afdeaf8 100644 --- a/ground/openpilotgcs/src/plugins/config/ccattitude.ui +++ b/ground/openpilotgcs/src/plugins/config/ccattitude.ui @@ -239,8 +239,6 @@ - verticalLayoutWidget - groupBox_2 @@ -258,6 +256,20 @@ + + + + Get Current + + + + + + + Apply + + + diff --git a/ground/openpilotgcs/src/plugins/config/configccattitudewidget.cpp b/ground/openpilotgcs/src/plugins/config/configccattitudewidget.cpp index a63266998..384e42090 100644 --- a/ground/openpilotgcs/src/plugins/config/configccattitudewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configccattitudewidget.cpp @@ -37,10 +37,13 @@ ConfigCCAttitudeWidget::ConfigCCAttitudeWidget(QWidget *parent) : { ui->setupUi(this); connect(ui->zeroBias,SIGNAL(clicked()),this,SLOT(startAccelCalibration())); - connect(ui->saveButton,SIGNAL(clicked()),this,SLOT(saveAttitudeSettings())); - connect(ui->rollBias,SIGNAL(valueChanged(int)),this,SLOT(attitudeBiasChanged(int))); - connect(ui->pitchBias,SIGNAL(valueChanged(int)),this,SLOT(attitudeBiasChanged(int))); - connect(ui->yawBias,SIGNAL(valueChanged(int)),this,SLOT(attitudeBiasChanged(int))); + connect(ui->saveButton,SIGNAL(clicked()),this,SLOT(saveAttitudeSettings())); + connect(ui->applyButton,SIGNAL(clicked()),this,SLOT(applyAttitudeSettings())); + connect(ui->getCurrentButton,SIGNAL(clicked()),this,SLOT(getCurrentAttitudeSettings())); + + // Make it smart: + connect(parent, SIGNAL(autopilotConnected()),this, SLOT(getCurrentAttitudeSettings())); + getCurrentAttitudeSettings(); // The 1st time this panel is instanciated, the autopilot is already connected. } ConfigCCAttitudeWidget::~ConfigCCAttitudeWidget() @@ -97,25 +100,26 @@ void ConfigCCAttitudeWidget::timeout() { } -void ConfigCCAttitudeWidget::attitudeBiasChanged(int val) { +void ConfigCCAttitudeWidget::applyAttitudeSettings() { UAVDataObject * settings = dynamic_cast(getObjectManager()->getObject(QString("AttitudeSettings"))); - UAVObjectField * field = settings->getField("RotationQuaternion"); + UAVObjectField * field = settings->getField("BoardRotation"); - float RPY[3], q[4]; - RPY[0] = ui->rollBias->value(); - RPY[1] = ui->pitchBias->value(); - RPY[2] = ui->yawBias->value(); - - Utils::CoordinateConversions().RPY2Quaternion(RPY,q); - - field->setDouble(q[0]*127,0); - field->setDouble(q[1]*127,1); - field->setDouble(q[2]*127,2); - field->setDouble(q[3]*127,3); + field->setValue(ui->rollBias->value(),0); + field->setValue(ui->pitchBias->value(),1); + field->setValue(ui->yawBias->value(),2); settings->updated(); } +void ConfigCCAttitudeWidget::getCurrentAttitudeSettings() { + UAVDataObject * settings = dynamic_cast(getObjectManager()->getObject(QString("AttitudeSettings"))); + settings->requestUpdate(); + UAVObjectField * field = settings->getField("BoardRotation"); + ui->rollBias->setValue(field->getDouble(0)); + ui->pitchBias->setValue(field->getDouble(1)); + ui->yawBias->setValue(field->getDouble(2)); +} + void ConfigCCAttitudeWidget::startAccelCalibration() { QMutexLocker locker(&startStop); @@ -144,6 +148,8 @@ void ConfigCCAttitudeWidget::startAccelCalibration() { } void ConfigCCAttitudeWidget::saveAttitudeSettings() { + applyAttitudeSettings(); + UAVDataObject * obj = dynamic_cast(getObjectManager()->getObject(QString("AttitudeSettings"))); saveObjectToSD(obj); } diff --git a/ground/openpilotgcs/src/plugins/config/configccattitudewidget.h b/ground/openpilotgcs/src/plugins/config/configccattitudewidget.h index 14d34dbde..888fd9754 100644 --- a/ground/openpilotgcs/src/plugins/config/configccattitudewidget.h +++ b/ground/openpilotgcs/src/plugins/config/configccattitudewidget.h @@ -47,11 +47,12 @@ public: ~ConfigCCAttitudeWidget(); private slots: - void attitudeRawUpdated(UAVObject *); + void attitudeRawUpdated(UAVObject * obj); void timeout(); void startAccelCalibration(); - void attitudeBiasChanged(int val); void saveAttitudeSettings(); + void applyAttitudeSettings(); + void getCurrentAttitudeSettings(); private: QMutex startStop; diff --git a/ground/openpilotgcs/src/plugins/notify/notifyplugin.h b/ground/openpilotgcs/src/plugins/notify/notifyplugin.h index da6b8ea73..0d0eb50d8 100644 --- a/ground/openpilotgcs/src/plugins/notify/notifyplugin.h +++ b/ground/openpilotgcs/src/plugins/notify/notifyplugin.h @@ -35,10 +35,10 @@ #include "notifypluginconfiguration.h" #include -#include -#include -#include -#include +#include +#include +#include +#include class NotifyPluginOptionsPage; diff --git a/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.h b/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.h index d6a83d4b6..9d159e2a4 100644 --- a/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.h +++ b/ground/openpilotgcs/src/plugins/notify/notifypluginoptionspage.h @@ -38,10 +38,10 @@ #include #include #include -#include -#include -#include -#include +#include +#include +#include +#include class NotifyTableModel; diff --git a/ground/openpilotgcs/src/plugins/welcome/communitywelcomepagewidget.cpp b/ground/openpilotgcs/src/plugins/welcome/communitywelcomepagewidget.cpp index 32da11b53..f8819e83f 100644 --- a/ground/openpilotgcs/src/plugins/welcome/communitywelcomepagewidget.cpp +++ b/ground/openpilotgcs/src/plugins/welcome/communitywelcomepagewidget.cpp @@ -52,14 +52,15 @@ CommunityWelcomePageWidget::CommunityWelcomePageWidget(QWidget *parent) : connect(m_rssFetcher, SIGNAL(newsItemReady(QString, QString, QString)), ui->newsTreeWidget, SLOT(slotAddNewsItem(QString, QString, QString))); //: Add localized feed here only if one exists - m_rssFetcher->fetch(QUrl(tr("http://newwww.openpilot.org/rss.xml"))); + m_rssFetcher->fetch(QUrl(tr("http://www.openpilot.org/feed/"))); QList > sites; sites << qMakePair(tr("OpenPilot Home"), QString(QLatin1String("http://www.openpilot.org"))); sites << qMakePair(tr("OpenPilot Wiki"), QString(QLatin1String("http://wiki.openpilot.org"))); - sites << qMakePair(tr("OpenPilot Store"), QString(QLatin1String("http://www.openpilot.org/store"))); + sites << qMakePair(tr("OpenPilot Store"), QString(QLatin1String("http://www.openpilot.org/hardware/get-hardware/"))); sites << qMakePair(tr("OpenPilot Forums"), QString(QLatin1String("http://forums.openpilot.org"))); - sites << qMakePair(tr("OpenPilot Progress Tracker"), QString(QLatin1String("http://progress.openpilot.org"))); + sites << qMakePair(tr("OpenPilot Code Reviews"), QString(QLatin1String("http://git.openpilot.org"))); + sites << qMakePair(tr("OpenPilot Progress Tracker"), QString(QLatin1String("http://progress.openpilot.org"))); QListIterator > it(sites); while (it.hasNext()) { diff --git a/shared/uavobjectdefinition/attitudesettings.xml b/shared/uavobjectdefinition/attitudesettings.xml index 48dd637e6..db067b7e6 100644 --- a/shared/uavobjectdefinition/attitudesettings.xml +++ b/shared/uavobjectdefinition/attitudesettings.xml @@ -2,7 +2,7 @@ Settings for the @ref Attitude module used on CopterControl - +