FPV Wifi Broadcasting HD Video - Thread zum Raspberry HD Videolink von Befi

Status
Nicht offen für weitere Antworten.

Constantin

Erfahrener Benutzer
Oh man,
Nach x vergeblichen Versuchen läuft's nun endlich side by side und in Immersive Mode (fullscreen)

Ich hab mal die derzeit 3 verschiedenen möglichkeiten,das Bild auf Android anzuzeigen,in eine App gepackt.

Todo: Latenz verbessern,und für Side by Side vlt. eine Verzerrung Oculus-Style für die Linsen einbauen (kein Problem in OpenGl,ich habe davon aber keine Ahnung), SourceCode auf Github hochladen (+apk),das muss ich noch schauen wie's geht.
Und dann ein OSD (vlt. einen 2. Udp Port in java öffnen,und dann mit openGL zeichnen)

Falls jemand eine Herausforderung sucht: Wifibriadcast über JNI auf Android portieren xD
 

just_different

Erfahrener Benutzer

aargau

Erfahrener Benutzer
Ich habe hier bzw. bei RCG mitbekommen, dass man den Alfa R36 / R52 "nur" mit 250mW betreiben kann wegen dem externen LNA Verstärker... Per Zufall bin ich auf dieses Forum gestossen: http://xiaopan.co/forums/threads/ralink-3070-2770f-eeprom-tools-docs.6453/
hier gibt es ein Konfigtool, dass das EEPROM vom Ralink Chip auslesen kann und den LNA aktivieren kann. Man kann da auch die Kanäle etc. konfigurieren.
Leider scheint das tool unter Win10 nicht mehr zu laufen -> ich versuche es gerade auf Windows XP in einer VM.
Ich besitze leider aber keinen HF Meter somit kann ich nicht sagen ob das ganze wirklich klappt.

Falls das jemand mal messen könnte wäre das natürlich super
 

sandmen

Erfahrener Benutzer
Oh man,
Nach x vergeblichen Versuchen läuft's nun endlich side by side und in Immersive Mode (fullscreen)

Ich hab mal die derzeit 3 verschiedenen möglichkeiten,das Bild auf Android anzuzeigen,in eine App gepackt.

Todo: Latenz verbessern,und für Side by Side vlt. eine Verzerrung Oculus-Style für die Linsen einbauen (kein Problem in OpenGl,ich habe davon aber keine Ahnung), SourceCode auf Github hochladen (+apk),das muss ich noch schauen wie's geht.
Und dann ein OSD (vlt. einen 2. Udp Port in java öffnen,und dann mit openGL zeichnen)

Falls jemand eine Herausforderung sucht: Wifibriadcast über JNI auf Android portieren xD
Das Problem liegt doch nicht daran das WBC auf Android zu porten.
Das Hauptproblem, ist doch, das nicht alle/fast kein, Android von Haus aus Monitor-mode mit dem "internen" unterstützt.
Geschweige, andere USB wifi Treiber unterstützt.
 

Constantin

Erfahrener Benutzer
@Sandmen
stimmt,habe ich nicht daran gedacht.
Ich bin jedoch zurzeit der meinung,dass man dies gar nicht braucht. Ob nun an meinem handy per usb ein wifi stick hängt,oder ein mini linux pc( und hier reicht wirklich ein mini linux pc,der rpi ist ja schon fast overkill zum parsen von wifibroadcast) macht ja fast keinen Unterschied.
Und mein Android Handy ist die beste Videobrille ever ! ;)
 

Rangarid

Erfahrener Benutzer
Jetzt wollt ich grad los, hab nochmal alles gecheckt, da ging der RX nicht an. Kurz durchgeguckt - SD-Karte angeknackst. Ist wohl angebrochen beim ins Gehäuse bauen... Jetzt muss ich das RX Image neu aufsetzen und den ganzen Kram für das OSD einstellen. Hoffentlich schaff ich das jetzt noch schnell, hab ja nachher noch andere Sachen vor -.-.
 

olex

Der Testpilot
Ärgerlich :) Aber ein guter Anlass dafür, ein Sicherungs-Image von der Karte zu machen nachdem du sie aufgesetzt hast. Evtl. werden auch andere an dem komplett konfigurierten Image Interesse haben.
 

Constantin

Erfahrener Benutzer
@moritz
Apk ist droben,source code folgt in kürze. Werde auch mal auf "befinitiv" kommentieren.
https://github.com/Consti10/myMediaCodecPlayer-for-FPV.git

Zu Side by side: Das Bild wird derzeit fix im Format side by side gerendert, für ein Anderes Format müsste man die Koordinaten in "openGLHelper" ändern, oder einfach (bei 1080p Display) beim rpi cam eine Auflösung von 960mal 800 wählen.
Das Problem mit glTexImage ist nicht gelöst,aber ich weiss jetzt,woran es liegt: meine gpu ist zu schwach,bei 720p habe ich 40-60fps ,bei 960mal800 dann stabil 60fps.
Was mich noch stört: manchmal gibt es einen bug,dass das bild nicht richtig angezeigt wird; vom Vollbild in normal und wieder in Vollbild beendet dies in den meisten Fällen.
 

meister

Erfahrener Benutzer
gute frage, denke aber es gibt da auch ne lösung in gles für,
damit kann man befehle (glTexImage) sozusagen vorkompilieren und dann mehrfach aufrufen

pseudocode:
Code:
...
glnewlist
glTexImage
glEndList

translate/scale
glCallList
translate/scale
glCallList
...
 

moritzz06

Erfahrener Benutzer
Zu Side by side: Das Bild wird derzeit fix im Format side by side gerendert, für ein Anderes Format müsste man die Koordinaten in "openGLHelper" ändern, oder einfach (bei 1080p Display) beim rpi cam eine Auflösung von 960mal 800 wählen.
Das Problem mit glTexImage ist nicht gelöst,aber ich weiss jetzt,woran es liegt: meine gpu ist zu schwach,bei 720p habe ich 40-60fps ,bei 960mal800 dann stabil 60fps.
Wie meinst Du das? Heißt das, dass das Bild momentan nicht auf side by side skaliert wird?
Wie sieht es dann aus wenn ich die App auf einem 2k Display anzeige?
Kann es leider erst Mittwoch testen.

Schon mal vielen Dank, damit ist mein HD Fpv jetzt vollständig mit HD Brille :)
 

Constantin

Erfahrener Benutzer
Wie meinst Du das? Heißt das, dass das Bild momentan nicht auf side by side skaliert wird?
Wie sieht es dann aus wenn ich die App auf einem 2k Display anzeige?
Kann es leider erst Mittwoch testen.

Schon mal vielen Dank, damit ist mein HD Fpv jetzt vollständig mit HD Brille :)
Dass das bild side by side derzeit im Format 4:3 angezeigt wird. Und egal,welches format du aufm rpi cam wählst, das Bild wird immer auf 4:3 gestreckt.
Wie hättest du es lieber ? 4:3 finde ich ist ein guter kompromiss aus möglichst viel Display fläche & einem guten bild
 

Rangarid

Erfahrener Benutzer
So war heut mal mit den CSL300 fliegen. Was soll ich sagen... bin mehr als enttäuscht. Die Reichweite ist grottig. Das Diversity ist vermutlich kein echtes Diversity. Hatte eine SPW und eine Helix dran. Die Helix brachte keinerlei Reichweitenverbesserung obwohl ich genau im Antennenkorridor geflogen bin. Gute Antennen probiert, schlechte Antennen probiert, nicht wirklich ein riesen Unterschied. RHCP + LHCP kombiniert, nur LHCP, nur RHCP, immer das gleiche.
Man muss aber sagen, dass das Bild wenn es dann mal da war wirklich ziemlich gut war. Hab keine Ahnung, woran es genau jetzt lag. Gibt ja sonst keine Berichte zu den CSL300 bisher, oder?

Was dafür echt gut funktioniert hat ist das Baseflight für Fixed Wing, das hat mich echt überrascht. Denk ich werde den Nuri umbauen auf Analog und die digitale Geschichte vielleicht später nochmal in einem größeren Flieger ausprobieren...
 
shutdown.sh

Nahezu alle hier im Umlauf befindlichen Shutdown-Scripts - auch das in den Befinitiv Images - gehen von einem nach +3.3V geschalteten Taster und einem nach Masse geschalteten Widerstand aus. Einige steuern zur Rückmeldung eine externe LED. Außerdem können sie alle nur eines: den Raspi auf Knopfdruck sauber herunterfahren.
Das kann man besser machen:
Wird der GPIO-Pin als Input definiert, so wird (zumindest bei GPIO3) per Default ein interner Pullup-Widerstand aktiviert, es reicht also den Taster nach Masse zu verdrahten und im Script die GPIO-Abfrage umzudrehen. Die optische Rückmeldung erfolgt über die grüne Onboard-LED.

IMG_3301.JPG

Da ich nicht - wie Befinitiv - an meinem A+TX-Raspi einen USB-Uart samt Hub verwenden wollte, blockiert das OSD den Console-Port und Wifibroadcast den WLAN-Zugang. Also habe ich das Shutdown Script so erweitert, daß es die Länge des Tastendrucks auswertet. Ein kurzer Tastendruck schaltet jetzt von WBC auf WLAN um, ein langer macht den Shutdown.

Code:
#!/bin/bash

# 'shutdown.sh' - shutdown script with minimal hardware and extended functionality
#
# Howto use: add a button between SHUTDOWN_PIN and GND (no need for a resistor or LED).
# Let the script start at boot time by systemd service, init.d or call it from /etc/rc.local.
#
# Function:
# Pressing the button short (0.6 - 1.5 sec) until the green onboard LED lights solid,
# then release it and the function 'Button_short_pressed' will execute.
#
# Holding the button longer (1.5 - 4.5 sec) lets the LED blink, releasing now executes 'HALT'.
# If you pressed the button by accident, hold it (> 5 sec) until the LED goes off and nothing
# will happen.
#
# Holding the button at boot time until the LED blinks with heartbeat (this may take > 1 min)
# executes the function 'Button_pressed_at_boot'
#
# Configure the functions to your needs!                <<< 12/2015 dino_de >>>

SHUTDOWN_PIN=3  # = Headerpin 5 - has the advantage of being able to wake up from HALT

SCRIPTS="/home/pi/wifibroadcast_fpv_scripts"

function Button_short_pressed {
#       if [ -x $SCRIPTS/button_short.sh ] ; then
#               $SCRIPTS/button_short.sh
#       fi
        killall tx.sh tx rx.sh rx osd.sh osd
        ifdown wlan0
        sleep 2
        ifup -o wpa-conf=/etc/wpa_supplicant/wpa_supplicant.conf wlan0
}

function Button_pressed_at_boot {
        if [ -x $SCRIPTS/button_start.sh ] ; then
                $SCRIPTS/button_start.sh
        fi
}

echo $SHUTDOWN_PIN > /sys/class/gpio/export
sleep 0.2

function Button {
        test `cat /sys/class/gpio/gpio$SHUTDOWN_PIN/value` -eq 1; echo $?
}

TCOUNT=0
while [ $(Button) -eq 1 ] ; do
        ((TCOUNT++))
        if [ $TCOUNT -eq 1 ] ; then echo heartbeat > /sys/class/leds/led0/trigger ; fi
        sleep 0.1
done
if [ $TCOUNT -gt 0 ] ; then
        Button_pressed_at_boot
        echo mmc0 > /sys/class/leds/led0/trigger
fi

while :; do
        TCOUNT=0
        while [ $(Button) -eq 1 ] ; do
                ((TCOUNT++))
                if   [ $TCOUNT -eq  1 ] ; then echo default-on > /sys/class/leds/led0/trigger ;
                elif [ $TCOUNT -eq 10 ] ; then echo heartbeat > /sys/class/leds/led0/trigger ;
                elif [ $TCOUNT -eq 45 ] ; then echo none > /sys/class/leds/led0/trigger ; fi
                sleep 0.1
        done
        if [ $TCOUNT -gt 0 ] ; then
                if [ $TCOUNT -le 10 ] ; then
                        Button_short_pressed
                elif [ $TCOUNT -le 45 ] ; then
                        echo "Button long pressed - Shutdown"
                        sudo halt
                fi
                echo mmc0 > /sys/class/leds/led0/trigger
        fi
        sleep 0.5
done
'/etc/network/interfaces' sollte so aussehen:
Code:
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

iface wlan0 inet manual

iface wlan1 inet manual
In '/etc/wpa_supplicant/wpa_supplicant.conf' müssen die WLAN-Zugangsdaten eingetragen werden:
Code:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="YourSSID"
    psk="YourWLANPSK"
}
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten