08 февраля 2017

Стики для передатчика на гироскопах - реально?

Вот уже несколько дней работаю над созданием USB-свистка для симулятора с высокой точностью на базе платки Arduino Leonardo. Все бы ничего, но небольшой дребезг значений в около-нулевой зоне немного не нравится. Причину его я знаю, но это навело меня на совсем другие мысли.

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

Немного могут исправить ситуацию использование датчиков Холла вместо резисторов. В них нет трущихся частей, погрешность измерения значительно выше, но есть нелинейность в выходном сигнале. Да и все равно контроллеру передатчика нужно оцифровывать данные с датчиков Холла, что тоже увеличит погрешность измерений.

А нельзя ли каким либо образом получать со стиков сразу цифровые данные, без необходимости преобразования? Такую возможность могут дать обычные гироскопы, которые используются в полетных контроллерах квадриков и вертолетов.

Допустим, разместим двух-осевой гироскоп на стике и попробуем снимать с него данные. Но при этом пульт придется держать абсолютно неподвижно, чтобы данные по отклонению стика были адекватные. Бред какой-то получается. А что если на корпус пульта установить еще один гироскоп? Тогда можно будет снимать данные с гироскопа, установленного на осях стика и гироскопа, установленного на корпусе передатчика. Если не трогать стики, то данные должны совпадать. Логично? Но если пошевелить стик, то данные с гироскопов будут отличаться. И они будут отличаться как раз на величину угла наклона стика! Вот оно значение! Как бы пульт не гулял в руках оператора, но разница в данных с гироскопов и будет реальным значением отклонения стика. Все просто! Никаких движущихся частей, никаких аналоговых данных, чистая цифра! Как думаете, идея стоящая?

Реализовать можно двумя способами. Первый способ - с помощью небольших платок с гироскопами и какого-нибудь контроллера под Arduino. Нужна только программа обработки данных с гироскопов и преобразования данных в значения, понятные контроллеру передатчика. Таким способом можно приспособить гироскопы к любому пульту. Но этот способ не очень хорош тем, что понижает точность данных, увеличивает их дискретность из-за преобразования. Но для эксперимента вполне подойдет. Не нужно будет глобально переделывать пульт.

Второй способ более правильный и предполагает подключение гироскопов непосредственно к контроллеру передатчика через SPI-шину. В этом случае вся обработка ляжет на плечи процессора пульта, но не будет промежуточного преобразования данных, что позволит повысить точность. Такой вариант более сложен и потребует модификации прошивки пульта. Это можно проделать с прошивкой Deviation для передатчиков DEVO.

К сожалению я не очень силен в программировании, чтобы реализовать хотя бы первый способ. Есть желающие попробовать? Давайте обсудим в комментариях!


19 комментариев:

  1. Идея интересная. Но я думаю так просто не получится. Обычные датчики типа mpu6000 меряют угловое ускорение и обычное ускорение. Для получения угла придётся два раза интегрировать угловое ускорение. При этом будет накапливаеться ошибка ~ t^2. Как её корректировать не понятно...

    ОтветитьУдалить
    Ответы
    1. С другой стороны, можно использовать не гироскопы, а акселерометры. Будет два вектора - можно измерить угол. Но нужно то два угла... Ок, берём mpu9150/mpu9250 - там ещё и компасс есть. Тогда что-то может получится - по двум парам векторов два угла можно измерить... Надо ещё оценить точность такой конструкции...

      Удалить
  2. А смысл тогда в аппаратуре, и лишней гире? Закрепите платки с гирами на руках и рулите ;)

    ОтветитьУдалить
  3. гироскоп -- слишком сложно, не в последнюю очередь из-за накапливающейся ошибки.
    и да, мне что-то говорит, что сенсоры гироскопа всё-таки тоже аналоговые, только оцифровка ведётся там же, в микросхеме.
    поэтому я не вижу ничего страшного в оцифровке и нормализации показаний датчиков Холла.
    и ещё: а вот датчик колеса мыши, он какую дискретизацию имеет?
    и какое разрешение у сигнала, передаваемое с пульта на приёмник? 0-128? 0-256? 0-2048?

    ОтветитьУдалить
    Ответы
    1. а насчет мыши это же мысль. только не про колесо а про саму мышь. можно же вместо перменных резисторов напихать каки-нибудь лазеров которые не будут иметь частей подверженных износу.

      Удалить
    2. Кстати да, это можно использовать!

      Удалить
    3. хм. две оптические мыши (не обязательно лазерные), распатронить на два стика.
      стик двигает либо датчик, либо подложку, за которой следит неподвижный датчик (с неподвижного датчика проще проводок выводить).
      схема слежения и выдачи скорости и направления смены координат в мышь уже встроена, только их надо снять и в ардуинку запхнуть.
      подложка либо полукруглая, либо плоская (в ардуинке сферические искажения пересчитывать можно).
      отлично же. дёшево и зверей убивать не надо.
      вопрос только про точность отслеживания. 300-600-1200-2400 cpi достаточно будет для диапазона стиков?

      Удалить
    4. Подложку однозначно легче двигать. Но как тогда определять точку отсчета и диапазон?

      Удалить
    5. тут засада.
      либо как-то припахивать имеющиеся резисторы, либо при каждом включении пульта делать мини-калибровку стиков (покрутить ими по максимумам всех осей, например).
      мини-калибровка меня бы не напрягла.

      кстати, из-за того, что мышь работает по относительным координатам, может, у неё тоже есть уход координат, просто мы этого не замечаем?
      тогда придётся лезть в мозги мышам или делать свои мозги на их сенсорах, что сразу резко усложняет работу (придётся переизобрести мышь заново, чтобы она по картинке на подложке определяла абсолютные координаты сразу).
      то есть неплохо бы исследовать мышь по двум направлениям:
      1) не уходит ли координата мыши при многократном смещении подложки (или сенсора) туда-сюда на одинаковое расстояние?
      2) в каком виде оптический сенсор видит подложку? как изображение или в виде каких-то условных сигналов? я где-то что-то когда-то видел, что якобы там стоит нормальная камера, которая снимает нормальное изображение.

      Удалить
    6. и оптические датчики от мышиных колёс тоже бы не сбрасывать со счетов.
      сейчас вон глянул на бангуде -- есть энкодеры для ардуины, я так понимаю, это и есть оптический датчик колеса мыши, только в другом корпусе.

      Удалить
    7. http://mysku.ru/blog/aliexpress/40426.html - переделка и удачное использование оптических энкодеров. В вашем случае особенно полезны комментарии к статье.

      Удалить
    8. Почитал. 100 линий на оборот очень-очень мало. Это получается 100 значений на один оборот. Сейчас в пульте значения идут -1024/+1024. При ходе стика на угол градусов 30. Это надо энкодер тысяч на 10 линий, чтобы выйти на такое же разрешение.

      Удалить
    9. В шариковых мышах этот вопрос решался повышающей передачей.
      На стике часть (половина, треть) шестерни, на валу энкодера -- пиньон.

      Удалить
    10. Тогда шестеренчатая передача мало того, что усложнит конструкцию, так еще и уменьшит точность. В шестеренках люфт будет по любому. Идея отличная, но хочешь - не хочешь, а потребуется сектор градусов в 30 с двумя тысячами делений:) И придется все это как-то защищать от пыли.

      Удалить
    11. вообще непонятно, почему на пультах не применяют оптику (в том или ином виде).
      то ли инерция мышления, то ли попробовали и бросили.

      Удалить
  4. Оптические энкодеры решают все проблемы. Да и не оптические тоже. Знай себе, считай импульсы.
    А резисторные стики надо фильтровать. Конденсаторами зашунтировать - раз. Цифровой фильтр в микроконтроллере - два. Главное, не переусердствовать, чтобы результат фильтрации успевал за движениями стиков.

    ОтветитьУдалить
  5. "Сейчас в пульте значения идут -1024/+1024"
    а куда столько то?
    500-600 на весь диапазон хватило бы

    Думаю лучше всего будет использование датчиков Холла (2-3 штуки), которые будут отслеживать положение маленького магнита, закрепленного на стойке стика.

    ОтветитьУдалить
  6. Вдруг не следите за этой темой, так вот:
    http://forum.rcdesign.ru/f136/thread443500-97.html#post6865856

    ОтветитьУдалить
    Ответы
    1. Мне вот еще интересная тема попалась. Уже видел подобное, даже сам загорелся сделать, но смущала нелинейность данных. Может не все так плохо и я просто зря паникую:)
      http://forum.rcdesign.ru/blogs/88272/blog22638.html

      Удалить