优化通讯数据,为了更多的飞机

This commit is contained in:
pxzleo 2017-08-18 12:16:05 +08:00
parent 6a18c8ac4e
commit b09020f8ff
3 changed files with 62 additions and 32 deletions

View File

@ -53,8 +53,16 @@ namespace Plane.Communication
public void Open()
{
_port.Open();
_internalIsOpen = true;
try
{
_port.Open();
_internalIsOpen = true;
}
catch (Exception ex)
{
RaiseExceptionThrown(ex);
}
}

View File

@ -22,7 +22,7 @@ namespace Plane.Copters
{
switch (StreamType)
{
case MAVLINK_MSG_ID_GPS_RAW_INT:
case MAVLINK_MSG_ID_GPS_RAW_INT: //需要
{
Latitude = _internalCopter.lat;
Longitude = _internalCopter.lng;
@ -41,7 +41,7 @@ namespace Plane.Copters
break;
}
case MAVLINK_MSG_ID_ATTITUDE:
case MAVLINK_MSG_ID_ATTITUDE: //无用
{
Roll = _internalCopter.roll;
Pitch = _internalCopter.pitch;
@ -51,7 +51,7 @@ namespace Plane.Copters
break;
}
case MAVLINK_MSG_ID_RC_CHANNELS_RAW:
case MAVLINK_MSG_ID_RC_CHANNELS_RAW: //只用于显示,可以不要
{
Channel1 = _internalCopter.ch1in;
Channel2 = _internalCopter.ch2in;
@ -68,10 +68,10 @@ namespace Plane.Copters
}
case MAVLINK_MSG_ID_VFR_HUD:
{
Heading = _internalCopter.heading;
Altitude = _internalCopter.alt;
AirSpeed = _internalCopter.airspeed;
GroundSpeed = _internalCopter.groundspeed;
Heading = _internalCopter.heading; //有用
Altitude = _internalCopter.alt; //有用
AirSpeed = _internalCopter.airspeed; //没用
GroundSpeed = _internalCopter.groundspeed; //没用
RaiseAltitudeChangedIfNeeded();
@ -84,7 +84,7 @@ namespace Plane.Copters
{
IsUnlocked = _internalCopter.armed;
Mode = (FlightMode)_internalCopter.mode;
// 林俊清, 20160311, 亿航将闲置的 apname 用作已经切过 GPS 模式的标志。
// 林俊清, 20160311, 将闲置的 apname 用作已经切过 GPS 模式的标志。
HasSwitchedToGpsMode = (byte)_internalCopter.apname != 0;
++HeartbeatCount;

View File

@ -130,12 +130,21 @@ namespace Plane.Copters
public async Task GetCopterDataAsync()
{
await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.EXTENDED_STATUS, 10).ConfigureAwait(false); //1电池电压、电流、电量,152-内存、62-导航控制输出、24-GPS数据、42-航点数据
await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.EXTRA1, 5).ConfigureAwait(false); // 请求 飞行姿态 roll、pitch、yaw、rollspeed、pitchspeed、yawspeed--- 30
await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.EXTRA2, 10).ConfigureAwait(false); // 请求vfr airspeed(空速)、groundspeed(地速)、alt(高度)、climb(爬升率)、heading(头朝向)、throttle(实际油门) ---74
await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.RC_CHANNELS, 1).ConfigureAwait(false); // 请求 通道数据
await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.RAW_SENSORS, ratesensors).ConfigureAwait(false); // 请求 传感器原始值
//停止所有数据流
await StopGetDatastreamAsync(MAVLink.MAV_DATA_STREAM.ALL, 0).ConfigureAwait(false);
//需要电池电压电流GPS数据
await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.EXTENDED_STATUS, 5).ConfigureAwait(false); //10 1电池电压、电流、电量,152-内存、62-导航控制输出、24-GPS数据、42-航点数据
//不需要姿态信息
// await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.EXTRA1, 1).ConfigureAwait(false); //5 请求 飞行姿态 roll、pitch、yaw、rollspeed、pitchspeed、yawspeed--- 30
//需要高度和机头朝向数据
await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.EXTRA2, 5).ConfigureAwait(false); //10 请求vfr airspeed(空速)、groundspeed(地速)、alt(高度)、climb(爬升率)、heading(头朝向)、throttle(实际油门) ---74
//不需要通道数据
//await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.RC_CHANNELS, 1).ConfigureAwait(false); //1 请求 通道数据
//不需要原始数据
// await RequestDatastreamAsync(MAVLink.MAV_DATA_STREAM.RAW_SENSORS, ratesensors).ConfigureAwait(false); // 请求 传感器原始值
/* //已经停止所有数据了,不用单独停止
// Disable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT, NAV_CONTROLLER_OUTPUT. |
await StopGetDatastreamAsync(MAVLink.MAV_DATA_STREAM.RAW_CONTROLLER, 0).ConfigureAwait(false);
// Disable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages. |
@ -144,6 +153,12 @@ namespace Plane.Copters
await StopGetDatastreamAsync(MAVLink.MAV_DATA_STREAM.EXTRA3, 0).ConfigureAwait(false);
// Disable Plane Stream
await StopGetDatastreamAsync(MAVLink.MAV_DATA_STREAM.GHOST_STREAM, 0).ConfigureAwait(false);
// Disable RAW_SENSORS
await StopGetDatastreamAsync(MAVLink.MAV_DATA_STREAM.RAW_SENSORS, 0).ConfigureAwait(false); //
// 5 Disable MSG_ATTITUDE roll、pitch、yaw、rollspeed、pitchspeed、yawspeed-- - 30
await StopGetDatastreamAsync(MAVLink.MAV_DATA_STREAM.EXTRA1, 0).ConfigureAwait(false); //
*/
}
private async void StartCommunication()
@ -178,7 +193,7 @@ namespace Plane.Copters
break;
}
// if (heatbeatSend.Second != DateTime.Now.Second)
if (heatbeatSend.AddMilliseconds(200) <= DateTime.Now)
if (heatbeatSend.AddMilliseconds(1000) <= DateTime.Now)
{
var htb = new MAVLink.mavlink_heartbeat_t()
{
@ -232,29 +247,40 @@ namespace Plane.Copters
{
PacketReceived?.Invoke(this, new PacketReceivedEventArgs(packet));
var handled = true;
Debug.WriteLine(packet[5],"收到数据类型");
switch (packet[5])
{
case MAVLink.MAVLINK_MSG_ID_HEARTBEAT: //0
AnalyzeHeartbeatPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_RADIO:
case MAVLink.MAVLINK_MSG_ID_SYS_STATUS: //1
AnalyzeSysStatusPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_GPS_RAW_INT: //24
AnalyzeGpsRawIntPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_VFR_HUD: //74
AnalyzeVfrHudPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_STATUSTEXT: //253
AnalyzeStatusTextPacket(packet);
break;
////以上为基本数据,
case MAVLink.MAVLINK_MSG_ID_RADIO: //109
AnalyzeRadioPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_PARAM_VALUE: //22
AnalyzeParamValuePacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_SYS_STATUS: //1
AnalyzeSysStatusPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_MEMINFO: //152
AnalyzeMemInfoPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_MISSION_CURRENT: //42
AnalyzeMissionCurrentPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_GPS_RAW_INT: //24
AnalyzeGpsRawIntPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_GLOBAL_POSITION_INT: //33
AnalyzeGlobalPositionIntPacket(packet);
break;
@ -264,24 +290,20 @@ namespace Plane.Copters
case MAVLink.MAVLINK_MSG_ID_ATTITUDE: //30
AnalyzeAttitudePacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_VFR_HUD: //74
AnalyzeVfrHudPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_RC_CHANNELS_RAW: //35
AnalyzeRCChannelsRawPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_RAW_IMU:
case MAVLink.MAVLINK_MSG_ID_RAW_IMU: //没有用27
AnalyzeRawImuPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_SCALED_IMU2:
case MAVLink.MAVLINK_MSG_ID_SCALED_IMU2: //没有用 116
AnalyzeScaledImu2Packet(packet);
break;
case MAVLink.MAVLINK_MSG_ID_SENSOR_OFFSETS:
case MAVLink.MAVLINK_MSG_ID_SENSOR_OFFSETS: //150
AnalyzeSensorOffsetsPacket(packet);
break;
case MAVLink.MAVLINK_MSG_ID_STATUSTEXT:
AnalyzeStatusTextPacket(packet);
break;
default:
handled = false;
UnhandledPacketReceived?.Invoke(this, new PacketReceivedEventArgs(packet));