ajustes na projecao de trajetoria

This commit is contained in:
Diego Freitas 2024-05-07 09:11:26 -03:00
parent 0e852e69e2
commit a912f319dd
39 changed files with 730 additions and 225 deletions

Binary file not shown.

View File

@ -3,32 +3,24 @@
"WorkspaceRootPath": "C:\\ZendionINC\\agrobot_base\\AgroBase\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\mapasmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\mapasmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\services\\gpsservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\gpsservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\gpsmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\gpsmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\operacoes\\frmoperacaomanual.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\operacoes\\frmoperacaomanual.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\models\\operacoes\\operacaomapagpsmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\operacoes\\operacaomapagpsmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\operacoes\\operacaomapagpsmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\forms\\frmsimulacaomapagps.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmsimulacaomapagps.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\models\\mapasmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\mapasmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\forms\\frmsimulacaomapagps.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmsimulacaomapagps.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}|Form"
},
{
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|C:\\ZendionINC\\agrobot_base\\AgroBase\\agrobase\\services\\gpsservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\gpsservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@ -38,76 +30,50 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 2,
"SelectedChildIndex": 0,
"Children": [
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "frmOperacaoManual.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmOperacaoManual.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\Operacoes\\frmOperacaoManual.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\Operacoes\\frmOperacaoManual.cs",
"RelativeToolTip": "AgroBase\\Forms\\Operacoes\\frmOperacaoManual.cs",
"ViewState": "AQIAAJsBAAAAAAAAAAAhwLIBAAB0AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-05T23:21:24.81Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "GPSModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\GPSModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\GPSModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\GPSModel.cs",
"RelativeToolTip": "AgroBase\\Models\\GPSModel.cs",
"ViewState": "AQIAAAQAAAAAAAAAAAAwwBIAAAA2AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-05T23:20:53.781Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "MapasModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\MapasModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\MapasModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\MapasModel.cs",
"RelativeToolTip": "AgroBase\\Models\\MapasModel.cs",
"ViewState": "AQIAAAQCAAAAAAAAAAD4vxECAAAQAAAA",
"Title": "OperacaoMapaGPSModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoMapaGPSModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\Operacoes\\OperacaoMapaGPSModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoMapaGPSModel.cs",
"RelativeToolTip": "AgroBase\\Models\\Operacoes\\OperacaoMapaGPSModel.cs",
"ViewState": "AQIAAAEBAAAAAAAAAAAuwBwBAABuAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-05T22:49:57.884Z",
"WhenOpened": "2024-05-06T19:42:55.483Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"DocumentIndex": 4,
"Title": "GPSService.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\GPSService.cs",
"RelativeDocumentMoniker": "AgroBase\\Services\\GPSService.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\GPSService.cs",
"RelativeToolTip": "AgroBase\\Services\\GPSService.cs",
"ViewState": "AQIAAMwAAAAAAAAAAAAmwO0AAAAyAAAA",
"ViewState": "AQIAAMAAAAAAAAAAAAAAANgAAAA0AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-05T13:17:27.166Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"DocumentIndex": 1,
"Title": "frmSimulacaoMapaGPS.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmSimulacaoMapaGPS.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmSimulacaoMapaGPS.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmSimulacaoMapaGPS.cs",
"RelativeToolTip": "AgroBase\\Forms\\frmSimulacaoMapaGPS.cs",
"ViewState": "AQIAABIAAAAAAAAAAAArwHEAAAAIAAAA",
"ViewState": "AQIAALMAAAAAAAAAAIAywDkBAAAMAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-03T22:41:17.732Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"DocumentIndex": 3,
"Title": "frmSimulacaoMapaGPS.cs [Design]",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmSimulacaoMapaGPS.cs",
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmSimulacaoMapaGPS.cs",
@ -119,15 +85,15 @@
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "OperacaoMapaGPSModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoMapaGPSModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\Operacoes\\OperacaoMapaGPSModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoMapaGPSModel.cs",
"RelativeToolTip": "AgroBase\\Models\\Operacoes\\OperacaoMapaGPSModel.cs",
"ViewState": "AQIAAFMAAAAAAAAAAAAqwOMAAABFAAAA",
"DocumentIndex": 2,
"Title": "MapasModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\MapasModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\MapasModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\MapasModel.cs",
"RelativeToolTip": "AgroBase\\Models\\MapasModel.cs",
"ViewState": "AQIAADgAAAAAAAAAAIAywMYAAAAMAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-05-03T22:26:26.456Z",
"WhenOpened": "2024-05-06T16:37:41.166Z",
"EditorCaption": ""
}
]

View File

@ -48,6 +48,10 @@
this.lblDirecao = new System.Windows.Forms.Label();
this.lblStatus = new System.Windows.Forms.Label();
this.gpbGPS = new System.Windows.Forms.GroupBox();
this.label1 = new System.Windows.Forms.Label();
this.txtAnguloControle = new System.Windows.Forms.TextBox();
this.lblVelocidade = new System.Windows.Forms.Label();
this.txtVelocidade = new System.Windows.Forms.TextBox();
this.btnAcrescentarGPS = new System.Windows.Forms.Button();
this.lblDistancia = new System.Windows.Forms.Label();
this.txtDistanciaGPS = new System.Windows.Forms.TextBox();
@ -62,10 +66,6 @@
this.pnlOrientacaoTrajeto = new System.Windows.Forms.Panel();
this.pnlSonar = new System.Windows.Forms.Panel();
this.picSonar = new System.Windows.Forms.PictureBox();
this.txtVelocidade = new System.Windows.Forms.TextBox();
this.lblVelocidade = new System.Windows.Forms.Label();
this.label1 = new System.Windows.Forms.Label();
this.txtAnguloControle = new System.Windows.Forms.TextBox();
this.pnlOpcoes.SuspendLayout();
this.gpbSonar.SuspendLayout();
this.gpbGPS.SuspendLayout();
@ -311,6 +311,46 @@
this.gpbGPS.TabStop = false;
this.gpbGPS.Text = "GPS";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(304, 22);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(102, 16);
this.label1.TabIndex = 27;
this.label1.Text = "Angulo Controle";
//
// txtAnguloControle
//
this.txtAnguloControle.Enabled = false;
this.txtAnguloControle.Location = new System.Drawing.Point(307, 41);
this.txtAnguloControle.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.txtAnguloControle.Name = "txtAnguloControle";
this.txtAnguloControle.Size = new System.Drawing.Size(71, 22);
this.txtAnguloControle.TabIndex = 26;
this.txtAnguloControle.Text = "0";
this.txtAnguloControle.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// lblVelocidade
//
this.lblVelocidade.AutoSize = true;
this.lblVelocidade.Location = new System.Drawing.Point(304, 64);
this.lblVelocidade.Name = "lblVelocidade";
this.lblVelocidade.Size = new System.Drawing.Size(77, 16);
this.lblVelocidade.TabIndex = 25;
this.lblVelocidade.Text = "Velocidade";
//
// txtVelocidade
//
this.txtVelocidade.Enabled = false;
this.txtVelocidade.Location = new System.Drawing.Point(307, 85);
this.txtVelocidade.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.txtVelocidade.Name = "txtVelocidade";
this.txtVelocidade.Size = new System.Drawing.Size(71, 22);
this.txtVelocidade.TabIndex = 24;
this.txtVelocidade.Text = "0";
this.txtVelocidade.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// btnAcrescentarGPS
//
this.btnAcrescentarGPS.Enabled = false;
@ -388,7 +428,7 @@
this.txtLongitude.Name = "txtLongitude";
this.txtLongitude.Size = new System.Drawing.Size(179, 22);
this.txtLongitude.TabIndex = 15;
this.txtLongitude.Text = "-47.2639156835239";
this.txtLongitude.Text = "-47.3815675";
this.txtLongitude.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// txtLatitude
@ -398,7 +438,7 @@
this.txtLatitude.Name = "txtLatitude";
this.txtLatitude.Size = new System.Drawing.Size(179, 22);
this.txtLatitude.TabIndex = 14;
this.txtLatitude.Text = "-22.3397915668518";
this.txtLatitude.Text = "-22.2130615";
this.txtLatitude.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// btnIniciarGPS
@ -458,46 +498,6 @@
this.picSonar.TabIndex = 0;
this.picSonar.TabStop = false;
//
// txtVelocidade
//
this.txtVelocidade.Enabled = false;
this.txtVelocidade.Location = new System.Drawing.Point(307, 85);
this.txtVelocidade.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.txtVelocidade.Name = "txtVelocidade";
this.txtVelocidade.Size = new System.Drawing.Size(71, 22);
this.txtVelocidade.TabIndex = 24;
this.txtVelocidade.Text = "0";
this.txtVelocidade.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// lblVelocidade
//
this.lblVelocidade.AutoSize = true;
this.lblVelocidade.Location = new System.Drawing.Point(304, 64);
this.lblVelocidade.Name = "lblVelocidade";
this.lblVelocidade.Size = new System.Drawing.Size(77, 16);
this.lblVelocidade.TabIndex = 25;
this.lblVelocidade.Text = "Velocidade";
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(304, 22);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(102, 16);
this.label1.TabIndex = 27;
this.label1.Text = "Angulo Controle";
//
// txtAnguloControle
//
this.txtAnguloControle.Enabled = false;
this.txtAnguloControle.Location = new System.Drawing.Point(307, 41);
this.txtAnguloControle.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
this.txtAnguloControle.Name = "txtAnguloControle";
this.txtAnguloControle.Size = new System.Drawing.Size(71, 22);
this.txtAnguloControle.TabIndex = 26;
this.txtAnguloControle.Text = "0";
this.txtAnguloControle.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// frmSimulacaoMapaGPS
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);

View File

@ -166,5 +166,12 @@ namespace AgroBase.Models
Piscando = 2
}
public enum TrajetoriaTipo
{
Rua = 0,
Dinamica = 1,
Geral = 2
}
}
}

View File

@ -20,6 +20,5 @@ namespace AgroBase.Models
public double Orientacao { get; set; }
public int idxRua { get; set; } = -1;
public DirecaoCarroRua DirecaoTrecho { get; set; } = DirecaoCarroRua.Parado;
public bool Passado { get; set; } = false;
}
}

View File

@ -26,6 +26,8 @@ namespace AgroBase.Models
public List<GPSModel> TrajetoriaDinamica { get; set; } = new List<GPSModel>();
public List<string> RuasPercorrer { get; set; } = new List<string>();
public int IdxRuaAtual { get; set; } = 0;
public int IdxUltimoPontoTrajetoria { get; set;} = 0;
public int IdxUltimoPontoTrajetoriaDinamica { get; set;} = 0;
public double DistanciaTotal { get; set; } = 0;
public DirecaoCarroRua DirecaoCaminho
{
@ -34,7 +36,7 @@ namespace AgroBase.Models
DirecaoCarroRua direcaoCaminho = DirecaoCarroRua.Parado;
if (TrajetoriaDinamica.Any())
{
GPSModel PontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(TrajetoriaDinamica);
GPSModel PontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(TrajetoriaDinamica, TrajetoriaTipo.Dinamica);
int idxPontoMaisProximo = TrajetoriaDinamica.IndexOf(PontoMaisProximo);
direcaoCaminho = TrajetoriaDinamica[idxPontoMaisProximo].DirecaoTrecho;
}
@ -72,7 +74,7 @@ namespace AgroBase.Models
{
PontosRua.Reverse();
}
GPSModel PontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(Trajetoria[IdxRuaAtual]);
GPSModel PontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(PontosRua, TrajetoriaTipo.Rua);
int idx = PontosRua.IndexOf(PontoMaisProximo);
foreach (var Ponto in PontosRua)
{
@ -164,8 +166,14 @@ namespace AgroBase.Models
{
if (TrajetoriaDinamica.Any())
{
GPSModel PontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(TrajetoriaDinamica);
GPSModel PontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(TrajetoriaDinamica, TrajetoriaTipo.Dinamica);
int idx = TrajetoriaDinamica.IndexOf(PontoMaisProximo);
if ((idx + 1) >= TrajetoriaDinamica.Count())
{
return 0;
}
double angulo = GPSService.CalcularOrientacao(TrajetoriaDinamica[idx], TrajetoriaDinamica[idx + 1]);
if (angulo == 0)
{
@ -189,6 +197,11 @@ namespace AgroBase.Models
{
get
{
if (IdxRuaAtual >= Trajetoria.Count())
{
return 0;
}
double distancia = 0;
List<GPSModel> RuaEsquerda = new List<GPSModel>();
@ -202,11 +215,12 @@ namespace AgroBase.Models
{
if (IdxRuaAtual > 0)
{
GPSModel pontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(Trajetoria[IdxRuaAtual - 1]);
GPSModel pontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(Trajetoria[IdxRuaAtual - 1], TrajetoriaTipo.Geral);
double distanciaP0 = GPSService.DistanciaEntrePontos(GPSService.UltimaLeitura, pontoMaisProximo);
if (distanciaP0 < Variaveis.OperacaoEmAndamento.OpMapaGPS.ReferencialRuaGPS.MargemLimiteEntradaRua)
{
RuaEsquerda = Trajetoria[IdxRuaAtual - 1];
Trajetoria[IdxRuaAtual - 1].ForEach(x => RuaEsquerda.Add(x));
RuaEsquerda.Reverse();
}
}
}
@ -228,6 +242,11 @@ namespace AgroBase.Models
{
get
{
if (IdxRuaAtual >= Trajetoria.Count())
{
return 0;
}
double distancia = 0;
List<GPSModel> RuaDireita = new List<GPSModel>();
@ -235,13 +254,14 @@ namespace AgroBase.Models
{
if (DirecaoCaminho == DirecaoCarroRua.Volta)
{
RuaDireita = Trajetoria[IdxRuaAtual];
Trajetoria[IdxRuaAtual].ForEach(x => RuaDireita.Add(x));
RuaDireita.Reverse();
}
else if (DirecaoCaminho == DirecaoCarroRua.Ida)
{
if (IdxRuaAtual > 0)
{
GPSModel pontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(Trajetoria[IdxRuaAtual - 1]);
GPSModel pontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(Trajetoria[IdxRuaAtual - 1], TrajetoriaTipo.Geral);
double distanciaP0 = GPSService.DistanciaEntrePontos(GPSService.UltimaLeitura, pontoMaisProximo);
if (distanciaP0 < Variaveis.OperacaoEmAndamento.OpMapaGPS.ReferencialRuaGPS.MargemLimiteEntradaRua)
{
@ -448,7 +468,7 @@ namespace AgroBase.Models
{
GPSModel pontoAtual = GPSService.UltimaLeitura;
GPSModel P0 = GPSService.PontoMaisProximoRuaProjetada(Rua);
GPSModel P0 = GPSService.PontoMaisProximoRuaProjetada(Rua, TrajetoriaTipo.Geral);
int idxP0 = Rua.IndexOf(P0);
bool PontoProximo = idxP0 < Rua.Count() - 1;
bool PontoAnterior = idxP0 > 0;
@ -480,6 +500,14 @@ namespace AgroBase.Models
double anguloProjetar = GPSService.CalcularOrientacao(RuaAtual.First(), RuaAtual.Skip(1).First()) + 90;
List<GPSModel> RuaProjetada = ProjetarRua(RuaAtual, distanciaEntreRuas, anguloProjetar);
if (Caminho.Any())
{
double dist0 = GPSService.DistanciaEntrePontos(Caminho[Caminho.Count() - 1], RuaProjetada[0]);
double dist1 = GPSService.DistanciaEntrePontos(Caminho[Caminho.Count() - 1], RuaProjetada[RuaProjetada.Count() - 1]);
direcaoRua = dist0 < dist1 ? DirecaoCarroRua.Ida : DirecaoCarroRua.Volta;
}
RuaProjetada.ForEach(x =>
{
x.idxRua = i;
@ -496,7 +524,7 @@ namespace AgroBase.Models
if (!Caminho.Any())
{
GPSModel PontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(RuaProjetada);
GPSModel PontoMaisProximo = GPSService.PontoMaisProximoRuaProjetada(RuaProjetada, TrajetoriaTipo.Rua);
int idxPontoMaisProximo = RuaProjetada.IndexOf(PontoMaisProximo);
GPSModel inicio = GPSService.UltimaLeitura;
@ -506,7 +534,7 @@ namespace AgroBase.Models
{
//_caminho.Add(PrimeiroPonto);
List<GPSModel> _pontos = GPSService.InterpolarPontos(inicio, PrimeiroPonto, 1.0);
if (GPSService.CompararDirecaoTrajeto(_pontos, RuaProjetada))
if (_pontos.Count() == 1 || GPSService.CompararDirecaoTrajeto(_pontos, RuaProjetada))
{
_caminho.AddRange(_pontos);
}
@ -524,13 +552,22 @@ namespace AgroBase.Models
_caminho.ForEach(x => x.DirecaoTrecho = direcaoRua);
Caminho.AddRange(_caminho);
direcaoRua = direcaoRua == DirecaoCarroRua.Ida ? DirecaoCarroRua.Volta : DirecaoCarroRua.Ida;
//direcaoRua = direcaoRua == DirecaoCarroRua.Ida ? DirecaoCarroRua.Volta : DirecaoCarroRua.Ida;
}
else
{
List<GPSModel> _caminho = new List<GPSModel>();
double distancia = GPSService.DistanciaEntrePontos(GPSService.UltimaLeitura, PrimeiroPonto);
if (distancia > Variaveis.OperacaoEmAndamento.OpMapaGPS.ReferencialRuaGPS.MargemLimiteEntradaRua * 2)
// Verifica se a distância entre o ultimo ponto da rua anterior e o primeiro ponto da nova rua é curto o bastante para gerar a curva de manobra
double distancia = GPSService.DistanciaEntrePontos(Caminho[Caminho.Count() - 1], PrimeiroPonto);
bool distanciaMinima = distancia < Variaveis.OperacaoEmAndamento.OpMapaGPS.ReferencialRuaGPS.MargemLimiteEntradaRua * 2;
// Verifica se o angulo formado entre a rua anterior e a rua atual é grande o bastante para gerar a curva de manobra
double anguloEntreRuas = GPSService.CalcularOrientacao(Caminho[Caminho.Count() - 1], PrimeiroPonto);
double anguloFinalRuaAnterior = GPSService.CalcularOrientacao(Caminho[Caminho.Count() - 2], Caminho[Caminho.Count() - 1]);
double difAngulo = anguloFinalRuaAnterior - anguloEntreRuas;
bool anguloMinimo = difAngulo >= -45 && difAngulo <= 45;
if (distanciaMinima && !anguloMinimo)
{
GPSModel P0 = CalcularPontoControle(Caminho.Last(), PrimeiroPonto, distanciaEntreRuas * 2);
List<GPSModel> CurvaConexao = GerarCurvaConexao(Caminho.Last(), PrimeiroPonto, P0, 6);
@ -548,7 +585,7 @@ namespace AgroBase.Models
_caminho.ForEach(x => x.DirecaoTrecho = x.DirecaoTrecho != DirecaoCarroRua.Manobra ? direcaoRua : x.DirecaoTrecho);
Caminho.AddRange(_caminho);
direcaoRua = direcaoRua == DirecaoCarroRua.Ida ? DirecaoCarroRua.Volta : DirecaoCarroRua.Ida;
//direcaoRua = direcaoRua == DirecaoCarroRua.Ida ? DirecaoCarroRua.Volta : DirecaoCarroRua.Ida;
}
}
@ -563,6 +600,7 @@ namespace AgroBase.Models
TrajetoriaDinamica.Add(x);
}
});
Variaveis.OperacaoEmAndamento.Mapa.IdxUltimoPontoTrajetoriaDinamica = 0;
if (Variaveis.OperacaoEmAndamento.Sensoriamento.SonarFrontal.DesvioNecessario)
{

View File

@ -1,9 +1,12 @@
using AgroBase.Forms.Operacoes;
using AgroBase.Models.Modules;
using AgroBase.Services;
using CefSharp.DevTools.Database;
using Emgu.CV.ML;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
@ -35,8 +38,6 @@ namespace AgroBase.Models.Operacoes
StatusCarroMapa.CaminhandoRua,
StatusCarroMapa.SaindoRua
};
public double PesoOrientacaoDentroRua { get; } = 0.3;
public double PesoLateralDentroRua { get; } = 0.7;
public void AtualizarDadosControle()
@ -235,16 +236,15 @@ namespace AgroBase.Models.Operacoes
Sensoriamento.AnguloDif = erroOrientacao;
// Calcule o erro lateral baseado nas distâncias
double erroLateral = Variaveis.OperacaoEmAndamento.Mapa.DistanciaEsquerda - Variaveis.OperacaoEmAndamento.Mapa.DistanciaDireita;
double erroPosicaoLateral = erroLateral * (StatusDentroRua.Contains(statusCarroRua) ? 10 : 1);
// Combina os erros. Ajuste os pesos conforme necessário para o seu caso específico.
double pesoOrientacao = erroPosicaoLateral == 0 ? 1 : StatusDentroRua.Contains(statusCarroRua) ? PesoOrientacaoDentroRua : 1 - PesoOrientacaoDentroRua;
double pesoPosicaoLateral = erroPosicaoLateral == 0 ? 0 : StatusDentroRua.Contains(statusCarroRua) ? PesoLateralDentroRua : 1 - PesoLateralDentroRua;
double erroCombinado = (erroOrientacao * pesoOrientacao) + (erroPosicaoLateral * pesoPosicaoLateral);
double erroCombinado = CalcularErroCombinado(erroLateral, erroOrientacao, anguloCarro, statusCarroRua);
// Atualiza o PID com o erro combinado
if (statusCarroRua != StatusCarroMapa.Parado)
@ -277,6 +277,61 @@ namespace AgroBase.Models.Operacoes
}
private double CalcularErroCombinado(double erroLateral, double erroOrientacao, double anguloCarro, StatusCarroMapa statusCarroRua)
{
bool carroDentroRua = StatusDentroRua.Contains(statusCarroRua);
// Manter o erro lateral sempre com duas casas decimais
double multiplicadorErroLateral = erroLateral < 1 ? 10 : erroLateral > 10 && erroLateral < 100 ? 0 : erroLateral > 100 ? 0.1 : 1;
double erroPosicaoLateral =
Variaveis.OperacaoEmAndamento.Mapa.Trajetoria.Count() == 1 ? 0 :
(erroLateral * (carroDentroRua ? multiplicadorErroLateral : 1));
double PesoLateralDentroRua = erroPosicaoLateral / 10;
if (PesoLateralDentroRua > 1)
{
PesoLateralDentroRua = 1;
}
if (PesoLateralDentroRua < 0)
{
PesoLateralDentroRua *= -1;
}
double PesoOrientacaoDentroRua = 1 - PesoLateralDentroRua;
// Combina os erros. Ajuste os pesos conforme necessário para o seu caso específico.
/*double pesoOrientacao = erroPosicaoLateral == 0 ? 1 : carroDentroRua ? PesoOrientacaoDentroRua : 1 - PesoOrientacaoDentroRua;
double pesoPosicaoLateral = erroPosicaoLateral == 0 ? 0 : carroDentroRua ? PesoLateralDentroRua : 1 - PesoLateralDentroRua;*/
double erroCombinado = (erroOrientacao * PesoOrientacaoDentroRua) + (erroPosicaoLateral * PesoLateralDentroRua);
Direcao direcaoVirar = erroCombinado < anguloCarro ? Direcao.Esquerda : Direcao.Direita;
double erroComparar = erroCombinado < 0 ? erroCombinado * -1 : erroCombinado;
if (erroCombinado > 30 && false)
{
if (direcaoVirar == Direcao.Esquerda && Variaveis.OperacaoEmAndamento.Mapa.DistanciaEsquerda > Variaveis.OperacaoEmAndamento.Mapa.DistanciaDireita)
{
erroCombinado -= 360;
/*if (erroCombinado < 0)
{
erroCombinado *= -1;
}*/
}
else if (direcaoVirar == Direcao.Direita && Variaveis.OperacaoEmAndamento.Mapa.DistanciaDireita > Variaveis.OperacaoEmAndamento.Mapa.DistanciaEsquerda)
{
erroCombinado -= 360;
/*if (erroCombinado < 0)
{
erroCombinado *= -1;
}*/
}
}
direcaoVirar = erroCombinado < anguloCarro ? Direcao.Esquerda : Direcao.Direita;
return erroCombinado;
}
public void CalculaDadosMovimentacaoAutonoma()
{
var statusAtual = ReferencialRuaGPS.StatusAtual;
@ -399,6 +454,7 @@ namespace AgroBase.Models.Operacoes
if (GPSService.CompararDirecaoTrajeto(trechoCarro, trechoCaminho))
{
Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual++;
Variaveis.OperacaoEmAndamento.Mapa.IdxUltimoPontoTrajetoria = 0;
ManobraConcluida = true;
etapaAtual = StatusCarroMapa.Direcionando;
Variaveis.OperacaoEmAndamento.Mapa.TrajetoriaDinamica.Clear();
@ -408,67 +464,74 @@ namespace AgroBase.Models.Operacoes
// Se o robô não estiver dentro da entrelinha de cana
else if (!dentroDaRua)
{
// Está próximo o bastante e alinhado para entrar na rua
if (NaMargemEntradaRua)
if (Variaveis.OperacaoEmAndamento.Mapa.TrajetoriaDinamica.Count() <= 3)
{
DirecaoCarroRua direcao = Direcao;
// Está mais próximo do ponto inicial da rota, e a direção do carro é IDA ou então PARADO, logo está entrando na rua, do começo para o final
if (ExtremoMaisProximo == 0 && (direcao == DirecaoCarroRua.Ida || direcao == DirecaoCarroRua.Parado) && etapaAtual != StatusCarroMapa.SaindoRua)
etapaAtual = StatusCarroMapa.Parado;
Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual++;
}
else
{// Está próximo o bastante e alinhado para entrar na rua
if (NaMargemEntradaRua)
{
etapaAtual = StatusCarroMapa.EntrandoRua;
}
// Está mais próximo do ponto final da rota, e a direção do carro é VOLTA ou então PARADO, logo está entrando na rua, do final para o começo
else if (ExtremoMaisProximo == 1 && (direcao == DirecaoCarroRua.Volta || direcao == DirecaoCarroRua.Parado) && etapaAtual != StatusCarroMapa.SaindoRua)
{
etapaAtual = StatusCarroMapa.EntrandoRua;
}
// Está mais próximo ao ponto final da rua, e a direção do carro é IDA, mas a rua será iniciada no sentido VOLTA, então para o carro para que ele vire e entre na rua
/*else if (ExtremoMaisProximo == 1 && (direcao == DirecaoCarroRua.Ida && Variaveis.OperacaoEmAndamento.DirecaoCaminho == DirecaoCarroRua.Volta))
{
etapaAtual = StatusCarroMapa.Manobrando;
}
else if (ExtremoMaisProximo == 0 && (direcao == DirecaoCarroRua.Volta && Variaveis.OperacaoEmAndamento.DirecaoCaminho == DirecaoCarroRua.Ida))
{
etapaAtual = StatusCarroMapa.Manobrando;
}*/
// Robô não está entrando na rua do começo para o fim, nem do fim para o começo
else
{
// Se a etapa anterior era CaminhandoRua, ou seja, robô estava na rua e agora não está mais, então esta saindo da rua
if (_EtapaAtual == StatusCarroMapa.CaminhandoRua)
DirecaoCarroRua direcao = Direcao;
// Está mais próximo do ponto inicial da rota, e a direção do carro é IDA ou então PARADO, logo está entrando na rua, do começo para o final
if (ExtremoMaisProximo == 0 && (direcao == DirecaoCarroRua.Ida || direcao == DirecaoCarroRua.Parado) && etapaAtual != StatusCarroMapa.SaindoRua)
{
etapaAtual = StatusCarroMapa.SaindoRua;
etapaAtual = StatusCarroMapa.EntrandoRua;
}
// Se a etapa anterior não for CaminhandoRua, então significa que ele já iniciou a etapa de sair da rua
// Está mais próximo do ponto final da rota, e a direção do carro é VOLTA ou então PARADO, logo está entrando na rua, do final para o começo
else if (ExtremoMaisProximo == 1 && (direcao == DirecaoCarroRua.Volta || direcao == DirecaoCarroRua.Parado) && etapaAtual != StatusCarroMapa.SaindoRua)
{
etapaAtual = StatusCarroMapa.EntrandoRua;
}
// Está mais próximo ao ponto final da rua, e a direção do carro é IDA, mas a rua será iniciada no sentido VOLTA, então para o carro para que ele vire e entre na rua
/*else if (ExtremoMaisProximo == 1 && (direcao == DirecaoCarroRua.Ida && Variaveis.OperacaoEmAndamento.DirecaoCaminho == DirecaoCarroRua.Volta))
{
etapaAtual = StatusCarroMapa.Manobrando;
}
else if (ExtremoMaisProximo == 0 && (direcao == DirecaoCarroRua.Volta && Variaveis.OperacaoEmAndamento.DirecaoCaminho == DirecaoCarroRua.Ida))
{
etapaAtual = StatusCarroMapa.Manobrando;
}*/
// Robô não está entrando na rua do começo para o fim, nem do fim para o começo
else
{
/*// Ainda tem ruas a serem percorridas, logo, o robô precisa realizar a manobra para seguir para a próxima rua
// Se a etapa anterior era CaminhandoRua, ou seja, robô estava na rua e agora não está mais, então esta saindo da rua
if (_EtapaAtual == StatusCarroMapa.CaminhandoRua)
{
etapaAtual = StatusCarroMapa.SaindoRua;
}
// Se a etapa anterior não for CaminhandoRua, então significa que ele já iniciou a etapa de sair da rua
else
{
/*// Ainda tem ruas a serem percorridas, logo, o robô precisa realizar a manobra para seguir para a próxima rua
if (!Variaveis.OperacaoEmAndamento.OpMapaGPS.Concluido)
{
etapaAtual = StatusCarroMapa.Manobrando;
ManobraConcluida = false;
}*/
}
}
}
// Estará se direcionando para o ponto inicial
else
{
// Saiu da margem de saída da rua
if (_EtapaAtual == StatusCarroMapa.SaindoRua)
{
// Ainda tem ruas a serem percorridas, logo, o robô precisa realizar a manobra para seguir para a próxima rua
if (!Variaveis.OperacaoEmAndamento.OpMapaGPS.Concluido)
{
etapaAtual = StatusCarroMapa.Manobrando;
ManobraConcluida = false;
}*/
}
}
}
}
// Estará se direcionando para o ponto inicial
else
{
// Saiu da margem de saída da rua
if (_EtapaAtual == StatusCarroMapa.SaindoRua)
{
// Ainda tem ruas a serem percorridas, logo, o robô precisa realizar a manobra para seguir para a próxima rua
if (!Variaveis.OperacaoEmAndamento.OpMapaGPS.Concluido)
// Não está na margem de entrada ou saída da rua, então está em estado de direcionamento até a rua da operação
else
{
etapaAtual = StatusCarroMapa.Manobrando;
ManobraConcluida = false;
etapaAtual = StatusCarroMapa.Direcionando;
}
}
// Não está na margem de entrada ou saída da rua, então está em estado de direcionamento até a rua da operação
else
{
etapaAtual = StatusCarroMapa.Direcionando;
}
}
}
// Se o robô estiver dentro da entrelinha da cana
@ -796,7 +859,7 @@ namespace AgroBase.Models.Operacoes
{
NaMargem = true;
}
else if (DistanciaFinal <= (MargemLimiteEntradaRua * 2) && _EtapaAtual == StatusCarroMapa.CaminhandoRua)
else if (DistanciaFinal <= (MargemLimiteEntradaRua * 2) && (_EtapaAtual == StatusCarroMapa.CaminhandoRua || _EtapaAtual == StatusCarroMapa.SaindoRua))
{
NaMargem = true;
}

View File

@ -4,6 +4,7 @@ import sys
import folium
import requests
import re
import shutil
def internet_disponivel():
"""Verifica se há conexão com a internet."""
@ -48,6 +49,14 @@ else:
bounds = folium.GeoJson(geojson_data).get_bounds()
center = [(bounds[0][0] + bounds[1][0]) / 2, (bounds[0][1] + bounds[1][1]) / 2]
# Adicionando um ID sequencial a cada Feature
for idx, feature in enumerate(geojson_data["features"]):
# Adicionar uma propriedade 'id' para cada Feature começando do índice zero
feature['id'] = idx
# Copiando o arquivo JSON para a pasta de saída
shutil.copy(pathFiles + fileName + '.json', pastaSaida + outputName)
# Verificar se há conexão com a internet
if internet_disponivel():
m = folium.Map(location=center, zoom_start=12)

View File

@ -216,17 +216,32 @@ namespace AgroBase.Services
public static double CalcularDiferencaAngulo(double anguloVariavel, double anguloRef)
{
// Calcula a diferença entre o ângulo do carro e o ângulo da rua
// Calcula a diferença entre o ângulo variável e o ângulo de referência
double diferenca = anguloVariavel - anguloRef;
// Normaliza a diferença para estar entre -180 e 180 graus
diferenca = ((diferenca + 180) % 360) - 180;
// Se a diferença ainda estiver fora do intervalo, ajuste manualmente
if (diferenca > 180)
{
diferenca -= 360;
}
else if (diferenca < -180)
{
diferenca += 360;
}
return diferenca;
}
public static GPSModel PontoMaisProximoRuaProjetada(List<GPSModel> RuaProjetada)
public static GPSModel PontoMaisProximoRuaProjetada(List<GPSModel> RuaProjetada, TrajetoriaTipo trajetoriaTipo)
{
int idxUltimoPonto =
trajetoriaTipo == TrajetoriaTipo.Rua ? Variaveis.OperacaoEmAndamento.Mapa.IdxUltimoPontoTrajetoria :
trajetoriaTipo == TrajetoriaTipo.Dinamica ? Variaveis.OperacaoEmAndamento.Mapa.IdxUltimoPontoTrajetoriaDinamica :
0;
// Verifica se a lista está vazia
if (RuaProjetada == null || RuaProjetada.Count == 0)
{
@ -234,25 +249,75 @@ namespace AgroBase.Services
}
// Inicializa variáveis
GPSModel pontoMaisProximo = RuaProjetada[0];
GPSModel pontoMaisProximo = RuaProjetada[idxUltimoPonto];
double menorDistancia = double.MaxValue;
GPSModel posicaoAtual = UltimaLeitura;
GPSModel posicaoAnterior = PenultimaLeitura;
bool seAproximandoAnterior = false;
// Itera sobre os pontos da rua projetada
foreach (var ponto in RuaProjetada)
foreach (var ponto in RuaProjetada.Skip(idxUltimoPonto))
{
int idxPonto = RuaProjetada.IndexOf(ponto);
double distanciaAtual = DistanciaEntrePontos(posicaoAtual, ponto);
double distanciaAnterior = DistanciaEntrePontos(posicaoAnterior, ponto);
bool seAproximando = distanciaAtual < distanciaAnterior;
if (distanciaAtual <= menorDistancia)
{
ponto.Passado = true;
menorDistancia = distanciaAtual;
if (!seAproximando)
{
pontoMaisProximo = ponto;
if (idxPonto > idxUltimoPonto)
{
idxUltimoPonto = idxPonto;
}
}
/*else if (distanciaAnterior < distanciaAtual && RuaProjetada.Count() > (idxPonto + 1))
{
idxPonto++;
pontoMaisProximo = RuaProjetada[idxPonto];
idxUltimoPonto = idxPonto;
}*/
if (seAproximando && !seAproximandoAnterior)
{
break;
}
}
else if (distanciaAnterior < distanciaAtual)
{
/*menorDistancia = distanciaAnterior;
pontoMaisProximo = ponto;
if (idxPonto > idxUltimoPonto)
{
idxUltimoPonto = idxPonto;
}*/
break;
}
else
{
break;
}
seAproximandoAnterior = seAproximando;
}
switch (trajetoriaTipo)
{
case TrajetoriaTipo.Rua:
Variaveis.OperacaoEmAndamento.Mapa.IdxUltimoPontoTrajetoria = idxUltimoPonto;
break;
case TrajetoriaTipo.Dinamica:
Variaveis.OperacaoEmAndamento.Mapa.IdxUltimoPontoTrajetoriaDinamica = idxUltimoPonto;
break;
}
return pontoMaisProximo;
@ -363,7 +428,7 @@ namespace AgroBase.Services
public static bool CompararDirecaoTrajeto(List<GPSModel> Trecho1, List<GPSModel> Trecho2)
{
double MargemErroAngulo = 45;
double MargemErroAngulo = 90;
double anguloTrecho1 = CalcularOrientacao(Trecho1[0], Trecho1[Trecho1.Count - 1]);
double anguloTrecho2 = CalcularOrientacao(Trecho2[0], Trecho2[Trecho2.Count - 1]);
@ -377,6 +442,20 @@ namespace AgroBase.Services
}
}
public static bool CompararDirecaoPontos(double anguloP1, double anguloP2)
{
double MargemErroAngulo = 45;
if ((anguloP1 + MargemErroAngulo) >= anguloP2 && (anguloP1 - MargemErroAngulo) <= anguloP2)
{
return true;
}
else
{
return false;
}
}
public static GPSModel ProjetarPontoDeslocado(GPSModel pontoOriginal, double distancia, double angulo)
{
// Convertendo ângulo em radianos
@ -437,14 +516,20 @@ namespace AgroBase.Services
{
Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua.Add(new List<GPSModel>());
}
Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua[Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual].Add(Variaveis.OperacaoEmAndamento.GPSTrajetoria[Variaveis.OperacaoEmAndamento.GPSTrajetoria.Count - 1]);
if (Variaveis.OperacaoEmAndamento.GPSTrajetoria.Count > 1)
if (Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual < Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua.Count())
{
Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua[Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual].Add(Variaveis.OperacaoEmAndamento.GPSTrajetoria[Variaveis.OperacaoEmAndamento.GPSTrajetoria.Count - 1]);
if (Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaPercorrida.Count - 1 < Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual)
{
Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaPercorrida.Add(0);
}
Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaPercorrida[Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual] += GPSService.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.GPSTrajetoria[Variaveis.OperacaoEmAndamento.GPSTrajetoria.Count - 1], Variaveis.OperacaoEmAndamento.GPSTrajetoria[Variaveis.OperacaoEmAndamento.GPSTrajetoria.Count - 2]);
if (Variaveis.OperacaoEmAndamento.GPSTrajetoria.Count > 1)
{
Variaveis.OperacaoEmAndamento.Sensoriamento.DistanciaPercorrida[Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual] += GPSService.DistanciaEntrePontos(Variaveis.OperacaoEmAndamento.GPSTrajetoria[Variaveis.OperacaoEmAndamento.GPSTrajetoria.Count - 1], Variaveis.OperacaoEmAndamento.GPSTrajetoria[Variaveis.OperacaoEmAndamento.GPSTrajetoria.Count - 2]);
}
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
[{"Latitude":-22.213619833333333,"Longitude":-47.381514666666668,"DataHora":"2024-05-06T14:28:44","Altitude":628.0,"Velocidade":0.042596,"NumeroSatelites":9,"PrecisaoHorizontal":0.92,"Orientacao":0.0,"idxRua":-1,"DirecaoTrecho":0,"Passado":false}]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,173 @@
{
"type":"FeatureCollection",
"features":
[
{
"type":"Feature",
"properties":
{
"Id":1517,
"Name":"Projeto",
"Length":177.10312422025854,
"Dist1":0.0,
"Dist2":0.0
},
"geometry":
{
"type":"LineString",
"coordinates":
[
[-47.381460333333337,-22.213097666666666],
[-47.381451666666663,-22.213100666666666],
[-47.381444166666668,-22.213106166666666],
[-47.38143516666667,-22.213113333333332],
[-47.381428333333332,-22.213121833333332],
[-47.3814215,-22.213131],
[-47.3814145,-22.21314],
[-47.381409,-22.213149],
[-47.381404666666668,-22.2131585],
[-47.381399666666667,-22.213167],
[-47.381392833333337,-22.213175666666668],
[-47.381385166666668,-22.213183333333333],
[-47.381378,-22.213191333333334],
[-47.381371666666666,-22.2131995],
[-47.381365333333335,-22.213207833333332],
[-47.381358,-22.213216],
[-47.38135066666667,-22.213224333333333],
[-47.381343,-22.213232666666666],
[-47.381343,-22.213232666666666],
[-47.381335666666665,-22.213241666666665],
[-47.381328833333335,-22.213251833333334],
[-47.381322166666664,-22.2132625],
[-47.381316666666663,-22.213272666666668],
[-47.3813115,-22.213282333333332],
[-47.3813075,-22.213294],
[-47.38130566666667,-22.213304],
[-47.381304166666666,-22.213316166666665],
[-47.3813055,-22.213326666666667],
[-47.381308166666663,-22.213337166666665],
[-47.381312166666667,-22.213348],
[-47.381316666666663,-22.213359333333333],
[-47.381321666666665,-22.213369],
[-47.381327166666665,-22.2133785],
[-47.381334,-22.213387],
[-47.381341,-22.213394833333332],
[-47.381348,-22.213402666666667],
[-47.381354666666667,-22.213411333333333],
[-47.381361,-22.21342],
[-47.38136733333333,-22.2134285],
[-47.381373,-22.213437],
[-47.381379666666668,-22.213445],
[-47.381386166666665,-22.213453333333334],
[-47.381391833333332,-22.213462666666668],
[-47.381397833333331,-22.213473],
[-47.381403333333331,-22.213483166666666],
[-47.38140966666667,-22.2134925],
[-47.381416,-22.213502333333334],
[-47.381422,-22.213515],
[-47.3814285,-22.213525833333332],
[-47.381434166666665,-22.213535166666666],
[-47.38144033333333,-22.213545666666668],
[-47.3814465,-22.213554333333335],
[-47.381453333333333,-22.213565333333332],
[-47.381460333333337,-22.213575333333335],
[-47.381468,-22.213585333333334],
[-47.381475666666667,-22.213595833333333],
[-47.381483166666669,-22.213605833333332],
[-47.381491,-22.213616],
[-47.381499833333336,-22.213626],
[-47.381509666666666,-22.2136325],
[-47.381520833333333,-22.213639666666666],
[-47.381520833333333,-22.213639666666666],
[-47.381532166666666,-22.213644833333333],
[-47.381544,-22.213646833333332],
[-47.381556,-22.213649833333335],
[-47.381567666666669,-22.2136535],
[-47.381579666666667,-22.213656166666667],
[-47.381591333333333,-22.213658166666665],
[-47.381603666666663,-22.213657],
[-47.381615,-22.213655666666668],
[-47.381624833333333,-22.213657666666666],
[-47.38163183333333,-22.213662333333332],
[-47.3816385,-22.213668666666667],
[-47.381642333333332,-22.213676166666666],
[-47.381641833333333,-22.213685],
[-47.381639,-22.2136935],
[-47.3816335,-22.213702],
[-47.3816255,-22.213709666666666],
[-47.38161516666667,-22.213713333333335],
[-47.381603833333337,-22.213713666666667],
[-47.381593833333334,-22.213711333333332],
[-47.381582333333334,-22.213707166666666],
[-47.381571833333332,-22.213700666666668],
[-47.381563166666666,-22.213693],
[-47.381555333333331,-22.213684666666666],
[-47.38154766666667,-22.213676],
[-47.3815405,-22.213668166666668],
[-47.3815325,-22.213659833333335],
[-47.381525833333335,-22.2136515],
[-47.381519166666664,-22.2136415],
[-47.381512166666667,-22.213632333333333],
[-47.381512166666667,-22.213632333333333],
[-47.381505333333337,-22.213623833333333],
[-47.381498166666667,-22.213615166666667],
[-47.381491,-22.2136065],
[-47.381483666666668,-22.213597833333335],
[-47.381476666666664,-22.213588333333334],
[-47.381470166666666,-22.213578833333333],
[-47.38146316666667,-22.213569833333334],
[-47.381456666666665,-22.213561666666667],
[-47.381450166666667,-22.213552],
[-47.381444166666668,-22.213542],
[-47.381438,-22.213531833333334],
[-47.38143216666667,-22.213521833333335],
[-47.38142666666667,-22.213512166666668],
[-47.381420666666664,-22.213502833333333],
[-47.381414833333331,-22.213493333333332],
[-47.381408666666665,-22.2134835],
[-47.381402833333333,-22.213473333333333],
[-47.381396666666667,-22.213462666666668],
[-47.381390666666668,-22.213452333333333],
[-47.381384666666669,-22.213443166666668],
[-47.381378166666664,-22.213434666666668],
[-47.381371833333333,-22.213426],
[-47.381366333333332,-22.213415666666666],
[-47.3813605,-22.213405333333334],
[-47.3813545,-22.213394833333332],
[-47.3813485,-22.213384833333333],
[-47.381342666666669,-22.213374666666667],
[-47.381337,-22.213364666666667],
[-47.381332166666667,-22.213354166666665],
[-47.3813275,-22.213343166666668],
[-47.381323833333333,-22.213332666666666],
[-47.381322,-22.213321666666666],
[-47.381321166666666,-22.2133105],
[-47.381321166666666,-22.213299166666665],
[-47.381322166666664,-22.213287666666666],
[-47.381323833333333,-22.213276666666665],
[-47.381327166666665,-22.2132655],
[-47.381331833333334,-22.2132545],
[-47.381338666666664,-22.213245],
[-47.381345333333336,-22.213235333333333],
[-47.381352166666666,-22.2132265],
[-47.3813585,-22.213218666666666],
[-47.381365666666667,-22.213209],
[-47.381373666666668,-22.213200333333333],
[-47.38138133333333,-22.213191666666667],
[-47.3813885,-22.213183333333333],
[-47.3813955,-22.213174666666667],
[-47.381402833333333,-22.2131665],
[-47.381410166666669,-22.213157833333334],
[-47.381418333333336,-22.213150166666665],
[-47.381426833333336,-22.213141833333335],
[-47.381434166666665,-22.213133],
[-47.381440166666664,-22.213124166666667],
[-47.381446833333335,-22.213115333333334],
[-47.381455,-22.213107833333332],
[-47.3814645,-22.213102833333334],
[-47.381473833333331,-22.213100333333333]
]
}
}
]
}

View File

@ -0,0 +1,161 @@
{
"type":"FeatureCollection",
"features":
[
{
"type":"Feature",
"properties":
{
"Id":"1517",
"Name":"Projeto",
"Length":69.0588486447104,
"Dist1":0.0,"Dist2":0.0
},
"geometry":
{
"id":null,
"type":"LineString",
"coordinates":
[
[-47.381499166666664,-22.213093166666667],
[-47.38149416666667,-22.213095833333334],
[-47.3814855,-22.213100166666667],
[-47.381475,-22.213104333333334],
[-47.381464,-22.213109166666666],
[-47.381453333333333,-22.213116333333332],
[-47.381445,-22.2131235],
[-47.381438,-22.213131833333332],
[-47.38143216666667,-22.213141],
[-47.38142633333333,-22.21315],
[-47.381419166666667,-22.213158333333332],
[-47.381412,-22.213166833333332],
[-47.381405,-22.213175666666668],
[-47.381397166666666,-22.213185],
[-47.381389666666664,-22.213194333333334],
[-47.381382666666667,-22.213204],
[-47.381375833333337,-22.213213],
[-47.381367833333336,-22.2132225],
[-47.3813595,-22.213232],
[-47.381352,-22.213241833333335],
[-47.3813465,-22.213252833333332],
[-47.38134183333333,-22.213264],
[-47.381337,-22.213274666666667],
[-47.381332666666665,-22.213284833333333],
[-47.381329166666667,-22.213295666666667],
[-47.381327166666665,-22.213306833333334],
[-47.381327333333331,-22.213317666666665],
[-47.381330166666665,-22.213328166666667],
[-47.381334333333335,-22.213338666666665],
[-47.3813385,-22.213349333333333],
[-47.381343166666667,-22.213360333333334],
[-47.381349,-22.213370833333332],
[-47.381354833333333,-22.213380666666666],
[-47.381360833333332,-22.213391],
[-47.38136733333333,-22.213401166666667],
[-47.3813745,-22.213410333333332],
[-47.381381166666664,-22.213420833333334],
[-47.381387666666669,-22.213431833333335],
[-47.381394333333333,-22.213442666666666],
[-47.381400333333332,-22.2134535],
[-47.381406666666663,-22.213464333333334],
[-47.3814135,-22.213474833333333],
[-47.381421166666669,-22.213484833333332],
[-47.3814275,-22.213496],
[-47.381435333333336,-22.213505666666666],
[-47.381442833333331,-22.213515666666666],
[-47.38145,-22.2135265],
[-47.3814565,-22.213537833333334],
[-47.38146283333333,-22.213548833333334],
[-47.3814695,-22.213559],
[-47.381478166666668,-22.213569166666666],
[-47.381487666666665,-22.213578],
[-47.381495166666667,-22.213587],
[-47.381502,-22.213596333333335],
[-47.381507666666664,-22.213604333333333]
]
}
},
{
"type":"Feature",
"properties":
{
"Id":"1517",
"Name":"Projeto",
"Length":79.155642202986542,
"Dist1":0.0,"Dist2":0.0
},
"geometry":
{
"id":null,
"type":"LineString",
"coordinates":
[
[-47.381513166666664,-22.213679],
[-47.381491333333337,-22.213692833333333],
[-47.381484666666665,-22.213698166666667],
[-47.381481666666666,-22.213699833333333],
[-47.381481166666667,-22.2136995],
[-47.381477333333336,-22.213695666666666],
[-47.381470833333331,-22.2136885],
[-47.381464666666666,-22.2136795],
[-47.3814595,-22.213669333333332],
[-47.381454166666664,-22.213659833333335],
[-47.381449,-22.213650333333334],
[-47.381442833333331,-22.213640666666667],
[-47.381437,-22.2136315],
[-47.381431166666665,-22.213622166666667],
[-47.381425833333331,-22.213612166666667],
[-47.381420333333331,-22.2136015],
[-47.381414333333332,-22.2135915],
[-47.381408666666665,-22.213581333333334],
[-47.381402666666666,-22.213571666666667],
[-47.381396333333335,-22.213562],
[-47.381391166666667,-22.213552166666666],
[-47.381384833333335,-22.2135415],
[-47.38137833333333,-22.213531166666666],
[-47.381372,-22.2135225],
[-47.3813655,-22.213513166666665],
[-47.381358333333331,-22.213503666666668],
[-47.381351,-22.213494333333333],
[-47.381344166666665,-22.213485666666667],
[-47.381337333333335,-22.213476],
[-47.381331,-22.213465833333334],
[-47.38132516666667,-22.213455333333332],
[-47.381318666666665,-22.213445],
[-47.3813125,-22.213434833333334],
[-47.381305,-22.213425],
[-47.3812975,-22.213415],
[-47.381290166666666,-22.2134045],
[-47.381284,-22.213394],
[-47.381277166666663,-22.2133835],
[-47.381271166666664,-22.213373166666667],
[-47.381265,-22.213363333333334],
[-47.381257833333336,-22.213354166666665],
[-47.381250333333334,-22.213345666666665],
[-47.381245333333332,-22.213336666666667],
[-47.38124366666667,-22.213326666666667],
[-47.381246,-22.213314833333332],
[-47.3812515,-22.213303833333335],
[-47.381257833333336,-22.213293333333333],
[-47.381263333333337,-22.213282666666668],
[-47.381268333333331,-22.213272],
[-47.381273166666666,-22.213261833333334],
[-47.381278333333334,-22.213252],
[-47.381285666666663,-22.213243333333335],
[-47.381294166666663,-22.213234833333335],
[-47.381302333333331,-22.213226166666665],
[-47.381310333333332,-22.213217],
[-47.381318666666665,-22.213207833333332],
[-47.381327333333331,-22.213199666666668],
[-47.38133633333333,-22.213190833333332],
[-47.381346,-22.2131815],
[-47.381355333333332,-22.213172],
[-47.381364833333336,-22.213162333333333],
[-47.381373833333335,-22.213152333333333],
[-47.3813835,-22.213143],
[-47.381392666666663,-22.213134333333333]
]
}
}
]
}

View File

@ -1 +1 @@
{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"Id":1517,"Name":"Projeto","Length":2.1950901896934623,"Dist1":0.0,"Dist2":0.0},"geometry":{"id":null,"type":"LineString","coordinates":[[-47.38163183333333,-22.213156666666666],[-47.381633,-22.213156],[-47.381632833333335,-22.213156666666666],[-47.3816325,-22.213156833333333],[-47.381634166666664,-22.213156],[-47.381636666666665,-22.213154166666666],[-47.3816335,-22.213157333333335],[-47.381628333333332,-22.2131615],[-47.381627833333333,-22.213162666666666],[-47.381627166666668,-22.213163166666668]]}}]}
{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"Id":"1517","Name":"Projeto","Length":79.155642202986542,"Dist1":0.0,"Dist2":0.0},"geometry":{"id":null,"type":"LineString","coordinates":[[-47.381513166666664,-22.213679],[-47.381501666666665,-22.2136855],[-47.381491333333337,-22.213692833333333],[-47.381484666666665,-22.213698166666667],[-47.381481666666666,-22.213699833333333],[-47.381481166666667,-22.2136995],[-47.381477333333336,-22.213695666666666],[-47.381470833333331,-22.2136885],[-47.381464666666666,-22.2136795],[-47.3814595,-22.213669333333332],[-47.381454166666664,-22.213659833333335],[-47.381449,-22.213650333333334],[-47.381442833333331,-22.213640666666667],[-47.381437,-22.2136315],[-47.381431166666665,-22.213622166666667],[-47.381425833333331,-22.213612166666667],[-47.381420333333331,-22.2136015],[-47.381414333333332,-22.2135915],[-47.381408666666665,-22.213581333333334],[-47.381402666666666,-22.213571666666667],[-47.381396333333335,-22.213562],[-47.381391166666667,-22.213552166666666],[-47.381384833333335,-22.2135415],[-47.38137833333333,-22.213531166666666],[-47.381372,-22.2135225],[-47.3813655,-22.213513166666665],[-47.381358333333331,-22.213503666666668],[-47.381351,-22.213494333333333],[-47.381344166666665,-22.213485666666667],[-47.381337333333335,-22.213476],[-47.381331,-22.213465833333334],[-47.38132516666667,-22.213455333333332],[-47.381318666666665,-22.213445],[-47.3813125,-22.213434833333334],[-47.381305,-22.213425],[-47.3812975,-22.213415],[-47.381290166666666,-22.2134045],[-47.381284,-22.213394],[-47.381277166666663,-22.2133835],[-47.381271166666664,-22.213373166666667],[-47.381265,-22.213363333333334],[-47.381257833333336,-22.213354166666665],[-47.381250333333334,-22.213345666666665],[-47.381245333333332,-22.213336666666667],[-47.38124366666667,-22.213326666666667],[-47.381246,-22.213314833333332],[-47.3812515,-22.213303833333335],[-47.381257833333336,-22.213293333333333],[-47.381263333333337,-22.213282666666668],[-47.381268333333331,-22.213272],[-47.381273166666666,-22.213261833333334],[-47.381278333333334,-22.213252],[-47.381285666666663,-22.213243333333335],[-47.381294166666663,-22.213234833333335],[-47.381302333333331,-22.213226166666665],[-47.381310333333332,-22.213217],[-47.381318666666665,-22.213207833333332],[-47.381327333333331,-22.213199666666668],[-47.38133633333333,-22.213190833333332],[-47.381346,-22.2131815],[-47.381355333333332,-22.213172],[-47.381364833333336,-22.213162333333333],[-47.381373833333335,-22.213152333333333],[-47.3813835,-22.213143],[-47.381392666666663,-22.213134333333333]]}}]}

View File

@ -25,7 +25,7 @@
<meta name="viewport" content="width=device-width,
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<style>
#map_cc542e997f50a5c3413836621529b149 {
#map_4c3508b94c9767bf327ad97283d0bde0 {
position: relative;
width: 100.0%;
height: 100.0%;
@ -39,14 +39,14 @@
<body>
<div class="folium-map" id="map_cc542e997f50a5c3413836621529b149" ></div>
<div class="folium-map" id="map_4c3508b94c9767bf327ad97283d0bde0" ></div>
</body>
<script>
var map_cc542e997f50a5c3413836621529b149 = L.map(
"map_cc542e997f50a5c3413836621529b149",
var map_4c3508b94c9767bf327ad97283d0bde0 = L.map(
"map_4c3508b94c9767bf327ad97283d0bde0",
{
center: [0.0, 0.0],
crs: L.CRS.EPSG3857,
@ -59,15 +59,6 @@
var tile_layer_d17ce14d549a3fb1bcc02c6ad6d0ca1f = L.tileLayer(
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
{"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
);
tile_layer_d17ce14d549a3fb1bcc02c6ad6d0ca1f.addTo(map_cc542e997f50a5c3413836621529b149);
</script>
<script>
@ -87,7 +78,7 @@
}
trajeto_json_add({"features": []});
trajeto_json.addTo(map_cc542e997f50a5c3413836621529b149);
trajeto_json.addTo(map_4c3508b94c9767bf327ad97283d0bde0);
function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria);
@ -145,7 +136,7 @@
var marcadorDinamico = L.marker([0, 0], {
icon: customIcon
}).addTo(map_cc542e997f50a5c3413836621529b149);
}).addTo(map_4c3508b94c9767bf327ad97283d0bde0);
// Conectar ao broker MQTT
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
@ -184,7 +175,7 @@
marcadorDinamico.setRotationAngle(angulo);
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
map_cc542e997f50a5c3413836621529b149.setView(novaPosicao, map_cc542e997f50a5c3413836621529b149.getZoom());
map_4c3508b94c9767bf327ad97283d0bde0.setView(novaPosicao, map_4c3508b94c9767bf327ad97283d0bde0.getZoom());
});
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {

File diff suppressed because one or more lines are too long

View File

@ -4,6 +4,7 @@ import sys
import folium
import requests
import re
import shutil
def internet_disponivel():
"""Verifica se há conexão com a internet."""
@ -48,6 +49,14 @@ else:
bounds = folium.GeoJson(geojson_data).get_bounds()
center = [(bounds[0][0] + bounds[1][0]) / 2, (bounds[0][1] + bounds[1][1]) / 2]
# Adicionando um ID sequencial a cada Feature
for idx, feature in enumerate(geojson_data["features"]):
# Adicionar uma propriedade 'id' para cada Feature começando do índice zero
feature['id'] = idx
# Copiando o arquivo JSON para a pasta de saída
shutil.copy(pathFiles + fileName + '.json', pastaSaida + outputName)
# Verificar se há conexão com a internet
if internet_disponivel():
m = folium.Map(location=center, zoom_start=12)

View File

@ -441,4 +441,4 @@ C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\Python\Models\deeplabv3pl
C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.exe.config
C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.exe
C:\ZendionINC\agrobot_base\AgroBase\AgroBase\bin\Debug\AgroBase.pdb
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.CopyComplete
C:\ZendionINC\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.Up2Date