Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 778 → Rev 779

/MissionCockpit/tags/V0.5.0/event/mkevent.xml
0,0 → 1,75
<mkcockpit-Config CreationDate="20100210-201311"
Version="0.4.0 - 2010-02-09">
<Circle Action="&#10;if ( $MyEvent{&apos;EventCnt&apos;} == 0 )&#10; {&#10; # init at event start&#10;&#10; # set Player Pause Mode. Save old mode&#10; $ePlayerMode = $PlayerMode;&#10; &amp;PlayerPause();&#10;&#10; $eRadius = 20; # Radius/m&#10; $eTolerance = $Cfg-&gt;{&apos;waypoint&apos;}-&gt;{&apos;DefaultToleranceRadius&apos;};&#10; $eAngle = 0; # start Angle&#10; $eAngleInc = 10; # Angle increment +/-&#10;&#10; # circle center is current position&#10; $eCenter_Lat = $MkOsd{&apos;CurPos_Lat&apos;};&#10; $eCenter_Lon = $MkOsd{&apos;CurPos_Lon&apos;};&#10;&#10; &amp;TtsSpeak (&apos;MEDIUM&apos;, &quot;Fliege Kreis mit Radius $eRadius Meter&quot;);&#10;&#10; # fly to 1st target&#10; ($PlayerPause_Lat, $PlayerPause_Lon) = &amp;MapGpsAt($eCenter_Lat, $eCenter_Lon,&#10; $eRadius, $eAngle);&#10; }&#10;&#10;elsif ( $System{&apos;TargetDist&apos;} &lt; $eTolerance )&#10; {&#10; # target reached, fly to next target&#10; $eAngle += $eAngleInc;&#10; $eAngle %= 360;&#10;&#10; ($PlayerPause_Lat, $PlayerPause_Lon) = &amp;MapGpsAt($eCenter_Lat, $eCenter_Lon,&#10; $eRadius, $eAngle);&#10; }&#10;"
ActionElse="&#10;if ( $MyEvent{&apos;EventCnt&apos;} == 0 )&#10; {&#10; # set Player to original Mode&#10; &amp;PlayerModeSet($ePlayerMode);&#10; }"
Active="No"
Condition="&amp;JoystickButton(0)"
Delay="100"
Description="Kreis mit Radius 20m um die aktuelle Position.&#10;&#10;Start: Wenn Joystick Button 1 gedrückt wird.&#10;Stop: Wenn Joystick Button 1 erneut gedrückt wird.&#10;&#10;Der Event schaltet Mission Cockpit in den Player Pause Mode.&#10;Wenn der Event beendet wird, dann wird Mission Cockpit wieder in den vorher&#10;eingestellten Modus zurückgeschaltet.&#10;&#10;ACHTUNG:&#10;Vor Verwendung sollte man sich mit der Funktion des Events mit Hilfe des&#10;Simulators vertraut machen!&#10;&#10;Benutzung auf eigene Gefahr!&#10;Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion&#10;Keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden&#10;"
Repeat="500"
RepeatElse=""
Trigger="TOGGLE_RISE" />
<Elevator Action="&#10;$eSerialChannel = 11; # serieller Kanal für Gas-Steuerung (0..11)&#10;$eAltMin = 10; # Höhe unterer Umkehrpunkt in Meter&#10;$eAltMax = 30; # Höhe oberer Umkehrpunkt in Meter&#10;$eGasUp = 40; # Gas für Steigen: -125..0..125&#10;$eGasDown = -40; # Gas für Abstieg: -125..0..125&#10;&#10;if ( $MyEvent{&apos;EventCnt&apos;} == 0 )&#10; {&#10; # Erster Event-Durchlauf - Initialisierung&#10; $eMode = &quot;UP&quot;;&#10;&#10; &amp;TtsSpeak (&apos;MEDIUM&apos;, &quot;Aufzug zwischen $eAltMin und $eAltMax Meter&quot;);&#10; }&#10;&#10;my $eAlt = &amp;Altitude();&#10;&#10;if ( $eMode eq &quot;UP&quot; and $eAlt &lt; $eAltMax)&#10; {&#10; # Serial Channel und damit External-Control Gas einstellen&#10; &amp;SerialChannel ($eSerialChannel, $eGasUp);&#10; }&#10;elsif ( $eMode eq &quot;DOWN&quot; and $eAlt &gt; $eAltMin)&#10; {&#10; # Serial Channel und damit External-Control Gas einstellen&#10; &amp;SerialChannel ($eSerialChannel, $eGasDown);&#10; }&#10;&#10;# Umkehrpunkte prüfen&#10;if ( $eMode eq &quot;UP&quot; and $eAlt &gt;= $eAltMax)&#10; {&#10; $eMode = &quot;DOWN&quot;;&#10; }&#10;elsif ( $eMode eq &quot;DOWN&quot; and $eAlt &lt;= $eAltMin)&#10; {&#10; $eMode = &quot;UP&quot;;&#10; }&#10;"
ActionElse="&#10;$eSerialChannel = 11; # serieller Kanal für Gas-Steuerung (0..11)&#10;&#10;if ( $MyEvent{&apos;EventCnt&apos;} == 0 )&#10; {&#10; # Gas is now controlled by RC - Set Externcontrol-Gas to max.&#10; &amp;SerialChannel ($eSerialChannel, 125);&#10; }"
Active="No"
Condition="&amp;JoystickButton(1)"
Delay="100"
Description="Bitte unbedingt lesen !!!&#10;&#10;Benutzung auf eigene Gefahr!&#10;Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion.&#10;Keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden.&#10;&#10;Funktion:&#10;Steigen auf 30m, dann Abstieg auf 10m, dann wieder Aufstieg usw. bis der&#10;Event ausgeschaltet wird.&#10;&#10;Start: Wenn Joystick Button 2 gedrückt wird.&#10;Stop: Wenn Joystick Button 2 erneut gedrückt wird.&#10;&#10;Erforderliche Einstellung im Event:&#10;- In Event &quot;Action&quot; muss der Gas-Wert für Steigen und Sinken an den&#10; jeweilgen MK angepasst werden.&#10;&#10;Erforderliche Einstellung im Mission Cockpit Einstellungs-Dialog:&#10;- &quot;Extern-Control Gas&quot; auf &quot;Serial Channel 12&quot; stellen&#10;- &quot;Extern-Control Nick&quot; und &quot;Extern-Control Roll&quot; auf &quot;0&quot; stellen.&#10;- &quot;Extern-Control &quot; auf &quot;0&quot; stellen.&#10;- &quot;Extern-Control Senden&quot; aktivieren (Beachte Hinweise weiter unten)&#10;&#10;Falls man &quot;External-Control Nick/Roll/Gier&quot; über Joystick/Maus steuern will,&#10;dann kann man das natürlich einstellen.&#10;&#10;Erforderliche Einstellung im Kopter-Tool:&#10;- Es muss der Vario-Höhenregler aktiv sein.&#10;- &quot;Stick Neutral Punkt&quot; muss 120 sein (Mittelposition)&#10;- &quot;Externe Kontrolle&quot; muss auf einen Wert größer als 128 eingestellt sein.&#10;&#10;WICHTIG:&#10;Beachte folgende Hinweise zum Umgang mit Gas bei aktiviertem External-Control:&#10;&#10;ACHTUNG:&#10;Wenn External Control aktiv ist, dann bestimmt der Gas-Stick am Sender&#10;das maximal mögliche Gas. Der Gas-Stick muss also entsprechend hoch eingestellt&#10;sein, damit Mission Cockpit auch Gas geben kann.&#10;&#10;Im Umkehrschluss kann mit dem RC Gas-Stick nicht mehr Gas gegeben werden,&#10;als von Mission Cockpit über External-Control vorgegeben.&#10;&#10;ACHTUNG:&#10;Wenn der Event beim Starten vom Mission Cockpit deaktiviert ist und der&#10;serielle Kanal 12 nicht anderweitig belegt ist, dann wird &quot;External-Control Gas&quot;&#10;auf Halb-Gas eingestellt. Mit dem RC-Stick kann dann auch nicht mehr Gas als&#10;Halb-Gas gegeben werden.&#10;&#10;ACHTUNG:&#10;Wenn der Event beim Starten vom Mission Cockpit aktiviert und ausgeschaltet ist,&#10;dann wird &quot;External-Control Gas&quot; auf Vollgas eingestellt.&#10;Das maximal möglich Gas wird dann vom RC-Stick vorgegeben.&#10;Gas wird also über den RC-Stick gesteuert.&#10;&#10;ACHTUNG:&#10;Wenn der Event ausgeschaltet wird, dann wird für &quot;External-Control Gas&quot;&#10;Vollgas eingestellt. Dann muss das Gas am RC-Stick wieder REDUZIERT werden.&#10;Das Gas wird dann wieder über den RC-Stick geteuert.&#10;&#10;ACHTUNG:&#10;Vor Verwendung sollte man sich mit der Funktion des Events mit Hilfe des&#10;Simulators und der Debug-Anzeige &quot;Externe Steuerung&quot; vertraut machen!&#10;"
Repeat="100"
RepeatElse="100"
Trigger="TOGGLE_RISE" />
<Entfernung Action="if ( &amp;CurPosIsValid() and &amp;HomePosIsValid() )&#10; {&#10; my ($Dist, $Bearing) = &amp;MapGpsTo($MkOsd{&apos;CurPos_Lat&apos;}, $MkOsd{&apos;CurPos_Lon&apos;},&#10; $MkOsd{&apos;HomePos_Lat&apos;}, $MkOsd{&apos;HomePos_Lon&apos;} );&#10;&#10; &amp;TtsSpeak(&apos;HIGH&apos;, sprintf &quot;Entfernung. %d. Meter&quot;, int ($Dist + 0.5) );&#10; }"
ActionElse=""
Active="No"
Condition="1"
Delay=""
Description="Ansage: Entfernung zur Home-Position"
Repeat="15000"
RepeatElse=""
Trigger="TRUE" />
<GierPOI Action="my $eGierChannel = 10; # Serial Channel 0..11 for Gier Control&#10;&#10;if ( $MyEvent{&apos;EventCnt&apos;} == 0 )&#10; {&#10; # PID Parameter müssen an den jeweiligen MK angepasst werden.&#10; $eGierKp = 0.10; # P&#10; $eGierKi = 0.10; # I&#10; $eGierKd = 0.15; # D&#10;&#10; $eGierLimitY = 40; # Begrenzung Gier-Stick -125..0..125&#10; $eGierLimitI = 1100; # Limit I-Anteil&#10; $eGierTa = $MyEvent{&apos;Repeat&apos;}/1000; # Abtastzeit in s&#10;&#10; $eGierEsum = 0;&#10; $eGierEalt = 0;&#10;&#10; # Gier auf Mittelstellung&#10; &amp;SerialChannel ($eGierChannel, 0);&#10; }&#10;&#10;my $y = 0; # Gier neutral&#10;&#10;if ( &amp;CurPosIsValid() )&#10; {&#10; # Entfernung und Soll Winkel zum POI&#10; my ($Dist, $w) = &amp;MapGpsTo($MkOsd{&apos;CurPos_Lat&apos;}, $MkOsd{&apos;CurPos_Lon&apos;},&#10; $Poi_Lat, $Poi_Lon );&#10; # Ist Kompass Winkel MK&#10; my $x = $MkOsd{&apos;CompassHeading&apos;};&#10;&#10; # Vergleich&#10; my $e = ((540 + $w - $x) % 360) - 180;&#10;&#10; # Integration I-Anteil&#10; $eGierEsum += $e;&#10; if ( $eGierEsum &gt; $eGierLimitI ) { $eGierEsum = $eGierLimitI; }&#10; if ( $eGierEsum &lt; - $eGierLimitI ) { $eGierEsum = - $eGierLimitI; }&#10;&#10; # Reglergleichung&#10; $y = $eGierKp * $e +&#10; $eGierKi * $eGierTa * $eGierEsum +&#10; $eGierKd / $eGierTa * ($e - $eGierEalt);&#10;&#10; # Limit Gier symmetrical&#10; if ( $y &gt; $eGierLimitY ) { $y = $eGierLimitY; }&#10; if ( $y &lt; - $eGierLimitY ) { $y = - $eGierLimitY; }&#10; $y = int ($y + 0.5);&#10;&#10;printf &quot;W: %3.2f, X: %3.0f, E: %3.2f, S: %3.2f, A: %3.2f y: %d\n&quot;,&#10; $w, $x, $e, $eGierEsum, $eGierEalt, $y;&#10;&#10; $eGierEalt = $e;&#10; &#10; if ( $Dist &lt; 5 )&#10; {&#10; # too close to POI, keine Gier Steuerung&#10; $y = 0;&#10; }&#10; }&#10;&#10;# set Gier stick&#10;&amp;SerialChannel ($eGierChannel, $y);&#10;&#10;&#10;# Beschreibung PID Regler:&#10;# http://www.rn-wissen.de/index.php/Regelungstechnik&#10;"
ActionElse="my $eGierChannel = 10; # Serial Channel 0..11 for Gier Control&#10;&#10;&amp;SerialChannel ($eGierChannel, 0);&#10;"
Active="No"
Condition="$PoiMode"
Delay=""
Description="Bitte unbedingt lesen !!!&#10;&#10;Benutzung auf eigene Gefahr!&#10;Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion.&#10;Keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden.&#10;&#10;WARNUNG:&#10;Der Event greift per External-Control direkt in die Flugsteuerung ein.&#10;Unbedingt die Hinweise im Handbuch beachten!&#10;&#10;Funktion:&#10;Richtet denn MK mit Blick zum POI aus.&#10;Gier-Steuerung erfolgt nur, wenn die Entfernung des MK zum POI &gt; 5m ist.&#10;Bei geringerer Entfernung ist die Berechnung des Soll-Kompass-Winkels zum POI&#10;zu ungenau.&#10;&#10;Start: Wenn POI-Mode aktiviert wird (Taste &quot;v&quot; drücken)&#10;Stop: Weenn POI-Mode deaktiviert wird (Taste &quot;v&quot; erneut drücken)&#10;&#10;Erforderliche Einstellung im Event-&gt;Action:&#10;- Die PID Parameter müssen an den jeweiligen MikroKopter angepasst werden.&#10;- Die Nummer des seriellen Kanals, der auf External-Control-&gt;Gier gemappt&#10; wird, muss in Event-Action UND Event-&gt;Action/Else angepasst werden&#10;&#10;Erforderliche Einstellung im Mission Cockpit Einstellungs-Dialog:&#10;- &quot;Extern-Control Gas&quot; auf 255 stellen&#10;- &quot;Extern-Control Nick&quot; und &quot;Extern-Control Roll&quot; auf &quot;0&quot; stellen.&#10;- &quot;Extern-Control Gier&quot; &quot;Serial Channel 11&quot; stellen&#10;- &quot;Extern-Control Senden&quot; aktivieren&#10;&#10;Falls man &quot;External-Control Nick/Roll/Gas&quot; über Joystick/Maus steuern will,&#10;dann kann man das natürlich einstellen.&#10;&#10;Erforderliche Einstellung im Kopter-Tool:&#10;- &quot;Externe Kontrolle&quot; muss auf einen Wert größer als 128 eingestellt sein.&#10;&#10;"
Repeat="100"
RepeatElse="100"
Trigger="TRUE" />
<Haus Action="my $eSize = 30; # Haus Kantenlänge in Meter&#10;&#10;# 44 Möglichkeiten das Haus vom Nikolaus zu zeichnen&#10;my @eVariante = ( &#10;&quot;123143542&quot;, &quot;123145342&quot;, &quot;123413542&quot;, &quot;123453142&quot;, &quot;123541342&quot;,&#10;&quot;123543142&quot;, &quot;124134532&quot;, &quot;124135432&quot;, &quot;124314532&quot;, &quot;124354132&quot;,&#10;&quot;124531432&quot;, &quot;124534132&quot;, &quot;132143542&quot;, &quot;132145342&quot;, &quot;132435412&quot;,&#10;&quot;132453412&quot;, &quot;134123542&quot;, &quot;134124532&quot;, &quot;134214532&quot;, &quot;134235412&quot;,&#10;&quot;134532142&quot;, &quot;134532412&quot;, &quot;135412342&quot;, &quot;135412432&quot;, &quot;135421432&quot;,&#10;&quot;135423412&quot;, &quot;135432142&quot;, &quot;135432412&quot;, &quot;142134532&quot;, &quot;142135432&quot;,&#10;&quot;142345312&quot;, &quot;142354312&quot;, &quot;143123542&quot;, &quot;143124532&quot;, &quot;143213542&quot;,&#10;&quot;143245312&quot;, &quot;143542132&quot;, &quot;143542312&quot;, &quot;145312342&quot;, &quot;145312432&quot;,&#10;&quot;145321342&quot;, &quot;145324312&quot;, &quot;145342132&quot;, &quot;145342312&quot;, );&#10;&#10;my @eHaus = ( # 0/0 ist linke, untere Hausecke = Haus-Referenzpunkt&#10; 0.0, 0.0,&#10; 1.0, 0.0,&#10; 1.0, 1.0,&#10; 0.0, 1.0,&#10; 0.5, 1.5, );&#10;&#10;# Eine der 44 Varianten per Zufallsgenerator ermitteln&#10;$eIndex = int rand (44); # 0..43&#10;$eSequence = $eVariante[$eIndex];&#10;&#10;&amp;TtsSpeak (&apos;MEDIUM&apos;, &quot;Haus vom Nikolaus. Variante $eIndex&quot;);&#10;print &quot;$MyEvent{&apos;EventName&apos;} - Haus vom Nikolaus - Variante: $eIndex Sequenz: $eSequence\n&quot;;&#10;&#10;# Delete all Waypoints&#10;&amp;WpDeleteAll();&#10;&#10;# Haus links/unten ist aktuelle MK-Position&#10;$eHouseCenter_Lat = $MkOsd{&apos;CurPos_Lat&apos;};&#10;$eHouseCenter_Lon = $MkOsd{&apos;CurPos_Lon&apos;};&#10;$eHouseDirection = $MkOsd{&apos;CompassHeading&apos;};&#10;&#10;# für jeden Sequenz-Punkt einen WP berechnen und setzen&#10;for ( $i=0; $i&lt; length $eSequence; $i++ )&#10; {&#10; # Nummer der Haus-Ecke&#10; my $ePoint = substr ($eSequence, $i, 1) - 1;&#10;&#10; # Zielpunkt: Relativer Abstand zum Haus-Referenzpunkt&#10; my $ePointX = $eSize * $eHaus[$ePoint * 2];&#10; my $ePointY = $eSize * $eHaus[$ePoint * 2 + 1];&#10;&#10; # Polarkoordinaten: Entfernung, Winkel zum Haus-Referenzpunkt&#10; my $eDist = sqrt ($ePointX * $ePointX + $ePointY * $ePointY);&#10; my $eAngle = $eHouseDirection + rad2deg atan2 ($ePointX, $ePointY);&#10;&#10; # Ziel - GPS Koordinaten berechnen&#10; my ($eWp_Lat, $eWp_Lon) = &amp;MapGpsAt($eHouseCenter_Lat, $eHouseCenter_Lon,&#10; $eDist, $eAngle);&#10; # Wp hinzufügen&#10; &amp;WpAdd (-lat =&gt; $eWp_Lat,&#10; -lon =&gt; $eWp_Lon,&#10; );&#10; }&#10;&#10;# Neue Wp Icons auf der Karte anzeigen&#10;&amp;WpRedrawIcons();&#10;&amp;WpRedrawLines();&#10;&#10;# Player in STD Mode schalten&#10;&amp;PlayerPlay();&#10;&amp;PlayerRandomStd();&#10;"
ActionElse=""
Active="No"
Condition="&amp;JoystickButton(2)"
Delay="100"
Description="Bitte unbedingt lesen !!!&#10;&#10;Benutzung auf eigene Gefahr!&#10;Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion&#10;Keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden&#10;&#10;Funktion:&#10;- Löscht die aktuellen Wegpunkte&#10;- Ermittelt durch Zufallsgenerator eine der 44 Möglichkeiten das&#10;&quot;Haus vom Nikolaus&quot; zu zeichnen (http://de.wikipedia.org/wiki/Haus_vom_Nikolaus)&#10;- Setzt Wegpunkte für die ausgewählte Variante&#10;- Schalet den Player in den Player Play und Random-STD Modus&#10;- Das Haus wird in die Richtung gebaut, in die der MK gerade zeigt.&#10;- Startpunkt ist die linke, untere Hausecke.&#10;- Die Länge einer Hauskante ist 30m. Kann in &quot;Action&quot; eingestellt werden.&#10;&#10;Start: Wenn Joystick Button 3 gedrückt wird.&#10;&#10;ACHTUNG:&#10;Vor Verwendung sollte man sich mit der Funktion des Events mit Hilfe des&#10;Simulators vertraut machen!&#10;"
Repeat="100"
RepeatElse=""
Trigger="RISE" />
<Höhe Action="&amp;TtsSpeak(&apos;HIGH&apos;, &quot;flieg nicht zu hoch&quot;)"
ActionElse=""
Active="No"
Condition="&amp;Altitude() &gt; 50"
Delay="5000"
Description="Ansage: Flieg nicht so hoch, wenn &gt; 50m"
Repeat=""
RepeatElse=""
Trigger="RISE" />
<Test1 Action="print &quot;Action &quot; . time . &quot;\n&quot;;"
ActionElse="print &quot;ActionElse &quot; . time . &quot;\n&quot;;"
Active="No"
Condition="&amp;JoystickButton(0)"
Delay=""
Description="Test"
Repeat="1000"
RepeatElse="2000"
Trigger="TRUE" />
<Test2 Action="&amp;DisplayHash(\%MyEvent, &quot;MyEvent&quot;, &quot;Display&quot;)"
ActionElse=""
Active="No"
Condition="&amp;JoystickButton(0)"
Delay="10000"
Description="Test: Variable %MyEvent anzeigen"
Repeat=""
RepeatElse=""
Trigger="RISE" />
</mkcockpit-Config>