correcao final eixos imu, incluido retries no envio de dados can

This commit is contained in:
Diego Freitas 2026-08-06 14:30:53 -03:00
parent d7ad726102
commit 69e87c3f20
8 changed files with 96 additions and 9 deletions

View File

@ -531,6 +531,11 @@
this.label36 = new System.Windows.Forms.Label();
this.txtMomento = new System.Windows.Forms.TextBox();
this.btnPlay = new System.Windows.Forms.Button();
this.pnlOrientacaoDados = new System.Windows.Forms.Panel();
this.label146 = new System.Windows.Forms.Label();
this.label147 = new System.Windows.Forms.Label();
this.txtImuFrontal = new System.Windows.Forms.TextBox();
this.txtImuLateral = new System.Windows.Forms.TextBox();
((System.ComponentModel.ISupportInitialize)(this.trbMomento)).BeginInit();
this.panel1.SuspendLayout();
this.tabControl4.SuspendLayout();
@ -584,6 +589,7 @@
this.pnlUltrassom.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picRobo)).BeginInit();
this.tabOrientacao.SuspendLayout();
this.pnl3D.SuspendLayout();
this.tabSonar.SuspendLayout();
this.tabControl3.SuspendLayout();
this.tabSonarRGB.SuspendLayout();
@ -610,6 +616,7 @@
this.panel6.SuspendLayout();
this.pnlInformacoesOperacao.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picCameraCaminho)).BeginInit();
this.pnlOrientacaoDados.SuspendLayout();
this.SuspendLayout();
//
// trbMomento
@ -4117,6 +4124,7 @@
//
// pnl3D
//
this.pnl3D.Controls.Add(this.pnlOrientacaoDados);
this.pnl3D.Location = new System.Drawing.Point(5, 5);
this.pnl3D.Margin = new System.Windows.Forms.Padding(2);
this.pnl3D.Name = "pnl3D";
@ -5908,6 +5916,51 @@
this.btnPlay.UseVisualStyleBackColor = true;
this.btnPlay.Click += new System.EventHandler(this.btnPlay_Click);
//
// pnlOrientacaoDados
//
this.pnlOrientacaoDados.Controls.Add(this.txtImuLateral);
this.pnlOrientacaoDados.Controls.Add(this.txtImuFrontal);
this.pnlOrientacaoDados.Controls.Add(this.label147);
this.pnlOrientacaoDados.Controls.Add(this.label146);
this.pnlOrientacaoDados.Location = new System.Drawing.Point(1, 362);
this.pnlOrientacaoDados.Name = "pnlOrientacaoDados";
this.pnlOrientacaoDados.Size = new System.Drawing.Size(150, 150);
this.pnlOrientacaoDados.TabIndex = 0;
//
// label146
//
this.label146.AutoSize = true;
this.label146.Location = new System.Drawing.Point(3, 16);
this.label146.Name = "label146";
this.label146.Size = new System.Drawing.Size(39, 13);
this.label146.TabIndex = 1;
this.label146.Text = "Frontal";
//
// label147
//
this.label147.AutoSize = true;
this.label147.Location = new System.Drawing.Point(3, 71);
this.label147.Name = "label147";
this.label147.Size = new System.Drawing.Size(39, 13);
this.label147.TabIndex = 2;
this.label147.Text = "Lateral";
//
// txtImuFrontal
//
this.txtImuFrontal.Location = new System.Drawing.Point(6, 32);
this.txtImuFrontal.Name = "txtImuFrontal";
this.txtImuFrontal.Size = new System.Drawing.Size(100, 20);
this.txtImuFrontal.TabIndex = 1;
this.txtImuFrontal.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// txtImuLateral
//
this.txtImuLateral.Location = new System.Drawing.Point(6, 87);
this.txtImuLateral.Name = "txtImuLateral";
this.txtImuLateral.Size = new System.Drawing.Size(100, 20);
this.txtImuLateral.TabIndex = 3;
this.txtImuLateral.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;
//
// frmResultadosOperacao
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -6007,6 +6060,7 @@
this.pnlUltrassom.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.picRobo)).EndInit();
this.tabOrientacao.ResumeLayout(false);
this.pnl3D.ResumeLayout(false);
this.tabSonar.ResumeLayout(false);
this.tabSonar.PerformLayout();
this.tabControl3.ResumeLayout(false);
@ -6042,6 +6096,8 @@
this.pnlInformacoesOperacao.ResumeLayout(false);
this.pnlInformacoesOperacao.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.picCameraCaminho)).EndInit();
this.pnlOrientacaoDados.ResumeLayout(false);
this.pnlOrientacaoDados.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@ -6527,5 +6583,10 @@
private System.Windows.Forms.Label lblVentilacaoRLOUT;
private System.Windows.Forms.Label lblVentilacaoRLIN;
private System.Windows.Forms.Label lblVentilacaoTemperatura;
private System.Windows.Forms.Panel pnlOrientacaoDados;
private System.Windows.Forms.TextBox txtImuLateral;
private System.Windows.Forms.TextBox txtImuFrontal;
private System.Windows.Forms.Label label147;
private System.Windows.Forms.Label label146;
}
}

View File

@ -1169,6 +1169,8 @@ namespace AgroBase.Forms.Operacoes
AtualizarInformacoesSonar();
AtualizarInformacoesIMU();
AtualizarInformacoesCPU();
AtualizarInformacoesComandos();
@ -1666,6 +1668,13 @@ namespace AgroBase.Forms.Operacoes
}
private void AtualizarInformacoesIMU()
{
var imu = LogsIMU[idxMomentoAtual];
txtImuFrontal.Text = imu.PitchSeguro.ToString("0.00");
txtImuLateral.Text = imu.RollSeguro.ToString("0.00");
}
private void AtualizarInformacoesCameraCaminho()
{
double? CalcularErroLateralPctImagem(int width, List<double?[]> centrosCorredor)

View File

@ -819,8 +819,8 @@ namespace AgroBase.Models.Operacoes
Imu = new OperacaoSensoriamentoLogImuModel
{
Iniciado = sen?.IMU?.Iniciado ?? false,
InclinacaoFrontal = sen?.IMU?.RollSeguro ?? 0,
InclinacaoLateral = sen?.IMU?.PitchSeguro ?? 0,
InclinacaoFrontal = sen?.IMU?.PitchSeguro ?? 0,
InclinacaoLateral = sen?.IMU?.RollSeguro ?? 0,
Rotacao = sen?.IMU?.YawSeguro ?? 0
};
}

View File

@ -926,8 +926,8 @@ namespace AgroBase.Models
{ TipoMovimentoDirecional.MovimentoLateral, 90 },
{ TipoMovimentoDirecional.Diagnostico, 25 },
};
public static double AnguloInclinacaoRollMax { get; set; } = 30.0; // Frontal 40 graus max
public static double AnguloInclinacaoPitchMax { get; set; } = 22.0; // Lateral
public static double AnguloInclinacaoRollMax { get; set; } = 22.0; // Lateral
public static double AnguloInclinacaoPitchMax { get; set; } = 30.0; // Frontal 40 graus max
public static string VozAlerta { get; set; } = "Microsoft Maria Desktop";
public static bool Pronto => Variaveis.OperacaoEmAndamento?.Parametros?.Controle != null;

View File

@ -207,6 +207,7 @@ namespace AgroBase.Services
public bool ContabilizarTimeoutHealth { get; set; } = true;
public bool MensagemDescoberta { get; set; } = false;
public int TentativasEnvio { get; set; } = 0;
}
public class CanCommandFreqModel<T>

View File

@ -90,6 +90,9 @@ namespace AgroBase.Services
private readonly ConcurrentDictionary<string, long> _timeoutsRespostaPorDispositivo = new ConcurrentDictionary<string, long>();
private readonly ConcurrentDictionary<string, long> _timeoutsRespostaPorChave = new ConcurrentDictionary<string, long>();
private readonly List<T_Code> DispositivosRetries = new List<T_Code>() { T_Code.Oid, T_Code.Bat };
private const int MAX_TENTATIVAS_RETRIES = 2;
public Dictionary<string, long> TimeoutsRespostaPorId => _timeoutsRespostaPorId.ToDictionary(x => x.Key, x => x.Value);
public Dictionary<string, long> TimeoutsRespostaPorDispositivo => _timeoutsRespostaPorDispositivo.ToDictionary(x => x.Key, x => x.Value);
public Dictionary<string, long> TimeoutsRespostaPorChave => _timeoutsRespostaPorChave.ToDictionary(x => x.Key, x => x.Value);
@ -575,6 +578,7 @@ namespace AgroBase.Services
msg.Enviado = true;
msg.EnviadoEm = DateTime.Now;
msg.TentativasEnvio++;
_ultimoIdEnviado = msg.IdTx;
_tokens -= 1;
sent++;
@ -1076,6 +1080,18 @@ namespace AgroBase.Services
foreach (var item in timeouts)
{
if (DispositivosRetries.Contains(item.Dispositivo) && item.TentativasEnvio < MAX_TENTATIVAS_RETRIES)
{
// Rearma a MESMA transação para um retry.
item.Enviado = false;
item.EnviadoEm = DateTime.MinValue;
MostrarLog($"Retry rápido OID | tentativa={item.TentativasEnvio + 1}/{MAX_TENTATIVAS_RETRIES} | {TimeoutChave(item)}", item.IdRx);
continue;
}
// Só chega aqui se realmente esgotou as tentativas.
RegistrarTimeoutResposta(item);
MensagensPendentes.Remove(item);
}

View File

@ -179,7 +179,7 @@ class CameraMultispectral:
nome_sensor=f"{self.modelo}_imu",
modo=self.imu_modo,
gyro_unidade="deg_s",
referencial_robo="p,-y,-r",
referencial_robo="r,p,y",
)
else:
self.tem_imu = False

View File

@ -39,10 +39,10 @@ class CameraIMU(ModuloDiagnosticoBase):
# Limites principais vindos do equipamento.
# No rover:
# roll = inclinação frontal
# pitch = inclinação lateral
roll_max_default_deg=45.0,
pitch_max_default_deg=25.0,
# roll = inclinação lateral
# pitch = inclinação frontal
roll_max_default_deg=25.0,
pitch_max_default_deg=45.0,
# Níveis derivados do limite máximo configurado.
angulo_attention_factor=0.50,