Стабилизация электронного компаса

Тема в разделе "Arduino & Shields", создана пользователем Sergey991, 21 сен 2013.

  1. Sergey991

    Sergey991 Нерд

    Всем привет. Вот делаю робота с автономной системой путешествия из точки А в точку Б.. Координаты есть, одна загвоздка я где то читал что электронный компас нужно держать идеально ровно, чтобы он показывал верное направление, что конечноже невозможно в подвижной модели. Итак сама суть есть 3х осный акселерометр и компас все в плате GY80 вот вид получаемых данных

    Axelerate: X=62; Y=53; Z=160;
    Temperature: 293 *0.1 deg C
    Pressure: 101006 Pa
    Compass 148.00

    Axelerate: X=69; Y=165; Z=51;
    Temperature: 294 *0.1 deg C
    Pressure: 101003 Pa
    Compass 132.00

    Axelerate: X=167; Y=27; Z=84;
    Temperature: 296 *0.1 deg C
    Pressure: 100997 Pa
    Compass 50.00

    датчик кручу немножко, так вот акслерометр както должен компенсировать неровности расположения, чтобы получить мы могли получить верное направление.(НЕ ЗНАЮ КАК ИХ ВМЕСТЕ СОЕДИНИТЬ) Помогите плиз
     
  2. Unixon

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

    Вам нужно с компаса считывать показания по всем трем осям.
    Акселерометр вам дает проекции вектора ускорения свободного падения g на оси X,Y,Z, т.е. gx,gy,gz.
    Компас вам дает проекцию вектора индукции магнитного поля B на оси X,Y,Z, т.е. Bx,By,Bz.
    Векторное произведение [B,g] даст вам вектор L, который всегда должен смотреть на восток или запад, если B определяется магнитным полем Земли.
    Далее из взаимного расположения тройки векторов g,B,L и орт локальной системы координат ex,ey,ez можно восстановить углы курса, крена и рысканья.
     
    Sergey991 нравится это.
  3. Sergey991

    Sergey991 Нерд

    [​IMG] Тоесть по этой формуле мы перемножаем векторы [gx,Bx]/[gy,By]/[gz,Bz] и мы получим углы курса, крена и рысканья? Я все правильно понял?
     
  4. Sergey991

    Sergey991 Нерд

  5. Unixon

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

    Ну да, все расписали.
     
  6. Sergey991

    Sergey991 Нерд

    Вот только проблема с библеотекой HMC5883L он не хочет работать с ардуино 1.5.2 ток с 1.0 . можете подсказать как исправить ету гадость ибо в 1.0 нет моей дуины(((
     
  7. Unixon

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

    А какая у вас?
     
  8. Unixon

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

    Свою плату легко добавить: нужно отредактировать файл arduino-1.0.5/hardware/arduino/boards.txt
     
  9. Sergey991

    Sergey991 Нерд

    ну с того сайта скачанная

    вот ошибки
    D:\Пишем проги\arduino-1.5.2\libraries\HMC5883L\HMC5883L.cpp: In member function 'void HMC5883L::Write(int, int)':
    D:\Пишем проги\arduino-1.5.2\libraries\HMC5883L\HMC5883L.cpp:123: error: 'class TwoWire' has no member named 'send'
    D:\Пишем проги\arduino-1.5.2\libraries\HMC5883L\HMC5883L.cpp:124: error: 'class TwoWire' has no member named 'send'
    D:\Пишем проги\arduino-1.5.2\libraries\HMC5883L\HMC5883L.cpp: In member function 'uint8_t* HMC5883L::Read(int, int)':
    D:\Пишем проги\arduino-1.5.2\libraries\HMC5883L\HMC5883L.cpp:131: error: 'class TwoWire' has no member named 'send'
    D:\Пишем проги\arduino-1.5.2\libraries\HMC5883L\HMC5883L.cpp:142: error: 'class TwoWire' has no member named 'receive'
     
  10. Sergey991

    Sergey991 Нерд

    если честно в библеотеках я неочень шарю*((
     
  11. Unixon

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

    Нет, в смысле ардуина какая?