Перевод угла вращения в величину линейного перемещения

Тема в разделе "Arduino & Shields", создана пользователем KBSH, 3 июл 2014.

  1. KBSH

    KBSH Нерд

    На рис. 1 и рис. 2 (во вложении) показано перемещение объекта К вдоль оси синей системы координат (в дальнейшем система С) путем вращения (к примеру) планшета вокруг оси черной системы координат (далее система Ч).
    В данном случае перевод угла вращения в величину линейного перемещения не вызывает трудностей, т. к. направления осей Х и У в системе С перпендикулярны осям Х и У в системе Ч, и взаимное влияние осей системы Ч исключено (перемещение объекта К по осям Х и У в системе С будет напрямую зависеть от углов вращения вокруг осей Х и У системы Ч) .
    Но если ориентацию планшета изменить, не меняя плоскость вращения (рис. 1-2, рис. 2-2), то будет одновременное вращение по двум осям системы Ч. Как в этом случае реализовать перемещение объекта К в системе С (по одной оси, по двум) ? Как отследить ориентацию черной системы координат относительно синей (может магнитный компас) ?
    схема координат.jpg
     
    Последнее редактирование: 3 июл 2014
  2. ALev

    ALev Гик

    Добрый день!

    Из вашего описания непонятно вот что: необходимо ли ориентировать систему Ч перед работой или надо сделать так, чтобы работа (перемещение объекта К) могла выполняться при любой ориентации системы Ч относительно К. Уточните этот момент сначала, пожалуйста.
     
  3. KBSH

    KBSH Нерд

    Нужно чтобы работа (перемещение объекта К) могла выполняться при любой ориентации системы Ч относительно системы С.
    Например, в роли системы С будет LCD-экран, отображающий перемещения объекта К не зависимо от ориентации системы Ч. Так понятно?
    Думаю надо ввести какие-то начальные условия для системы Ч, изменение которых даст информацию для перемещения объекта К. Например по нажатию кнопки текущие показания гироскопа принимаются за точку отсчета и от них уже отсчитываются изменения в системе Ч (кнопка остается нажатой) для перемещения объекта К. Когда перемещение выполнено, кнопка отпускается.
     
    Последнее редактирование: 3 июл 2014
  4. KBSH

    KBSH Нерд

    Вся трудность именно в таком положении (на рис.1-2, 2-2), т.к. изменения идут сразу по всем осям и мне надо как-то разделить, что будет вызывать перемещение объекта К по горизонтальной оси, по вертикальной, и по обеим сразу.
     
  5. ALev

    ALev Гик

    Вполне.

    Есть датчики, дающие уголы наклона объекта относительно выбранной плоскости (обычно относительно горизонтали). В качестве опорного направления такие датчики используют магнитное поле Земли. Если использовать такой датчик, то уже не важно будет, как ориентирован объект по сторонам света. Подойдёт?
     
  6. KBSH

    KBSH Нерд

    Ориентация объекта не важна (он перемещается по плоскости с фиксированной системой координат). Важна ориентация самого средства управления. На рис.1 и рис.2 показаны идеальные условия работы планшета (почти как в призовом автомате "Подъемный кран" - системы координат крана и ручки управления неизменны) . А что делать если координатная система планшета меняет ориентацию, но векторы управления остаются прежними?
     
  7. ALev

    ALev Гик

    Мой термин "объект" и ваш термин "средство управления" обозначают одну и ту же сущность :)

    Вам нужен датчик углов наклона к горизонтали (по сути - цифровой гироскоп). Для него ориентация по сторонам света не важна. Например, такие датчики есть в старых ноутбуках ThinkPad T60. Вы можете "катать шар" в игре, запущенной на таком ноутбуке, и одновременно вращаться, и ваше вращение не будет влиять на ход игры (головокружением головы пренебрегаем:)).
     
  8. KBSH

    KBSH Нерд

    Не корректный пример. Возьмем компьютерную мышь. Если вы развернете ее на 90 градусов в любую сторону и будете двигать ее вверх, курсор будет перемещаться в горизонтальном направлении. Векторы движения у мыши тоже ведь развернулись на 90 градусов.
     
  9. Unixon

    Unixon Оракул Модератор

    Для вычисления перемещения объекта вам нужно переводить векторы управляющих воздействий из системы координат панели управления в систему координат объекта. Положение панели управления будет определяться датчиками положения (акселерометр,магнетометр). Однако, в любой момент времени управляющие векторы в системе объекта всегда будут лежать в некоторой плоскости, но никак не в объеме, поэтому вполне естественно, что будет возникать неоднозначность в интерпретации управляющий воздействий, выраженных таким образом, поскольку у управляемого объекта больше степеней свободы, чем у панели управления. Далее нужно выбрать модель взаимодействия, которая будет устранять эту неоднозначность и всегда корректно интерпретировать управляющие векторы. Для этого, соответственно, придется выбрать из нескольких возможных вариантов движений какой-либо один и на нем остановиться. Иначе управлять перемещением\вращением в объеме с плоской панели не получится.

    Например, касание может переключать плоскость\ось перемещения\вращения объекта, а движение будет происходить в этой плоскости в направлении проекции на нее управляющего вектора (или вовсе реинтерпретации компонент управляющего вектора как заданных в системе координат объекта, а не панели управления).
     
  10. KBSH

    KBSH Нерд

    Как раз наоборот. У объекта управления всего две степени свободы - перемещение по плоскости (т.е. изменение координат Х и У). Никакого вращения у него нет. А вот у панели управления целых три степени свободы - вращение вокруг каждой своей оси XYZ.
     
  11. Unixon

    Unixon Оракул Модератор

    В таком случае у вас вообще нет проблем, просто интерпретируйте векторы движения в плоскости панели управления в системе координат панели как векторы в системе координат объекта в некоторой фиксированной плоскости XY.
     
  12. KBSH

    KBSH Нерд

    Не получиться. Панель управления не перемещается, а вращается. Векторы вращения панели управления, должны совпадать с осями перемещения объекта управления, независимо от ориентации самой панели управления (пример с мышью - как ее не поверни, "верх" мыши должен оставаться "наверху", а не поворачиваться вместе с ней). Нужен какой-то опорный параметр (может вектор магнитного поля Земли) относительно которого измеряется управляющий вектор, и ориентация панели управления не будет иметь значение. Может как-то гироскоп с магнитным компасом совместить?

    Например какой? У меня есть GY-521, он с магнитным полем работает?
     
  13. Unixon

    Unixon Оракул Модератор

    MEMS "гироскоп" измеряет угловое ускорение, а вам нужен датчик положения.

    Систему координат можно построить на акселерометре и магнетометре. Они дадут проекцию векторов g и B на орты системы координат панели управления. Этого достаточно, чтобы по этим векторам достроить ортогональную систему координат, связанную с панелью управления и ориентированную в пространстве независимым от панели образом.
     
  14. KBSH

    KBSH Нерд

    какое из недорогого оборудование порекомендуете?
     
  15. Unixon

    Unixon Оракул Модератор

    А что вы такое собираете? В смартфонах и планшетах есть свои встроенные датчики положения.
     
  16. KBSH

    KBSH Нерд

    Смартфон и планшет приведен в качестве примера. Подробностей сообщить не могу- коммерческая тайна. Если только вы пожелаете участвовать, тогда можно организовать команду разработки.
     
  17. KBSH

    KBSH Нерд

    такой подойдет?
    GY-271 Датчик- компас (HMC5883L)
     
  18. Morales

    Morales Нерд

    На сколько я понял вам необходимо взять датчик компас и датчик положения. Далее вы ориентируете средство управления с осями перемещения объекта например так
    1.jpg
    Запоминаете положение по компасу и после того как средство управления будет повернуто
    2.jpg
    угол поворота вы посчитаете, найдете проекции осей и будете считать поворот уже вокруг найденной оси.
    Может быть поможет математика для управления камерой в OpenGL :)
     
  19. KBSH

    KBSH Нерд

    а подробнее об этом?
     
  20. KBSH

    KBSH Нерд

    наверное, для отслеживания ориентации самого устройства, надо еще один гироскоп использовать