无人机状态信息UDP转发源码
本工程师通过本机固定端口接收无人机发送来的状态数据,并按照其自己需求将无人机数据进行在封装,并将其发送出去!
相关函数:本工程包括1)无人机状态参数接收,再装发;2)参数的高低位转换;3)结构体的序列化和反序列化
1、数据结构体
无人机数据格式UAV_DATA:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public struct UAV_DATA
{
public uint time_boot_ms; ///< 时间戳,表示系统启动开始的秒数
public Int32 lat; ///< 飞机纬度 /(double)1E7;
public Int32 lon; ///< 飞机经度 /(double)1E7;
public Int32 alt; ///< 飞机海拔高度 /1000.0
public Int32 homelat; ///< home点纬度 /(double)1E7;
public Int32 homelon; ///< home点经度 /(double)1E7;
public Int32 homealt; ///< home点海拔高度 /1000.0
public Int16 vx; ///< 飞机水平速度 /100.0
public Int16 vz; ///< 飞机垂直速度 /100.0
public Int16 distance; ///< 目标物距离/100.0
public ushort vol; ///< 电池电压 /1000.0f
///
}
转发封包数据结构UAV_State_parameters
[StructLayout(LayoutKind.Sequential,CharSet = CharSet.Ansi,Pack = 1)]
public struct UAV_State_parameters
{
//网络报文头
public ushort u_Len;
//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public Int32 u_Sour;
//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public int u_Dest;
public byte u_Chnl;
public byte u_StaN_Tx;
public byte u_StaN_Rx;
public ushort u_Pck;
//通用报文头
public ushort u_MsgID;
public Int32 u_SourcePlatCode;
public Int32 u_SourceDeviceCode;
public Int32 u_ReceivePlatCode;
public Int32 u_ReceiveDeviceCode;
public ushort u_SerialNum; //流水号
public ushort u_CRC;
public byte u_RowNum;
public Int32 u_CreateTime;
public byte u_DataLength;
//数据
public Int32 u_CollectTime;
public ushort u_RowLength;
//数据包部分
public float u_HorizSpeed;
public float u