Smart Pen:последний проект для ECE5725
Введение
В настоящее время для получения результатов рукописного ввода люди часто полагаются на емкостный сенсорный экран, стилус или другие подобные устройства. Они функциональны и точны, но не всегда гибки. Наш проект объединяет Raspberry Pi с IMU для создания продукта, который может отслеживать движение и очень быстро генерировать траекторию. Мы разработали систему, которая не нуждается в какой-либо конкретной поверхности или других средствах ввода для поддержки, и она отвечает только на IMU и его датчики. При подключении IMU к Raspberry Pi, когда устройство IMU перемещается, данные датчика будут передаваться от IMU к Raspberry Pi. Затем с помощью нашей программы и алгоритма восстановите движение ИДУ. Движение будет записано и сохранено в Raspberry Pi. С PyGame движение также может отображаться на TFT-экране Raspberry Pi. С помощью небольшой и удобной кнопки функция записи может начинаться и заканчиваться очень гибко. Пользователи также могут прикрепить наше устройство к другим вещам, чтобы отслеживать свои движения. Таким образом, наше устройство представляет собой работоспособное решение для отслеживания рукописного ввода, отслеживания движений и т. Д.
Цель
Цель проекта - разработать отдельный модуль, который можно надеть на ручку, робота или даже людей, чтобы отслеживать и записывать движение объекта. Пользователи могут использовать этот модуль и присоединять его к другим своим устройствам, поэтому, когда объект перемещается, наше устройство может восстанавливать и отслеживать его траекторию и отображать движение в горизонтальной плоскости в мировой рамке на экране. Очень классическим приложением является то, что пользователи могут использовать его как ручку, поэтому их записи будут записаны и сохранены как изображение. Особенностью этого проекта является то, что отслеживание не отвечает ни на каком конкретном самолете, и его можно применить на любом самолете, даже в воздухе. Расположение или наклон устройства также не повлияют на конечный результат.
Мы используем Raspberry Pi и Inertial Measurement Unit в качестве основных компонентов нашего проекта. Также PyGame используется для отображения траектории на Raspberry Pi.
Калибровка IMU
Из-за неточности изготовления 3 оси акселерометров и 3-осевые гироскопы обычно смещены, что приводит к ошибке между углом Эйлера двух координат. Необходима калибровка. Используя технику 6-позиционной калибровки, мы устанавливаем 6-позиционную калибровку следующим образом:
Используя самодельную калибровочную таблицу (Рисунок XX), мы фиксируем imu в 6 положениях и записываем показания. Данные калибровки, собранные в этих шести положениях, следующие:
Данные ускорения после калибровки следующие (Ax, Ay, Az - данные после калибровки, а ax, ay, az - необработанные данные):
Sensor Fusion для необработанных данных
Расчет кватерниона:
Кватернион - это представление ориентации и вращения объекта, и вычислить вращение вектора легче, чем углы Эйлера. Транзакция между кватернионом и углом Эйлера показана ниже:
q =cosθ2 + sinθ2cosα⋅i + sinθ2cosβ2⋅j + sinθ2cosγ⋅k
q =λ + P1i + P2j + P3k
Вращение кватерниона:
Для фиксированного вектора V, скоординированного в кадре XYZ, он может быть представлен в кватернионе:
V =0 + Vxi + Vyj + Vzk
Если рамка поворачивается на q, становится X’Y’Z ’, координата V в X’Y’Z’ может быть представлена как:
V ′ =0 + V′xi ′ + V′yj ′ + V′zk ′
Тогда V =q∘V′∘q − 1
Однако использования необработанных данных, сгенерированных гироскопом, по-прежнему недостаточно, из-за несоосности, упомянутой в части калибровки, необходимо учитывать вектор силы тяжести, полученный акселерометром. Функция «UpdateIMU» используется для вычисления ошибки между вектором силы тяжести, вычисленным гироскопом, и вектором силы тяжести, измеренным акселерометром. Эта функция была запущена 2000 раз на начальном стационарном этапе без движений и вращений и с использованием обратной связи для вычисления ошибки. Функция показана ниже:
123456789 | def UpdateIMU (self, Gyr, Acc):if np.linalg.norm (Acc) ==0:warnings.warn («Величина акселерометра равна нулю. Обновление алгоритма прервано.») return else:Acc =np.array (Acc / np.linalg.norm (Acc)) v =np.array ([[2 * (self.q [1] * self.q [3] - self.q [0] * self.q [2])], [2 * (self.q [0] * self.q [1] + self.q [2] * self.q [3])], [self.q [0] ** 2 - self.q [1] ** 2 - self.q [2] ** 2 + self.q [3] ** 2]]) |
Переменные «Acc» и «v» являются нормализованным вектором силы тяжести, вычисленным акселерометром и гироскопом, тогда угловое отклонение (ошибка) между двумя векторами может быть представлено с помощью их взаимного произведения:
1 | error =np.cross (v, np.transpose ([Acc]), axis =0) |
Вычисленную ошибку также можно интегрировать для обновления показаний гироскопа с использованием цикла отрицательной обратной связи PI (вот почему нам нужно запустить эту функцию 2000 раз, чтобы цикл PI мог сойтись):
12 | self.IntError =self.IntError + errorRef =Gyr - np.transpose (self.Kp * error + self.Ki * self.IntError) |
Затем кватернион можно было бы вычислить по скорректированным данным гироскопа:
1234 | pDot =np.multiply (0.5, self.quaternProd_single (self.q, [0, Ref [0,0], Ref [0,1], Ref [0,2]])) self. q =self.q + pDot * self.SamplePeriod; self.q =self.q / np.linalg.norm (self.q); self.Quaternion =self.quaternConj (self.q); |
Подробнее:Smart Pen:финальный проект для ECE5725
Производственный процесс
- Идеи проектов на основе датчиков для студентов последних курсов инженерного факультета
- 10 лучших тенденций интеллектуального производства на 2021 год
- Умное освещение как основа умного города
- Журнал проекта для FirePick Delta, MicroFactory с открытым исходным кодом
- Строим, вперед! Робот - легкий стартовый проект для детей
- Health Band - умный помощник для пожилых людей
- Модернизация умного дома для современной жизни
- Поиск окупаемости умного производства
- Ультратонкий сенсор для умных контактных линз
- Как выбрать проект для автоматизации