ajuste pid

This commit is contained in:
Diego Freitas 2024-12-17 13:52:13 -03:00
parent 41ce45ede7
commit 9f90eebf7c
11 changed files with 112 additions and 40 deletions

Binary file not shown.

View File

@ -3,12 +3,16 @@
"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\\services\\dispositivosservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\dispositivosservice.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\\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\\models\\pidmodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\pidmodel.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\\dispositivosservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\dispositivosservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
@ -18,30 +22,43 @@
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 0,
"SelectedChildIndex": 2,
"Children": [
{
"$type": "Document",
"DocumentIndex": 0,
"DocumentIndex": 1,
"Title": "PIDModel.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\PIDModel.cs",
"RelativeDocumentMoniker": "AgroBase\\Models\\PIDModel.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\PIDModel.cs",
"RelativeToolTip": "AgroBase\\Models\\PIDModel.cs",
"ViewState": "AQIAAAsAAAAAAAAAAAA9wCkAAAAMAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-17T16:39:11.967Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "DispositivosService.cs",
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\DispositivosService.cs",
"RelativeDocumentMoniker": "AgroBase\\Services\\DispositivosService.cs",
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\DispositivosService.cs",
"RelativeToolTip": "AgroBase\\Services\\DispositivosService.cs",
"ViewState": "AQIAAAAAAAAAAAAAAAAAAJsAAAAAAAAA",
"ViewState": "AQIAAAAAAAAAAAAAAAAAABkAAAA4AAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-17T16:08:08.254Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"DocumentIndex": 0,
"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": "AQIAABcAAAAAAAAAAAAwwCoAAAAMAAAA",
"ViewState": "AQIAACwAAAAAAAAAAAAYwDoAAAAMAAAA",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2024-12-17T16:03:54.404Z",
"EditorCaption": ""

View File

@ -474,8 +474,14 @@ namespace AgroBase.Models.Operacoes
{
get
{
bool proximoEntradaRua = Variaveis.OperacaoEmAndamento.Mapa.DistanciaAteProximoPonto <= Variaveis.OperacaoEmAndamento.Mapa.DistanciaProjecaoRua;
bool Manobrando = proximoEntradaRua && EmManobra;
bool emCurva = Variaveis.OperacaoEmAndamento.Mapa.IdxRuaAtual > 0;
bool proximoEntradaRua = Variaveis.OperacaoEmAndamento.Mapa.DistanciaAteProximoPonto <= (Variaveis.OperacaoEmAndamento.Mapa.DistanciaProjecaoRua * 5.0);
bool Manobrando = emCurva && proximoEntradaRua && EmManobra;
if (Manobrando)
{
}
return Manobrando;
}

View File

@ -22,18 +22,21 @@ namespace AgroBase.Models
ValorAtual = valorAtual;
double erro = SetPoint - ValorAtual;
// Atualiza a soma do erro considerando o intervalo de tempo
somaErro += erro * deltaTime;
somaErro = Math.Max(Math.Min(somaErro, LimiteSomaErro), -LimiteSomaErro); // Anti-wind-up
if (erro != erroAnterior)
{
// Atualiza a soma do erro considerando o intervalo de tempo
somaErro += erro * deltaTime;
somaErro = Math.Max(Math.Min(somaErro, LimiteSomaErro), -LimiteSomaErro); // Anti-wind-up
// Calcula a taxa de variação do erro (termo derivativo)
double deltaErro = (erro - erroAnterior) / deltaTime;
// Calcula a taxa de variação do erro (termo derivativo)
double deltaErro = (erro - erroAnterior) / deltaTime;
// Calcula a saída do PID
double saidaTemp = (Kp * erro) + (Ki * somaErro) + (Kd * deltaErro);
// Calcula a saída do PID
double saidaTemp = (Kp * erro) + (Ki * somaErro) + (Kd * deltaErro);
// Limita a saída do PID
Saida = Math.Max(Math.Min(saidaTemp, LimiteSaida), -LimiteSaida);
// Limita a saída do PID
Saida = Math.Max(Math.Min(saidaTemp, LimiteSaida), -LimiteSaida);
}
// Atualiza o erro anterior
erroAnterior = erro;

View File

@ -1 +1,47 @@
{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"Id":"1","Name":"Projeto","Length":21.332976190943135,"Dist1":0.0,"Dist2":0.0},"geometry":{"id":"0","type":"LineString","coordinates":[[-47.381495333333334,-22.213068166666666],[-47.381469166666669,-22.213091333333335],[-47.38141825,-22.213137833333334],[-47.3813925,-22.213161666666668],[-47.381369666666664,-22.2131845]]}},{"type":"Feature","properties":{"Id":"2","Name":"Projeto","Length":24.045328359726675,"Dist1":0.0,"Dist2":0.0},"geometry":{"id":"1","type":"LineString","coordinates":[[-47.381340166666668,-22.213175666666668],[-47.381375333333331,-22.213137166666666],[-47.38140933333333,-22.213102666666668],[-47.381453666666665,-22.213058166666666],[-47.381496666666663,-22.213015666666667]]}}]}
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"Id": "1",
"Name": "Projeto",
"Length": 21.332976190943135,
"Dist1": 0.0,
"Dist2": 0.0
},
"geometry": {
"id": null,
"type": "LineString",
"coordinates": [
[-47.381495333333334, -22.213068166666666],
[-47.38146916666667, -22.213091333333335],
[-47.38141825, -22.213137833333333],
[-47.3813925, -22.213161666666668],
[-47.381369666666664, -22.2131845]
]
}
},
{
"type": "Feature",
"properties": {
"Id": "2",
"Name": "Projeto",
"Length": 24.045328359726675,
"Dist1": 0.0,
"Dist2": 0.0
},
"geometry": {
"id": null,
"type": "LineString",
"coordinates": [
[-47.381340166666668, -22.213175666666668],
[-47.381375333333331, -22.213137166666666],
[-47.38140933333333, -22.213102666666668],
[-47.381453666666665, -22.213058166666666],
[-47.381496666666663, -22.213015666666667]
]
}
}
]
}

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_f0b88e3c9fbbb871f17a4dbd225c6fff {
#map_e1b90746af4473ab782ac8531a7976bd {
position: relative;
width: 100.0%;
height: 100.0%;
@ -39,14 +39,14 @@
<body>
<div class="folium-map" id="map_f0b88e3c9fbbb871f17a4dbd225c6fff" ></div>
<div class="folium-map" id="map_e1b90746af4473ab782ac8531a7976bd" ></div>
</body>
<script>
var map_f0b88e3c9fbbb871f17a4dbd225c6fff = L.map(
"map_f0b88e3c9fbbb871f17a4dbd225c6fff",
var map_e1b90746af4473ab782ac8531a7976bd = L.map(
"map_e1b90746af4473ab782ac8531a7976bd",
{
center: [-22.213100083333334, -47.38141841666666],
crs: L.CRS.EPSG3857,
@ -60,13 +60,13 @@
var tile_layer_fb166f510d9dc07cae4560a0da44b242 = L.tileLayer(
var tile_layer_70aa00954f465cffc01861ff6ef2f457 = 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_fb166f510d9dc07cae4560a0da44b242.addTo(map_f0b88e3c9fbbb871f17a4dbd225c6fff);
tile_layer_70aa00954f465cffc01861ff6ef2f457.addTo(map_e1b90746af4473ab782ac8531a7976bd);
@ -82,7 +82,7 @@
}*/
});
}
function geo_json_afbdf9289c407bb446a01d22a6f4e29b_onEachFeature(feature, layer) {
function geo_json_976427b904ab56ed363ea4f9e9323627_onEachFeature(feature, layer) {
layer.on({
click: function(e) {
@ -118,20 +118,20 @@
}*/
});
};
var geo_json_afbdf9289c407bb446a01d22a6f4e29b = L.geoJson(null, {
onEachFeature: geo_json_afbdf9289c407bb446a01d22a6f4e29b_onEachFeature,
var geo_json_976427b904ab56ed363ea4f9e9323627 = L.geoJson(null, {
onEachFeature: geo_json_976427b904ab56ed363ea4f9e9323627_onEachFeature,
});
function geo_json_afbdf9289c407bb446a01d22a6f4e29b_add (data) {
geo_json_afbdf9289c407bb446a01d22a6f4e29b
function geo_json_976427b904ab56ed363ea4f9e9323627_add (data) {
geo_json_976427b904ab56ed363ea4f9e9323627
.addData(data);
}
geo_json_afbdf9289c407bb446a01d22a6f4e29b_add({"features": [{"geometry": {"coordinates": [[-47.38149533333333, -22.213068166666666], [-47.38146916666667, -22.213091333333335], [-47.38141825, -22.213137833333334], [-47.3813925, -22.213161666666668], [-47.381369666666664, -22.2131845]], "id": "0", "type": "LineString"}, "id": 0, "properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": "1", "Length": 21.332976190943135, "Name": "Projeto"}, "type": "Feature"}, {"geometry": {"coordinates": [[-47.38134016666667, -22.213175666666668], [-47.38137533333333, -22.213137166666666], [-47.38140933333333, -22.213102666666668], [-47.381453666666665, -22.213058166666666], [-47.38149666666666, -22.213015666666667]], "id": "1", "type": "LineString"}, "id": 1, "properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": "2", "Length": 24.045328359726675, "Name": "Projeto"}, "type": "Feature"}], "type": "FeatureCollection"});
geo_json_976427b904ab56ed363ea4f9e9323627_add({"features": [{"geometry": {"coordinates": [[-47.38149533333333, -22.213068166666666], [-47.38146916666667, -22.213091333333335], [-47.38141825, -22.213137833333334], [-47.3813925, -22.213161666666668], [-47.381369666666664, -22.2131845]], "id": null, "type": "LineString"}, "id": 0, "properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": "1", "Length": 21.332976190943135, "Name": "Projeto"}, "type": "Feature"}, {"geometry": {"coordinates": [[-47.38134016666667, -22.213175666666668], [-47.38137533333333, -22.213137166666666], [-47.38140933333333, -22.213102666666668], [-47.381453666666665, -22.213058166666666], [-47.38149666666666, -22.213015666666667]], "id": null, "type": "LineString"}, "id": 1, "properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": "2", "Length": 24.045328359726675, "Name": "Projeto"}, "type": "Feature"}], "type": "FeatureCollection"});
geo_json_afbdf9289c407bb446a01d22a6f4e29b.addTo(map_f0b88e3c9fbbb871f17a4dbd225c6fff);
geo_json_976427b904ab56ed363ea4f9e9323627.addTo(map_e1b90746af4473ab782ac8531a7976bd);
</script>
@ -152,7 +152,7 @@
}
trajeto_json_add({"features": []});
trajeto_json.addTo(map_f0b88e3c9fbbb871f17a4dbd225c6fff);
trajeto_json.addTo(map_e1b90746af4473ab782ac8531a7976bd);
function adicionarGeometria(novaGeometria) {
trajeto_json.addData(novaGeometria);
@ -210,7 +210,7 @@
}
trajeto_dinamico_json_add({"features": []});
trajeto_dinamico_json.addTo(map_f0b88e3c9fbbb871f17a4dbd225c6fff);
trajeto_dinamico_json.addTo(map_e1b90746af4473ab782ac8531a7976bd);
function adicionarGeometriaDinamica(novaGeometria) {
trajeto_dinamico_json.addData(novaGeometria);
@ -263,9 +263,9 @@
var marcadorEquipamento = L.marker([0, 0], {
icon: customIcon
}).addTo(map_f0b88e3c9fbbb871f17a4dbd225c6fff);
}).addTo(map_e1b90746af4473ab782ac8531a7976bd);
var marcadorBase = L.marker([0, 0], {}).addTo(map_f0b88e3c9fbbb871f17a4dbd225c6fff);
var marcadorBase = L.marker([0, 0], {}).addTo(map_e1b90746af4473ab782ac8531a7976bd);
var icon = L.AwesomeMarkers.icon(
{"extraClasses": "fa-rotate-0", "icon": "info-sign", "iconColor": "white", "markerColor": "red", "prefix": "glyphicon"}
);
@ -347,7 +347,7 @@
}
if (foco) {
map_f0b88e3c9fbbb871f17a4dbd225c6fff.setView(novaPosicao, map_f0b88e3c9fbbb871f17a4dbd225c6fff.getZoom());
map_e1b90746af4473ab782ac8531a7976bd.setView(novaPosicao, map_e1b90746af4473ab782ac8531a7976bd.getZoom());
}
}
@ -364,7 +364,7 @@
function atualizarSelecaoRuas(selecionadas) {
selecionadas = JSON.parse(selecionadas);
RuasSelecionadas = Array.isArray(selecionadas) ? [...selecionadas] : [];
geo_json_afbdf9289c407bb446a01d22a6f4e29b.eachLayer(function (layer) {
geo_json_976427b904ab56ed363ea4f9e9323627.eachLayer(function (layer) {
if (RuasSelecionadas.includes(parseInt(layer.feature.id))) {
layer.setStyle({ color: 'blue' });
} else {