Написано всё правильно, но о сколько грабель остались незамеченными (неуказанными).
Приведу некоторые из них, исключительно для
Art_sh, чтобы не казалось что можно впрямую запрограммировать выведенные формулы и успокоиться. Проблемы связаны в основном с конечной точностью измерений расстояний.
Кстати, одной из проверок (в вашей программе) что в исходных данных нет противоречий, должно быть то, что
Ну, если проверка на положительность всех координат
была сделана выше, при решении систем уравнений, то хорошо. Но, условие
вполне может не выполняться для положений манипулятора вблизи плоскости датчиков, я бы так прикинул уже для углов порядка 5°-10° и меньше от горизонтали (зависит от соотшения
и погрешности измерений).
для подтверждения непротиворечивости показаний датчиков, вам надо убедиться что
(т.е. что измеренное расстояние между излучателями соответствует реальному).
Снова, с какой точностью должно выполняться равенство? Априори неизвестно, надо думать/считать. В некоторых плохих случаях погрешность равенства может быть в несколько раз больше погрешности измерений, а для малых
погрешность равенства может даже стать сравнимой с величиной
(например
мм и
мм при погрешности измерений
мм).
Для ещё одной проверки непротиворечивости показаний датчиков, я бы нашел точку пересечения прямой
с плоскостью датчиков
-- эта точка всегда должна попадать в какой-то круг допустимых значений (в этом круге манипулятор пересекается с плоскостью датчиков).
Тоже легко может не выполняться для положений манипулятора вблизи плоскости датчиков. Точка перечения может вообще уйти в противоположную сторону от датчиков (т.е.
). А если излучатели расположены достаточно далеко (в сравнении с величиной
) от центра шаровой опоры, то радиус круга пересечения может быть в десятки и сотни раз больше погрешности измерений расстояний - и его тоже надо аккуратно считать/оценивать, для лучшего и худшего случаев. Без такой оценки вообще малопонятно что именно брать за радиус этого круга, по какому критерию решать попала точка в круг или нет. И почему круг, а не эллипс с тем же азимутом большой оси?!
Вопрос азимутального угла в вертикальном положении вообще не рассмотрен.
Ну про вопросы погрешности вычислений в этой задаче можно забыть, точности даже single арифметики вроде бы хватает за глаза. А вот к примеру точности целых типов, с шагом координат в погрешность измерений расстояния (например
мм) может и не хватить из-за округлений в процессе вычислений, надо брать шаг координат скажем в сотню раз меньше (думать хватит ли шага в десять раз меньшего мне лень, надо будет по конечным формулам прикидывать результирующую погрешность вычислений).
В итоге, пока остаёмся в рамках
чистой математики с нулевой погрешностью - всё просто и замечательно. Когда запустим на практике - столкнёмся с кучей глюков, в процессе тестирования (что хорошо т.к. есть возможность поправить дело) или в работе у пользователя (что ужасно и может быть дорого во многих смыслах).
Повторю, я не отговариваю и не против, выкладки правильные, но вот как оно будет работать на практике - вопрос. Которым неплохо бы озадачиться ещё на стадии проектирования. Конечно если нет желания и времени потом долго доводить систему до ума разными костылями, например: трекингом перемещений излучателей; ограничением ускорений излучателей (сглаживанием/игнорированием рывков); установкой 4-го датчика вне плоскости первых трёх датчиков на сравнимом с
расстоянии от первых трёх (могут быть проблемы с видимостью излучателей как раз в наиболее востребованной области положений манипулятора около плоскости первых трёх датчиков); программным повышением точности измерений.
(PS.)
Что-то чем дальше, тем больше оно напоминает не реальную задачу, а курсовуху. Формулы, в общем виде, расстояния "модельные" (круглые), игнор физических погрешностей (вибрация, стирание механики, скорость перемещений, нежёсткость конструкции, вопросы с калибровкой/поверкой, экранирование излучателей друг другом). Как-то всё оторвано от практики. Могу и ошибаться и все эти вопросы лишь оставлены на потом, когда будут идеальные формулы, но лично мне такой подход правильным не кажется.