Subversion Repositories Projects

Rev

Blame | Last modification | View Log | RSS feed

<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;&#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.6;  # P&#10;    $eGierKi = 0.5;  # I&#10;    $eGierKd = 0.1;  # D&#10;&#10;    $eGierLimitY = 50;                    # Begrenzung Gier-Stick  -125..0..125&#10;    $eGierLimitI = 500;                   # 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;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;    my $e = $w - $x;    # Vergleich&#10;    if ($e &gt;  180 )&#10;        {&#10;        $e -= 360;&#10;        }&#10;    elsif ($e &lt; -180 )&#10;        {&#10;        $e += 360;&#10;        }&#10;&#10;    $eGierEsum += $e;                  # Integration I-Anteil&#10;    if ( $eGierEsum &gt;   $eGierLimitI ) { $eGierEsum =   $eGierLimitI; }&#10;    if ( $eGierEsum &lt; - $eGierLimitI ) { $eGierEsum = - $eGierLimitI; }&#10;&#10;    my $y = $eGierKp * $e +            # Reglergleichung&#10;            $eGierKi * $eGierTa * $eGierEsum +&#10;            $eGierKd / $eGierTa * ($e - $eGierEalt);&#10;    $eGierEalt = $e;&#10;&#10;# printf &quot;W: %3.2f, X: %3.0f, E: %3.2f, S: %3.2f, A: %3.2f\n&quot;,&#10;#       $w, $x, $e, $eGierEsum, $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;    if ( $Dist &lt; 5 )&#10;        {&#10;        # too close to POI, keine Gier steuerung&#10;        $y = 0;&#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>