14.11.2012 Aufrufe

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

Projekt Micarpet Projektbericht - artecLab - Universität Bremen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Projekt</strong> MiCarpet <strong>Projekt</strong>bericht<br />

void CSensorikInput::updateInput(tEventList& event_list, float timeSinceLastUpdate ){<br />

}<br />

// neuer event wird in die Eventliste gepackt<br />

//CSettingContainer::getSetting( eSENSORIK_EXE )<br />

if(CSettingContainer::getSetting( eSENSORIK_EXE ) )<br />

{<br />

cAbs = false;<br />

event_list.push_back(new CEventAcc( updateAcceleration( timeSinceLastUpdate), cAbs ));<br />

CEvent* pEvToAdd = calculateOrientation();<br />

if( pEvToAdd != 0 )<br />

{<br />

event_list.push_back( pEvToAdd );<br />

}<br />

}<br />

3. calculateOrientation()<br />

Diese Methode berechnet den neuen Plattformzustand und gibt diesen als Event gekapselt zurück.<br />

Dazu wird die Methode der Schnittstelle readDegree() mit Parameterübergaben die Rückgabewerte<br />

der Methoden averageValueRingpufferA() und averageValueRingpufferB()<br />

aufgerufen, die die vorderen oder hinteren und linken oder rechten Winkeln der Plattform berechnet<br />

und sie an die Methode AngleUnitsToRadians() weiter gibt. So kann die Methode<br />

CEventOrientationAxis() mit den Winkeln aus dem Rückgabewert von AngleUnitsToRadians()<br />

die Flugrichtung auf dem virtuellen Teppich bestimmen und calculateOrientation diese<br />

Flugrichtung als neues Event zurückgeben.<br />

CEvent* CSensorikInput::calculateOrientation(){<br />

static float min_alpha = 100.0,<br />

min_beta = 100.0,<br />

max_alpha = -100.0f,<br />

max_beta = -100.0f;<br />

CEvent* pRValEv = 0;<br />

float alpha= 0.0;<br />

float beta = 0.0; //alpha - positiver Wert entspricht der rechten Neigung,<br />

//bewirkt, das Teppich nach rechts fliegt. Falls alpha negativ<br />

//ist, fliegt Teppich nach links.<br />

//beta - positiver Wert entspricht der vorderem Neigung,<br />

//bewirkt, das Teppich runter fliegt. Negativer Wert bewirkt<br />

//dass Teppich nach oben fliegt.<br />

m_Sios.fillringPufferLikeFIFO_A();<br />

m_Sios.fillringPufferLikeFIFO_B();<br />

alpha = m_Sios.readDegree(m_Sios.averageValueRingpufferA());<br />

beta = m_Sios.readDegree(m_Sios.averageValueRingpufferB());<br />

if(flagA){<br />

const float bremsfaktor = 0.1f;<br />

alpha = alpha * bremsfaktor * 2;<br />

beta = -beta * bremsfaktor;<br />

alpha = Math::AngleUnitsToRadians(alpha);<br />

beta = Math::AngleUnitsToRadians(beta);<br />

if (max_alpha < alpha)<br />

max_alpha = alpha;<br />

if (min_alpha > alpha)<br />

min_alpha = alpha;<br />

if (max_beta < beta)<br />

max_beta = beta;<br />

if (min_beta > beta)<br />

min_beta = beta;<br />

pRValEv = new CEventOrientationAxis( abs( alpha ) > 0.01f ? alpha : 0.0,<br />

abs( beta ) > 0.01f ? beta : 0.0 );<br />

flagA=false;<br />

6. Januar 2005 Seite 188

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!