Gibt es ein kleines Board welches aus dem Mavlink-Protokol --> Jeti machen kann?

Status
Nicht offen für weitere Antworten.

Terminus

Erfahrener Benutzer
#1
Nabend die Herren aber auch die wenigen Damen ;),

Steht an sich alles im Betreff. Gibt es ein kleines µC-Board welches am Mavlink lauscht und über einen 2,4Ghz Jeti Duplex Sender mit meiner Funke über das Jeti-Protokol kommuniziert?


Google wirft nicht so wirklich was raus :(

Gruß Termi
 

Terminus

Erfahrener Benutzer
#4
es gibt wohl Umsetzungen abewr nichts was man kaufen kann...

Muss man wohl leber angehen... Wenn ich was habe poste ich es hier

Gruß
Termi
 

Terminus

Erfahrener Benutzer
#5
So bin jetzt an an diesem Thema...

Mal sehen wie weit ich mit meinem kleinen Atmega88 komme ;-)

Hab mir mal eine Liste gemacht welche Daten bei mir von Interesse sind.
-aktueller Strom
-aktuelle Spannung
-Restakkukapazität
-SatAnzahl
-Flug-Modus
-GPS Posi (lon / lat )
-Höhe (rel, abs)
-Distanz to Home
-Geschwindigkeit
-Ausrichtung (Kompass)

Wenn ich etwas wichtiges/nützliches vergessen hab bitte posten, ich will def. nicht über die Funke Parameter verändern. Es dient als reine Anzeige.

Gruß
Termi
 

flydus

Erfahrener Benutzer
#6
Hallo Termi,

das hört sich alles gut an.

Mir würde noch ein Punkt einfallen:

GPS Status (3D Fix)

Bin gespannt auf das Projekt.

Gruß Volker
 

Terminus

Erfahrener Benutzer
#7
Hab alles gefunden bis auf Distance to Mav/home... scheint es nicht zu geben die Nachricht...

//variable aus dem APM die interessieren
//Strom ( #1 )
int16_t current_battery; //Battery current, in 10*milliamperes (1 = 10 milliampere), -1: autopilot does not measure the current

//Spannung ( #1 )
uint16_t voltage_battery; //Battery voltage, in millivolts (1 = 1 millivolt)

//Restakkukapazität ( #1 )
int8_t battery_remaining; //Remaining battery energy: (0%: 0, 100%: 100), -1: autopilot estimate the remaining battery

//SatAnzahl ( #24 )
uint8_t satellites_visible; //Number of satellites visible. If unknown, set to 255
uint8_t fix_type; //0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix.


//Flug-Modi
uint8_t base_mode; // System mode bitfield, see MAV_MODE_FLAGS ENUM in mavlink/include/mavlink_types.h
/* aus ...ArduCopter/defines.h
// Auto Pilot modes
// ----------------
#define STABILIZE 0 // hold level position
#define ACRO 1 // rate control
#define ALT_HOLD 2 // AUTO control
#define AUTO 3 // AUTO control
#define GUIDED 4 // AUTO control
#define LOITER 5 // Hold a single location
#define RTL 6 // AUTO control
#define CIRCLE 7 // AUTO control
#define POSITION 8 // AUTO control
#define LAND 9 // AUTO control
#define OF_LOITER 10 // Hold a single location using optical flow sensor
#define TOY_A 11 // THOR Enum for Toy mode
#define TOY_M 12 // THOR Enum for Toy mode
#define SPORT 13 // earth frame rate control
#define NEWFLIGHTMODE 14 // new flight mode description
#define NUM_MODES 15
*/

//GPS Posi (lon/lat) ( #33 )
int32_t lat; //Latitude, expressed as * 1E7
int32_t lon; //Longitude, expressed as * 1E7

//Höhe (rel, abs) ( #33 )
int32_t alt ; //Altitude in meters, expressed as * 1000 (millimeters), above MSL
int32_t relative_alt; //Altitude above ground in meters, expressed as * 1000 (millimeters)

//Distanz to Home
???

//Geschwindigkeit ( #24 )
uint16_t vel; //GPS ground speed (m/s * 100). If unknown, set to: UINT16_MAX

//Ausrichtung (Kompass)
uint16_t hdg; //Compass heading in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX


oder findet die einer von euch hier:
https://pixhawk.ethz.ch/mavlink/

G Termi
 

cemizm

Erfahrener Benutzer
#8
Hi Termi,

hab mal gerade im minimOSD Source nachgeschaut... Die Home Position bzw. distance und direction wird dort nicht vom mavlink geliefert sonder berechnet. Dazu wird der erste gültige Fix als HomePosition gewertet.

Code:
void setHomeVars(OSD &osd)
{
  float dstlon, dstlat;
  long bearing;
  
  if(osd_got_home == 0 && osd_fix_type > 1){
    osd_home_lat = osd_lat;
    osd_home_lon = osd_lon;
    //osd_home_alt = osd_alt;
    osd_got_home = 1;
  }
  else if(osd_got_home == 1){
    // JRChange: osd_home_alt: check for stable osd_alt (must be stable for 25*120ms = 3s)
    if(osd_alt_cnt < 25){
      if(fabs(osd_alt_prev - osd_alt) > 0.5){
        osd_alt_cnt = 0;
        osd_alt_prev = osd_alt;
      }
      else
      {
        if(++osd_alt_cnt >= 25){
          osd_home_alt = osd_alt;  // take this stable osd_alt as osd_home_alt
        }
      }
    }
    // shrinking factor for longitude going to poles direction
    float rads = fabs(osd_home_lat) * 0.0174532925;
    double scaleLongDown = cos(rads);
    double scaleLongUp   = 1.0f/cos(rads);

    //DST to Home
    dstlat = fabs(osd_home_lat - osd_lat) * 111319.5;
    dstlon = fabs(osd_home_lon - osd_lon) * 111319.5 * scaleLongDown;
    osd_home_distance = sqrt(sq(dstlat) + sq(dstlon));

    //DIR to Home
    dstlon = (osd_home_lon - osd_lon); //OffSet_X
    dstlat = (osd_home_lat - osd_lat) * scaleLongUp; //OffSet Y
    bearing = 90 + (atan2(dstlat, -dstlon) * 57.295775); //absolut home direction
    if(bearing < 0) bearing += 360;//normalization
    bearing = bearing - 180;//absolut return direction
    if(bearing < 0) bearing += 360;//normalization
    bearing = bearing - osd_heading;//relative home direction
    if(bearing < 0) bearing += 360; //normalization
    osd_home_direction = round((float)(bearing/360.0f) * 16.0f) + 1;//array of arrows =)
    if(osd_home_direction > 16) osd_home_direction = 0;

  }

}
Kennst du schon https://github.com/mavlink/mavlink ? Dort gibts auch die Header die du einbinden kannst um nicht das ganze Mavlink Protokoll selbst zu implementieren...


Gruß,
Cem
 
Zuletzt bearbeitet:

Terminus

Erfahrener Benutzer
#9
Danke für die Info, hatte mir schon gedacht das man es berechnen muss.

Der Mavlink-overhead ist mal extrem groß und sehr umständlich "#defined" und für einen kleinen Mega nicht praktikabel.

Gruß
Termi
 
#10
Hallo Termi,

kennst Du diesen Thread schon:

http://www.rcgroups.com/forums/showthread.php?t=2112910#post27695058


Dort ist ein Entwickler am selben Thema dran. Er hat auch bei diydrones gepostet. Ich hatte Ihn bei rcgroups angeschrieben.
Vielleicht hilft es mit ihm Kontakt aufzunehmen, und sich in der Entwicklung zusammen zu tun.

Ich kann heut leider nichts beitragen, da ich keinen Arduino programmieren kann, habe auch großes Interesse an einer Lösung.
Gruß
Christian
 

Terminus

Erfahrener Benutzer
#11
Ne kannte ich noch nicht, werde ich weiter verfolgen. Danke für die Info.

Bin heut ein wenig weiter gekommen. Die Doku ist mal echt sch**** alle Projekte die darauf aufbauen binden die 100 h-files ein und keiner schlüsselt das mal auf -.-

Mein kleinen µC Board lauft bereits am UART des APM.

Das LCD ist nur zu Debug-Zwecken dran.
Strom und Spannung lese ich bereits ein, die Restkapazität wird nicht an der angegebenen Stelle übertragen. Mal sehen ob ich den Wert noch finde... übertragen wird der Wert ja.

Der System-Modus liegt nicht wie laut Doku auf Byte2 sondern auf Byte0 im Systemstatus-Frame...

Die alt-value (absolute Höhe) wird nicht übertragen, die relative Höhe liegt aber im µC korrekt vor.

Der Kompasswert 'uint16_t hdg;' wird momentan nicht übertragen das kann aber auch daran liegen weil kein GPS angeschlossen ist. Werde morgen mal GPS dranfrickeln ;-)

Gruß
Termi
 

Terminus

Erfahrener Benutzer
#12
Statusupdate:

Jeti über Softwareuart läuft jetzt :). Momenten nur senden vom Kopter aus, Rx mache ich wenn ich mal wieder Zeit finde...

Ich werde es nur als simple-text senden, d.h. die Daten werden 'nur' auf einem 2x16Zeichen Display angezeigt. man kann sich aber durch Menues navigieren und so dann alles sehen.

Ein weiteres Ziel ist dann noch ein Menuepunkt LEDs mit welchem ich oben am Kopter über Jeti meine Beleuchtung steuern kann.

Den Kompasswert habe ich mir jetzt über den YAW-Floatwert geholt, hdg wird nicht übertragen.

Gruß
Termi
 

matthiasw

Erfahrener Benutzer
#13
Tolles Projekt!!!
Du schreibst, dass Du die Daten auf das 2x16 Display ausgibtst. Also die "alte" Jetibox?
Ich benutze eine Eigenbau Jetibox mit einigen DIY-Sensoren, würde mich gern als Tester anbieten :)

Viele Grüße
Matthias
 

Terminus

Erfahrener Benutzer
#14
Wenn du den sourcecode haben willst melde dich per PM. Ich weiß nicht ob alle Quellen uneingeschränkt open source sind. :)
Am Ende sollte hier aber ein sourcefile stehen, was alle nutzen und beliebig auf ihre Anforderungen anpassen können.

Gruß
Termi
 

Terminus

Erfahrener Benutzer
#15
Statusupdate:
Jetzt geht auch der Software-Uart-Tx.
Menü Nummer1

1234567890123456
xx,xV yy,yA 1/9
ccc% ‚mode----‚


xx,x=Akkuspannung
yy,y Aktueller Strom
ccc=Akkukap in %
+Aktueller Mode

Menü Nummer 2 wird GPS / Fix / Sat-Nr.
Menü Nummer 3 wird Höhe/Ausrichtung/Distanz
Menü Nummer 4 LED Mode1
Menü Nummer 5 LED Mode2

Für alle die es nachbauen wollen, ihr braucht: einen Atmega88 (besser Atmega168), ein 18432000Hz Quarz + passende Kondensatoren (18p/100n), Led + Vorwiderstand für 5V ist immer gut und div. Stiftleisten für externe Anschlüsse. Ein ISP-rogrammer zum programmieren. Ich arbeite mit WinAVR-20100110.

Der Code folgt hier, wenn ich die Menüprogrammierung fertig hab. Will nur nicht 100Versionen online haben.

Greez Termi
 
#16
Hallo Termi,

schön zu hören, dass es weiter geht. Ich bin sehr gespannt, da seit kurzem auf Jeti.
Mir würde sogar das Empfangen von Telemetrie-Daten reichen.

Gruß
Christian
 

Terminus

Erfahrener Benutzer
#17
Moins,

welchen Daten den? Ich gebe jetzt alle Daten aus, welche ich schon benannt hatte. Bis auf DisToMav. Die muss ich noch berechnen... Es wird jetzt wohl auch ein Mega168 werden meine kleiner Mega88 ist schon zu 90% voll obwohl das Debug-LCD nicht mehr dran ist.

Ich werde morgen mal ein Video machen, damit es klar wird wie weit ich bin :)

Gruß
Termi
 
#18
Hallo Termi,

Klingt gut mit dem Video.
Mit Daten meine ich die Telemetrie Daten vom Copter an den Sender. Ich brauche keinen Rückweg zum Ändern von Werten im APM über den Sender

Gruß
Christian
 

Terminus

Erfahrener Benutzer
#19
Moins.

ein Video ist ein bisl zu aufwendig für die paar wirklich interessanten Bilder. Darum ein paar Fotos:
MenüStruktur, mit den Links/Rechts-Tasten kann man sich durch navigieren.




aktuelle Platine


Pinbelegung:
Code:
/*
        				   _______________________
     (PCINT14/RESET_) PC6  1 -|		   \_/		        |-28  PC5 (ADC5/SCL/PCINT13)
          (PCINT16/RXD) PD0  2 -|					|-27  PC4 (ADC4/SDA/PCINT12)
          (PCINT17/TXD) PD1  3 -|					|-26  PC3 (ADC3/PCINT11)
         (PCINT18/INT0) PD2  4 -|					|-25  PC2 (ADC2/PCINT10)
 (PCINT19/OC2B/INT1) PD3  5 -|					|-24  PC1 (ADC1/PCINT9)
      (PCINT20/XCK/T0) PD4  6 -|					|-23  PC0 (ADC0/PCINT8)
			       VCC  7 -|					|-22  GND
      			       GND  8 -|					|-21  AREF
 (PCINT6/XTA1/IOSC1) PB6  9 -|					|-20  AVCC
(PCINT7/XTA2/TOSC2) PB7  10-|					|-19  PB5 (SCK/PCINT5)
    (PCINT21/OC0B/T1) PD5  11-|					|-18  PB4 (MISO/PCINT4)
 (PCINT22/OC0A/AIN0) PD6  12-|					|-17  PB3 (MOSI/OC2A/PCINT3)
	 (PCINT23/AIN1) PD7  13-|					|-16  PB2 (SS_/OC1B/PCINT2)
   (PCINT0/CLKO/ICP1) PB0  14-|_______________________|-15  PB1 (OC1A/PCINT1)
		  

 
//----------------------------------------------------------------------------
Pinbelegung
 1)	ISP /Reset
 2)	RxD Mavlink
 4)	(Tx_Reserve)
 3)	
 4)	Jeti TxRx
 5)	Display_R/W
 6)	 
 7)	+5V
 8)	GND
 9)	
10)	Quarz
11)	Quarz
12)	Externe LED Steuerung1
13)	Externe LED Steuerung2
14)	Externe LED Steuerung3
15)	
16)	
17)	ISP MOSI
18)	ISP MISO
19)	ISP SCK / LED
20)	
21)	
22)	GND
23)	Display_D4
24)	Display_D5
25)	Display_D6
26)	Display_D7
27)	Display_RS
28)	Display_EN
*/
Gruß
Termi
 
Status
Nicht offen für weitere Antworten.
FPV1

Banggood

Oben Unten