EZ-Wifibroadcast, HD FPV in günstig und einfach

Status
Nicht offen für weitere Antworten.

Gerbaum

Neuer Benutzer
Hi, die das Image funktioniert einwandfrei, vielen Dank!

Ich wollte jetzt gerne für den Tx die Befehlszeile raspivid... ändnern in V4L2, da ich Videodaten über USB bekomme.
In Befis Manual wäre es diese hier:
raspivid -ih -t 0 -w 1280 -h 720 -fps 30 -b 4000000 -n -g 60 -pf high -o – | sudo ./tx -b 8 -r 4 -f 1024 wlan0

darüber hinaus beim RX nicht Ausgbabe an /opt/vc/src/hello_pi/hello_video/hello_video.bin
sondern an Gstreamer.

Wie kann ich das beim EZWifibroadcast Image bewerkstelligen? Würde nur ungern auf Befis wechseln und alles per Hand machen.

Thx
 

rodizio1

Erfahrener Benutzer
careyer:
Die Empfangs-Stabilität ist auf 2.4 und 5Ghz besser geworden seit 1.3beta (durch die Verbesserungen beim Diversity, also nur ab zwei Karten). Der Langzeit-Test war auf 5Ghz.


copterpilot:
Im RCGroups hat user fhenryco wohl eine Naza in Verbindung mit einem Naza-Frsky Telemetrie Konverter zum laufen gebracht. War aber nicht ganz kompatibel, er hat was im OSD Code geändert damit es läuft. Die Datei liegt im 1.4er image bei, könntest theoretisch probieren das auch zum laufen zu bekommen.


rocket:
Schau' mal ob die Daten heile sind bzw. was da so ankommt. Telemetrie wird (raw, so wie sie hereinkommt) auf einen USB Stick übertragen beim Video-speichern.

Ansonsten bastel' ich gerade an einem (sehr rudimentären) Textlog für die Telemetrie, du könntest die mavlink.c durch diesen Code ersetzen, dann solltest Du zumindest sehen können, ob die Mavlink Messages richtig erkannt wurden.


Code:
#include "mavlink.h"
#include <stdio.h>
#include <unistd.h>

#ifdef MAVLINK
mavlink_status_t status;
mavlink_message_t msg;


void mavlink_read(telemetry_data_t *td, uint8_t *buf, int buflen) {
	int i;
	for(i=0; i<buflen; i++) {
		uint8_t c = buf[i];
		if (mavlink_parse_char(0, c, &msg, &status)) {
                	switch (msg.msgid){
                        	case MAVLINK_MSG_ID_GPS_RAW_INT:
					fprintf(stdout, "MAVLINK_MSG_ID_GPS_RAW_INT: ");
					td->fix = mavlink_msg_gps_raw_int_get_fix_type(&msg);
					td->sats = mavlink_msg_gps_raw_int_get_satellites_visible(&msg);
					td->heading = mavlink_msg_gps_raw_int_get_cog(&msg)/100.0f;
                                        td->altitude = mavlink_msg_gps_raw_int_get_alt(&msg)/1000.0f;
                                        td->latitude = mavlink_msg_gps_raw_int_get_lat(&msg)/10000000.0f;
                                        td->longitude = mavlink_msg_gps_raw_int_get_lon(&msg)/10000000.0f;
					fprintf(stdout, "heading:%f  ", td->heading);
					fprintf(stdout, "altitude:%f  ", td->altitude);
					fprintf(stdout, "latitude:%f  ", td->latitude);
					fprintf(stdout, "longitude:%f  ", td->longitude);
					fprintf(stdout, "GPS fix:%f  ", td->fix);
					fprintf(stdout, "GPS sats:%f  ", td->sats);
					break;
                                case MAVLINK_MSG_ID_GLOBAL_POSITION_INT:
					fprintf(stdout, "MAVLINK_MSG_ID_GLOBAL_POSITION_INT: ");
					td->heading = mavlink_msg_global_position_int_get_hdg(&msg)/100.0f;
                                        td->altitude = mavlink_msg_global_position_int_get_relative_alt(&msg)/1000.0f;
                                        td->latitude = mavlink_msg_global_position_int_get_lat(&msg)/10000000.0f;
                                        td->longitude = mavlink_msg_global_position_int_get_lon(&msg)/10000000.0f;
					fprintf(stdout, "heading:%f  ", td->heading);
					fprintf(stdout, "altitude:%f  ", td->altitude);
					fprintf(stdout, "latitude:%f  ", td->latitude);
					fprintf(stdout, "longitude:%f  ", td->longitude);
                                        break;
                                case MAVLINK_MSG_ID_ATTITUDE:
					fprintf(stdout, "MAVLINK_MSG_ID_ATTITUDE: ");
					td->roll = mavlink_msg_attitude_get_roll(&msg)*57.2958;
					td->pitch = mavlink_msg_attitude_get_pitch(&msg)*57.2958;
					fprintf(stdout, "roll:%f  ", td->roll);
					fprintf(stdout, "pitch:%f  ", td->pitch);
					break;
                                case MAVLINK_MSG_ID_SYS_STATUS:
					fprintf(stdout, "MAVLINK_MSG_ID_SYS_STATUS: ");
					td->voltage = mavlink_msg_sys_status_get_voltage_battery(&msg)/1000.0f;
					td->ampere = mavlink_msg_sys_status_get_current_battery(&msg)/100.0f;
					fprintf(stdout, "voltage:%f  ", td->voltage);
					fprintf(stdout, "ampere:%f  ", td->ampere);
                                        break;
                                case MAVLINK_MSG_ID_VFR_HUD:
					fprintf(stdout, "MAVLINK_MSG_ID_VFR_HUD: ");
                                        td->speed = mavlink_msg_vfr_hud_get_groundspeed(&msg)*3.6f;
					td->heading = mavlink_msg_vfr_hud_get_heading(&msg)/100.0f;
					fprintf(stdout, "speed:%f  ", td->speed);
					fprintf(stdout, "heading:%f  ", td->heading);
                                        break;
			}
			fprintf(stdout, "\n");
			fflush(stdout);
		}
	}
}
#endif

Gerbaum:
Schau mal' in der Datei /root/.profile in der tx_function und rx_function, da siehst Du wie das gestartet wird, raspivid durch v4l ersetzen sollte eigentlich gehen.
Habe USB cams allerdings nie getestet mit dem Image, bin mir gerade nicht sicher, ob alle benötigten Treiber im Kernel sind ...




Schalonsus: Der fragt nach, warum die Sendeleistung so _gering_ ist und schreibt in dem von Dir verlinktem Posting unter anderem:
[...] all these USB-WiFi dongles are very well working with EZ-WiFiBroadcast 1.4.
 
rocket:
Schau' mal ob die Daten heile sind bzw. was da so ankommt. Telemetrie wird (raw, so wie sie hereinkommt) auf einen USB Stick übertragen beim Video-speichern.

Ansonsten bastel' ich gerade an einem (sehr rudimentären) Textlog für die Telemetrie, du könntest die mavlink.c durch diesen Code ersetzen, dann solltest Du zumindest sehen können, ob die Mavlink Messages richtig erkannt wurden.
Hey, danke für den Tipp, raw telemtry hab ich mir vorher direkt am RX fifo angesehen, mit USB Stick wird das ganze auch entsprechend geloggt (http://pastebin.com/AsUYVMma)). Bin übrigens ganz begeistert wie benutzerfreundlich das auf USB speichern klappt! ;)

Ich hab auf die Schnelle keine Möglichkeit gefunden das file (mavlink.c) direkt zu ersetzen, denke da müsste ich erst das ro FS mounten, oder? Du loggst direkt nach stdout, also sollte ich dann die Stati direkt im Screen sehen oder?
 

Gerbaum

Neuer Benutzer
@rodizio1 Danke für den Tip

Eine grundsätzliche Frage hätte ich da noch.
Inwiefern unterscheidet sich Wifi Broadcast zu einem System wie Amimom Connex. Wird bei einem Amimon System nicht auf h264 komprimiert und das Videosignal “roh“ übertragen?
Pakete im Sinne von Rtp gibt's ja auch bei Wifi Broadcast nicht mehr...
 

Schlonz

Erfahrener Benutzer
Ich habe da mal eine Verständnisfrage: wie wird eigentlich der Uplink vom Boden nach oben bei bidirektionalem Mavlink realisiert? Sendet der Stick am RX da mit, und der am TX empfängt, oder wie muss ich mir das vorstellen? Oder läuft da eine parallele Strecke als Uplink mit zwei separaten Sticks mit?

Danke,
Stefan
 

rodizio1

Erfahrener Benutzer
rocket: Filesystem mit 'rw' writeable machen. Rüberkopieren mit WinSCP z.b. Die Ausgabe würde ich am besten umleiten in eine Datei, sonst siehtst du nichts, weil das video davor ist.

Gerbaum: Weiss nicht genau wie Connex das macht, ist aber glaube unkomprimiert.

Schlonz: Wird mit den gleichen Rx sticks auf der gleichen Frequenz übertragen, muss aber noch ein wenig basteln bis das ordentlich läuft. Alternativ würden auch 3DR dongles gehen (einer direkt an der FC, und der andere am Rx Pi. Der Rx Pi leitet dann weiter an z.B. die Tower App über USB Tethering oder Wifi Hotspot).
 
rocket: Filesystem mit 'rw' writeable machen. Rüberkopieren mit WinSCP z.b. Die Ausgabe würde ich am besten umleiten in eine Datei, sonst siehtst du nichts, weil das video davor ist.
Ich hab mir das raw log nochmal angesehen, die Mavlink Pakete waren nur Heartbeats, keine Daten die für OSD verwendet werden können, also ziemlich logisch das da nichts angezeigt wird.

Der px4/pixhawk sendet via telem2 anscheinend per default auch nicht mehr, es gibt aber Parameter um das zu ändern (sr2_*)... ich denke mavproxy stellt das bei der Verbindung um, damit alle Werte gesendet werden.
 

Schlonz

Erfahrener Benutzer
Schlonz: Wird mit den gleichen Rx sticks auf der gleichen Frequenz übertragen, muss aber noch ein wenig basteln bis das ordentlich läuft. Alternativ würden auch 3DR dongles gehen (einer direkt an der FC, und der andere am Rx Pi. Der Rx Pi leitet dann weiter an z.B. die Tower App über USB Tethering oder Wifi Hotspot).
Wo klemmt es denn, und kann man Dir da irgendwie helfen?
 

rodizio1

Erfahrener Benutzer
Hapert im Moment an Kentnissen in C und Kernelcode bzw. Atheros Firmware code.

Kann jemand was bauen, was es erlaubt einfach aus dem Userspace direkt Pakete an die Firmware zu schicken? Am besten unter Umgehung des kompletten IP stack, mac80211, der ath9k_htc Treiber und dem ganzen Gedöns? So dass ich direkt in die TX descriptoren der Firmware schreiben kann?

Wenn man das hinbekäme, könnte ich da noch gewaltig optimieren. Dann könnte ich CTS protection, RTS protection und sogar re-transmissions implrmentieren. Optimal wäre noch, wenn man den Upstream auf die RTS oder auch ACK Pakete 'piggybacken' könnte, dann wäre auch das Timing und Kollisionen kein Problem mehr.
 

Deepflights

Erfahrener Benutzer
Ich komm leider gerade gar nicht zum Fliegen, aber das neue Image habe ich getestet.
Saubere Arbeit! :cool:
Jetzt habe ich 250m. Reichweite wenn der Copter am Boden steht, vermutlich noch etwas mehr!
Ich habe allerdings jetzt auch 3 CL300 dran am RX, vielleicht war einer doch zuwenig.

Ich habe vor kurzen etwas gefunden und gleich bestellt:

ALFA Network APA-M25 - Dual-Band-Zimmerantenne


Im Haus hatte ich durch 3 Wände -70dB, mit der Antenne sind tatsächlich wieder 10dB Gewinn drin!
Ich war also wieder mit 60dB unterwegs!
Da hole ich noch 2 und verteile die strategisch günstig am RX. :D

Noch besser wäre ja ein Antennentracker, aber ich finde ncihts was mit HOTT arbeiten würde.

Auf alle Fälle ist die Antenne eine echte Empfehlung.
 

Mr.Ombre

Erfahrener Benutzer
weiß jemand, warum der FOV bei 1080p so klein ist bei der Pi Cam v2.1 an nem Pi Zero?
Eigentlich sollte der FOV ja bei höherer Auflösung größer werden.
In der wifibroadcast.txt steht die Cam auf 1920x1080 / 30FPS und 6Mbit Bitrate.
Wenn ich auf 720p oder 922p stelle, ist der FOV größer.
Laut den Specs kann die 2.1 Cam ja 1080p
 

rodizio1

Erfahrener Benutzer
Mr. Ombre:
Liegt daran, dass die Cam bei den niedrigeren Auflösungen 'binning' macht, also mehr Pixel auf dem Sensor nutzt.

Hier ist eine gute Übersicht über die verschiedenen Modi und FOV:
http://picamera.readthedocs.io/en/release-1.12/fov.html


Deepflights:
Oh, die Antenne geht gut? Habe die auch vor einiger Zeit gekauft und aufgemacht, ist ein Reflektor aus Folie drin der bei mir nicht richtig verklebt war. Das sah so abenteuerlich aus, dass ich die gar nicht erst weiter getestet habe ;)
 

nique

Legal-LongRanger
das ist ja nicht so gut mit der 1080p Auflösung. Zum FPV Fliegen ist der niedrige FOV bei 1080p gänzlich ungeeignet
Finde ich nicht. Es geht um die Auflösung. FoV bestimme ich dann über die Linse.

Die ganze Sensorfläche wird verwendet, aber nur jedes zweite Pixel übertragen? Das ist Verschwendung.
 

rodizio1

Erfahrener Benutzer
Ja, bleibt nur andere Linse oder andere Auflösung. Gleicher FOV bei allen Auflösungen geht technisch nicht, ist bei jeder Cam so. Wobei 6Mbit glaube eh zu wenig sind für 1080p. Mit 8Mbit und 922p sieht's wahrscheinlich besser aus.

2x2 Binning heisst 4 Pixel (2 in jede Richtung) statt einen auslesen, aus den 4 Pixeln den 'Mittelwert' errechnen und diesen dann sozusagen als einen Pixel ausgeben. Bringt bessere Qualität.
 

Elyot

Erfahrener Benutzer
Es gibt nun einen neuen Pi Zero, mit WIFI und Blauzahn. Integriertes WIFI ist zwar für WBC eher nicht zu gebrauchen, aber Blauzahn könnte man als Schnittstelle für die Konfiguration (per App?) nutzen. Wann kommt eigentlich der Pi3 als Zero-Version? ;)
 

cody8472

Neuer Benutzer
Ich habe gerade mit relativ bescheidenem Erfolg mein Glück versucht:
Rasperry Pi 1 + CSL300 ->Netbook(Ubuntu 16.10) + CSL300

OSD ist aus, 1280x720 30fps.

Auf dem Netbook schaue ich das Video so:
./rx wlan123 -f 1024 | mplayer -

Ich bekomme auch ein Bild, aber es ist voll mit Störungen.
In den oberen 10% des Bildes kann ich aber das Kamerabild erkennen.

Woran könnte das liegen?
 

Schlonz

Erfahrener Benutzer
Mal eine Frage: ist bei der 1.4 eigentlich der Kernel in irgendeiner Form modifiziert, oder ist der gleich dem normalen von der Jessie?

Danke,
Stefan
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten