I'm trying to interpret the mavlink protocol implemented in the APM Mission Planner into the hyper terminal to grab the longitude and latitude. The coordinates i've gotten from the Mission planner is : 32.77735, -117.070595. I'm communicating between two xbees with one attached to the APM2.5. This is what I got using at hyperterminal:
FE 1E 9A 01 01 18 4085950E00000000 16 6D8913C4 7238BA16 F20100B7 00FF FF01 0000 0003 09 14 63
FE 1E 26 01 01 18 907B4F0E00000000 23 6D8913D8 7238BAE2 F30100DF 00FF FF02 0000 0003 08 D3 A9
after the message id shown as '18' in hex, (24 in decimal) the message in packed. seeing the two packets received, i'm having a hard time interpreting the gps_raw_int. Can anyone help me with the interpretation of these packets? I'm using u-blox lea-6
Replies
Have same Problem, did not understand how it works :-(
FE 1E CF 01 01 18 40 A4 6F 10 00 00 00 00 B8
FA 4C 1C 9D lat // Latitude (WGS84), in degrees * 1E7 [4'199'292'061 / 10000000= 419]
E9 14 05 8E lon // Longitude (WGS84), in degrees * 1E7 [3'910'403'470 / 10000000 = 391}
0B 07 00 6F 03 FF FF 06 00 19 00 03 05 D9 5E
But Mission Planner shows other Data
Could you explain me?
Thanks
this is the mavlink parsing i've taken from the APM mission planner source:
public const byte MAVLINK_MSG_ID_GPS_RAW_INT = 24;
[StructLayout(LayoutKind.Sequential, Pack = 1, Size = 30)]
public struct mavlink_gps_raw_int_t
{
/// <summary> Timestamp (microseconds since UNIX epoch or microseconds since system boot) </summary>
public UInt64 time_usec;
/// <summary> Latitude in 1E7 degrees </summary>
public Int32 lat;
/// <summary> Longitude in 1E7 degrees </summary>
public Int32 lon;
/// <summary> Altitude in 1E3 meters (millimeters) above MSL </summary>
public Int32 alt;
/// <summary> GPS HDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 </summary>
public UInt16 eph;
/// <summary> GPS VDOP horizontal dilution of position in cm (m*100). If unknown, set to: 65535 </summary>
public UInt16 epv;
/// <summary> GPS ground speed (m/s * 100). If unknown, set to: 65535 </summary>
public UInt16 vel;
/// <summary> Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: 65535 </summary>
public UInt16 cog;
/// <summary> 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. </summary>
public byte fix_type;
/// <summary> Number of satellites visible. If unknown, set to 255 </summary>
public byte satellites_visible;
};
as u can see, i'm only interested in the public Int32 lat & public Int32 lon.
Hello! Thank you. But I have a question.
Your coords in mavlink packet are 6D8913C4 7238BA16
6D8913C4 = 1837700036, 1837700036 / 10000000 = 183
7238BA16 = 1916320278, 1916320278 / 10000000 = 191
How to get 32.77735,-117.070595 from 6D8913C4,7238BA16?
Thank you!
PS
My Message is FE 1E970101 18 0000000000000000 EA AF99231F C7211260 C3FFFF1F 06FFFF2700000001 04 5374
and my coords are 59.726968, 30.418956
Oh!!!
this should be read front to back=))