У меня есть приложение, в котором я направляю транспортное средство по компасу, и у меня возникает проблема, когда транспортное средство пересекает угол от 360 градусов до 0 градусов.
В этом случае в контуре управления отсутствуют смарты для вычисления ближайшего поворота, следующего за курсом.
Например, если транспортное средство проинструктировано следовать курсу 360 градусов, оно неизбежно сместится на несколько градусов в сторону эфира. Если он дойдет до 0+ градусов, контур управления сойдет с ума и попытается полностью повернуть автомобиль, чтобы снова разогнать его до 360 градусов.
Есть ли изящный способ справиться с этим?
При написании функции навигации я использую класс внешнего контроллера PID и вычисляю заголовок следующим образом:
lock (steering)
{
if (!Engaged)
{
return;
}
double mv = 90 + Trim + pidController.CalculateCorrection(flyHeading, currentHeading);
steering.Degree = mv;
}
Спасибо!