MinimOSD als OSD für OpenPilot OPCC/CC3D

JR63

Erfahrener Benutzer
#1
Hi,

falls jemand von Euch OPCC oder CC3D fliegt und als FPVer auch ein OSD mit künstlichem Horizont etc. vermisst, bis es das richtige OpenPilot OSD geben wird, habe ich hier mal etwas, basierend auf der MinimOSD Software, vorbereitet:

http://forums.openpilot.org/topic/6736-openpilot-osd-prototyping/page__st__600#entry157172

Das Ganze ist noch nicht fertig, wird aber bald soweit sein.

Was z.B. noch fehlt, ist die Flugakkuspannung (Lötarbeit am Atmel erforderlich).

Evtl. werde ich das auch noch mit MinimOSD-Extra mergen, mal sehen wie lange meine Lust an diesem Mini-Projekt anhält ;-)

Tschö
JR
 
Zuletzt bearbeitet:

meister

Erfahrener Benutzer
#2
Hi JR,
cooles Projekt !
Gibt es den Quellcode schon irgendwo ?
Oder kannst du mir sagen wie du die Initialisierung der Session gemacht hast ?
Ich habe damit noch probleme, wenn ich mein OpenPilot am OpenPilot-GCS habe, eine Verbindung aufbaue and dann an mein Multi-GCS hänge funktioniert es einwandfrei, die Verbindung bleibt bestehen.
Wenn ich die Session selber initialisiere bekomme ich ständig Abbrüche und muss die Session neu initialisieren, irgendwie sende ich das falsche :-(

Gruß,
Olli

PS: http://www.multixmedia.org/test/AutoQuad/gl-gcs/
 

JR63

Erfahrener Benutzer
#3
Hi Olli,

der Code steht noch nirgendwo, ich muss erst noch etwas code refactoring betreiben und mal überlegen wo ich dann veröffentliche.

Das Konnektieren geht aber folgendermaßen:

#define FLIGHTTELEMETRYSTATS_STATUS_DISCONNECTED 0
#define FLIGHTTELEMETRYSTATS_STATUS_HANDSHAKEREQ 1
#define FLIGHTTELEMETRYSTATS_STATUS_HANDSHAKEACK 2
#define FLIGHTTELEMETRYSTATS_STATUS_CONNECTED 3

=

#define GCSTELEMETRYSTATS_STATUS_DISCONNECTED 0
#define GCSTELEMETRYSTATS_STATUS_HANDSHAKEREQ 1
#define GCSTELEMETRYSTATS_STATUS_HANDSHAKEACK 2
#define GCSTELEMETRYSTATS_STATUS_CONNECTED 3


Flight sendet anfangs regelmäßig DISCONNECT.

Darauf sendet GCS bzw. MinimOSD (im folgenden GCS) solange HANDSHAKEREQ bis Flight HANDSHAKEACK sendet, wonach GCS dann CONNECTED sendet, worauf dann auch Flight zu CONNECTED übergeht.

Die einzelnen Status Pakete von Flight sollten mit ACK beantwortet werden.

Dach dem Connect sendet GCS und Flight regelmäßig (so all 500 bis 800 ms) den aktuellen Status um konnektiert zu bleiben.

Dadurch ist dann auch ein Reconnect möglich, wenn mal die Verbindung abgebrochen sein sollte. Das habe ich aber aktuell noch nicht implementiert.

Ich hoffe das hilft schonmal.

Tschö
JR
 

meister

Erfahrener Benutzer
#4
Soweit bin ich ja auch schon, aber ich sende am anfang irgendwelche falschen werte, hatte diese aus dem Wiki aber das geht nicht richtig

Code:
void openpilot_send_req (uint8_t status) {
	uint8_t openpilot_write_buf[256];
	uint8_t crc = 0;
	uint8_t n = 0;
	uint8_t n2 = 0;
	uint8_t len = 0;
	openpilot_write_buf[n++] = 0x3c;	// Start
	openpilot_write_buf[n++] = 0x22;	// Command
	openpilot_write_buf[n++] = 0x1D;	// Len1
	openpilot_write_buf[n++] = 0x00;	// Len2
	openpilot_write_buf[n++] = 0x02;	// ObjID1
	openpilot_write_buf[n++] = 0x29;	// ObjID2
	openpilot_write_buf[n++] = 0x7E;	// ObjID3
	openpilot_write_buf[n++] = 0x2F;	// ObjID4
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = 0x00;	// Data...
	openpilot_write_buf[n++] = status;	// Data...
	len = n;
	crc = 0;
	for (n2 = 0; n2 < len; n2++) {
		crc = PIOS_CRC_updateByte(crc, openpilot_write_buf[n2]);
//		printf("%i: %x (%x)\n", n2, openpilot_write_buf[n2], crc);
	}
	openpilot_write_buf[n++] = crc; 	//Checksum
	write(serial_fd_openpilot, openpilot_write_buf, n);
}


......


								case FLIGHTTELEMETRYSTATS_OBJID: {
									FlightTelemetryStatsData *data = (FlightTelemetryStatsData *)openpilot_read_buf + 8;
									printf("FlightTelemetryStats: %i\n", data->TeleStatus);
									if (data->TeleStatus == 0) {
										printf("FlightTelemetryStats: DISCONNECTED\n");
										openpilot_send_req(2);
									} else if (data->TeleStatus == 2) {
										printf("FlightTelemetryStats: HANDSHAKEACK\n");
										openpilot_send_req(3);
									} else if (data->TeleStatus == 3) {
										printf("FlightTelemetryStats: CONNECTED\n");
										printf("	: %f\n", data->TxDataRate);
										printf("	: %f\n", data->RxDataRate);
										printf("	: %i\n", data->TxFailures);
										printf("	: %i\n", data->RxFailures);
										printf("	: %i\n", data->TxRetries);
									}
									break;
								}

Übernehme ich die Session von OpenPilot-GCS und sende nur der ACK's funktioniert alles:
Code:
Attitude: 6.085916 6.470215 24.368166
Accel: 0.986606 -1.042663 -8.453418
Attitude: 6.160627 6.619193 24.363791
Attitude: 6.247880 6.646719 24.431807
Attitude: 6.368341 6.568958 24.437401
Attitude: 6.095872 6.520719 24.373125
Attitude: 5.438537 6.346122 24.336929
Attitude: 7.442843 7.591424 24.021370
Attitude: 16.231316 11.216882 19.618580
Attitude: 22.627356 12.388453 17.144302
Attitude: 10.431019 6.706689 23.349257
Attitude: -8.636912 3.597250 29.088139
Accel: 0.919337 3.262526 -7.870423
Attitude: -19.759598 2.906089 30.736855
Attitude: -21.654247 0.363939 30.097118
Attitude: -12.231833 0.048870 26.111525
Attitude: -1.927774 5.863261 23.667582
Attitude: 6.716156 12.055905 21.470003
Attitude: 5.465816 9.904177 22.952559
Attitude: 5.909856 7.145565 23.651482
Attitude: 6.020659 7.178451 23.392078
Attitude: 5.959985 7.159766 23.385117
Attitude: 5.989735 7.140668 23.387579
Accel: 1.111800 -0.994080 -8.475841
Attitude: 6.071846 7.150139 23.423817
Attitude: 6.048782 7.116595 23.427164
Attitude: 6.113193 7.084325 23.426167
Attitude: 6.098910 7.067821 23.420710
Starte ich die Session bricht sich ständig wieder ab:
Code:
FlightTelemetryStats: 0
FlightTelemetryStats: DISCONNECTED
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
FlightTelemetryStats: 2
FlightTelemetryStats: HANDSHAKEACK
Attitude: 7.579242 7.029674 4.664997
FlightTelemetryStats: 23
FlightTelemetryStats: 23
Attitude: 7.598693 7.038303 4.677176
Attitude: 7.606776 7.036699 4.686590
Attitude: 7.590822 7.015128 4.696152
Attitude: 7.599738 7.014885 4.696729
Attitude: 7.585282 7.025733 4.694877
Attitude: 7.566284 7.018312 4.698971
Attitude: 7.565572 7.009748 4.705951
Attitude: 7.589111 7.009930 4.705438
Accel: 1.087509 -1.311737 -8.531898
Attitude: 7.578799 7.013556 4.716587
Attitude: 7.513778 6.985674 4.725174
Attitude: 7.496946 6.975885 4.753725
Attitude: 7.484132 6.936331 4.781753
Attitude: 7.475684 6.929911 4.791582
Attitude: 7.466585 7.004592 4.681195
Attitude: 7.428580 7.155978 4.639576
Attitude: 7.541241 7.171659 4.748043
Attitude: 7.483326 6.982754 4.767429
Attitude: 7.447761 6.971668 4.718562
Accel: 1.098720 -1.098720 -8.488920
Attitude: 7.434541 6.980201 4.705685
Attitude: 7.465149 6.964061 4.743229
Attitude: 7.411962 6.980683 4.723813
Attitude: 7.450438 6.968836 4.745306
Attitude: 7.455114 6.951252 4.764014
Attitude: 7.453939 6.960845 4.760322
Attitude: 7.453440 6.980498 4.769527
Attitude: 7.481558 6.980822 4.790467
Attitude: 7.463436 6.978404 4.795929
Accel: 1.020240 -1.190280 -8.554320
Attitude: 7.476838 6.992564 4.808280
Attitude: 7.448873 6.989004 4.818584
Attitude: 7.472795 7.000051 4.830708
Attitude: 7.461331 6.997785 4.839144
FlightTelemetryStats: 0
FlightTelemetryStats: DISCONNECTED
FlightTelemetryStats: 0
FlightTelemetryStats: DISCONNECTED
FlightTelemetryStats: 0

???

Was sendest du dem Board für ein Paket nach dem das Board ein HANDSHAKEACK (2) gesendet hat ?

Danke,
Olli
 

JR63

Erfahrener Benutzer
#5
Hi,

nach dem HANDSHAKEACK von Flight sende ich CONNECTED.

Wichtig ist, dass ich das dann alle 750ms wiederhole, sonst nimmt Flight an, dass die Verbindung unterbrochen wurde und geht auch auf DISCONNECT.

Wiederholst Du auch alle ca. 750ms?

Wie lange hält denn die Verbindung in ms ca.?

Tschö
JR
 

JR63

Erfahrener Benutzer
#6
Hi,

habe mir eben nochmal Deine Code Teile angesehen.

Da finde ich keine Resend des Status 3.

Bau das mal ein, das Du so ca. alle 500ms - 750ms den Status 3 wiederholst

Tschö
JR
 

meister

Erfahrener Benutzer
#7
Ok, danke werde ich machen, was mich halt wundert, das wenn die Verbindung erstmal stabil ist (vom OpenPilot-GCS) kann ich sie stunden lang nur mit Ack's aufrecht erhalten ohne Probleme.
Nur wenn ich es mach halt nicht, aber ich versuche es mal mit den mehrfachen Status 3 senden.

Danke,
Olli
 

JR63

Erfahrener Benutzer
#8
Ja, probier es mal aus.

Es könnte auch sein, dass flight Dein einzigen Status 3 irgendwie verpennt und es auch schon reichen würde, die 3 nur ein paarmal zu senden.

Das wäre dann eine Erklärung für das in Deinem Aufbau beobachtete Problem.

Tschö
JR
 

meister

Erfahrener Benutzer
#9
Hab mein fehler gefunden :eek:

Code:
 printf("FlightTelemetryStats: DISCONNECTED\n");
 openpilot_send_req(2);
muss ihm aber ne 1 senden:

Code:
 printf("FlightTelemetryStats: DISCONNECTED\n");
 openpilot_send_req(1);
*grrr, ich idiot :)
Jetzt hab ich zwar noch ein anderes Problem, aber da schau ich erstmal selber nach.

Danke,
Olli
 

JR63

Erfahrener Benutzer
#10
Hi,

schön, dass es nun bei Dir klappt :)

Typischer Fall von 'zweiter Schritt vor dem ersten' ;-) kommt vor.

Tschö
JR
 

meister

Erfahrener Benutzer
#11
Jepp, wer Zählen kann ist klar im Vorteil :eek:

Jetzt Funktioniert alles bestens, fehlt nur noch das ändern von Pid-Werten, mal schauen ob ich das auch noch einbaue.

Aber gefallen tut mir das UAVTalk-Protokoll nicht, die hätten sich ruhig an Mavlink hängen können !

Gruß und nochmal Danke,
Olli
 

iee168

Erfahrener Benutzer
#12
Wow, sehr cool! Werde das gleich mal abonnieren in der Hoffnung, dass du dich nicht vom OP OSD entmutigen lässt! Die GPS-Unterstützung sieht auch super aus! ( auch wenn ich noch gar kein GPS für mein CC3D-Board habe) :) Ich glaub ich muss mir auch gleich ein MinimOSD holen! :)
 

JR63

Erfahrener Benutzer
#13
Wow, sehr cool! Werde das gleich mal abonnieren in der Hoffnung, dass du dich nicht vom OP OSD entmutigen lässt! Die GPS-Unterstützung sieht auch super aus! ( auch wenn ich noch gar kein GPS für mein CC3D-Board habe) :) Ich glaub ich muss mir auch gleich ein MinimOSD holen! :)
nee, entmutigen lasse ich mich vom OP OSD nicht, bis das kommt, vergeht ja leider noch ein bisschen. Das ist ja auch der Grund, warum ich das überhaupt mit MinimOSD angefangen habe, ich will ja im nächsten Frühling etwas haben und nicht erst im Herbst nächsten Jahres.

Eigentlich hätte ich ja viel lieber das OP OSD, ist aber noch nichteinmal als Prototyp zu bekommen.

Die Graphik vom OP OSD wird sicherlich viel besser sein als beim MinimOSD, aber bis dahin...

Aktuell gibt es aber noch Probleme weil bei 10Hz die CC3D CPU overload und event warnings sendet.

Ich experimentiere aktuell mit 5Hz GPS, das scheint den STM32 des CC3D nicht zu überlasten.

Am besten also mit der Bestellung des MinimOSD noch etwas warten, bis ich das ausgiebig getestet habe.

Siehe auch hier:

http://forums.openpilot.org/topic/1...minimosd-via-uavtalk/page__st__20#entry160992

Tschö
JR
 

iee168

Erfahrener Benutzer
#14
Okay! Hast du das Original OP-GPS Modul oder eines aus einer anderen Quelle? Bei meiner Revo-KS hab ich mir das GPS dazu bestellt, aber für's CC3D gibt es das ja nicht im Store (out of Stock).

Bzgl. der CC3D-CPU: Das ist mir auch schon aufgefallen. Die Rechenleistung wird im Flug schon ganz gut benötigt. Ich hab bei meinen sehr ruhigen Flügen im Quadrokopter 66-70% Last. Da ist nicht mehr viel Platz nach oben...
 

JR63

Erfahrener Benutzer
#15
Okay! Hast du das Original OP-GPS Modul oder eines aus einer anderen Quelle? Bei meiner Revo-KS hab ich mir das GPS dazu bestellt, aber für's CC3D gibt es das ja nicht im Store (out of Stock).

Bzgl. der CC3D-CPU: Das ist mir auch schon aufgefallen. Die Rechenleistung wird im Flug schon ganz gut benötigt. Ich hab bei meinen sehr ruhigen Flügen im Quadrokopter 66-70% Last. Da ist nicht mehr viel Platz nach oben...
Ich nutze aktuell ein Locosys LS20033, welches z.B. auch beim AAT Antennen Tracker dabei ist.
Es sollte aber auch jedes andere gehen, wenn es NMEA 'spricht' und auf 5Hz und 38400 konfigurierbar ist.

Ja, wenn das CC3D regeln muss, ist es kurz vor Anschlag. Eigentlich verwunderlich, aber möglicherweise frisst das freeRTOS zu viele Resourcen oder deren interne UAVTalk/UAVObject Kommunikation, keine Ahnung.

Tschö
JR
 

iee168

Erfahrener Benutzer
#16
So, die Hardware ist da. Ich werde (ausser es stört jemanden) hier, und vielleicht im OP Forum, ein HowTo machen. Vielleicht kannst du, jr, mich ein wenig dabei unterstützen?

Das MinimOSD programmiert man mit einem ftdi-Adapter, oder?
 
#18
Hallo zusammen

ich versuche auch gerade an einem CC3D das Minimum OSD zum laufen zu bringen.
so weit geht es aber wenn ich das CC3D kippe hab ich keine schrägen streifen sondern irgendwelche buchstaben.
überall heist es man braucht die Datei " minOPOSD_15_02_files" da aber "http://wiki.openpilot.org/" nicht mehr Online ist
bekommt man die nirgens. weis einer weiter?

Gruß Rolf-K.
 
Zuletzt bearbeitet:
FPV1

Banggood

Oben Unten