本帖最后由 liangdyc 于 2013-9-7 19:04 编辑
本人通过串口与APM通信,利用自己写的命令FE 06 01 FF 00 42 02 00 01 00 0A 01 A5 07。要求APM返回姿态数据。APM返回成功。
接收到的数据为:
FE 1C 26 01 01 1E 87 D3 05 00 50 8F 68 BB 64 5A F1 BD B0 93 86 3F B8 30 44 BA D0 DE 8E BA 40 EB 25 3A E5 D5
FE 1C 27 01 01 1E 8E D5 05 00 6A 44 73 BB 47 EF F0 BD 66 91 86 3F C0 CD 62 B9 60 40 12 BA 80 6F D3 38 29 A7
通过观察发现,接收到的的确是我要求其返回的。即姿态数据。根据地面站源代码 public const byte MAVLINK_MSG_ID_ATTITUDE = 30; [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 28)] public struct mavlink_attitude_t { /// <summary> Timestamp (milliseconds since system boot) </summary> public UInt32 time_boot_ms; /// <summary> Roll angle (rad, -pi..+pi) </summary> public Single roll; /// <summary> Pitch angle (rad, -pi..+pi) </summary> public Single pitch; /// <summary> Yaw angle (rad, -pi..+pi) </summary> public Single yaw; /// <summary> Roll angular speed (rad/s) </summary> public Single rollspeed; /// <summary> Pitch angular speed (rad/s) </summary> public Single pitchspeed; /// <summary> Yaw angular speed (rad/s) </summary> public Single yawspeed;
};
我可以知道哪几位是哪些数据。查了一下MAVLINK协议文档。是利用的IEE745表示浮点数。所以想转换到浮点数来看,可是发现转换后的数据不对。
例如roll为: 6A 44 73 BB。转换后为:59373995582784778000000000.000000
所以我想这里肯定是出现了什么问题。难道又是mavlink或地面站说是用IEE745其实又是使用了自己的一套格式?
|