Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Projekt Micarpet Projektbericht - artecLab - Universität Bremen
Projekt Micarpet Projektbericht - artecLab - Universität Bremen
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