1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-17 02:52:12 +01:00

OP-38 A bit of visual feedback on 6-point calibration. Hope you like the UAV I used, very simple model ;)

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1459 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
edouard 2010-08-29 22:00:54 +00:00 committed by edouard
parent 098cff530f
commit 46ac5c8054
5 changed files with 530 additions and 60 deletions

View File

@ -17,7 +17,7 @@
<property name="geometry">
<rect>
<x>10</x>
<y>9</y>
<y>7</y>
<width>641</width>
<height>461</height>
</rect>
@ -75,9 +75,9 @@ Tip: lower is better!</string>
</rect>
</property>
<property name="toolTip">
<string>Press to start a calibration procedure.
<string>Press to start a calibration procedure, takes 30 seconds max.
Takes about 30 seconds max.</string>
Hint: run this with engines at cruising speed.</string>
</property>
<property name="text">
<string>Start</string>
@ -100,7 +100,7 @@ Takes about 30 seconds max.</string>
<property name="geometry">
<rect>
<x>10</x>
<y>180</y>
<y>390</y>
<width>111</width>
<height>17</height>
</rect>
@ -113,7 +113,7 @@ Takes about 30 seconds max.</string>
<property name="geometry">
<rect>
<x>140</x>
<y>170</y>
<y>380</y>
<width>131</width>
<height>31</height>
</rect>
@ -122,24 +122,11 @@ Takes about 30 seconds max.</string>
<string>Select the sensor integration algorithm here.</string>
</property>
</widget>
<widget class="Line" name="line_2">
<property name="geometry">
<rect>
<x>130</x>
<y>220</y>
<width>411</width>
<height>20</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<widget class="QGraphicsView" name="graphicsView_2">
<widget class="QGraphicsView" name="sixPointsHelp">
<property name="geometry">
<rect>
<x>10</x>
<y>260</y>
<y>190</y>
<width>191</width>
<height>151</height>
</rect>
@ -149,38 +136,38 @@ Takes about 30 seconds max.</string>
<property name="geometry">
<rect>
<x>40</x>
<y>240</y>
<width>121</width>
<y>170</y>
<width>151</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Calibration #2</string>
<string>Six Point Calibration</string>
</property>
</widget>
<widget class="QPushButton" name="ahrsSavePosition">
<widget class="QPushButton" name="sixPointsStart">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>220</x>
<y>250</y>
<y>180</y>
<width>111</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Six Point Cal</string>
<string>Start</string>
</property>
</widget>
<widget class="QTextBrowser" name="textBrowser">
<widget class="QTextEdit" name="sixPointCalibInstructions">
<property name="geometry">
<rect>
<x>360</x>
<y>250</y>
<width>271</width>
<height>161</height>
<x>220</x>
<y>220</y>
<width>411</width>
<height>121</height>
</rect>
</property>
</widget>
@ -190,8 +177,8 @@ Takes about 30 seconds max.</string>
</property>
<property name="geometry">
<rect>
<x>290</x>
<y>180</y>
<x>310</x>
<y>380</y>
<width>201</width>
<height>22</height>
</rect>
@ -255,7 +242,7 @@ specific calibration button on top of the screen.</string>
<property name="geometry">
<rect>
<x>120</x>
<y>410</y>
<y>350</y>
<width>411</width>
<height>20</height>
</rect>
@ -267,14 +254,14 @@ specific calibration button on top of the screen.</string>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>380</x>
<x>360</x>
<y>10</y>
<width>151</width>
<width>271</width>
<height>17</height>
</rect>
</property>
<property name="text">
<string>Sensors calibration</string>
<string>Sensor noise calibration</string>
</property>
</widget>
<widget class="QProgressBar" name="calibProgress">
@ -299,6 +286,22 @@ specific calibration button on top of the screen.</string>
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="sixPointsSave">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>350</x>
<y>180</y>
<width>111</width>
<height>27</height>
</rect>
</property>
<property name="text">
<string>Save Position</string>
</property>
</widget>
</widget>
</widget>
<resources/>

View File

@ -43,6 +43,17 @@ ConfigAHRSWidget::ConfigAHRSWidget(QWidget *parent) : ConfigTaskWidget(parent)
m_ahrs = new Ui_AHRSWidget();
m_ahrs->setupUi(this);
// Initialization of the Paper plane widget
m_ahrs->sixPointsHelp->setScene(new QGraphicsScene(this));
paperplane = new QGraphicsSvgItem();
paperplane->setSharedRenderer(new QSvgRenderer());
paperplane->renderer()->load(QString(":/configgadget/images/paper-plane.svg"));
paperplane->setElementId("plane-horizontal");
m_ahrs->sixPointsHelp->scene()->addItem(paperplane);
m_ahrs->sixPointsHelp->setSceneRect(paperplane->boundingRect());
// Initialization of the AHRS bargraph graph
m_ahrs->ahrsBargraph->setScene(new QGraphicsScene(this));
@ -176,7 +187,8 @@ ConfigAHRSWidget::ConfigAHRSWidget(QWidget *parent) : ConfigTaskWidget(parent)
connect(m_ahrs->ahrsSettingsRequest, SIGNAL(clicked()), this, SLOT(ahrsSettingsRequest()));
connect(m_ahrs->ahrsSettingsSaveRAM, SIGNAL(clicked()), this, SLOT(ahrsSettingsSaveRAM()));
connect(m_ahrs->ahrsSettingsSaveSD, SIGNAL(clicked()), this, SLOT(ahrsSettingsSaveSD()));
connect(m_ahrs->ahrsSavePosition, SIGNAL(clicked()), this, SLOT(savePositionData()));
connect(m_ahrs->sixPointsStart, SIGNAL(clicked()), this, SLOT(calibrationMode()));
connect(m_ahrs->sixPointsSave, SIGNAL(clicked()), this, SLOT(savePositionData()));
connect(parent, SIGNAL(autopilotConnected()),this, SLOT(ahrsSettingsRequest()));
@ -195,6 +207,7 @@ void ConfigAHRSWidget::showEvent(QShowEvent *event)
// widget is shown, otherwise it cannot compute its values and
// the result is usually a ahrsbargraph that is way too small.
m_ahrs->ahrsBargraph->fitInView(ahrsbargraph, Qt::KeepAspectRatio);
m_ahrs->sixPointsHelp->fitInView(paperplane,Qt::KeepAspectRatio);
}
/**
@ -276,13 +289,6 @@ void ConfigAHRSWidget::saveAHRSCalibration()
*/
void ConfigAHRSWidget::savePositionData()
{
if(position < 0)
{
calibrationMode();
m_ahrs->calibInstructions->setText("Place horizontally and click save position...");
position = 0;
return;
}
UAVObject *obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("AttitudeRaw")));
UAVObjectField *accel_field = obj->getField(QString("accels_filtered"));
@ -296,18 +302,31 @@ void ConfigAHRSWidget::savePositionData()
mag_data_z[position] = mag_field->getValue(2).toDouble();
position = (position + 1) % 6;
if(position == 1)
m_ahrs->calibInstructions->setText("Place with left side down and click save position...");
if(position == 2)
m_ahrs->calibInstructions->setText("Place upside down and click save position...");
if(position == 3)
m_ahrs->calibInstructions->setText("Place with right side down and click save position...");
if(position == 4)
m_ahrs->calibInstructions->setText("Place with nose up and click save position...");
if(position == 5)
m_ahrs->calibInstructions->setText("Place with nose down and click save position...");
if(position == 0)
if(position == 1) {
m_ahrs->sixPointCalibInstructions->append("Place with left side down and click save position...");
displayPlane("plane-left");
}
if(position == 2) {
m_ahrs->sixPointCalibInstructions->append("Place upside down and click save position...");
displayPlane("plane-flip");
}
if(position == 3) {
m_ahrs->sixPointCalibInstructions->append("Place with right side down and click save position...");
displayPlane("plane-right");
}
if(position == 4) {
m_ahrs->sixPointCalibInstructions->append("Place with nose up and click save position...");
displayPlane("plane-up");
}
if(position == 5) {
m_ahrs->sixPointCalibInstructions->append("Place with nose down and click save position...");
displayPlane("plane-down");
}
if(position == 0) {
computeScaleBias();
m_ahrs->sixPointsStart->setEnabled(true);
m_ahrs->sixPointsSave->setEnabled(false);
}
}
//*****************************************************************
@ -438,7 +457,7 @@ void ConfigAHRSWidget::computeScaleBias()
obj->updated();
position = -1; //set to run again
m_ahrs->calibInstructions->setText("Computed accel and mag scale and bias...");
m_ahrs->sixPointCalibInstructions->append("Computed accel and mag scale and bias...");
}
@ -446,8 +465,6 @@ void ConfigAHRSWidget::calibrationMode()
{
UAVObject *obj = dynamic_cast<UAVDataObject*>(getObjectManager()->getObject(QString("AHRSCalibration")));
m_ahrs->calibInstructions->setText("Now place in the horizontal position...");
// set accels to unity gain
UAVObjectField *field = obj->getField(QString("accel_scale"));
field->setDouble(1,0);
@ -463,8 +480,28 @@ void ConfigAHRSWidget::calibrationMode()
field = obj->getField(QString("UpdateRaw"));
field->setValue("TRUE");
obj->updated();
m_ahrs->sixPointCalibInstructions->clear();
m_ahrs->sixPointCalibInstructions->append("Place horizontally and click save position...<br>");
displayPlane("plane-horizontal");
m_ahrs->sixPointsStart->setEnabled(false);
m_ahrs->sixPointsSave->setEnabled(true);
position = 0;
}
/**
Rotate the paper plane
*/
void ConfigAHRSWidget::displayPlane(QString elementID)
{
paperplane->setElementId(elementID);
m_ahrs->sixPointsHelp->setSceneRect(paperplane->boundingRect());
m_ahrs->sixPointsHelp->fitInView(paperplane,Qt::KeepAspectRatio);
}
/**
Draws the sensor variances bargraph
*/
@ -512,7 +549,7 @@ void ConfigAHRSWidget::ahrsSettingsRequest()
m_ahrs->algorithm->setCurrentIndex(m_ahrs->algorithm->findText(field->getValue().toString()));
drawVariancesGraph();
m_ahrs->ahrsCalibStart->setEnabled(true);
m_ahrs->ahrsSavePosition->setEnabled(true);
m_ahrs->sixPointsStart->setEnabled(true);
m_ahrs->calibInstructions->setText(QString("Press \"Start\" above to calibrate."));
}

View File

@ -48,7 +48,9 @@ public:
private:
void drawVariancesGraph();
void displayPlane(QString elementID);
Ui_AHRSWidget *m_ahrs;
QGraphicsSvgItem *paperplane;
QGraphicsSvgItem *ahrsbargraph;
QGraphicsSvgItem *accel_x;
QGraphicsSvgItem *accel_y;

View File

@ -5,5 +5,6 @@
<file>images/Servo.png</file>
<file>images/ahrs-calib.svg</file>
<file>images/AHRS-v1.3.png</file>
<file>images/paper-plane.svg</file>
</qresource>
</RCC>

View File

@ -0,0 +1,427 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="744.09448819"
height="1052.3622047"
id="svg2"
version="1.1"
inkscape:version="0.47 r22583"
sodipodi:docname="paper-plane.svg">
<defs
id="defs4">
<inkscape:path-effect
effect="envelope"
id="path-effect3160"
is_visible="true"
yy="true"
xx="true"
bendpath1="m 447.14285,362.36218 55.71429,0"
bendpath2="m 502.85714,362.36218 0,54.28572"
bendpath3="m 447.14285,416.6479 55.71429,0"
bendpath4="m 447.14285,362.36218 0,54.28572" />
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
<inkscape:perspective
id="perspective3143"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<linearGradient
id="linearGradient3589">
<stop
id="stop3591"
offset="0"
style="stop-color:#dadad1;stop-opacity:1;" />
<stop
id="stop3593"
offset="1"
style="stop-color:#ffffff;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient4451">
<stop
id="stop4453"
offset="0"
style="stop-color:#000000;stop-opacity:0;" />
<stop
id="stop4455"
offset="1"
style="stop-color:#000000;stop-opacity:1;" />
</linearGradient>
<linearGradient
id="linearGradient5713">
<stop
style="stop-color:#000000;stop-opacity:0;"
offset="0"
id="stop5715" />
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="1"
id="stop5717" />
</linearGradient>
<linearGradient
id="linearGradient5754">
<stop
style="stop-color:#e2e2db;stop-opacity:1;"
offset="0"
id="stop5756" />
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="1"
id="stop5758" />
</linearGradient>
<linearGradient
id="linearGradient5877">
<stop
id="stop5879"
offset="0"
style="stop-color:#e2e2db;stop-opacity:1;" />
<stop
id="stop5881"
offset="1"
style="stop-color:#ffffff;stop-opacity:1;" />
</linearGradient>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 618.71844 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="1486.9843 : 618.71844 : 1"
inkscape:persp3d-origin="743.49213 : 412.47896 : 1"
id="perspective2567" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.60408995"
inkscape:cx="455.56381"
inkscape:cy="659.88675"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1366"
inkscape:window-height="693"
inkscape:window-x="0"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="plane-flip"
inkscape:label="#g4365">
<g
transform="translate(305.77675,-285.13719)"
id="g3972">
<path
sodipodi:nodetypes="ccccccc"
id="path3974"
d="m 185.71429,456.6479 110,0 10,-30 8.57143,30 111.42857,0 L 382.85714,338.07647 185.71429,456.6479 z"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path3978"
d="m 314.66252,456.62472 68.1853,-118.18785"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
transform="translate(70,-226)"
id="path3982"
d="m 235.87062,652.34177 76.77159,-88.13581"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
</g>
<g
id="plane-horizontal"
inkscape:label="#g4349">
<g
inkscape:label="#g3946"
transform="translate(-158.56854,-296.98485)"
id="bla">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 185.71429,456.6479 110,0 10,27.85714 8.57143,-27.85714 111.42857,0 L 382.85714,338.07647 185.71429,456.6479 z"
id="path2822"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 296.42857,456.6479 383.21429,338.43361"
id="path2826" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 314.66252,456.62472 68.1853,-118.18785"
id="path2828" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 305.57115,485.16153 15.65736,-28.28427"
id="path2830" />
</g>
<path
id="path4065"
d="m 146.38783,182.85785 c -0.32605,-0.90165 -2.2117,-6.11664 -4.19034,-11.58888 -1.97865,-5.47224 -3.49043,-10.36632 -3.35952,-10.87573 0.28104,-1.0936 72.47583,-99.552799 72.77633,-99.252297 0.19834,0.198344 -52.99468,92.816837 -55.68619,96.959537 -0.73197,1.12664 -2.97014,7.44751 -4.97371,14.04639 -2.00356,6.59887 -3.7173,12.07724 -3.8083,12.17415 -0.091,0.0969 -0.43223,-0.56152 -0.75827,-1.46317 l 0,0 z"
style="opacity:1;fill:#666666;fill-opacity:1" />
</g>
<g
id="plane-left"
inkscape:label="#g4357">
<g
transform="matrix(0.00256181,-0.99999672,-0.99999672,-0.00256181,780.50589,449.7941)"
id="g3994">
<path
sodipodi:nodetypes="ccccccc"
id="path3996"
d="m 185.71429,456.6479 110,0 10.14561,-28.97991 8.42582,28.97991 111.42857,0 L 382.85714,338.07647 185.71429,456.6479 z"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path4000"
d="m 314.66252,456.62472 68.1853,-118.18785"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 295.91153,456.54311 308.5568,440.11449"
id="path4006" />
<path
sodipodi:nodetypes="cc"
transform="matrix(0.00256181,-0.99999672,-0.99999672,-0.00256181,675.67433,927.38588)"
id="path4008"
d="m 498.79912,370.56922 89.10071,-76.12668"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
id="path4075"
d="m 331.59817,148.54231 c 0.90991,-0.75045 3.69622,-2.88986 6.1918,-4.75425 l 4.53742,-3.3898 3.80262,1.08903 c 2.09145,0.59896 3.80263,1.2469 3.80263,1.43986 0,0.30789 -18.78631,6.9796 -19.65325,6.9796 -0.18458,0 0.40887,-0.614 1.31878,-1.36444 z"
style="opacity:1;fill:#666666;fill-opacity:1" />
</g>
<g
id="plane-right"
inkscape:label="#g4371">
<g
id="g3984"
transform="matrix(0.00256181,-0.99999672,-0.99999672,-0.00256181,1070.5332,666.10797)">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 185.71429,456.6479 110,0 10,27.85714 8.57143,-27.85714 111.42857,0 L 382.85714,338.07647 185.71429,456.6479 z"
id="path3986"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 296.42857,456.6479 383.21429,338.43361"
id="path3988" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 314.66252,456.62472 68.1853,-118.18785"
id="path3990" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 305.57115,485.16153 15.65736,-28.28427"
id="path3992" />
</g>
<path
id="path4077"
d="m 602.06162,363.33367 c -6.43591,-2.39032 -11.37138,-4.37774 -10.96771,-4.41647 0.40366,-0.0387 5.79069,-1.627 11.97117,-3.52947 9.393,-2.89135 18.46611,-7.60947 55.28388,-28.74823 24.22566,-13.90905 44.2519,-25.08393 44.50276,-24.83307 0.25087,0.25086 -19.69141,15.17498 -44.31616,33.1647 l -44.77228,32.70858 -11.70166,-4.34604 z"
style="opacity:1;fill:#666666;fill-opacity:1" />
</g>
<g
id="plane-up"
inkscape:label="#g4391">
<g
transform="translate(-158.56854,5.01515)"
id="g4026">
<path
sodipodi:nodetypes="ccccccc"
id="path4012"
d="m 185.71429,456.6479 110,0 10,27.85714 8.57143,-27.85714 111.42857,0 -119.8167,-238.58667 -120.1833,238.58667 z"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path4014"
d="m 296.42857,456.6479 9.46902,-235.74646"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path4016"
d="M 314.66252,456.62472 305.89759,218.42163"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
transform="translate(158.56854,-5.01515)"
id="path4022"
d="m 147.32905,489.5321 0,-4.13846 0,-263.20584"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 185.71429,456.6479 110,0 10,27.85714 8.57143,-27.85714 111.42857,0 -119.8167,-238.58667 -120.1833,238.58667 z"
id="path4024"
sodipodi:nodetypes="ccccccc" />
</g>
<path
id="path4081"
d="m 142.14371,473.11345 -3.82369,-10.68763 0.40417,-5.40719 c 0.22229,-2.97395 1.94295,-44.12254 3.82369,-91.4413 l 3.41951,-86.03413 0.14953,51.06447 c 0.0823,28.08546 0.0823,74.04349 0,102.12894 l -0.14953,51.06447 -3.82368,-10.68763 z"
style="opacity:1;fill:#666666;fill-opacity:1" />
<path
id="path4083"
d="m 148.16566,377.28265 c 0.0301,-58.26325 0.13214,-104.87969 0.22683,-103.59211 0.0947,1.28759 1.67362,43.76715 3.50873,94.39902 l 3.33657,92.05795 -2.16196,7.14466 c -1.18907,3.92956 -2.7926,9.11993 -3.56339,11.53415 l -1.40144,4.3895 0.0547,-105.93317 0,0 z"
style="opacity:1;fill:#666666;fill-opacity:1" />
</g>
<g
id="plane-down"
inkscape:label="#g4401">
<g
id="g4033"
transform="matrix(1,0,0,-1,-158.56854,1000.7047)">
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 185.71429,456.6479 110,0 10,27.85714 8.57143,-27.85714 111.42857,0 -119.8167,-238.58667 -120.1833,238.58667 z"
id="path4035"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 296.42857,456.6479 9.46902,-235.74646"
id="path4037"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 314.66252,456.62472 305.89759,218.42163"
id="path4039"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 147.32905,489.5321 0,-4.13846 0,-263.20584"
id="path4041"
transform="translate(158.56854,-5.01515)" />
<path
sodipodi:nodetypes="ccccccc"
id="path4043"
d="m 185.71429,456.6479 110,0 10,27.85714 8.57143,-27.85714 111.42857,0 -119.8167,-238.58667 -120.1833,238.58667 z"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<path
id="path4085"
d="m 148.16566,628.36182 -0.0547,-105.93317 1.40144,4.3895 c 0.77079,2.41422 2.37432,7.60459 3.56339,11.53415 l 2.16196,7.14466 -3.33657,92.05795 c -1.83511,50.63187 -3.41404,93.11143 -3.50873,94.39902 -0.0947,1.28758 -0.19676,-45.32887 -0.22683,-103.59211 z"
style="opacity:1;fill:#666666;fill-opacity:1" />
<path
id="path4087"
d="m 142.54602,640.35978 c -1.88175,-47.47972 -3.6008,-88.73996 -3.8201,-91.68942 l -0.39873,-5.36266 3.8201,-10.73216 3.8201,-10.73216 0.14953,51.01814 c 0.0822,28.05998 0.0822,74.14969 0,102.42158 l -0.14953,51.40343 -3.42137,-86.32675 z"
style="opacity:1;fill:#666666;fill-opacity:1" />
</g>
<g
id="g4249"
transform="translate(-1399.8845,-1041.4937)">
<g
style="display:inline"
inkscape:label="backdrop"
id="layer5"
transform="translate(6671.9971,-1494.883)" />
<g
style="opacity:0.40845068;display:none"
inkscape:label="blender_render"
id="layer2"
transform="translate(6671.9971,-1494.883)">
<image
xlink:href="file:///home/richard/Dropbox/graphicswork/openpilot.org/persp_path.png"
width="720"
height="576"
id="image2904"
x="8.5714464"
y="178.64789" />
</g>
<g
style="opacity:0.26126763;display:none"
inkscape:label="constr_lines"
id="layer3"
transform="translate(6671.9971,-1494.883)">
<path
id="path2937"
d="M 435.88082,573.54988 303.55084,697.29356"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path2939"
d="m 365.17015,554.35698 94.44926,80.8122"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path2941"
d="m 274.25642,623.55243 96.46956,112.12693"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path2943"
d="m 358.09908,562.4382 93.94418,86.87312"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
sodipodi:nodetypes="cc"
id="path2945"
d="m 339.78942,576.47266 91.18422,94.53592"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path2933"
d="m 472.85714,488.07647 -205,155"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
id="path2935"
d="M 546.07143,520.57647 348.21429,744.1479"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
d="M 433.86048,597.28846 316.17778,736.68951"
id="path3040" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
d="M 503.05598,615.97628 369.71588,801.33927"
id="path3042" />
</g>
<g
style="display:inline"
inkscape:label="shadow"
id="layer4"
transform="translate(6671.9971,-1494.883)" />
<g
style="display:inline"
id="layer1-7"
inkscape:label="Layer 1"
transform="translate(6671.9971,-1494.883)">
<text
xml:space="preserve"
style="font-size:29.84373283px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:LondonBetween;-inkscape-font-specification:LondonBetween Bold"
x="-6201.9575"
y="4050.0679"
id="text3640"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3642"
x="-6201.9575"
y="4050.0679" /></text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB