ajustes lever arm gnss
This commit is contained in:
parent
93c9aa248e
commit
521e0fc50d
|
|
@ -336,6 +336,8 @@ namespace AgroBase.Services
|
|||
PenultimaLeitura.TimestampPos = UltimaLeitura.TimestampPos.Clone();
|
||||
PenultimaLeitura.Latitude = UltimaLeitura.Latitude;
|
||||
PenultimaLeitura.Longitude = UltimaLeitura.Longitude;
|
||||
PenultimaLeitura.LatitudeAnt = UltimaLeitura.LatitudeAnt;
|
||||
PenultimaLeitura.LongitudeAnt = UltimaLeitura.LongitudeAnt;
|
||||
PenultimaLeitura.Altitude = UltimaLeitura.Altitude;
|
||||
PenultimaLeitura.PrecisaoHorizontal = UltimaLeitura.PrecisaoHorizontal;
|
||||
PenultimaLeitura.DataHora = UltimaLeitura.DataHora;
|
||||
|
|
@ -343,13 +345,22 @@ namespace AgroBase.Services
|
|||
|
||||
UltimaLeitura.TimestampPos.valor = Stopwatch.GetTimestamp() / (double)Stopwatch.Frequency;
|
||||
UltimaLeitura.Momento = DateTime.Now;
|
||||
|
||||
double? lat = null;
|
||||
double? lon = null;
|
||||
if (parts[2] != "" && parts[3] != "")
|
||||
{
|
||||
UltimaLeitura.Latitude = GPSUtils.ConvertToDecimalDegrees(parts[2], parts[3], 2);
|
||||
lat = GPSUtils.ConvertToDecimalDegrees(parts[2], parts[3], 2);
|
||||
}
|
||||
if (parts[4] != "" && parts[5] != "")
|
||||
{
|
||||
UltimaLeitura.Longitude = GPSUtils.ConvertToDecimalDegrees(parts[4], parts[5], 3);
|
||||
lon = GPSUtils.ConvertToDecimalDegrees(parts[4], parts[5], 3);
|
||||
}
|
||||
if (lat != null && lon != null)
|
||||
{
|
||||
UltimaLeitura.LatitudeAnt = lat.Value;
|
||||
UltimaLeitura.LongitudeAnt = lon.Value;
|
||||
AplicarPosicaoCorrigida();
|
||||
}
|
||||
UltimaLeitura.NumeroSatelites = int.TryParse(parts[7], out int numSat) ? numSat : 0;
|
||||
UltimaLeitura.PrecisaoHorizontal = double.TryParse(parts[8], NumberStyles.Float, CultureInfo.InvariantCulture, out double hdop) ? hdop : 0;
|
||||
|
|
@ -422,10 +433,10 @@ namespace AgroBase.Services
|
|||
|
||||
PenultimaLeitura.TimestampPos = UltimaLeitura.TimestampPos.Clone();
|
||||
PenultimaLeitura.Momento = UltimaLeitura.Momento;
|
||||
PenultimaLeitura.LatitudeAnt = UltimaLeitura.LatitudeAnt;
|
||||
PenultimaLeitura.Latitude = UltimaLeitura.Latitude;
|
||||
PenultimaLeitura.LongitudeAnt = UltimaLeitura.LongitudeAnt;
|
||||
PenultimaLeitura.Longitude = UltimaLeitura.Longitude;
|
||||
PenultimaLeitura.LatitudeAnt = UltimaLeitura.LatitudeAnt;
|
||||
PenultimaLeitura.LongitudeAnt = UltimaLeitura.LongitudeAnt;
|
||||
PenultimaLeitura.Altitude = UltimaLeitura.Altitude;
|
||||
PenultimaLeitura.AltitudeElipsoidal = UltimaLeitura.AltitudeElipsoidal;
|
||||
PenultimaLeitura.PrecisaoHorizontal = UltimaLeitura.PrecisaoHorizontal;
|
||||
|
|
@ -439,9 +450,7 @@ namespace AgroBase.Services
|
|||
UltimaLeitura.TimestampPos.valor = Stopwatch.GetTimestamp() / (double)Stopwatch.Frequency;
|
||||
UltimaLeitura.Momento = DateTime.Now;
|
||||
UltimaLeitura.LatitudeAnt = latitude;
|
||||
UltimaLeitura.Latitude = latitude;
|
||||
UltimaLeitura.LongitudeAnt = longitude;
|
||||
UltimaLeitura.Longitude = longitude;
|
||||
UltimaLeitura.Altitude = altMSL;
|
||||
UltimaLeitura.AltitudeElipsoidal = altElipsoidal;
|
||||
UltimaLeitura.PrecisaoHorizontal = hdopVal;
|
||||
|
|
@ -450,6 +459,8 @@ namespace AgroBase.Services
|
|||
UltimaLeitura.IdadeCorrecao = idadeCorrecao;
|
||||
UltimaLeitura.BaseID = base_id;
|
||||
|
||||
AplicarPosicaoCorrigida();
|
||||
|
||||
// Hora UTC no formato HHmmss.ss (fração opcional)
|
||||
if (!string.IsNullOrEmpty(horaUTC) && horaUTC.Length >= 6)
|
||||
{
|
||||
|
|
@ -471,14 +482,6 @@ namespace AgroBase.Services
|
|||
UltimaLeitura.EnuOriginSet = true;
|
||||
}
|
||||
|
||||
// 2) se já temos origem e um heading válido, aplica lever arm
|
||||
if (UltimaLeitura.EnuOriginSet)
|
||||
{
|
||||
(double latCor, double lonCorr) = LeverArm.FixLeverArmLatLon_Fast(latitude, longitude, UltimaLeitura.OrientacaoReal);
|
||||
UltimaLeitura.Latitude = latCor;
|
||||
UltimaLeitura.Longitude = lonCorr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void ProcessarGNRMC(string sentenca)
|
||||
|
|
@ -638,6 +641,8 @@ namespace AgroBase.Services
|
|||
UltimaLeitura.OrientacaoReal = InverterHeading ? GPSUtils.NormalizarAngulo(headingTrue - 180.0) : headingTrue;
|
||||
UltimaLeitura.TipoOrientacao = status;
|
||||
|
||||
AplicarPosicaoCorrigida();
|
||||
|
||||
// ✅ Atualiza o ângulo unificado no GPSService
|
||||
DefinirAnguloCarro();
|
||||
}
|
||||
|
|
@ -676,9 +681,13 @@ namespace AgroBase.Services
|
|||
// mantém histórico
|
||||
PenultimaLeitura.Latitude = UltimaLeitura.Latitude;
|
||||
PenultimaLeitura.Longitude = UltimaLeitura.Longitude;
|
||||
PenultimaLeitura.LatitudeAnt = UltimaLeitura.LatitudeAnt;
|
||||
PenultimaLeitura.LongitudeAnt = UltimaLeitura.LongitudeAnt;
|
||||
|
||||
UltimaLeitura.Latitude = lat;
|
||||
UltimaLeitura.Longitude = lon;
|
||||
UltimaLeitura.LatitudeAnt = lat;
|
||||
UltimaLeitura.LongitudeAnt = lon;
|
||||
|
||||
AplicarPosicaoCorrigida();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -796,8 +805,13 @@ namespace AgroBase.Services
|
|||
|
||||
PenultimaLeitura.Latitude = UltimaLeitura.Latitude;
|
||||
PenultimaLeitura.Longitude = UltimaLeitura.Longitude;
|
||||
UltimaLeitura.Latitude = lat;
|
||||
UltimaLeitura.Longitude = lon;
|
||||
PenultimaLeitura.LatitudeAnt = UltimaLeitura.LatitudeAnt;
|
||||
PenultimaLeitura.LongitudeAnt = UltimaLeitura.LongitudeAnt;
|
||||
|
||||
UltimaLeitura.LatitudeAnt = lat;
|
||||
UltimaLeitura.LongitudeAnt = lon;
|
||||
|
||||
AplicarPosicaoCorrigida();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -960,6 +974,13 @@ namespace AgroBase.Services
|
|||
}
|
||||
|
||||
|
||||
private static void AplicarPosicaoCorrigida()
|
||||
{
|
||||
(double latCor, double lonCorr) = LeverArm.FixLeverArmLatLon_Fast(UltimaLeitura.LatitudeAnt, UltimaLeitura.LongitudeAnt, UltimaLeitura.OrientacaoReal, UltimaLeitura.TimestampOri.frequencia);
|
||||
UltimaLeitura.Latitude = latCor;
|
||||
UltimaLeitura.Longitude = lonCorr;
|
||||
}
|
||||
|
||||
public static void AtualizarCoordenadasGPS()
|
||||
{
|
||||
PenultimaLeitura.Ntrip_ativado = UltimaLeitura.Ntrip_ativado;
|
||||
|
|
@ -1407,8 +1428,10 @@ namespace AgroBase.Services
|
|||
/// - frontal positivo desloca a posição corrigida para trás do robô
|
||||
/// - lateral positivo desloca a posição corrigida para a esquerda do robô
|
||||
/// </summary>
|
||||
public (double lat, double lon) FixLeverArmLatLon_Fast(double latAnt_deg, double lonAnt_deg, double headingDeg)
|
||||
public (double lat, double lon) FixLeverArmLatLon_Fast(double latAnt_deg, double lonAnt_deg, double headingDeg, double headingFreq)
|
||||
{
|
||||
if (headingFreq < 1) return (latAnt_deg, lonAnt_deg);
|
||||
|
||||
double xTotal = xFisico + xCampo;
|
||||
double yTotal = yFisico + yCampo;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue