Всем известно, что традиционный трапециевидный рамп (когда скорость изменяется по трапеции) на траектории движения дает четыре рывка: каждый раз, как ускорение испытывает бесконечный скачок (т.е. в начале движения, при достижении максимальной скорости, в начале торможения и в конце движения). Фактически, в конце движения это не ощущается, т.е. рывка три. И их хорошо слышно (этим неприятным "движением робота"). В моменты рывков вполне возможны пропуски шагов, если мы пытаемся выжать максимальные скорости и приближаем ускорение к предельным возможностям шаговика. А правильней хотя бы сделать трапециевидным ускорение, как на картинке:
Здесь условно обозначены: синим - ускорение, красным - скорость, оранжевым - перемещение. Расчеты у меня уже третий вечер занимают (из-за рассеянности постоянно какие-то косяки допускаю при интегрировании), но в простейшем случае, когда третья производная численно равна ускорению, немного упрощаются (правда, я еще не добавлял начальной минимальной скорости: стартовать с нуля и тормозить на нуле фактически означает бессмысленную потерю времени; как-нибудь дальше полный расчет сделаю). Для конечного автомата все упрощается обратимостью: на первом участке роста ускорения относительное перемещение равно оному на последнем участке и так далее. В случае предложенного допущения получаем, что относительные перемещения на обеих трапециях изменения ускорения равны Vmax/2(Vmax/α-1), где α — максимальное ускорение (и, соответственно, скорость изменения ускорения). Можно и время перемещения определить: в данном случае оно составит Vmax/α + S/Vmax + 1 (где S — заданное перемещение). Если участок с максимальной скоростью вырождается в точку, минимальное время будет равно 2(Vmax/α+1). А при вырождении в точку еще и участков с постоянным ускорением — 4 секунды (перемещение при этом составит 10α/6). Т.о., если в случае трапециевидного рампа у нас было три состояния КА (ускорение, максимальная скорость, замедление), в данном же случае их будет семь! И вариантов движения будет больше (трапеция могла лишь выродиться в треугольник с постепенно уменьшающимся максимумом, а здесь же сначала выродится в точку участок с максимальной скоростью, затем график ускорения выродится в треугольный). Ну и везде предел наступает, когда выгодней движение с постоянной минимальной скоростью. Скажем, за одну секунду с треугольным профилем ускорения будет пройдено α/16 шагов, т.е. если минимальная скорость будет выше этого значения, то выгодней будет двигаться с постоянной минимальной скоростью. И тут вспоминаем, что начинаем-то мы тоже с минимальной скорости (и заканчиваем ею) → в нашем случае треугольный профиль ускорения никогда не выродится в нуль. Узбагаиваемся… Допуская кучу допущений, получаем все достаточно просто, но в реальности таки надо проверять на реальной системе. Вполне возможно, что скорость изменения ускорения может быть куда выше, и на максимальное ускорение мы сможем выйти быстрей, чем за одну секунду (т.е. введем еще и параметр β — скорость изменения ускорения). Как-нибудь намедни надо будет еще листика 4-5 потратить, да пересчитать все в общих параметрах. А пока стоит определиться с базовыми вещами: как нам вычислить, скажем, предельное ускорение. Ничего сложного здесь нет: берем данные о максимальном моменте ШД, M. Если мы крутим турель с моментом I, то получаем второй закон Ньютона в виде M=Iε (ε — угловое ускорение). "На всякий случай" можно еще на 0.7 умножить результат, т.е. ε=0.7M/I. У нас этот параметр не в радианах/с² измеряется, а в шагах/с², т.е. для стандартного двигателя с 200ш/об нужно умножить на 200/(2π), получаем: α=22.3M/I. Если же двигаем горизонтально (для вертикали нужно еще g добавить для случая движения вверх) платформу массой m, то получаем уже F=ma, и нужно пересчитать момент в F, а ускорение в α. Пусть шаг винта равен δ. Из равенства работ 2πM=Fδ получаем: F=2πM/δ. Умножим еще на те же 0.7 для учета трения (а фактически, возможно, даже 0.3 надо будет использовать): F=4.4M/δ. Линейное ускорение легко преобразуется в шаги: α=200a/δ. Итого: 4.4M/δ=m·δα/200 → α=880M/(δ²m).