ESP32 + 8x MPU9250

Bengamin
Offline
Зарегистрирован: 25.08.2021

Здравствуйте!

Есть:

  • Микроконтроллер ESP32 Lolin WeMos Lite.
  • Сенсор MPU-9250, 8 штук.
  • Мультиплексор TCA9548A.

Задача:

  • 1) ESP32 подключен к сенсорам через мультиплексор.
  • 2) ESP32 получает, обрабатывает данные сенсоров (Например, dmp) и отправляет их (т.е. кватернионы) через bluetooth, просто по serial.
  • 3) По получении команды от SerialBT (Например, "#"), начинает происходить калибровка сенсеров, по очереди. Процесс калибровки также отправляется через bluetooth.

Пояснение:

Само решение я в принципе написал, всё рассчитывается и отправляется, но, мне крайне не нравяться те результаты, которые получаются, а именно, сильно "колбасит" ось Z (Если мы переводим кватернионы в углы Эйлера). Да и в целом, не могу сказать что доволен тем, что происходит по осям X-Y. Поэтому, решив что я что-то упускаю, решил обратиться сюда. Прошу сообщать примерные сроки и стоимость.

Спасибо!

rkit
Offline
Зарегистрирован: 23.11.2016

Bengamin пишет:

обрабатывает данные сенсоров (Например, dmp)

Может быть чуть-чуть подробнее опишешь задачу, не?

Bengamin пишет:

Процесс калибровки также отправляется через bluetooth.

Описывать процесс калибровки тоже не надо, конечно же.

Bengamin
Offline
Зарегистрирован: 25.08.2021

Про DMP (цифровой процессор Digital Motion Processor), который находиться на сенсоре MPU9250, в интернете вроде можно найти информацию - что это, как используется и так далее. Почитайте. Но использование его в скетче не обязательно - если Исполнитель найдет лучшее решение - то я только за. Мне, прежде всего, нужны кватернионы с точными значениями.

 

Процесс калибровки я не берусь описывать, так как видел разные реализации и мои пожелания могут ограничить Исполнителя. Подозреваю, что выглядеть это должно так (как и везде):

1) кладём сенсор на стол - настраиваем акселерометр и гироскоп.

2) вертим сенсор в виде 8-ки - настраиваем магнитометр.

В общем, я не специалист по Ардуино, в связи с чем считаю правильным, предоставить Исполнителю обширные полномочия по реализации задачи.

 

rkit
Offline
Зарегистрирован: 23.11.2016

Осталось, всё-таки, описать задачу.

Bengamin
Offline
Зарегистрирован: 25.08.2021

Задачу я описал в первом сообщении. Что именно необходимо указать дополнительно?

mixail844
Offline
Зарегистрирован: 30.04.2012

Bengamin пишет:

Задачу я описал в первом сообщении. Что именно необходимо указать дополнительно?

какую прикладную задачу вы решаете ? от этого зависит как часто надо опрашивать данные с датчиков ,  как насртоить их в принципе , какая обработка требуеться на стороне ардуино ( может он не соотвествует вашим хотелкам)
 
что значит "сильно "колбасит" ось Z"  ? по какомуто из датчиков или по резултатам из dmp ? 
rkit
Offline
Зарегистрирован: 23.11.2016

Bengamin пишет:

Но использование его в скетче не обязательно - если Исполнитель найдет лучшее решение - то я только за. Мне, прежде всего, нужны кватернионы с точными значениями.

Кватернионы чего? В какой системе координат? С какой частотой и аналоговой пропускной способностью? Критерий требуемой точности в цифрах?

Bengamin
Offline
Зарегистрирован: 25.08.2021

Квантернион поворота сенсора, т.е. [x,y,z,w].

В системе координат x,y,z, т.е в прямоугольной пространственной системе координат.

Частота - чем меньше тем лучше, хотелось бы минимально 100ms.

Точность - чем выше тем лучше, хотелось бы минимальную погрешность 1 градус.

rkit
Offline
Зарегистрирован: 23.11.2016

Зачем тогда калибровка акселерометров и компаса, если нужно только ориентацию из dmp? Точно не нужно мультисенсорное слияние?

Bengamin
Offline
Зарегистрирован: 25.08.2021

rkit пишет:

Зачем тогда калибровка акселерометров и компаса, если нужно только ориентацию из dmp? Точно не нужно мультисенсорное слияние?

Хотелось бы, чтобы нулевой (Вроде так называется) кватернион получаемый из DMP сенсора изначально совпадал с расположением самого сенсора в реальном мире. Если я правильно понимаю, то калибровка для этого и нужна в том числе.

Т.е. представим, что в стартовом положении сенсор-1 имеет угол по оси X 10 градусов, по оси Y 20 градусов, по оси Z 30 градусов. Тогда откалиброванный сенсор должен возвращать нулевой кватернион именно в таком положении.

Могу не совсем правильно называть вещи своими именами, т.к. к сожалению, повторюсь, не специалист.

SadZhaba
Offline
Зарегистрирован: 06.04.2018

А какую библиотеку для mpu вы использовали? Похоже, я столкнулся с подобной проблемой.

Вот мой пример:

01#include <SparkFunMPU9250-DMP.h>
02#include <Wire.h>
03 
04#define TCAADDR 0x70
05void tcaselect(uint8_t i) {
06  if (i > 7) return;
07  
08  Wire.beginTransmission(TCAADDR);
09  Wire.write(1 << i);
10  Wire.endTransmission(); 
11}
12 
13MPU9250_DMP imu;
14 
15void setup()
16{
17  Serial.begin(115200);
18  tcaselect(0);
19  imu.begin();
20   
21  imu.dmpBegin(DMP_FEATURE_6X_LP_QUAT | // Enable 6-axis quat
22               DMP_FEATURE_GYRO_CAL, // Use gyro calibration
23              10); // Set DMP FIFO rate to 10 Hz
24}
25 
26void loop()
27{
28  tcaselect(0);
29    imu.dmpUpdateFifo();
30  float q0 = imu.calcQuat(imu.qw);
31  float q1 = imu.calcQuat(imu.qx);
32  float q2 = imu.calcQuat(imu.qy);
33  float q3 = imu.calcQuat(imu.qz);
34Serial.println("Q: " + String(q0, 4) + ", " +
35                    String(q1, 4) + ", " + String(q2, 4) +
36                    ", " + String(q3, 4));
37}

 

Bengamin
Offline
Зарегистрирован: 25.08.2021

Я пробовал с большинством библиотек - и результат везде был печальный. Причем, дело явно не в браке - я пробовал с двумя разными MPU9250, ситуация одна и та же.

У Вас также "шумит" ось Z, полагаю?

Bengamin
Offline
Зарегистрирован: 25.08.2021

И, как Вы можете заметить - тут в теме никто не предложил свою помощь. Решения, видимо, пока нет.