У меня есть 2 датчика: на плече и на руке каждый дает мне кватернион (или углы Эйлера) его положения в глобальном трехмерном пространстве, есть ли у вас какие-либо идеи, как я могу найти положение предплечья? Например, мне нужно это значение для решения проблемы: , когда я держу руку за столом и поднимаюсь вверх по моей руке (как крыло), программа думает, что я поднимаю руку вверх вместе с плечом.Предсказание предплечья зрения на основании углов рук и рук
ответ
Ситуация, которую вы описываете, звучит как проблема inverse kinematics. Фактически, это способ определения требуемых углов (и удлинения, позиционирования) промежуточных соединений в конечности (или другом соединенном объекте) на основе желаемого положения его свободного конца (конечный эффектор ).
Вместо того, чтобы решать этот сложный вопрос математики самостоятельно, вы можете взглянуть на реализацию Unity's own inverse kinematics. Однако это может оказаться невозможным, если вы не можете адаптировать свои внутриигровые объекты к Animator
.
Вы также можете запросить решение для своего решения. Создание общего решения этой проблемы крайне математически сложно - но у вас есть дополнительная информация, доступная для вас: фактический угол и расположение руки и плеча. Если вы укажете длину предплечья или длину плеча (вы можете даже получить это математически, до вас!), То для ваших целей достаточно достаточной линейной алгебры света (при условии, что ваши показания датчика верны).
Если вы указали длину предплечья FL, вам нужно найти точку пересечения (локоть) вдоль вектора направления плеча, который является расстоянием FL от руки. В качестве альтернативы, если вы укажете длину UL верхнего плеча, вам просто нужно переместить UL/2 по вектору направления плеча (так как положение находится в середине плеча), чтобы получить положение локтя.
В обоих случаях, когда у вас есть положение локтя, тривиально получить положение и угол предплечья. Вот диаграмма для визуализации задачи:
Спасибо за ваш ответ! Я не знаю длины руки. Это одна из проблем, которые мне нужно решить. – KhanSuleyman
@KhanSuleyman. Это немного сложнее, если вы не можете оценить какие-либо длины, но не невозможно. Поэтому я предложил вам также математически вывести длины, используя общую верхнюю до уровня длины руки (например, [здесь] (http://hypertextbook.com/facts/2006/bodyproportions.shtml)). Исходя из этого соотношения, вам просто нужно решить уравнение для длин двух частей руки, которые удовлетворяют данному соотношению, и заданного угла. (Это немного математически тяжело, поэтому некоторые чтения по линейной алгебре могут быть необходимы.) – Serlite
Ваш ответ очень ценен, он мне очень помогает. Также я хочу использовать методы машинного обучения (или глубокого обучения), что вы думаете об этом? – KhanSuleyman
Это довольно широкое (слишком широкое для переполнения стека), но это звучит как проблема обратной кинематики. Возможно, попробуйте прочитать теорию за решателями IK (для ее реализации требуется немного математики, поэтому, возможно, стоит посмотреть на существующие, которые работают с Unity). – Serlite
Спасибо большое! Не стесняйтесь публиковать свой комментарий в качестве ответа, я соглашусь с ним – KhanSuleyman
Конечно, я расширил его связкой и добавил его в качестве ответа. Удачи! – Serlite