OTX OpenTX Taranis Programmierung - Tips und Tricks

Der LUA Interpreter kommt mit 2.0 oder? Hatte den mal ausprobiert im Momment gibt es aber keine Anleitung dazu zumindest hab ich keine gefunden. Soweit ich mich erinnere müssen die Scripts im ordner SCRIPTS stehen.
Dann gibt es 2 Varaianten davon.
Bei der 1. müssen die files mit .lua enden diese können manuell ausgeführt werden. (Auf der Page wo man die Files auf der SD Karte sieht. In den SCRIPTS ordner gehen und dann lange auf menu drücken und dann execute glaub ich)
Bei der 2. Varainte enden die scripts auf .mix (glaub ich) und können dann auf der Script Page in den Modelleinstellungen aufgerufen werden. Hier kann man zuweisen woher das Script seine Eingaben bekommt und wohin das die Ausgaben vom Script gehen. Das Script wird dann zyklisch aufgerufen und berechnet dann die entsprechenden Werte.
Wenns ich wieder zuhause bin kann ich ja einbeispielscript reinstellen.
 

nique

Legal-LongRanger
Danke Hunter, das wäre toll. Vielleicht mit ein paar Screenshots wo man die Aufrufart 2 sieht mit dein Ein-/Ausgabe-Möglichkeiten.
 
Hi hab das gestern abend ganz vergessen sry

Es hat sich anscheinend etwas geändert auch im 2. fall mus das script auf .lua enden.
Also du musst zuerst die definieren welche inputs und outputs du haben willst. (Zeile 1-8) Die Strings "Throttle" "Landing" usw. erscheinen dann auf der script page.

in zeile 10 wird einfach eine gloable variable definiert.

zeile 12 ist die Definition der Funktion die immer wieder aufgerufen wird. Als übergabe parameter müssen die 3 parameter angegeben werden die wir vorher mit input definiert haben

wichtig ist noch die zeile 38 in der funktion. Hier geben wir 2 parameter zurück. Diese haben wir auch vorher noch unter output z 6-8 definiert.
Die parameter namen throttle, landing, stick, ailLeft, ailRight sind im prinzip unwichtig wichtig ist nur das wir 3 inputs definiert haben und 2 outputs und die reihenfolge ist natürlich wichtig.

Zeile 41-46 hier wird der lua laufzeitumgebung mitgeteilt wo unsere run funktion die inputs und die outputs drinnstehen.

Um das ganze aufzusetzten gehe auf die script page und wähle als script diese testscript.lua aus. (Nachdem du es auf die SD karte unter SCRIPTS kopiert hast)
Inputs für das Script sind folgende: Throtthe: Throttle Stick (Was sonnst? :) ) Landing ein channel oder input der von 0-100 geht(nicht -100-100) und aileron stick der inout für die querruder
Als ausgabe des Scripts sind die beiden Querruder Servos.
Was das ding jetzt macht ist erstmal ne differentierung auf die querruder (nun nicht sehr aufregend)
Und dann macht es noch den offset für die Landeklappen auf ne spezielle art und weise siehst du dann schon
und dann sorgt es dafür das ich wenn ich landeklappen ausgefahren habe und ich gas gabe diese automatisch wieder eingefahren werden und solange nicht mehr ausgefahren werden bis throttle und landing einmal bei 0 wahren.

Sorry alles etwas rudimentär ich mus jetzt aber los ^^ weiß jetzt auch nicht welche programier erfahrung du hast eventuell mus man sich da etwas länger einarbeiten
 

Anhänge

nique

Legal-LongRanger
Hallo Hunter

Danke erst mal, das gibt einen tollen Einblick.

Ein paar Fragen um zu sehen, ob ich das richtig verstehe:

input = { } verstehe ich als Arraydefinition, das Array kriegt den Namen input. Dass der Input dort rein kommt, wird in Zeile 43 definiert.

Ich habe die Script-Page noch nie gesehen, kannst Du da ev ein Scrennshot einstellen? Ich vermute mal, dass ich auf dieser Seite definiere, welcher Inputgeber ich auf "Throttle", "Landing" etc lege. Das wird also nicht fix im Script gemacht? Dasselbe wohl für den Output.

Die Funktion run muss soviele Inputvariablen haben, wie das InputArray Positionen hat. Und entsprechend muss ich soviele returns liefern, wie das OutputArray Positionen hat, richtig? Und immer brav an die Reihenfolge denken.

Zeilen 13-15, die sind zwingend? Alleine durch die Definition in der Funktion (Zeile 12) sind die Variabeln nicht verfügbar oder ohne Werte?


Ok, zu meinem Szenario, was ich weiter oben angedeutet habe. Ich verwende den Toggle-Switch um einen Zähler hoch zu zählen. Das sollte kein Problem darstellen. Je nach Zählstand soll ein anderer Track gespielt werden. Somit würde ich den Zähler zurückgeben und den in den CustomFunctions abfragen und entsprechend ein Track ausgeben? Meine Idee war, dass ich diese CustomFunction direkt im Script aufrufen kann...

Im Script machst Du "nur" ein bisschen bedingte Verzweigungen, Zuweisungen und wenig Mathe. Gibt es bereits irgendwo eine Übersicht aller möglicher Befehle? Also muss nicht eine Anleitung sein, aber eine Referenz-Seite wäre noch toll.
 
Hallo Hunter
Danke erst mal, das gibt einen tollen Einblick.

Ein paar Fragen um zu sehen, ob ich das richtig verstehe:

input = { } verstehe ich als Arraydefinition, das Array kriegt den Namen input. Dass der Input dort rein kommt, wird in Zeile 43 definiert.
Ja völlig korrekt. Das array kann natürlich heißen wie es will die taranis wertet lediglich die zurückgegebene Tabelle aus. (Da muss dann natürlich "run" "input" und "output" als keys vorkommen) In disem fall ist diese etwas inkorrekt mit der variablen "functionTable" bezeichnet(Es sind 2 Arrays und eine funktion)

Ich habe die Script-Page noch nie gesehen, kannst Du da ev ein Scrennshot einstellen? Ich vermute mal, dass ich auf dieser Seite definiere, welcher Inputgeber ich auf "Throttle", "Landing" etc lege. Das wird also nicht fix im Script gemacht? Dasselbe wohl für den Output.
Jop Screenshot sihe anhang. Du kannst natürlich auch ein build vom companion holen ich meine es gibt nightly builds mittlerweile. http://jenkins.open-tx.org/firmware/nightly-builds/

Die Funktion run muss soviele Inputvariablen haben, wie das InputArray Positionen hat. Und entsprechend muss ich soviele returns liefern, wie das OutputArray Positionen hat, richtig? Und immer brav an die Reihenfolge denken.
ja genau

Zeilen 13-15, die sind zwingend? Alleine durch die Definition in der Funktion (Zeile 12) sind die Variabeln nicht verfügbar oder ohne Werte?
Ich ich glaube die übergeben parameter sind lediglich referenzen auf die echten werte. Bin mir nicht ganz sicher warum das so ist muss mal in den source schauen. Als ein schuss ins blaue würde ich sagen das ja das script in nem thread läuft das er nicht einfach irgendwann sich die werte holt sondern mit dem mixer thread synchronisiert werden muss. Andererseits könnte er das ja auch beim aufruf der funktion machen hmm ka.

Ok, zu meinem Szenario, was ich weiter oben angedeutet habe. Ich verwende den Toggle-Switch um einen Zähler hoch zu zählen. Das sollte kein Problem darstellen. Je nach Zählstand soll ein anderer Track gespielt werden. Somit würde ich den Zähler zurückgeben und den in den CustomFunctions abfragen und entsprechend ein Track ausgeben? Meine Idee war, dass ich diese CustomFunction direkt im Script aufrufen kann...

Im Script machst Du "nur" ein bisschen bedingte Verzweigungen, Zuweisungen und wenig Mathe. Gibt es bereits irgendwo eine Übersicht aller möglicher Befehle? Also muss nicht eine Anleitung sein, aber eine Referenz-Seite wäre noch toll.
Außer dem source code hab ich nix gefunden. Im source ist das aber recht schön zu sehen. Gibt schon ein paar. https://github.com/opentx/opentx/blob/next/radio/src/lua.cpp Darunter auch dein PlayFile:
Code:
  if throttle > -990 and landing > 10 then
    if not errorCondition then
      playFile("camcenter")
    end
    errorCondition = true
  end
Habs noch nicht im sender ausprobiert aber sehe keinen grund warums nicht gehen sollte :)

Edit:
Achja falls sich noch jemand fragt warum die werte bei den scripts so ungenau sind. Die Basis bei der Taranis ist 1024 nicht 1000 wie ich ursprünglich gedacht habe. Also im script die 1000 durch 1024 ersetzen dann stimmts. Also 100% entspricht ist in LUA 1024 und nicht 1000
 

Anhänge

Zuletzt bearbeitet:

funfex

Erfahrener Benutzer
Ich habe hier einen Flieger, der bei höheren Geschwindigkeiten extrem empfindlich in den Rudern wird.
Hat jemand einen Tip, wie ich abhängig von der Motorleistung den "Weg" Wert oder auch Expo verändern kann ?
 
Hat jemand die Taranis am Heli im Einsatz? Ich möchte heute gerne meinen T-Rex 450 FBL mit der Taranis einstellen. Taumelscheibe hab ich bereits gemacht aber weiter komm ich nicht. Der Heli hat ein Align 3GX Flybareless System. Hat da jemand Erfahrungen?
 

helle

Erfahrener Benutzer
Hy funfex,

entweder grundsätzlich schon mal mehr Expo geben und Dualrate umschalten per Schalter

oder aber Gasstellung auf eine globale Variable geben
und dann in den entsprechenden Rudern diese Globale Variable im Mischer als Mischer-Gewichtung aufrufen

Aber bitte vorher am Companion-simulator testen wieviel du reduzieren willst
und diese Funktion via Schalter freigeben oder sperren
und die Werte in einem freien Kanals vorverrechnen eventl. noch mit Offset


oder besser noch eine Flugphase "Speed" definieren/verwenden die du mit Fade in und Fade out
ab einer bestimmten Gasstellung langsam einblenden kannst

Gasstellung --> auf prog. Schalter
prog. Schalter --> ruft Flugphase auf
Flugphase dann auch ansagen lassen


Helle
 
Zuletzt bearbeitet:

funfex

Erfahrener Benutzer
Wie lege ich Gas auf eine globale Variable, das hab ich schon gesucht ?!
Ich hab bei dem Teil keine Zeit zum was schalten.... Bzw. zittrige Finger wegen dem Adrenalin....
 

helle

Erfahrener Benutzer
Hy fun fex,

ich habe gerade keine Steuerng und kein companion zur Hand

Aber nur in den Spezialfunktionen kannst du globale Variablen mit Werte versorgen

Adjust GV1 als Quelle the Gasstick

Dann damit in einen freien Mischer gehen und verrechnen



Helle
 

funfex

Erfahrener Benutzer
Danke, damit komme ich schon weiter....

Wenn ich jetzt aus -100 ... +100 noch 100 ... 10 machen könnte...
GV1 als Offset funktioniert, als Gewichtung nicht ?
 
Zuletzt bearbeitet:

wolfes1126

Erfahrener Benutzer
Also entweder hab ich letzte NAcht mein restliches Gehirn verpennt oder ich sitz heute komplett auf dem Schlauch.
Will einen Schalter, nehmen wir mal SE als 2 Wege Schalter nutzen für einen Landebein Bau.
Habe im Mischer dazu Kanal 8 gewählt.
Mischer erste Zeile Schalter SE hoch Gewicht 100
Mischer zweite Zeile Schalter SE runter Gewicht -100 (addiere)

Nun wenn ich aber im Kanalausschlag Screen schaue und umschalte geht der Wert bei rauf und runter bei beiden Schalterstellungen auf -100 (Mittelstellung vom Schalter geht auf mitte im Screen).

Was genau mach ich da falsch (bitte nicht lachen)... denn ich steh gerade voll aufm Schlauch.

Danke für Info/Hilfe
 

funfex

Erfahrener Benutzer
Quelle max, Gewichtung 100, Offset 0, Schalter se runter, multiplex ersetzen.

Schaltet hier um. Gleiche Zeile, Gewichtung -100, es hoch.

.....schaltet auf den anderen Wert .

Wenn dir das nicht hilft, hol dir erstmal nen Kaffee :)
 
Ich muss jetzt erst mal das doofe 3Gx zum laufen bekommen dann mach ich mit Taranis weiter.
Noch ne FRage zu einer Modellvorlage. Wenn ich die in den Sender importiere wie mach ich das? einfach öffnen und in Sender schreiben oder wie?
 

silberkorn

Erfahrener Benutzer
Hey Leute, weiss nicht ob wir das schon hatten. Ich Bau mir grade ein 2 Motoriges Wasserflugzeug und will Seite auf die Motoren aufmischen. So 10 Prozent. Sprich wenn ich Seite rechts steuere soll der rechte Motor etwas langsamer werden. Wie programmiere ich das am cleversten?

Danke euch
Gruss
 
FPV1

Banggood

Oben Unten