iniciado weed worker
This commit is contained in:
parent
0a4e1ba698
commit
4811e24d9f
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -536,6 +536,7 @@
|
|||
<Compile Include="Models\Operadores\ManagerWorkerModel.cs" />
|
||||
<Compile Include="Models\Operadores\OperadoresModels.cs" />
|
||||
<Compile Include="Models\Operadores\VisualWorkerModel.cs" />
|
||||
<Compile Include="Models\Operadores\WeedWorkerModel.cs" />
|
||||
<Compile Include="Models\PerformanceModel.cs" />
|
||||
<Compile Include="Models\PIDModel.cs" />
|
||||
<Compile Include="Models\PZEMModel.cs" />
|
||||
|
|
@ -586,6 +587,7 @@
|
|||
<Compile Include="Services\Operadores\ManagerWorkerService.cs" />
|
||||
<Compile Include="Services\Operadores\OperadoresService.cs" />
|
||||
<Compile Include="Services\Operadores\VisualWorkerService.cs" />
|
||||
<Compile Include="Services\Operadores\WeedWorkerService.cs" />
|
||||
<Compile Include="Services\PythonService.cs" />
|
||||
<Compile Include="Services\PZEMService.cs" />
|
||||
<Compile Include="Services\RedisService.cs" />
|
||||
|
|
|
|||
|
|
@ -266,10 +266,14 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
cmbCameraCaminho.Items.Clear();
|
||||
cmbCameraCaminho.Items.AddRange(ListaCameras.Select(x => x.Description).ToArray());
|
||||
string cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CameraCaminho.Id)?.Description ?? "";
|
||||
var cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CameraCaminho.Id);
|
||||
if (cameraSelecionada != null)
|
||||
{
|
||||
cmbCameraCaminho.SelectedIndex = cmbCameraCaminho.Items.IndexOf(cameraSelecionada);
|
||||
cmbCameraCaminho.SelectedIndex = cmbCameraCaminho.Items.IndexOf(cameraSelecionada.Description);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmbCameraCaminho.Text = CameraCaminho.Id;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -325,15 +329,15 @@ namespace AgroBase.Forms.IHM
|
|||
CamerasSolo.Add(new OAKCameraModel());
|
||||
}
|
||||
|
||||
string cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CamerasSolo[idx].Id)?.Description ?? "";
|
||||
var cameraSelecionada = ListaCameras.FirstOrDefault(x => x.Id == CamerasSolo[idx].Id);
|
||||
|
||||
if (ListaCameras.Any(x => x.Id == cameraSelecionada))
|
||||
if (cameraSelecionada != null)
|
||||
{
|
||||
cmbCamera.SelectedIndex = cmbCamera.Items.IndexOf(cameraSelecionada);
|
||||
cmbCamera.SelectedIndex = cmbCamera.Items.IndexOf(cameraSelecionada.Description);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmbCamera.Text = cameraSelecionada;
|
||||
cmbCamera.Text = CamerasSolo[idx].Id;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -230,7 +230,7 @@ namespace AgroBase.Forms.IHM
|
|||
Task.Run(async () =>
|
||||
{
|
||||
ReqFrameSnr = true;
|
||||
OAKCameraFrameModel frame = await VisualWorkerService.GetCameraFrame(VisualWorkerFrameType.Rgb);
|
||||
OAKCameraFrameModel frame = await VisualWorkerService.GetCameraFrame(CameraFrameType.Rgb);
|
||||
pnlCameraCaminho.BackgroundImage?.Dispose();
|
||||
try { pnlCameraCaminho.BackgroundImage = frame?.image(); } catch { }
|
||||
lblUltimaLeituraCaminho.Text = $"Última Leitura Caminho: " + frame?.timestamp.ToString("HH:mm:ss");
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
this.lblMqtt = new System.Windows.Forms.Label();
|
||||
this.lblD_Sen_sCOR_36V = new System.Windows.Forms.Label();
|
||||
this.lblD_Sen_sLRA = new System.Windows.Forms.Label();
|
||||
this.lblD_Sen_sIMU = new System.Windows.Forms.Label();
|
||||
this.lblD_Imu = new System.Windows.Forms.Label();
|
||||
this.lblD_Mov_DT = new System.Windows.Forms.Label();
|
||||
this.lblD_Dir_DF = new System.Windows.Forms.Label();
|
||||
this.lblD_Dir_EF = new System.Windows.Forms.Label();
|
||||
|
|
@ -45,7 +45,6 @@
|
|||
this.lblD_Dir_ET = new System.Windows.Forms.Label();
|
||||
this.lblD_Mov_ET = new System.Windows.Forms.Label();
|
||||
this.lblD_Cam_0 = new System.Windows.Forms.Label();
|
||||
this.lblD_Cam_1 = new System.Windows.Forms.Label();
|
||||
this.lblD_Snr = new System.Windows.Forms.Label();
|
||||
this.lblDiagnosticos = new System.Windows.Forms.Label();
|
||||
this.lblOperacao = new System.Windows.Forms.Label();
|
||||
|
|
@ -104,7 +103,7 @@
|
|||
//
|
||||
this.lblD_Atu.AutoSize = true;
|
||||
this.lblD_Atu.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.lblD_Atu.Location = new System.Drawing.Point(210, 547);
|
||||
this.lblD_Atu.Location = new System.Drawing.Point(211, 483);
|
||||
this.lblD_Atu.Name = "lblD_Atu";
|
||||
this.lblD_Atu.Size = new System.Drawing.Size(48, 24);
|
||||
this.lblD_Atu.TabIndex = 4;
|
||||
|
|
@ -163,24 +162,24 @@
|
|||
this.lblD_Sen_sLRA.AutoSize = true;
|
||||
this.lblD_Sen_sLRA.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.lblD_Sen_sLRA.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.lblD_Sen_sLRA.Location = new System.Drawing.Point(213, 417);
|
||||
this.lblD_Sen_sLRA.Location = new System.Drawing.Point(213, 418);
|
||||
this.lblD_Sen_sLRA.Name = "lblD_Sen_sLRA";
|
||||
this.lblD_Sen_sLRA.Size = new System.Drawing.Size(46, 24);
|
||||
this.lblD_Sen_sLRA.TabIndex = 15;
|
||||
this.lblD_Sen_sLRA.Text = "LRA";
|
||||
this.lblD_Sen_sLRA.Click += new System.EventHandler(this.lblModulo_Click);
|
||||
//
|
||||
// lblD_Sen_sIMU
|
||||
// lblD_Imu
|
||||
//
|
||||
this.lblD_Sen_sIMU.AutoSize = true;
|
||||
this.lblD_Sen_sIMU.BackColor = System.Drawing.Color.Lavender;
|
||||
this.lblD_Sen_sIMU.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.lblD_Sen_sIMU.Location = new System.Drawing.Point(14, 547);
|
||||
this.lblD_Sen_sIMU.Name = "lblD_Sen_sIMU";
|
||||
this.lblD_Sen_sIMU.Size = new System.Drawing.Size(43, 24);
|
||||
this.lblD_Sen_sIMU.TabIndex = 16;
|
||||
this.lblD_Sen_sIMU.Text = "IMU";
|
||||
this.lblD_Sen_sIMU.Click += new System.EventHandler(this.lblModulo_Click);
|
||||
this.lblD_Imu.AutoSize = true;
|
||||
this.lblD_Imu.BackColor = System.Drawing.Color.Lavender;
|
||||
this.lblD_Imu.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.lblD_Imu.Location = new System.Drawing.Point(14, 547);
|
||||
this.lblD_Imu.Name = "lblD_Imu";
|
||||
this.lblD_Imu.Size = new System.Drawing.Size(43, 24);
|
||||
this.lblD_Imu.TabIndex = 16;
|
||||
this.lblD_Imu.Text = "IMU";
|
||||
this.lblD_Imu.Click += new System.EventHandler(this.lblModulo_Click);
|
||||
//
|
||||
// lblD_Mov_DT
|
||||
//
|
||||
|
|
@ -269,26 +268,15 @@
|
|||
// lblD_Cam_0
|
||||
//
|
||||
this.lblD_Cam_0.AutoSize = true;
|
||||
this.lblD_Cam_0.BackColor = System.Drawing.Color.Lavender;
|
||||
this.lblD_Cam_0.BackColor = System.Drawing.Color.White;
|
||||
this.lblD_Cam_0.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.lblD_Cam_0.Location = new System.Drawing.Point(85, 470);
|
||||
this.lblD_Cam_0.Location = new System.Drawing.Point(210, 547);
|
||||
this.lblD_Cam_0.Name = "lblD_Cam_0";
|
||||
this.lblD_Cam_0.Size = new System.Drawing.Size(52, 24);
|
||||
this.lblD_Cam_0.TabIndex = 29;
|
||||
this.lblD_Cam_0.Text = "CAM";
|
||||
this.lblD_Cam_0.Click += new System.EventHandler(this.lblModulo_Click);
|
||||
//
|
||||
// lblD_Cam_1
|
||||
//
|
||||
this.lblD_Cam_1.AutoSize = true;
|
||||
this.lblD_Cam_1.Cursor = System.Windows.Forms.Cursors.Hand;
|
||||
this.lblD_Cam_1.Location = new System.Drawing.Point(334, 470);
|
||||
this.lblD_Cam_1.Name = "lblD_Cam_1";
|
||||
this.lblD_Cam_1.Size = new System.Drawing.Size(52, 24);
|
||||
this.lblD_Cam_1.TabIndex = 30;
|
||||
this.lblD_Cam_1.Text = "CAM";
|
||||
this.lblD_Cam_1.Click += new System.EventHandler(this.lblModulo_Click);
|
||||
//
|
||||
// lblD_Snr
|
||||
//
|
||||
this.lblD_Snr.AutoSize = true;
|
||||
|
|
@ -698,7 +686,6 @@
|
|||
this.Controls.Add(this.picOperacao);
|
||||
this.Controls.Add(this.lblD_Snr);
|
||||
this.Controls.Add(this.picAjustes);
|
||||
this.Controls.Add(this.lblD_Cam_1);
|
||||
this.Controls.Add(this.lblD_Cam_0);
|
||||
this.Controls.Add(this.picDesligar);
|
||||
this.Controls.Add(this.lblD_Dir_ET);
|
||||
|
|
@ -708,7 +695,7 @@
|
|||
this.Controls.Add(this.lblD_Mov_EF);
|
||||
this.Controls.Add(this.lblD_Dir_DF);
|
||||
this.Controls.Add(this.lblD_Mov_DT);
|
||||
this.Controls.Add(this.lblD_Sen_sIMU);
|
||||
this.Controls.Add(this.lblD_Imu);
|
||||
this.Controls.Add(this.lblD_Sen_sLRA);
|
||||
this.Controls.Add(this.lblD_Sen_sCOR_36V);
|
||||
this.Controls.Add(this.lblMqtt);
|
||||
|
|
@ -747,7 +734,7 @@
|
|||
private System.Windows.Forms.Label lblMqtt;
|
||||
private System.Windows.Forms.Label lblD_Sen_sCOR_36V;
|
||||
private System.Windows.Forms.Label lblD_Sen_sLRA;
|
||||
private System.Windows.Forms.Label lblD_Sen_sIMU;
|
||||
private System.Windows.Forms.Label lblD_Imu;
|
||||
private System.Windows.Forms.Label lblD_Mov_DT;
|
||||
private System.Windows.Forms.Label lblD_Dir_DF;
|
||||
private System.Windows.Forms.Label lblD_Dir_EF;
|
||||
|
|
@ -759,7 +746,6 @@
|
|||
private System.Windows.Forms.PictureBox picOperacao;
|
||||
private System.Windows.Forms.PictureBox picDesligar;
|
||||
private System.Windows.Forms.Label lblD_Cam_0;
|
||||
private System.Windows.Forms.Label lblD_Cam_1;
|
||||
private System.Windows.Forms.Label lblD_Snr;
|
||||
private System.Windows.Forms.PictureBox picAjustes;
|
||||
private System.Windows.Forms.Label lblDiagnosticos;
|
||||
|
|
|
|||
|
|
@ -188,6 +188,20 @@ namespace AgroBase.Forms.IHM
|
|||
? Color.DarkRed
|
||||
: Color.DarkGreen;
|
||||
}
|
||||
else if (Dispositivo == T_Code.Imu)
|
||||
{
|
||||
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == T_Code.Snr);
|
||||
bool modDesconectado = Modulo == null || Modulo.Status == StatusModulo.Desconectado;
|
||||
var saudeImu = HealthWorkerService.ModulosSaude.FirstOrDefault(x => x.modulo == Dispositivo);
|
||||
var CameraCaminho = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho;
|
||||
lbl.ForeColor =
|
||||
modDesconectado || saudeImu == null ? Color.Black
|
||||
: saudeImu.status == StatusModulo.Conectado ? Color.Blue
|
||||
: saudeImu.status == StatusModulo.Falha ? Color.DarkRed
|
||||
: saudeImu.status == StatusModulo.Alerta ? Color.Gold
|
||||
: saudeImu.status == StatusModulo.Operante ? Color.DarkGreen
|
||||
: Color.Black;
|
||||
}
|
||||
else if (Dispositivo == T_Code.Sen)
|
||||
{
|
||||
var Modulo = SerialService.DispositivosMapeados.FirstOrDefault(x => x.Dispositivo == Dispositivo);
|
||||
|
|
@ -195,15 +209,12 @@ namespace AgroBase.Forms.IHM
|
|||
if (Mod_ID.ToLower() == Dispositivo.ToString().ToLower())
|
||||
{
|
||||
lbl.ForeColor =
|
||||
modDesconectado
|
||||
? Color.Black
|
||||
: Modulo.Status == StatusModulo.Conectado
|
||||
? Color.Blue
|
||||
: Modulo.Status == StatusModulo.Alerta ?
|
||||
Color.Gold :
|
||||
Modulo.Status == StatusModulo.Operante
|
||||
? Color.DarkGreen
|
||||
: Color.DarkRed;
|
||||
modDesconectado ? Color.Black :
|
||||
Modulo.Status == StatusModulo.Conectado ? Color.Blue :
|
||||
Modulo.Status == StatusModulo.Falha ? Color.DarkRed :
|
||||
Modulo.Status == StatusModulo.Alerta ? Color.Gold :
|
||||
Modulo.Status == StatusModulo.Operante ? Color.DarkGreen
|
||||
: Color.Black;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ namespace AgroBase.Forms
|
|||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await VariaveisOperacao.Operadores.IniciarProcessamento();
|
||||
await VariaveisOperacao.Operadores.IniciarProcessamento(false);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -79,46 +79,46 @@ namespace AgroBase.Forms
|
|||
|
||||
private async void btnLeituraRGB_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoReqFrame(VisualWorkerFrameType.Rgb);
|
||||
EnviarComandoReqFrame(CameraFrameType.Rgb);
|
||||
}
|
||||
|
||||
private void btnLeituraHeatmap_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoReqFrame(VisualWorkerFrameType.Heatmap);
|
||||
EnviarComandoReqFrame(CameraFrameType.Heatmap);
|
||||
}
|
||||
|
||||
private void btnLeituraRadar2D_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoReqFrame(VisualWorkerFrameType.RadarTopDown);
|
||||
EnviarComandoReqFrame(CameraFrameType.RadarTopDown);
|
||||
}
|
||||
|
||||
private void btnLeituraSegmentacaoSemantica_Click(object sender, EventArgs e)
|
||||
{
|
||||
EnviarComandoReqFrame(VisualWorkerFrameType.Segmentacao);
|
||||
EnviarComandoReqFrame(CameraFrameType.Segmentacao);
|
||||
}
|
||||
|
||||
private async void EnviarComandoReqFrame(VisualWorkerFrameType tipo)
|
||||
private async void EnviarComandoReqFrame(CameraFrameType tipo)
|
||||
{
|
||||
OAKCameraFrameModel frame = await VisualWorkerService.GetCameraFrame(tipo);
|
||||
|
||||
PictureBox pic =
|
||||
tipo == VisualWorkerFrameType.Rgb ? picRGB :
|
||||
tipo == VisualWorkerFrameType.Heatmap ? picHeatmap :
|
||||
tipo == VisualWorkerFrameType.RadarTopDown ? picRadar2D :
|
||||
tipo == VisualWorkerFrameType.Segmentacao ? picSegmentacaoSemantica :
|
||||
tipo == CameraFrameType.Rgb ? picRGB :
|
||||
tipo == CameraFrameType.Heatmap ? picHeatmap :
|
||||
tipo == CameraFrameType.RadarTopDown ? picRadar2D :
|
||||
tipo == CameraFrameType.Segmentacao ? picSegmentacaoSemantica :
|
||||
new PictureBox();
|
||||
Label lbl =
|
||||
tipo == VisualWorkerFrameType.Rgb ? lblLeituraRGB :
|
||||
tipo == VisualWorkerFrameType.Heatmap ? lblLeituraHeatmap :
|
||||
tipo == VisualWorkerFrameType.RadarTopDown ? lblLeituraRadar2D :
|
||||
tipo == VisualWorkerFrameType.Segmentacao ? lblLeituraSegmentacaoSemantica :
|
||||
tipo == CameraFrameType.Rgb ? lblLeituraRGB :
|
||||
tipo == CameraFrameType.Heatmap ? lblLeituraHeatmap :
|
||||
tipo == CameraFrameType.RadarTopDown ? lblLeituraRadar2D :
|
||||
tipo == CameraFrameType.Segmentacao ? lblLeituraSegmentacaoSemantica :
|
||||
new Label();
|
||||
|
||||
pic.Image?.Dispose();
|
||||
try { pic.Image = frame?.image(); } catch { }
|
||||
lbl.Text = $"Leitura em: " + frame?.timestamp.ToString("dd/MM/yyyy HH:mm:ss");
|
||||
|
||||
if (tipo == VisualWorkerFrameType.RadarTopDown && VisualWorkerService.DadosLeitura.Analises != null)
|
||||
if (tipo == CameraFrameType.RadarTopDown && VisualWorkerService.DadosLeitura.Analises != null)
|
||||
{
|
||||
//pic.Image = VariaveisOperacao.Operadores.VisualWorker.DadosLeitura.Leitura.obj.radar_2d.PlotarAnalsie(frame.image);
|
||||
|
||||
|
|
@ -152,7 +152,7 @@ namespace AgroBase.Forms
|
|||
var analise = VisualWorkerService.DadosLeitura.Analises;
|
||||
|
||||
lblLeituraDebug.Text = $"Leitura em: " + (analise?.timestamp ?? DateTime.MinValue).ToString("dd/MM/yyyy HH:mm:ss");
|
||||
OAKCameraFrameModel frame = VisualWorkerService.DadosLeitura.CameraFrames[VisualWorkerFrameType.Heatmap];
|
||||
OAKCameraFrameModel frame = VisualWorkerService.DadosLeitura.CameraFrames[CameraFrameType.Heatmap];
|
||||
picDebug.Image?.Dispose();
|
||||
picDebug.Image = analise.PlotarAnalise(frame);
|
||||
|
||||
|
|
|
|||
|
|
@ -687,6 +687,7 @@ namespace AgroBase
|
|||
var Bico = DispAtu.Dados.BicosPulverizadores.FirstOrDefault(x => x.ID == ID);
|
||||
if (Bico != null)
|
||||
{
|
||||
Console.WriteLine($"Bico {Bico.Posicao} atualizado de {Bico.ComandoAtuar} para {Status}");
|
||||
Bico.ComandoAtuar = Status;
|
||||
(id_num, posicao, data) = Bico.ProtocoloComando();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace AgroBase.Models
|
|||
{
|
||||
get
|
||||
{
|
||||
return $"({Index}) {Name}";
|
||||
return $"({Index}) {Name ?? Id}";
|
||||
}
|
||||
}
|
||||
public string State { get; set; }
|
||||
|
|
@ -36,7 +36,7 @@ namespace AgroBase.Models
|
|||
public double DistanciaMinimaVisao { get; set; } = 500;
|
||||
public double PercentualAlturaSolo { get; set; } = 30;
|
||||
|
||||
public Dictionary<VisualWorkerFrameType, OAKCameraFrameModel> frames
|
||||
public Dictionary<CameraFrameType, OAKCameraFrameModel> frames
|
||||
{
|
||||
get
|
||||
{
|
||||
|
|
@ -44,14 +44,16 @@ namespace AgroBase.Models
|
|||
{
|
||||
case T_Code.Snr:
|
||||
return VisualWorkerService.DadosLeitura.CameraFrames;
|
||||
case T_Code.Cam:
|
||||
return WeedWorkerService.DadosLeitura.CameraFrames;
|
||||
default:
|
||||
return new Dictionary<VisualWorkerFrameType, OAKCameraFrameModel>();
|
||||
return new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public async Task<Bitmap> GetNewFrame(VisualWorkerFrameType tipo = VisualWorkerFrameType.Rgb)
|
||||
public async Task<Bitmap> GetNewFrame(CameraFrameType tipo = CameraFrameType.Rgb)
|
||||
{
|
||||
OAKCameraFrameModel frame = null;
|
||||
switch (Dispositivo)
|
||||
|
|
@ -59,18 +61,24 @@ namespace AgroBase.Models
|
|||
case T_Code.Snr:
|
||||
frame = await VisualWorkerService.GetCameraFrame(tipo);
|
||||
break;
|
||||
case T_Code.Cam:
|
||||
frame = await WeedWorkerService.GetCameraFrame(tipo);
|
||||
break;
|
||||
}
|
||||
Bitmap bmp = frame?.image();
|
||||
return bmp;
|
||||
}
|
||||
|
||||
public void SaveFrames(List<VisualWorkerFrameType> frames, string nome, string caminho)
|
||||
public void SaveFrames(List<CameraFrameType> frames, string nome, string caminho)
|
||||
{
|
||||
switch (Dispositivo)
|
||||
{
|
||||
case T_Code.Snr:
|
||||
VisualWorkerService.SaveCameraFrames(frames, nome, caminho);
|
||||
break;
|
||||
case T_Code.Cam:
|
||||
WeedWorkerService.SaveCameraFrames(frames, nome, caminho);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -648,6 +648,8 @@ namespace AgroBase.Models
|
|||
|
||||
GPSTrajetoria = new List<GPSModel>();
|
||||
|
||||
Controle.BicosAtuados = DispAtu.Dados.BicosPulverizadores.Select(x => x.Clone()).ToList();
|
||||
|
||||
await RealizarCalibragemInicialAsync();
|
||||
|
||||
if (Modo == ModoOperacao.Manual)
|
||||
|
|
@ -832,30 +834,45 @@ namespace AgroBase.Models
|
|||
{
|
||||
if (Variaveis.OperacaoEmAndamento.Modo == ModoOperacao.MapaGPS)
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false);
|
||||
Variaveis.OperacaoEmAndamento.AtualizarDadosControleMovimento(false);
|
||||
}
|
||||
if (Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico)
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.AtualizarDadosControleAtuador(false);
|
||||
}
|
||||
}
|
||||
|
||||
public void AtualizarDadosControle(bool ForcarEnvio)
|
||||
public void AtualizarDadosControleAtuador(bool ForcarEnvio)
|
||||
{
|
||||
DateTime Agora = DateTime.Now;
|
||||
|
||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||
|
||||
foreach (var Ctrl in _Controle.TiposControle)
|
||||
if (!_Controle.PulverizadorAutomatico)
|
||||
return;
|
||||
|
||||
foreach (var Ctrl in _Controle.TiposControle.Where(x => x.Tipo == T_Code.Atu))
|
||||
{
|
||||
if (ForcarEnvio || ((Agora - Ctrl.UltimoComando).TotalMilliseconds > Ctrl.DelayEnvioComando))
|
||||
{
|
||||
if (Ctrl.Tipo == T_Code.Atu && !_Controle.PulverizadorAutomatico)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var Protocolos = EnviarProtocoloComando(Variaveis.OperacaoEmAndamento.DispAtu, Ctrl.Tipo, ForcarEnvio);
|
||||
Ctrl.UltimoComando = Agora;
|
||||
Ctrl.Comandos.AddRange(Protocolos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
IDispositivosService disp = Ctrl.Tipo == T_Code.Atu ?
|
||||
(IDispositivosService)Variaveis.OperacaoEmAndamento.DispAtu :
|
||||
(IDispositivosService)Variaveis.OperacaoEmAndamento.DispMvd;
|
||||
public void AtualizarDadosControleMovimento(bool ForcarEnvio)
|
||||
{
|
||||
DateTime Agora = DateTime.Now;
|
||||
|
||||
var Protocolos = EnviarProtocoloComando(disp, Ctrl.Tipo, ForcarEnvio);
|
||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||
|
||||
foreach (var Ctrl in _Controle.TiposControle.Where(x => x.Tipo != T_Code.Atu))
|
||||
{
|
||||
if (ForcarEnvio || ((Agora - Ctrl.UltimoComando).TotalMilliseconds > Ctrl.DelayEnvioComando))
|
||||
{
|
||||
var Protocolos = EnviarProtocoloComando(Variaveis.OperacaoEmAndamento.DispMvd, Ctrl.Tipo, ForcarEnvio);
|
||||
Ctrl.UltimoComando = Agora;
|
||||
Ctrl.Comandos.AddRange(Protocolos);
|
||||
}
|
||||
|
|
@ -942,7 +959,17 @@ namespace AgroBase.Models
|
|||
}
|
||||
else if (Dispositivo.Dados is AtuadorModel)
|
||||
{
|
||||
if (ForcarEnvio || _ControleAnterior.BicosAtuados.Count() >= _Controle.BicosAtuados.Count())
|
||||
bool AlteracaoDeEstado = false;
|
||||
for (int i = 0; i < _Controle.BicosAtuados.Count; i++)
|
||||
{
|
||||
if (_Controle.BicosAtuados[i].ComandoAtuar != _ControleAnterior.BicosAtuados[i].ComandoAtuar)
|
||||
{
|
||||
AlteracaoDeEstado = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ForcarEnvio || AlteracaoDeEstado)
|
||||
{
|
||||
for (int i = 0; i < _Controle.BicosAtuados.Count; i++)
|
||||
{
|
||||
|
|
@ -1202,7 +1229,7 @@ namespace AgroBase.Models
|
|||
|
||||
string nome = Variaveis.OperacaoEmAndamento.idxLog.ToString();
|
||||
|
||||
Camera.SaveFrames(new List<VisualWorkerFrameType>() { VisualWorkerFrameType.Rgb, VisualWorkerFrameType.Heatmap, VisualWorkerFrameType.RadarTopDown, VisualWorkerFrameType.Segmentacao }, nome, Caminho);
|
||||
Camera.SaveFrames(new List<CameraFrameType>() { CameraFrameType.Rgb, CameraFrameType.Heatmap, CameraFrameType.RadarTopDown, CameraFrameType.Segmentacao }, nome, Caminho);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1418,7 +1445,7 @@ namespace AgroBase.Models
|
|||
Angulo = Angulo,
|
||||
Angulo_Max = Angulo_Max,
|
||||
Angulo_Min = Angulo_Min,
|
||||
BicosAtuados = new List<AtuadorBicoModel>(BicosAtuados),
|
||||
BicosAtuados = BicosAtuados.Select(x => x.Clone()).ToList(),
|
||||
Direcao = Direcao,
|
||||
PercentualInicioPulverizacao = PercentualInicioPulverizacao,
|
||||
PercentualVelocidadeSP = PercentualVelocidadeSP,
|
||||
|
|
|
|||
|
|
@ -55,5 +55,14 @@ namespace AgroBase.Models.Operadores
|
|||
{
|
||||
ScriptCarregado = 1,
|
||||
}
|
||||
|
||||
public enum CameraFrameType
|
||||
{
|
||||
Rgb = 1,
|
||||
Heatmap = 2,
|
||||
RadarTopDown = 3,
|
||||
Segmentacao = 4,
|
||||
Debug = 5
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ namespace AgroBase.Models.Operadores
|
|||
public bool Pronto { get; set; }
|
||||
public DateTime ProntoEm { get; set; }
|
||||
public DateTime UltimaMensagem { get; set; }
|
||||
public Dictionary<VisualWorkerFrameType, OAKCameraFrameModel> CameraFrames { get; set; }
|
||||
public Dictionary<CameraFrameType, OAKCameraFrameModel> CameraFrames { get; set; } = new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||
//public WorkerMessageModel<VisualWorkerMessageResponseModel> Leitura { get; set; } = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
|
||||
public VisualWorkerMessageAnaliseModel Analises { get; set; } = new VisualWorkerMessageAnaliseModel();
|
||||
public VisualWorkerMessageIMUModel Imu { get; set; } = new VisualWorkerMessageIMUModel();
|
||||
|
|
@ -26,7 +26,7 @@ namespace AgroBase.Models.Operadores
|
|||
IniciadoEm = IniciadoEm,
|
||||
Pronto = Pronto,
|
||||
ProntoEm = ProntoEm,
|
||||
CameraFrames = new Dictionary<VisualWorkerFrameType, OAKCameraFrameModel>(CameraFrames ?? new Dictionary<VisualWorkerFrameType, OAKCameraFrameModel>()),
|
||||
CameraFrames = new Dictionary<CameraFrameType, OAKCameraFrameModel>(CameraFrames ?? new Dictionary<CameraFrameType, OAKCameraFrameModel>()),
|
||||
Analises = Analises.Clone(),
|
||||
Imu = Imu.Clone(),
|
||||
//Leitura = Leitura.Clone(),
|
||||
|
|
@ -40,7 +40,7 @@ namespace AgroBase.Models.Operadores
|
|||
IniciadoEm = DateTime.MinValue;
|
||||
Pronto = false;
|
||||
ProntoEm = DateTime.MinValue;
|
||||
CameraFrames = new Dictionary<VisualWorkerFrameType, OAKCameraFrameModel>();
|
||||
CameraFrames = new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||
Analises = new VisualWorkerMessageAnaliseModel();
|
||||
Imu = new VisualWorkerMessageIMUModel();
|
||||
//Leitura = new WorkerMessageModel<VisualWorkerMessageResponseModel>();
|
||||
|
|
@ -522,13 +522,6 @@ namespace AgroBase.Models.Operadores
|
|||
SaveCameraFrames = 6,
|
||||
}
|
||||
|
||||
public enum VisualWorkerFrameType
|
||||
{
|
||||
Rgb = 1,
|
||||
Heatmap = 2,
|
||||
RadarTopDown = 3,
|
||||
Segmentacao = 4,
|
||||
Debug = 5
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AgroBase.Models.Operadores
|
||||
{
|
||||
public class WeedWorkerModel
|
||||
{
|
||||
public bool Iniciado { get; set; }
|
||||
public DateTime IniciadoEm { get; set; }
|
||||
public bool Pronto { get; set; }
|
||||
public DateTime ProntoEm { get; set; }
|
||||
public DateTime UltimaMensagem { get; set; }
|
||||
public Dictionary<CameraFrameType, OAKCameraFrameModel> CameraFrames { get; set; } = new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||
|
||||
|
||||
public WeedWorkerModel Clone()
|
||||
{
|
||||
return new WeedWorkerModel()
|
||||
{
|
||||
Iniciado = Iniciado,
|
||||
IniciadoEm = IniciadoEm,
|
||||
Pronto = Pronto,
|
||||
ProntoEm = ProntoEm,
|
||||
CameraFrames = new Dictionary<CameraFrameType, OAKCameraFrameModel>(CameraFrames ?? new Dictionary<CameraFrameType, OAKCameraFrameModel>()),
|
||||
};
|
||||
}
|
||||
|
||||
public void ReiniciarEstado()
|
||||
{
|
||||
Iniciado = false;
|
||||
IniciadoEm = DateTime.MinValue;
|
||||
Pronto = false;
|
||||
ProntoEm = DateTime.MinValue;
|
||||
CameraFrames = new Dictionary<CameraFrameType, OAKCameraFrameModel>();
|
||||
}
|
||||
}
|
||||
|
||||
public enum WeedWorkerCommandType
|
||||
{
|
||||
ScriptCarregado = 1,
|
||||
IniciarCameraManager = 2,
|
||||
AtualizarSaudeCamera = 3,
|
||||
GetCameraFrame = 4,
|
||||
SaveCameraFrames = 5,
|
||||
EnviarDadosControle = 6,
|
||||
}
|
||||
}
|
||||
|
|
@ -153,7 +153,9 @@ namespace AgroBase.Services.Operadores
|
|||
("largura", VariaveisEquipamento.LarguraEquipamentoMm / 1000.0),
|
||||
("distancia_entre_eixos", VariaveisEquipamento.DistanciaEntreEixos / 100.0),
|
||||
("percentual_reservatorio_min", VariaveisEquipamento.PercentualReservatorioMin),
|
||||
("percentual_tensao_bateria_min", VariaveisEquipamento.PercentualTensaoBateriaMin)
|
||||
("percentual_tensao_bateria_min", VariaveisEquipamento.PercentualTensaoBateriaMin),
|
||||
("camera_caminho_id", Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Id),
|
||||
("camera_solo_id", Variaveis.OperacaoEmAndamento.DispSen.Dados.CamerasSolo.FirstOrDefault()?.Id ?? "")
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -218,7 +220,6 @@ namespace AgroBase.Services.Operadores
|
|||
),
|
||||
("Snr", new
|
||||
{
|
||||
mx_id = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.Id,
|
||||
percentual_altura_solo = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.PercentualAlturaSolo,
|
||||
distancia_maxima = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.DistanciaMaximaVisao,
|
||||
distancia_minima = Variaveis.OperacaoEmAndamento.DispSen.Dados.CameraCaminho.DistanciaMinimaVisao
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ namespace AgroBase.Services.Operadores
|
|||
DadosLeitura.ProntoEm = DateTime.Now;
|
||||
MostrarLog($"Comando recebido: cmd = {cmd.ToString()}");
|
||||
break;
|
||||
|
||||
case ManagerWorkerCommandType.EnviarDadosControle:
|
||||
if (Variaveis.OperacaoEmAndamento.Modo == Enums.ModoOperacao.MapaGPS)
|
||||
{
|
||||
|
|
@ -83,6 +84,7 @@ namespace AgroBase.Services.Operadores
|
|||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ManagerWorkerCommandType.FinalizarOperacao:
|
||||
Task.Run(async () =>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ namespace AgroBase.Services.Operadores
|
|||
new VisualWorkerService(),
|
||||
new HealthWorkerService(),
|
||||
new CameraWorkerService(),
|
||||
new WeedWorkerService(),
|
||||
};
|
||||
|
||||
private bool iniciarScript = false;
|
||||
|
|
@ -96,7 +97,7 @@ namespace AgroBase.Services.Operadores
|
|||
("velocidade_sp", _Controle.PercentualVelocidadeSP)
|
||||
);
|
||||
|
||||
Variaveis.OperacaoEmAndamento.AtualizarDadosControle(false);
|
||||
Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao();
|
||||
}
|
||||
|
||||
RedisService.DefinirEquipamentoDesconectado();
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ namespace AgroBase.Services.Operadores
|
|||
break;
|
||||
|
||||
case VisualWorkerCommandType.GetCameraFrame:
|
||||
VisualWorkerFrameType tipo = (VisualWorkerFrameType)Convert.ToInt32(comando.@params["tipo"].ToString());
|
||||
CameraFrameType tipo = (CameraFrameType)Convert.ToInt32(comando.@params["tipo"].ToString());
|
||||
DadosLeitura.CameraFrames[tipo] = new OAKCameraFrameModel()
|
||||
{
|
||||
frame = comando.@params["frame"].ToString(),
|
||||
|
|
@ -101,7 +101,7 @@ namespace AgroBase.Services.Operadores
|
|||
RedisService.Publish(CmdKey.VisualWorkerRx, JsonConvert.SerializeObject(comando));
|
||||
}
|
||||
|
||||
public static async Task<OAKCameraFrameModel> GetCameraFrame(VisualWorkerFrameType tipo = VisualWorkerFrameType.Rgb)
|
||||
public static async Task<OAKCameraFrameModel> GetCameraFrame(CameraFrameType tipo = CameraFrameType.Rgb)
|
||||
{
|
||||
DateTime Inicio = DateTime.Now;
|
||||
|
||||
|
|
@ -121,7 +121,7 @@ namespace AgroBase.Services.Operadores
|
|||
return _frame;
|
||||
}
|
||||
|
||||
public static void SaveCameraFrames(List<VisualWorkerFrameType> frames, string nome, string caminho)
|
||||
public static void SaveCameraFrames(List<CameraFrameType> frames, string nome, string caminho)
|
||||
{
|
||||
var comando = new
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,158 @@
|
|||
using AgroBase.Models.Operadores;
|
||||
using AgroBase.Models;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using static AgroBase.Models.Operadores.OperadoresModels;
|
||||
|
||||
namespace AgroBase.Services.Operadores
|
||||
{
|
||||
public class WeedWorkerService : IWorkerModel
|
||||
{
|
||||
public static WeedWorkerModel DadosLeitura = new WeedWorkerModel();
|
||||
public SaudeWorkerModel Saude { get; set; } = new SaudeWorkerModel();
|
||||
|
||||
private bool DebugMode = true;
|
||||
|
||||
public void MostrarLog(string message, int limite = 500)
|
||||
{
|
||||
if (DebugMode)
|
||||
{
|
||||
Console.WriteLine($"[WeedWorker] {message.Substring(0, Math.Min(limite, message.Length))}{(message.Length > limite ? "..." : "")}");
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<bool> IniciarProcessamento()
|
||||
{
|
||||
RedisService.Subscribe(CmdKey.WeedWorkerTx, RedisCallback);
|
||||
|
||||
DadosLeitura.IniciadoEm = DateTime.Now;
|
||||
DadosLeitura.Iniciado = true;
|
||||
|
||||
bool pronto() => DadosLeitura.Pronto;
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(pronto, 5000);
|
||||
if (pronto())
|
||||
{
|
||||
MostrarLog("Processamento iniciado com sucesso");
|
||||
return true;
|
||||
}
|
||||
|
||||
MostrarLog("Timeout ao iniciar script");
|
||||
DadosLeitura.ReiniciarEstado();
|
||||
return false;
|
||||
}
|
||||
|
||||
public void RedisCallback(string mensagem)
|
||||
{
|
||||
try
|
||||
{
|
||||
var comando = JsonConvert.DeserializeObject<ComandoRedis>(mensagem);
|
||||
|
||||
var cmd = (WeedWorkerCommandType)comando.cmd;
|
||||
|
||||
//MostrarLog($"Comando recebido: cmd = {cmd.ToString()}");
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case WeedWorkerCommandType.ScriptCarregado:
|
||||
DadosLeitura.Pronto = true;
|
||||
DadosLeitura.ProntoEm = DateTime.Now;
|
||||
MostrarLog($"Comando recebido: cmd = {cmd.ToString()}");
|
||||
break;
|
||||
|
||||
case WeedWorkerCommandType.GetCameraFrame:
|
||||
CameraFrameType tipo = (CameraFrameType)Convert.ToInt32(comando.@params["tipo"].ToString());
|
||||
DadosLeitura.CameraFrames[tipo] = new OAKCameraFrameModel()
|
||||
{
|
||||
frame = comando.@params["frame"].ToString(),
|
||||
timestamp = FuncoesGlobais.UnixToDateTime(comando.@params["timestamp"].ToString()),
|
||||
};
|
||||
break;
|
||||
|
||||
case WeedWorkerCommandType.EnviarDadosControle:
|
||||
if (Variaveis.OperacaoEmAndamento.Controle.PulverizadorAutomatico)
|
||||
{
|
||||
if (comando.@params == null)
|
||||
break;
|
||||
|
||||
var _Controle = Variaveis.OperacaoEmAndamento.Controle;
|
||||
if (comando.@params is Dictionary<string, object> dictParams)
|
||||
{
|
||||
var novoComando = dictParams
|
||||
.Select(kv => new
|
||||
{
|
||||
Key = int.TryParse(kv.Key, out var i) ? (i + 1) : -1,
|
||||
Value = Convert.ToBoolean(kv.Value)
|
||||
})
|
||||
.Where(x => x.Key >= 0)
|
||||
.ToDictionary(x => x.Key, x => x.Value);
|
||||
foreach (var bico in _Controle.BicosAtuados)
|
||||
{
|
||||
novoComando.TryGetValue(bico.Posicao, out bool atuado);
|
||||
bico.ComandoAtuar = atuado;
|
||||
}
|
||||
Variaveis.OperacaoEmAndamento.AtualizaInformacoesControleOperacao();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
MostrarLog($"Comando não reconhecido: {comando.cmd}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MostrarLog($"Erro ao deserializar resposta: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
DadosLeitura.UltimaMensagem = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
public void AtualizarSaude()
|
||||
{
|
||||
Saude = OperadoresModels.AtualizarSaude(CtxKey.DadosWeedWorker);
|
||||
}
|
||||
|
||||
public static async Task<OAKCameraFrameModel> GetCameraFrame(CameraFrameType tipo = CameraFrameType.Rgb)
|
||||
{
|
||||
DateTime Inicio = DateTime.Now;
|
||||
|
||||
var comando = new
|
||||
{
|
||||
cmd = WeedWorkerCommandType.GetCameraFrame,
|
||||
@params = tipo,
|
||||
};
|
||||
RedisService.Publish(CmdKey.WeedWorkerRx, JsonConvert.SerializeObject(comando));
|
||||
|
||||
bool Frame() => DadosLeitura.CameraFrames.TryGetValue(tipo, out var frame) && (frame?.timestamp ?? DateTime.MinValue) > Inicio;
|
||||
|
||||
await FuncoesGlobais.AguardarCondicaoAsync(Frame, 1000, 100);
|
||||
|
||||
DadosLeitura.CameraFrames.TryGetValue(tipo, out OAKCameraFrameModel _frame);
|
||||
|
||||
return _frame;
|
||||
}
|
||||
|
||||
public static void SaveCameraFrames(List<CameraFrameType> frames, string nome, string caminho)
|
||||
{
|
||||
var comando = new
|
||||
{
|
||||
cmd = WeedWorkerCommandType.SaveCameraFrames,
|
||||
@params = new
|
||||
{
|
||||
nome = nome,
|
||||
caminho = caminho,
|
||||
tipos = frames.Select(x => (int)x).ToArray(),
|
||||
},
|
||||
};
|
||||
RedisService.Publish(CmdKey.WeedWorkerRx, JsonConvert.SerializeObject(comando));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -187,6 +187,7 @@ namespace AgroBase.Services
|
|||
public const string DadosControle = "ctx:dados_controle";
|
||||
public const string DadosEquipamento = "ctx:dados_equipamento";
|
||||
public const string DadosVisualWorker = "ctx:dados_visual_worker";
|
||||
public const string DadosWeedWorker = "ctx:dados_weed_worker";
|
||||
public const string DadosManagerWorker = "ctx:dados_manager_worker";
|
||||
public const string DadosHealthWorker = "ctx:dados_health_worker";
|
||||
public const string DadosCameraWorker = "ctx:dados_camera_worker";
|
||||
|
|
@ -202,5 +203,7 @@ namespace AgroBase.Services
|
|||
public const string CameraWorkerTx = "cmd_tx:camera_worker";
|
||||
public const string ManagerWorkerRx = "cmd_rx:manager_worker";
|
||||
public const string ManagerWorkerTx = "cmd_tx:manager_worker";
|
||||
public const string WeedWorkerRx = "cmd_rx:weed_worker";
|
||||
public const string WeedWorkerTx = "cmd_tx:weed_worker";
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
|
|
@ -1,12 +1,5 @@
|
|||
{
|
||||
"epochs": [ {
|
||||
"calculation_time": "13395172669289149",
|
||||
"config_version": 0,
|
||||
"model_version": "0",
|
||||
"padded_top_topics_start_index": 0,
|
||||
"taxonomy_version": 0,
|
||||
"top_topics_and_observing_domains": [ ]
|
||||
}, {
|
||||
"calculation_time": "13395881044629269",
|
||||
"config_version": 0,
|
||||
"model_version": "0",
|
||||
|
|
@ -29,5 +22,5 @@
|
|||
"top_topics_and_observing_domains": [ ]
|
||||
} ],
|
||||
"hex_encoded_hmac_key": "40F346D3248C3AFDF2BEE1FE496DBD32F7CED6E5AE98B881ABC421AA7E7B5642",
|
||||
"next_scheduled_calculation_time": "13397830127957632"
|
||||
"next_scheduled_calculation_time": "13397830127957680"
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,3 +1,3 @@
|
|||
2025/07/18-16:42:45.122 990 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||
2025/07/18-16:42:45.129 990 Recovering log #3
|
||||
2025/07/18-16:42:45.133 990 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||
2025/07/21-15:21:17.549 8344 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||
2025/07/21-15:21:17.555 8344 Recovering log #3
|
||||
2025/07/21-15:21:17.558 8344 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
2025/07/18-16:10:16.297 1248 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||
2025/07/18-16:10:16.303 1248 Recovering log #3
|
||||
2025/07/18-16:10:16.306 1248 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||
2025/07/21-15:10:12.398 7cc4 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/MANIFEST-000001
|
||||
2025/07/21-15:10:12.406 7cc4 Recovering log #3
|
||||
2025/07/21-15:10:12.409 7cc4 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Local Storage\leveldb/000003.log
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13397427789769984","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":13901},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"2804:d78:69b:cf00:d5cb:d183:c651:2afa","used_quic":true},"version":5},"network_qualities":{"CAASABiAgICA+P////8B":"4G","CAESABiAgICA+P////8B":"4G","CAISABiAgICA+P////8B":"4G","CAYSABiAgICA+P////8B":"Offline"}}}
|
||||
{"net":{"http_server_properties":{"servers":[{"alternative_service":[{"advertised_alpns":["h3"],"expiration":"13397682078167259","port":443,"protocol_str":"quic"}],"anonymization":["DAAAAAcAAABmaWxlOi8vAA==",false,0],"network_stats":{"srtt":58184},"server":"https://tile.openstreetmap.org","supports_spdy":true}],"supports_quic":{"address":"2804:d78:69b:cf00:e1c9:9847:8945:20fe","used_quic":true},"version":5},"network_qualities":{"CAASABiAgICA+P////8B":"4G","CAESABiAgICA+P////8B":"4G","CAISABiAgICA+P////8B":"4G","CAYSABiAgICA+P////8B":"Offline"}}}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1,3 +1,3 @@
|
|||
2025/07/18-16:56:03.153 990 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
|
||||
2025/07/18-16:56:03.154 990 Recovering log #3
|
||||
2025/07/18-16:56:03.157 990 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
|
||||
2025/07/21-15:34:33.516 8344 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
|
||||
2025/07/21-15:34:33.517 8344 Recovering log #3
|
||||
2025/07/21-15:34:33.520 8344 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
2025/07/18-16:17:14.846 1248 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
|
||||
2025/07/18-16:17:14.847 1248 Recovering log #3
|
||||
2025/07/18-16:17:14.850 1248 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
|
||||
2025/07/21-15:18:09.336 7cc4 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/MANIFEST-000001
|
||||
2025/07/21-15:18:09.338 7cc4 Recovering log #3
|
||||
2025/07/21-15:18:09.342 7cc4 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Session Storage/000003.log
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
2025/07/18-16:42:45.037 6640 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
|
||||
2025/07/18-16:42:45.039 6640 Recovering log #7
|
||||
2025/07/18-16:42:45.040 6640 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
|
||||
2025/07/21-15:21:17.473 813c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
|
||||
2025/07/21-15:21:17.474 813c Recovering log #7
|
||||
2025/07/21-15:21:17.475 813c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
2025/07/18-16:10:16.228 5b90 Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
|
||||
2025/07/18-16:10:16.229 5b90 Recovering log #7
|
||||
2025/07/18-16:10:16.230 5b90 Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
|
||||
2025/07/21-15:10:12.318 189c Reusing MANIFEST C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/MANIFEST-000001
|
||||
2025/07/21-15:10:12.320 189c Recovering log #7
|
||||
2025/07/21-15:10:12.320 189c Reusing old log C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\x64\Debug\AgroBase.exe.WebView2\EBWebView\Default\Site Characteristics Database/000007.log
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -17,7 +17,7 @@
|
|||
<meta name="viewport" content="width=device-width,
|
||||
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<style>
|
||||
#map_da5e1542c7ab541155af4f4c041e9c23 {
|
||||
#map_9167a3f59236bbe3ca57b08de1d97258 {
|
||||
position: relative;
|
||||
width: 100.0%;
|
||||
height: 100.0%;
|
||||
|
|
@ -54,14 +54,14 @@
|
|||
<body>
|
||||
|
||||
|
||||
<div class="folium-map" id="map_da5e1542c7ab541155af4f4c041e9c23" ></div>
|
||||
<div class="folium-map" id="map_9167a3f59236bbe3ca57b08de1d97258" ></div>
|
||||
|
||||
</body>
|
||||
<script>
|
||||
|
||||
|
||||
var map_da5e1542c7ab541155af4f4c041e9c23 = L.map(
|
||||
"map_da5e1542c7ab541155af4f4c041e9c23",
|
||||
var map_9167a3f59236bbe3ca57b08de1d97258 = L.map(
|
||||
"map_9167a3f59236bbe3ca57b08de1d97258",
|
||||
{
|
||||
center: [0.0, 0.0],
|
||||
crs: L.CRS.EPSG3857,
|
||||
|
|
@ -78,7 +78,7 @@
|
|||
|
||||
|
||||
|
||||
var tile_layer_3635f6a14539c3f382434fa86536d4f3 = L.tileLayer(
|
||||
var tile_layer_d32108711f97218804be105ee489826b = L.tileLayer(
|
||||
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
|
||||
{
|
||||
"minZoom": 0,
|
||||
|
|
@ -95,7 +95,7 @@
|
|||
);
|
||||
|
||||
|
||||
tile_layer_3635f6a14539c3f382434fa86536d4f3.addTo(map_da5e1542c7ab541155af4f4c041e9c23);
|
||||
tile_layer_d32108711f97218804be105ee489826b.addTo(map_9167a3f59236bbe3ca57b08de1d97258);
|
||||
|
||||
</script>
|
||||
|
||||
|
|
@ -116,7 +116,7 @@
|
|||
}
|
||||
trajeto_json_add({"features": []});
|
||||
|
||||
trajeto_json.addTo(map_da5e1542c7ab541155af4f4c041e9c23);
|
||||
trajeto_json.addTo(map_9167a3f59236bbe3ca57b08de1d97258);
|
||||
|
||||
function adicionarGeometria(novaGeometria) {
|
||||
trajeto_json.addData(novaGeometria);
|
||||
|
|
@ -179,9 +179,9 @@
|
|||
|
||||
var marcadorEquipamento = L.marker([0, 0], {
|
||||
icon: customIcon
|
||||
}).addTo(map_da5e1542c7ab541155af4f4c041e9c23);
|
||||
}).addTo(map_9167a3f59236bbe3ca57b08de1d97258);
|
||||
|
||||
var marcadorBase = L.marker([0, 0], {}).addTo(map_da5e1542c7ab541155af4f4c041e9c23);
|
||||
var marcadorBase = L.marker([0, 0], {}).addTo(map_9167a3f59236bbe3ca57b08de1d97258);
|
||||
var icon = L.AwesomeMarkers.icon(
|
||||
{"extraClasses": "fa-rotate-0", "icon": "info-sign", "iconColor": "white", "markerColor": "red", "prefix": "glyphicon"}
|
||||
);
|
||||
|
|
@ -246,7 +246,7 @@
|
|||
}
|
||||
|
||||
if (foco) {
|
||||
map_da5e1542c7ab541155af4f4c041e9c23.setView(novaPosicao, map_da5e1542c7ab541155af4f4c041e9c23.getZoom());
|
||||
map_9167a3f59236bbe3ca57b08de1d97258.setView(novaPosicao, map_9167a3f59236bbe3ca57b08de1d97258.getZoom());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -268,7 +268,7 @@
|
|||
marcadorDinamico.setRotationAngle(angulo);
|
||||
|
||||
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
|
||||
map_da5e1542c7ab541155af4f4c041e9c23.setView(novaPosicao, map_da5e1542c7ab541155af4f4c041e9c23.getZoom());*/
|
||||
map_9167a3f59236bbe3ca57b08de1d97258.setView(novaPosicao, map_9167a3f59236bbe3ca57b08de1d97258.getZoom());*/
|
||||
});
|
||||
|
||||
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {
|
||||
|
|
|
|||
|
|
@ -74,6 +74,12 @@ class CameraOak:
|
|||
|
||||
if self.tem_depth:
|
||||
self.q_depth = self.device.getOutputQueue(name="depth", maxSize=1, blocking=False)
|
||||
|
||||
if self.tem_imu:
|
||||
self.q_imu = self.device.getOutputQueue(name="imu", maxSize=50, blocking=False)
|
||||
self.imu = IMUCamera(self.q_imu)
|
||||
|
||||
if self.dispositivo == T_Code.Snr:
|
||||
self.parametros = {
|
||||
"rgb_width": 1920,
|
||||
"rgb_height": 1080,
|
||||
|
|
@ -90,10 +96,12 @@ class CameraOak:
|
|||
}
|
||||
self._set_calib()
|
||||
_camera["parametros"] = self.parametros
|
||||
|
||||
if self.tem_imu:
|
||||
self.q_imu = self.device.getOutputQueue(name="imu", maxSize=50, blocking=False)
|
||||
self.imu = IMUCamera(self.q_imu)
|
||||
elif self.dispositivo == T_Code.Cam:
|
||||
self.parametros = {
|
||||
"rgb_width": 1920,
|
||||
"rgb_height": 1080,
|
||||
}
|
||||
_camera["parametros"] = self.parametros
|
||||
|
||||
self.iniciado = True
|
||||
_camera["iniciado"] = True
|
||||
|
|
@ -243,55 +251,56 @@ class CameraOak:
|
|||
"executando": False,
|
||||
"velocidade": ""
|
||||
}
|
||||
try:
|
||||
dev = self.device
|
||||
temp = dev.getChipTemperature().average
|
||||
ddr = dev.getDdrMemoryUsage().used / 1024.0 / 1024.0
|
||||
running = dev.isPipelineRunning()
|
||||
speed = dev.getUsbSpeed().name
|
||||
performance = {
|
||||
"temperatura": temp,
|
||||
"memoria_usada": ddr,
|
||||
"executando": running,
|
||||
"velocidade": speed
|
||||
}
|
||||
# 🔸 Temperatura (> 60 °C começa a penalizar)
|
||||
if temp >= 80:
|
||||
motivos.append(f"Temperatura crítica: {temp:.1f} °C")
|
||||
saude -= 30
|
||||
elif temp >= 70:
|
||||
motivos.append(f"Temperatura elevada: {temp:.1f} °C")
|
||||
saude -= 15
|
||||
elif temp >= 60:
|
||||
motivos.append(f"Temperatura acima do ideal: {temp:.1f} °C")
|
||||
saude -= 5
|
||||
if conectado:
|
||||
try:
|
||||
dev = self.device
|
||||
temp = dev.getChipTemperature().average
|
||||
ddr = dev.getDdrMemoryUsage().used / 1024.0 / 1024.0
|
||||
running = dev.isPipelineRunning()
|
||||
speed = dev.getUsbSpeed().name
|
||||
performance = {
|
||||
"temperatura": temp,
|
||||
"memoria_usada": ddr,
|
||||
"executando": running,
|
||||
"velocidade": speed
|
||||
}
|
||||
# 🔸 Temperatura (> 60 °C começa a penalizar)
|
||||
if temp >= 80:
|
||||
motivos.append(f"Temperatura crítica: {temp:.1f} °C")
|
||||
saude -= 30
|
||||
elif temp >= 70:
|
||||
motivos.append(f"Temperatura elevada: {temp:.1f} °C")
|
||||
saude -= 15
|
||||
elif temp >= 60:
|
||||
motivos.append(f"Temperatura acima do ideal: {temp:.1f} °C")
|
||||
saude -= 5
|
||||
|
||||
# 🔸 Memória DDR (> 300 MB começa a penalizar)
|
||||
if ddr >= 500:
|
||||
motivos.append(f"Memória DDR crítica: {ddr:.1f} MB")
|
||||
saude -= 30
|
||||
elif ddr >= 400:
|
||||
motivos.append(f"Memória DDR elevada: {ddr:.1f} MB")
|
||||
saude -= 15
|
||||
elif ddr >= 300:
|
||||
motivos.append(f"Memória DDR acima do ideal: {ddr:.1f} MB")
|
||||
saude -= 5
|
||||
# 🔸 Memória DDR (> 300 MB começa a penalizar)
|
||||
if ddr >= 500:
|
||||
motivos.append(f"Memória DDR crítica: {ddr:.1f} MB")
|
||||
saude -= 30
|
||||
elif ddr >= 400:
|
||||
motivos.append(f"Memória DDR elevada: {ddr:.1f} MB")
|
||||
saude -= 15
|
||||
elif ddr >= 300:
|
||||
motivos.append(f"Memória DDR acima do ideal: {ddr:.1f} MB")
|
||||
saude -= 5
|
||||
|
||||
# 🔸 Pipeline inativa
|
||||
if not running:
|
||||
motivos.append("Pipeline parada")
|
||||
saude -= 20
|
||||
# 🔸 Pipeline inativa
|
||||
if not running:
|
||||
motivos.append("Pipeline parada")
|
||||
saude -= 20
|
||||
|
||||
# 🔸 USB Speed
|
||||
if speed.lower() not in ["super", "superplus"]: # USB 3.x
|
||||
motivos.append(f"USB lenta: {speed}")
|
||||
saude -= 15
|
||||
except Exception as e:
|
||||
self.mostrar_log(f"Erro ao requisitar dados da camera para atualizar saude")
|
||||
if "Communication exception" in str(e) or "X_LINK_ERROR" in str(e):
|
||||
conectado = False
|
||||
# 🔸 USB Speed
|
||||
if speed.lower() not in ["super", "superplus"]: # USB 3.x
|
||||
motivos.append(f"USB lenta: {speed}")
|
||||
saude -= 15
|
||||
|
||||
frame, resultado = self.requisitar_frame_rgb()
|
||||
frame, resultado = self.requisitar_frame_rgb()
|
||||
except Exception as e:
|
||||
self.mostrar_log(f"Erro ao requisitar dados da camera para atualizar saude")
|
||||
if "Communication exception" in str(e) or "X_LINK_ERROR" in str(e):
|
||||
conectado = False
|
||||
|
||||
if not conectado:
|
||||
motivos.append("desconectado")
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import time
|
||||
import depthai as dai
|
||||
from shared.enums import StatusModulo, T_Code, VisualWorkerCommandType
|
||||
from shared.enums import StatusModulo, T_Code, VisualWorkerCommandType, WeedWorkerCommandType
|
||||
from shared.contexto_global_redis import ContextoGlobalRedis, CtxKey, CmdKey
|
||||
|
||||
class CameraManager:
|
||||
|
|
@ -45,10 +45,15 @@ class CameraManager:
|
|||
for cam in cameras_mapeadas.values():
|
||||
if cam.get("dispositivo", T_Code.Vzo.value) == T_Code.Snr.value:
|
||||
ContextoGlobalRedis.publicar_comando(CmdKey.VisualWorkerRx, { "cmd": VisualWorkerCommandType.AtualizarSaudeCamera.value } )
|
||||
elif cam.get("dispositivo", T_Code.Vzo.value) == T_Code.Cam.value:
|
||||
ContextoGlobalRedis.publicar_comando(CmdKey.WeedWorkerRx, { "cmd": WeedWorkerCommandType.AtualizarSaudeCamera.value } )
|
||||
|
||||
visual_worker_camera_id = ContextoGlobalRedis.get_operacao().get("Snr", {}).get("mx_id")
|
||||
visual_worker_camera_id = ContextoGlobalRedis.get_equipamento().get("camera_caminho_id")
|
||||
if visual_worker_camera_id is not None and visual_worker_camera_id in dispositivos_serializados:
|
||||
ContextoGlobalRedis.publicar_comando(CmdKey.VisualWorkerRx, { "cmd": VisualWorkerCommandType.IniciarCameraManager.value, "params": visual_worker_camera_id } )
|
||||
weed_worker_camera_id = ContextoGlobalRedis.get_equipamento().get("camera_solo_id")
|
||||
if weed_worker_camera_id is not None and weed_worker_camera_id in dispositivos_serializados:
|
||||
ContextoGlobalRedis.publicar_comando(CmdKey.WeedWorkerRx, { "cmd": WeedWorkerCommandType.IniciarCameraManager.value, "params": weed_worker_camera_id } )
|
||||
|
||||
|
||||
def definir_saude_camera(mx_id: str, status: StatusModulo, saude: int, motivos: list, rodando: bool, performance: dict):
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ from manager_worker.main import main as iniciar_manager_worker
|
|||
from health_worker.main import main as iniciar_health_worker
|
||||
from visual_worker.main import main as iniciar_visual_worker
|
||||
from camera_worker.main import main as iniciar_camera_worker
|
||||
from weed_worker.main import main as iniciar_weed_worker
|
||||
from shared.contexto_global_redis import ContextoGlobalRedis
|
||||
|
||||
#sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||||
|
|
@ -18,6 +19,7 @@ def main():
|
|||
Process(target=iniciar_health_worker, name="HealthWorker"),
|
||||
Process(target=iniciar_visual_worker, name="VisualWorker"),
|
||||
Process(target=iniciar_camera_worker, name="CameraWorker"),
|
||||
Process(target=iniciar_weed_worker, name="WeedWorker"),
|
||||
]
|
||||
|
||||
for p in processos:
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ class CtxKey(str, Enum):
|
|||
DadosControle = "ctx:dados_controle"
|
||||
DadosEquipamento = "ctx:dados_equipamento"
|
||||
DadosVisualWorker = "ctx:dados_visual_worker"
|
||||
DadosWeedWorker = "ctx:dados_weed_worker"
|
||||
DadosManagerWorker = "ctx:dados_manager_worker"
|
||||
DadosHealthWorker = "ctx:dados_health_worker"
|
||||
DadosCameraWorker = "ctx:dados_camera_worker"
|
||||
|
|
@ -29,6 +30,8 @@ class CmdKey(str, Enum):
|
|||
CameraWorkerRx = "cmd_rx:camera_worker"
|
||||
ManagerWorkerTx = "cmd_tx:manager_worker"
|
||||
ManagerWorkerRx = "cmd_rx:manager_worker"
|
||||
WeedWorkerTx = "cmd_tx:weed_worker"
|
||||
WeedWorkerRx = "cmd_rx:weed_worker"
|
||||
|
||||
|
||||
def mostrar_log(mensagem):
|
||||
|
|
|
|||
|
|
@ -23,6 +23,14 @@ class ManagerWorkerCommandType(IntEnum):
|
|||
EnviarDadosControle = 4
|
||||
FinalizarOperacao = 5
|
||||
|
||||
class WeedWorkerCommandType(IntEnum):
|
||||
ScriptCarregado = 1
|
||||
IniciarCameraManager = 2
|
||||
AtualizarSaudeCamera = 3
|
||||
GetCameraFrame = 4
|
||||
SaveCameraFrames = 5
|
||||
EnviarDadosControle = 6
|
||||
|
||||
class ModoOperacao(IntEnum):
|
||||
NaoDefinido = 0
|
||||
Manual = 1
|
||||
|
|
@ -146,26 +154,9 @@ class TipoPontoRua(IntEnum):
|
|||
CruvaEntreCorredores = 6
|
||||
Desvio = 7
|
||||
|
||||
# Visual Worker
|
||||
class VisualWorkerFrameType(IntEnum):
|
||||
class CameraFrameType(IntEnum):
|
||||
Rgb = 1
|
||||
Heatmap = 2
|
||||
RadarTopDown = 3
|
||||
Segmentacao = 4
|
||||
Debug = 5
|
||||
|
||||
class VisualWorkerTipoDeteccao(IntEnum):
|
||||
SEGURO = 1
|
||||
OBSTACULO = 2
|
||||
DEPRESSAO = 3
|
||||
|
||||
class VisualWorkerTipoRegiaoRadar(IntEnum):
|
||||
SOLO = 1
|
||||
AEREO = 2
|
||||
|
||||
class VisualWorkerTipoAnalise(IntEnum):
|
||||
ANOMALIA = 1
|
||||
SOLO = 2
|
||||
RADAR_2D = 3
|
||||
SEGMENTACAO_SEMANTICA = 4
|
||||
MATRIZ_CONFIANCA = 5
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ from visual_worker.processamento.analise_solo import AnaliseSoloManager
|
|||
from visual_worker.processamento.analise_anomalias import AnaliseAnomaliasManager
|
||||
from visual_worker.processamento.radar_top_down import Radar2DManager
|
||||
from visual_worker.processamento.segmentacao_semantica import ClassesSegmentacao, SegmentacaoManager
|
||||
from shared.enums import StatusModulo, T_Code, VisualWorkerFrameType
|
||||
from shared.enums import StatusModulo, T_Code, CameraFrameType
|
||||
from shared.utils import analisar_linhas_por_profundidade, decode_image_base64, encode_image_base64
|
||||
from shared.gps_handler import GPSHandler
|
||||
from camera_worker.camera_oak import CameraOak
|
||||
|
|
@ -130,35 +130,35 @@ class CameraManager:
|
|||
return gerar_heatmap(frame, self.camera.parametros["distancia_maxima"]), timestamp, res
|
||||
return None, None, None
|
||||
|
||||
def get_select_frame(self, tipo: VisualWorkerFrameType):
|
||||
def get_select_frame(self, tipo: CameraFrameType):
|
||||
f = None
|
||||
t = None
|
||||
if tipo == VisualWorkerFrameType.Rgb:
|
||||
if tipo == CameraFrameType.Rgb:
|
||||
f, t, _ = self.get_rgb_frame()
|
||||
f = encode_image_base64(f)
|
||||
elif tipo == VisualWorkerFrameType.Heatmap:
|
||||
elif tipo == CameraFrameType.Heatmap:
|
||||
f, t, _ = self.get_heatmap_frame()
|
||||
f = encode_image_base64(f)
|
||||
elif tipo == VisualWorkerFrameType.RadarTopDown:
|
||||
elif tipo == CameraFrameType.RadarTopDown:
|
||||
f = self._ultima_analise_radar.get("frame", {}).get("frame")
|
||||
t = self._ultima_analise_radar.get("timestamp")
|
||||
elif tipo == VisualWorkerFrameType.Segmentacao:
|
||||
elif tipo == CameraFrameType.Segmentacao:
|
||||
f = self._ultima_analise_segmentacao.get("frame", {}).get("frame")
|
||||
t = self._ultima_analise_segmentacao.get("timestamp")
|
||||
return f, t
|
||||
|
||||
def _iniciar_loop_analise_continua(self, freq):
|
||||
def loop():
|
||||
ultima_atualizacao = 0
|
||||
ultima_atualizacao_saude = 0
|
||||
while True:
|
||||
if self.camera is None:
|
||||
time.sleep(5)
|
||||
continue
|
||||
|
||||
t0 = time.time()
|
||||
if (t0 - ultima_atualizacao) >= 1:
|
||||
if (t0 - ultima_atualizacao_saude) >= 1:
|
||||
self.camera.atualizar_saude()
|
||||
ultima_atualizacao = time.time()
|
||||
ultima_atualizacao_saude = time.time()
|
||||
try:
|
||||
status = StatusModulo((self.camera.ultima_saude or {}).get("status", StatusModulo.DESCONECTADO.value))
|
||||
if status == StatusModulo.DESCONECTADO:
|
||||
|
|
@ -506,7 +506,7 @@ class CameraManager:
|
|||
if nome is not None and nome != "":
|
||||
frame_name = nome
|
||||
|
||||
if VisualWorkerFrameType.Rgb.value in tipos:
|
||||
if CameraFrameType.Rgb.value in tipos:
|
||||
rgb_frame, rgb_ts, rgb_res = self.get_rgb_frame()
|
||||
if rgb_frame is not None and rgb_res["frame_valido"]:
|
||||
nome_rgb = f"{frame_name}_rgb.jpeg"
|
||||
|
|
@ -514,7 +514,7 @@ class CameraManager:
|
|||
cv2.imwrite(caminho_rgb, rgb_frame)
|
||||
frames_salvos.append(caminho_rgb)
|
||||
|
||||
if VisualWorkerFrameType.Heatmap.value in tipos:
|
||||
if CameraFrameType.Heatmap.value in tipos:
|
||||
heatmap_frame, heatmap_ts, heatmap_res = self.get_heatmap_frame()
|
||||
if heatmap_frame is not None and heatmap_res["frame_valido"]:
|
||||
nome_heatmap = f"{frame_name}_heatmap.jpeg"
|
||||
|
|
@ -522,12 +522,12 @@ class CameraManager:
|
|||
cv2.imwrite(caminho_heatmap, heatmap_frame)
|
||||
frames_salvos.append(caminho_heatmap)
|
||||
|
||||
if VisualWorkerFrameType.RadarTopDown.value in tipos:
|
||||
if CameraFrameType.RadarTopDown.value in tipos:
|
||||
frame = self._salvar_frame_analise(frame_name, self._ultima_analise_radar, "radar", pasta)
|
||||
if frame is not None:
|
||||
frames_salvos.append(frame)
|
||||
|
||||
if VisualWorkerFrameType.Segmentacao.value in tipos:
|
||||
if CameraFrameType.Segmentacao.value in tipos:
|
||||
frame = self._salvar_frame_analise(frame_name, self._ultima_analise_segmentacao, "segmentacao", pasta)
|
||||
if frame is not None:
|
||||
frames_salvos.append(frame)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ def main():
|
|||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||
print("🔎 Caminho sys.path:", os.path.abspath(os.path.join(os.path.dirname(__file__), "..")), "VisualWorker")
|
||||
|
||||
from shared.enums import VisualWorkerCommandType, VisualWorkerFrameType
|
||||
from shared.enums import VisualWorkerCommandType, CameraFrameType
|
||||
from visual_worker.config import mostrar_log, get_camera_manager, iniciar_camera_manager
|
||||
from shared.contexto_global_redis import ContextoGlobalRedis, CmdKey, CtxKey
|
||||
|
||||
|
|
@ -49,7 +49,7 @@ def main():
|
|||
elif acao == VisualWorkerCommandType.AtualizarSaudeCamera:
|
||||
get_camera_manager().atualizar_saude_camera()
|
||||
elif acao == VisualWorkerCommandType.GetCameraFrame:
|
||||
tipo = VisualWorkerFrameType(dados.get("params", VisualWorkerFrameType.Rgb.value))
|
||||
tipo = CameraFrameType(dados.get("params", CameraFrameType.Rgb.value))
|
||||
base64_img, ts = get_camera_manager().get_select_frame(tipo)
|
||||
if base64_img is not None:
|
||||
resposta = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue