Я не могу загрузить фото, поэтому я постараюсь объяснить свою проблему лучше. Я хочу, чтобы имитировать обнаружение движущегося объекта роботом типа «одноцилиндровый». Робот моделируется с положением (x, y) и направлением theta как три состояния. Препятствие представляется в виде круга радиуса r1. Я хочу, чтобы найти углы alpha_1 и alpha_2 от локальной системы координат робота к окружности, как показано здесь:Угол к касательной линии круга
Так что я делаю пытаюсь найти угол от робота к линии, соединяющего робот и центр окружности (этот угол называется aux_t в моем коде), затем найдите угол между касательной и той же линией (называемой phi_c). Наконец, я бы нашел нужные углы, добавив и вычитая phi_c из aux_t. Диаграмма Я имею в виду показано:
Проблема заключается в том, что я получаю проблемы с моим кодом, когда я пытаюсь найти углы альфа: Он начинает рассчитывать углы правильно (хотя в отрицательных значениях, не уверен, что это вызывает серьезные проблемы), но по мере приближения как автомобиля, так и цикле phi_c становится больше, чем aux_t, и один из альфов внезапно меняет свой знак. Например я получаю это:
aux_t ////// phi_c ////// alpha_1 ////// alpha_2
-0,81 ///// /+0.52//////-1.33//////-0.29
-0,74 ////// + 0.61 ////// - 1.35 ////// - 0.12
-0,69 ////// + 0,67 ////// - 1,37 ////// - 0,02
-0,64 ////// + 0. 74 ////// - 1.38 ////// + 0.1
Так что в основном, alpha_2 получает неправильную форму здесь. Я знаю, что делаю что-то неправильно, но я не уверен, что, я не знаю, как ограничить углы от 0 до пи. Есть ли лучший способ найти альфа-углы? Вот часть моего кода:
это возможно потому, что 'atan2' возвращает значение' aux_t' между -pi и pi, поэтому оно меняет знак, как только он пересекает эту половину строки. –