mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-02-11 01:54:14 +01:00
OP-38 Experimental AHRS automated calibration widget, for testing purpose only. Does not save to SD, and wait 10 seconds before hitting "Save" once the button becomes enabled.
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1410 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
d71ade8227
commit
86bef7b96b
@ -37,6 +37,11 @@
|
|||||||
<height>141</height>
|
<height>141</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>These are the sensor variance values computed by the AHRS.
|
||||||
|
|
||||||
|
Tip: lower is better!</string>
|
||||||
|
</property>
|
||||||
<property name="verticalScrollBarPolicy">
|
<property name="verticalScrollBarPolicy">
|
||||||
<enum>Qt::ScrollBarAlwaysOff</enum>
|
<enum>Qt::ScrollBarAlwaysOff</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -49,40 +54,32 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>390</x>
|
<x>390</x>
|
||||||
<y>90</y>
|
<y>90</y>
|
||||||
<width>301</width>
|
<width>231</width>
|
||||||
<height>17</height>
|
<height>17</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Instructions......................</string>
|
<string>Press "Start" above to calibrate.</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QPushButton" name="ahrsCalibStart">
|
<widget class="QPushButton" name="ahrsCalibStart">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>400</x>
|
<x>380</x>
|
||||||
<y>30</y>
|
<y>40</y>
|
||||||
<width>93</width>
|
<width>93</width>
|
||||||
<height>27</height>
|
<height>27</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Press to start a calibration procedure.
|
||||||
|
|
||||||
|
Takes about 10 seconds.</string>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Start</string>
|
<string>Start</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QPushButton" name="pushButton_2">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>540</x>
|
|
||||||
<y>30</y>
|
|
||||||
<width>93</width>
|
|
||||||
<height>27</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Cancel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<widget class="Line" name="line">
|
<widget class="Line" name="line">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
@ -269,6 +266,35 @@
|
|||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>380</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>151</width>
|
||||||
|
<height>17</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Sensors calibration</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="ahrsCalibSave">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>500</x>
|
||||||
|
<y>40</y>
|
||||||
|
<width>93</width>
|
||||||
|
<height>27</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Save</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
#include "configahrswidget.h"
|
#include "configahrswidget.h"
|
||||||
|
|
||||||
|
#include "math.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
@ -56,8 +57,11 @@ ConfigAHRSWidget::ConfigAHRSWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
|||||||
// Initialize the 9 bargraph values:
|
// Initialize the 9 bargraph values:
|
||||||
|
|
||||||
QMatrix lineMatrix = renderer->matrixForElement("accel_x");
|
QMatrix lineMatrix = renderer->matrixForElement("accel_x");
|
||||||
qreal startX = lineMatrix.mapRect(renderer->boundsOnElement("accel_x")).x();
|
QRectF rect = lineMatrix.mapRect(renderer->boundsOnElement("accel_x"));
|
||||||
qreal startY = lineMatrix.mapRect(renderer->boundsOnElement("accel_x")).y();
|
qreal startX = rect.x();
|
||||||
|
qreal startY = rect.y()+ rect.height();
|
||||||
|
// maxBarHeight will be used for scaling it later.
|
||||||
|
maxBarHeight = rect.height();
|
||||||
// Then once we have the initial location, we can put it
|
// Then once we have the initial location, we can put it
|
||||||
// into a QGraphicsSvgItem which we will display at the same
|
// into a QGraphicsSvgItem which we will display at the same
|
||||||
// place: we do this so that the heading scale can be clipped to
|
// place: we do this so that the heading scale can be clipped to
|
||||||
@ -66,31 +70,97 @@ ConfigAHRSWidget::ConfigAHRSWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
|||||||
accel_x->setSharedRenderer(renderer);
|
accel_x->setSharedRenderer(renderer);
|
||||||
accel_x->setElementId("accel_x");
|
accel_x->setElementId("accel_x");
|
||||||
m_ahrs->ahrsBargraph->scene()->addItem(accel_x);
|
m_ahrs->ahrsBargraph->scene()->addItem(accel_x);
|
||||||
QTransform matrix;
|
accel_x->setPos(startX, startY);
|
||||||
matrix.translate(startX,startY);
|
accel_x->setTransform(QTransform::fromScale(1,0),true);
|
||||||
accel_x->setTransform(matrix,false);
|
|
||||||
|
|
||||||
lineMatrix = renderer->matrixForElement("accel_y");
|
lineMatrix = renderer->matrixForElement("accel_y");
|
||||||
startX = lineMatrix.mapRect(renderer->boundsOnElement("accel_y")).x();
|
rect = lineMatrix.mapRect(renderer->boundsOnElement("accel_y"));
|
||||||
startY = lineMatrix.mapRect(renderer->boundsOnElement("accel_y")).y();
|
startX = rect.x();
|
||||||
|
startY = rect.y()+ rect.height();
|
||||||
accel_y = new QGraphicsSvgItem();
|
accel_y = new QGraphicsSvgItem();
|
||||||
accel_y->setSharedRenderer(renderer);
|
accel_y->setSharedRenderer(renderer);
|
||||||
accel_y->setElementId("accel_y");
|
accel_y->setElementId("accel_y");
|
||||||
m_ahrs->ahrsBargraph->scene()->addItem(accel_y);
|
m_ahrs->ahrsBargraph->scene()->addItem(accel_y);
|
||||||
matrix.reset();
|
accel_y->setPos(startX,startY);
|
||||||
matrix.translate(startX,startY);
|
accel_y->setTransform(QTransform::fromScale(1,0),true);
|
||||||
accel_y->setTransform(matrix,false);
|
|
||||||
|
|
||||||
lineMatrix = renderer->matrixForElement("accel_z");
|
lineMatrix = renderer->matrixForElement("accel_z");
|
||||||
startX = lineMatrix.mapRect(renderer->boundsOnElement("accel_z")).x();
|
rect = lineMatrix.mapRect(renderer->boundsOnElement("accel_z"));
|
||||||
startY = lineMatrix.mapRect(renderer->boundsOnElement("accel_z")).y();
|
startX = rect.x();
|
||||||
|
startY = rect.y()+ rect.height();
|
||||||
accel_z = new QGraphicsSvgItem();
|
accel_z = new QGraphicsSvgItem();
|
||||||
accel_z->setSharedRenderer(renderer);
|
accel_z->setSharedRenderer(renderer);
|
||||||
accel_z->setElementId("accel_z");
|
accel_z->setElementId("accel_z");
|
||||||
m_ahrs->ahrsBargraph->scene()->addItem(accel_z);
|
m_ahrs->ahrsBargraph->scene()->addItem(accel_z);
|
||||||
matrix.reset();
|
accel_z->setPos(startX,startY);
|
||||||
matrix.translate(startX,startY);
|
accel_z->setTransform(QTransform::fromScale(1,0),true);
|
||||||
accel_z->setTransform(matrix,false);
|
|
||||||
|
lineMatrix = renderer->matrixForElement("gyro_x");
|
||||||
|
rect = lineMatrix.mapRect(renderer->boundsOnElement("gyro_x"));
|
||||||
|
startX = rect.x();
|
||||||
|
startY = rect.y()+ rect.height();
|
||||||
|
gyro_x = new QGraphicsSvgItem();
|
||||||
|
gyro_x->setSharedRenderer(renderer);
|
||||||
|
gyro_x->setElementId("gyro_x");
|
||||||
|
m_ahrs->ahrsBargraph->scene()->addItem(gyro_x);
|
||||||
|
gyro_x->setPos(startX,startY);
|
||||||
|
gyro_x->setTransform(QTransform::fromScale(1,0),true);
|
||||||
|
|
||||||
|
lineMatrix = renderer->matrixForElement("gyro_y");
|
||||||
|
rect = lineMatrix.mapRect(renderer->boundsOnElement("gyro_y"));
|
||||||
|
startX = rect.x();
|
||||||
|
startY = rect.y()+ rect.height();
|
||||||
|
gyro_y = new QGraphicsSvgItem();
|
||||||
|
gyro_y->setSharedRenderer(renderer);
|
||||||
|
gyro_y->setElementId("gyro_y");
|
||||||
|
m_ahrs->ahrsBargraph->scene()->addItem(gyro_y);
|
||||||
|
gyro_y->setPos(startX,startY);
|
||||||
|
gyro_y->setTransform(QTransform::fromScale(1,0),true);
|
||||||
|
|
||||||
|
|
||||||
|
lineMatrix = renderer->matrixForElement("gyro_z");
|
||||||
|
rect = lineMatrix.mapRect(renderer->boundsOnElement("gyro_z"));
|
||||||
|
startX = rect.x();
|
||||||
|
startY = rect.y()+ rect.height();
|
||||||
|
gyro_z = new QGraphicsSvgItem();
|
||||||
|
gyro_z->setSharedRenderer(renderer);
|
||||||
|
gyro_z->setElementId("gyro_z");
|
||||||
|
m_ahrs->ahrsBargraph->scene()->addItem(gyro_z);
|
||||||
|
gyro_z->setPos(startX,startY);
|
||||||
|
gyro_z->setTransform(QTransform::fromScale(1,0),true);
|
||||||
|
|
||||||
|
lineMatrix = renderer->matrixForElement("mag_x");
|
||||||
|
rect = lineMatrix.mapRect(renderer->boundsOnElement("mag_x"));
|
||||||
|
startX = rect.x();
|
||||||
|
startY = rect.y()+ rect.height();
|
||||||
|
mag_x = new QGraphicsSvgItem();
|
||||||
|
mag_x->setSharedRenderer(renderer);
|
||||||
|
mag_x->setElementId("mag_x");
|
||||||
|
m_ahrs->ahrsBargraph->scene()->addItem(mag_x);
|
||||||
|
mag_x->setPos(startX,startY);
|
||||||
|
mag_x->setTransform(QTransform::fromScale(1,0),true);
|
||||||
|
|
||||||
|
lineMatrix = renderer->matrixForElement("mag_y");
|
||||||
|
rect = lineMatrix.mapRect(renderer->boundsOnElement("mag_y"));
|
||||||
|
startX = rect.x();
|
||||||
|
startY = rect.y()+ rect.height();
|
||||||
|
mag_y = new QGraphicsSvgItem();
|
||||||
|
mag_y->setSharedRenderer(renderer);
|
||||||
|
mag_y->setElementId("mag_y");
|
||||||
|
m_ahrs->ahrsBargraph->scene()->addItem(mag_y);
|
||||||
|
mag_y->setPos(startX,startY);
|
||||||
|
mag_y->setTransform(QTransform::fromScale(1,0),true);
|
||||||
|
|
||||||
|
lineMatrix = renderer->matrixForElement("mag_z");
|
||||||
|
rect = lineMatrix.mapRect(renderer->boundsOnElement("mag_z"));
|
||||||
|
startX = rect.x();
|
||||||
|
startY = rect.y()+ rect.height();
|
||||||
|
mag_z = new QGraphicsSvgItem();
|
||||||
|
mag_z->setSharedRenderer(renderer);
|
||||||
|
mag_z->setElementId("mag_z");
|
||||||
|
m_ahrs->ahrsBargraph->scene()->addItem(mag_z);
|
||||||
|
mag_z->setPos(startX,startY);
|
||||||
|
mag_z->setTransform(QTransform::fromScale(1,0),true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -105,6 +175,7 @@ ConfigAHRSWidget::ConfigAHRSWidget(QWidget *parent) : ConfigTaskWidget(parent)
|
|||||||
|
|
||||||
// Connect the signals
|
// Connect the signals
|
||||||
connect(m_ahrs->ahrsCalibStart, SIGNAL(clicked()), this, SLOT(launchAHRSCalibration()));
|
connect(m_ahrs->ahrsCalibStart, SIGNAL(clicked()), this, SLOT(launchAHRSCalibration()));
|
||||||
|
connect(m_ahrs->ahrsCalibSave, SIGNAL(clicked()), this, SLOT(saveAHRSCalibration()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,6 +197,7 @@ void ConfigAHRSWidget::launchAHRSCalibration()
|
|||||||
{
|
{
|
||||||
m_ahrs->calibInstructions->setText("Calibration launched...");
|
m_ahrs->calibInstructions->setText("Calibration launched...");
|
||||||
m_ahrs->ahrsCalibStart->setEnabled(false);
|
m_ahrs->ahrsCalibStart->setEnabled(false);
|
||||||
|
m_ahrs->ahrsCalibSave->setEnabled(false);
|
||||||
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||||
|
|
||||||
@ -138,18 +210,90 @@ void ConfigAHRSWidget::launchAHRSCalibration()
|
|||||||
waitabit->setSingleShot(true);
|
waitabit->setSingleShot(true);
|
||||||
waitabit->start(15000);
|
waitabit->start(15000);
|
||||||
connect(waitabit, SIGNAL(timeout()), this, SLOT(calibPhase2()));
|
connect(waitabit, SIGNAL(timeout()), this, SLOT(calibPhase2()));
|
||||||
|
phaseCounter = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Callback after 15 seconds once calibration is done on the board.
|
||||||
|
|
||||||
|
Currently we don't have a way to tell if calibration is finished, so we
|
||||||
|
have to use a timer.
|
||||||
|
|
||||||
|
*/
|
||||||
void ConfigAHRSWidget::calibPhase2()
|
void ConfigAHRSWidget::calibPhase2()
|
||||||
{
|
{
|
||||||
m_ahrs->calibInstructions->setText("Confirming settings...");
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
|
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||||
|
UAVObject *obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("AHRSCalibration")));
|
||||||
|
|
||||||
// Now update size of all the graphs in log scale
|
// This is a bit weird, but it is because we are expecting an update from the
|
||||||
// 'log(1/val)'
|
// OP board with the correct calibration values, and those only arrive on the object update
|
||||||
|
// which comes back from the board, and not the first object update signal which is in fast
|
||||||
|
// the object update we did ourselves... Clear ?
|
||||||
|
switch (phaseCounter) {
|
||||||
|
case 0:
|
||||||
|
phaseCounter++;
|
||||||
|
m_ahrs->calibInstructions->setText("Getting results...");
|
||||||
|
connect(obj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(calibPhase2()));
|
||||||
|
obj->updated();
|
||||||
|
break;
|
||||||
|
case 1: // this is where we end up with the update just above
|
||||||
|
phaseCounter++;
|
||||||
|
break;
|
||||||
|
case 2: // This is the update with the right values
|
||||||
|
disconnect(obj, SIGNAL(objectUpdated(UAVObject*)), this, SLOT(calibPhase2()));
|
||||||
|
// Now update size of all the graphs
|
||||||
|
// I have not found a way to do this elegantly...
|
||||||
|
UAVObjectField *field = obj->getField(QString("accel_var"));
|
||||||
|
// The expected range is from 1E-6 to 1E-1
|
||||||
|
double steps = 6; // 6 bars on the graph
|
||||||
|
float accel_x_var = -1/steps*(1+steps+log10(field->getValue(0).toFloat()));
|
||||||
|
accel_x->setTransform(QTransform::fromScale(1,accel_x_var),false);
|
||||||
|
float accel_y_var = -1/steps*(1+steps+log10(field->getValue(1).toFloat()));
|
||||||
|
accel_y->setTransform(QTransform::fromScale(1,accel_y_var),false);
|
||||||
|
float accel_z_var = -1/steps*(1+steps+log10(field->getValue(2).toFloat()));
|
||||||
|
accel_z->setTransform(QTransform::fromScale(1,accel_z_var),false);
|
||||||
|
|
||||||
|
field = obj->getField(QString("gyro_var"));
|
||||||
|
float gyro_x_var = -1/steps*(1+steps+log10(field->getValue(0).toFloat()));
|
||||||
|
gyro_x->setTransform(QTransform::fromScale(1,gyro_x_var),false);
|
||||||
|
float gyro_y_var = -1/steps*(1+steps+log10(field->getValue(1).toFloat()));
|
||||||
|
gyro_y->setTransform(QTransform::fromScale(1,gyro_y_var),false);
|
||||||
|
float gyro_z_var = -1/steps*(1+steps+log10(field->getValue(2).toFloat()));
|
||||||
|
gyro_z->setTransform(QTransform::fromScale(1,gyro_z_var),false);
|
||||||
|
|
||||||
|
field = obj->getField(QString("mag_var"));
|
||||||
|
float mag_x_var = -1/steps*(1+steps+log10(field->getValue(0).toFloat()));
|
||||||
|
mag_x->setTransform(QTransform::fromScale(1,mag_x_var),false);
|
||||||
|
float mag_y_var = -1/steps*(1+steps+log10(field->getValue(1).toFloat()));
|
||||||
|
mag_y->setTransform(QTransform::fromScale(1,mag_y_var),false);
|
||||||
|
float mag_z_var = -1/steps*(1+steps+log10(field->getValue(2).toFloat()));
|
||||||
|
mag_z->setTransform(QTransform::fromScale(1,mag_z_var),false);
|
||||||
|
|
||||||
|
m_ahrs->ahrsCalibStart->setEnabled(true);
|
||||||
|
m_ahrs->ahrsCalibSave->setEnabled(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Saves the AHRS sensors calibration
|
||||||
|
*/
|
||||||
|
void ConfigAHRSWidget::saveAHRSCalibration()
|
||||||
|
{
|
||||||
|
ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
|
||||||
|
UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
|
||||||
|
|
||||||
|
UAVObject *obj = dynamic_cast<UAVDataObject*>(objManager->getObject(QString("AHRSCalibration")));
|
||||||
|
UAVObjectField *field = obj->getField(QString("measure_var"));
|
||||||
|
field->setValue("FALSE");
|
||||||
|
obj->updated();
|
||||||
|
|
||||||
m_ahrs->ahrsCalibStart->setEnabled(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,9 +52,19 @@ private:
|
|||||||
QGraphicsSvgItem *accel_x;
|
QGraphicsSvgItem *accel_x;
|
||||||
QGraphicsSvgItem *accel_y;
|
QGraphicsSvgItem *accel_y;
|
||||||
QGraphicsSvgItem *accel_z;
|
QGraphicsSvgItem *accel_z;
|
||||||
|
QGraphicsSvgItem *gyro_x;
|
||||||
|
QGraphicsSvgItem *gyro_y;
|
||||||
|
QGraphicsSvgItem *gyro_z;
|
||||||
|
QGraphicsSvgItem *mag_x;
|
||||||
|
QGraphicsSvgItem *mag_y;
|
||||||
|
QGraphicsSvgItem *mag_z;
|
||||||
|
double maxBarHeight;
|
||||||
|
int phaseCounter;
|
||||||
|
const static double maxVarValue = 0.1;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void launchAHRSCalibration();
|
void launchAHRSCalibration();
|
||||||
|
void saveAHRSCalibration();
|
||||||
void calibPhase2();
|
void calibPhase2();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -235,7 +235,7 @@ void ConfigServoWidget::requestRCOutputUpdate()
|
|||||||
obj->requestUpdate();
|
obj->requestUpdate();
|
||||||
QList<UAVObjectField*> fieldList = obj->getFields();
|
QList<UAVObjectField*> fieldList = obj->getFields();
|
||||||
foreach (UAVObjectField* field, fieldList) {
|
foreach (UAVObjectField* field, fieldList) {
|
||||||
if (!field->getName().contains("Channel")) {
|
if (field->getUnits().contains("channel")) {
|
||||||
assignOutputChannel(obj,field,field->getName());
|
assignOutputChannel(obj,field,field->getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -288,7 +288,7 @@
|
|||||||
inkscape:pageshadow="2"
|
inkscape:pageshadow="2"
|
||||||
inkscape:zoom="0.98994949"
|
inkscape:zoom="0.98994949"
|
||||||
inkscape:cx="334.4393"
|
inkscape:cx="334.4393"
|
||||||
inkscape:cy="152.4432"
|
inkscape:cy="117.47189"
|
||||||
inkscape:document-units="px"
|
inkscape:document-units="px"
|
||||||
inkscape:current-layer="background"
|
inkscape:current-layer="background"
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
@ -333,7 +333,7 @@
|
|||||||
<rect
|
<rect
|
||||||
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.4025631;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:9.4025631;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||||
id="rect6737"
|
id="rect6737"
|
||||||
width="687.74054"
|
width="683.69995"
|
||||||
height="354.43222"
|
height="354.43222"
|
||||||
x="187.97757"
|
x="187.97757"
|
||||||
y="-563.36774"
|
y="-563.36774"
|
||||||
@ -353,28 +353,28 @@
|
|||||||
inkscape:export-ydpi="88.809998"
|
inkscape:export-ydpi="88.809998"
|
||||||
rx="3.1741481" />
|
rx="3.1741481" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:1.17532039px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
|
style="fill:none;stroke:#000000;stroke-width:1.17532039000000021px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:none"
|
||||||
d="m 537.38036,217.29216 -294.4803,0 0,614.17274"
|
d="m 537.38036,217.29216 -294.4803,0 0,614.17274"
|
||||||
id="path5991" />
|
id="path5991" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0"
|
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0"
|
||||||
d="m 281.83723,219.31246 0,602.05092"
|
d="m 285.2717,219.31246 0,602.05092"
|
||||||
id="path6633" />
|
id="path6633" />
|
||||||
<path
|
<path
|
||||||
id="path6635"
|
id="path6635"
|
||||||
d="m 324.63724,219.31246 0,602.05092"
|
d="m 327.3848,219.31246 0,602.05092"
|
||||||
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0" />
|
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0"
|
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0"
|
||||||
d="m 367.43724,219.31246 0,602.05092"
|
d="m 369.49791,219.31246 0,602.05092"
|
||||||
id="path6637" />
|
id="path6637" />
|
||||||
<path
|
<path
|
||||||
id="path6639"
|
id="path6639"
|
||||||
d="m 410.23724,219.31246 0,602.05092"
|
d="m 411.61102,219.31246 0,602.05092"
|
||||||
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0" />
|
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0" />
|
||||||
<path
|
<path
|
||||||
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0"
|
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0"
|
||||||
d="m 453.03722,219.31246 0,602.05092"
|
d="m 453.72413,219.31246 0,602.05092"
|
||||||
id="path6641" />
|
id="path6641" />
|
||||||
<path
|
<path
|
||||||
id="path6643"
|
id="path6643"
|
||||||
@ -382,7 +382,7 @@
|
|||||||
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0" />
|
style="fill:none;stroke:#000000;stroke-width:1.17532039;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1.17532035, 3.52596104;stroke-dashoffset:0" />
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||||
x="808.37286"
|
x="808.37286"
|
||||||
y="-500.03018"
|
y="-500.03018"
|
||||||
id="text6659"
|
id="text6659"
|
||||||
@ -396,7 +396,7 @@
|
|||||||
id="text6667"
|
id="text6667"
|
||||||
y="-458.03018"
|
y="-458.03018"
|
||||||
x="808.37286"
|
x="808.37286"
|
||||||
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||||
xml:space="preserve"><tspan
|
xml:space="preserve"><tspan
|
||||||
id="tspan6669"
|
id="tspan6669"
|
||||||
y="-458.03018"
|
y="-458.03018"
|
||||||
@ -404,7 +404,7 @@
|
|||||||
sodipodi:role="line">1E-2</tspan></text>
|
sodipodi:role="line">1E-2</tspan></text>
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||||
x="808.37286"
|
x="808.37286"
|
||||||
y="-418.03018"
|
y="-418.03018"
|
||||||
id="text6671"
|
id="text6671"
|
||||||
@ -418,7 +418,7 @@
|
|||||||
id="text6675"
|
id="text6675"
|
||||||
y="-374.03018"
|
y="-374.03018"
|
||||||
x="808.37286"
|
x="808.37286"
|
||||||
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||||
xml:space="preserve"><tspan
|
xml:space="preserve"><tspan
|
||||||
id="tspan6677"
|
id="tspan6677"
|
||||||
y="-374.03018"
|
y="-374.03018"
|
||||||
@ -426,7 +426,7 @@
|
|||||||
sodipodi:role="line">1E-4</tspan></text>
|
sodipodi:role="line">1E-4</tspan></text>
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||||
x="808.37286"
|
x="808.37286"
|
||||||
y="-330.03018"
|
y="-330.03018"
|
||||||
id="text6679"
|
id="text6679"
|
||||||
@ -440,7 +440,7 @@
|
|||||||
id="text6683"
|
id="text6683"
|
||||||
y="-288.03018"
|
y="-288.03018"
|
||||||
x="808.37286"
|
x="808.37286"
|
||||||
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
style="font-size:21.98640251px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
|
||||||
xml:space="preserve"><tspan
|
xml:space="preserve"><tspan
|
||||||
id="tspan6685"
|
id="tspan6685"
|
||||||
y="-288.03018"
|
y="-288.03018"
|
||||||
@ -460,7 +460,7 @@
|
|||||||
id="path6707" />
|
id="path6707" />
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-size:47.01281357px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
style="font-size:47.01281356999999161px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||||
x="355.29535"
|
x="355.29535"
|
||||||
y="-449.45621"
|
y="-449.45621"
|
||||||
id="text6755"
|
id="text6755"
|
||||||
@ -469,10 +469,10 @@
|
|||||||
id="tspan6757"
|
id="tspan6757"
|
||||||
x="355.29535"
|
x="355.29535"
|
||||||
y="-449.45621"
|
y="-449.45621"
|
||||||
style="font-size:23.50640678px">Accel</tspan></text>
|
style="font-size:23.50640677999999895px;fill:#ffffff;fill-opacity:1">Accel</tspan></text>
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-size:47.01281357px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
style="font-size:47.01281356999999161px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||||
x="573.94739"
|
x="573.94739"
|
||||||
y="-451.94113"
|
y="-451.94113"
|
||||||
id="text6759"
|
id="text6759"
|
||||||
@ -481,10 +481,10 @@
|
|||||||
id="tspan6761"
|
id="tspan6761"
|
||||||
x="573.94739"
|
x="573.94739"
|
||||||
y="-451.94113"
|
y="-451.94113"
|
||||||
style="font-size:23.50640678px">Gyro</tspan></text>
|
style="font-size:23.50640677999999895px;fill:#ffffff;fill-opacity:1">Gyro</tspan></text>
|
||||||
<text
|
<text
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
style="font-size:47.01281357px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
style="font-size:47.01281356999999161px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;font-family:Bitstream Vera Sans"
|
||||||
x="797.87463"
|
x="797.87463"
|
||||||
y="-452.0961"
|
y="-452.0961"
|
||||||
id="text6763"
|
id="text6763"
|
||||||
@ -493,7 +493,7 @@
|
|||||||
id="tspan6765"
|
id="tspan6765"
|
||||||
x="797.87463"
|
x="797.87463"
|
||||||
y="-452.0961"
|
y="-452.0961"
|
||||||
style="font-size:23.50640678px">Mag</tspan></text>
|
style="font-size:23.50640677999999895px;fill:#ffffff;fill-opacity:1">Mag</tspan></text>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Loading…
x
Reference in New Issue
Block a user