Теги

программированиесемьяматематикабизнеседазнакомства

Пропорционально дифференциальный регулятор для контроля вращения.

физика, программирование, 3d преобразования, ПИД регулятор
Всем привет, не могу разобраться с одной задачей, помогите, пожалуйста, советом или ссылкой на подходящую литературу.

Суть задачи:
Есть цилиндр, плоские грани которго параллельны земле, он может вращаться по оси Z (ось перпендикулярная земле).
На циллиндре есть отметка ("меридиан"), обозначающая - куда он "смотрит".
Возможные значения этого угла - от -179 до 180 градусов.

Так-же известен угол - куда должен смотреть этот цилиндр.

То-есть входными параметрами являются текущий и требуемый углы поворота, а так-же скорость вращения цилиндра.

Мы можем приложить к точкам A и B, расположенным симметрично на выпуклой грани циллиндра силу F, чтобы его повернуть.

Приблизительная формула, которую я собираюсь использовать выглядит так:
рассогласование = требуемыйУгол - текущийУгол
модульСилы = (пропорциональныйКоеффициент * рассогласование) + (дифференциальныйКоеффициент * (рассогласование - староеРассоглосование) / прошедшееВремя)
староеРассоглосование = рассогласование

Собственно проблема в том, что нужно учитывать минимальную дугу между требуемым и текущим углами поворота, т.к. повернув циллиндр из положения 180 градусов еще на градус мы получаем -179 градусов.

Усложняет эту проблему тот факт, что зная минимальную дугу мы все-еще не можем с точностью сказать - в какую сторону нужно вращать цилиндр, т.к. нужно учесть еще и скорость и направление его вращения.

Вобщем, пока писал код, разбирался с кватернионами и сферическими координатами - совсем запутался, если кто-нибудь сообразит как все это проще всего сделать - буду более чем признателен.

P.S. Если я что-то непонятно описал, то могу уточнить.
P.P.S. Это не курсач и не экзаменационная задачка, просто пишу 3d игрушку в невесомости.
Если хочешь рассматривать проблему с точки зрения ТАУ, то скорость и направление вращения можно не учитывать, т.к. моменты инерции (а, значит, и связанные с ними ускорения и т. д.) учтены при расчете настроек ПИД регулятора.  А в качестве критерия попробуй использовать скалярное произведение вектора, указывающего текущее направление цилиндра (гиперплазменной пушки, я так понял :-) на вектор заданного направления цилиндра. Если эти вектора совпадают, то произведение этих векторов максимально.
Еще вариант - пусть твоя система координат имеет 0 в той стороне, куда должен смотреть цилиндр. Тогда все твои формулы подходят и вопрос поиска минимальной дуги вообще снимается автоматически.
P.S. Вообще то ПИД регулирование часто применяется без Д. То есть ПИ, это проще и почти всегда хватает. Реализация дифференциального звена программно довольно сложная штука т.к. требуется производная в последний момент времени, а мы ее можем получить только за последний шаг моделирования. Т.е. шаг моделирования должен быть как можно меньше, тогда шагов получается больше и компьютер все просчитывает со скоростью 1 секунда за 30 минут (или чуть быстрее, в зависимости от конфигурации). Поэтому - используй ПИ.
Вернуться на главную Вернуться в раздел
© 2010 Адам Голубев Карта сайта
Сайт управляется системой uCoz