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