Запускаем GPSD

Задача - подключить к виртурилке GPS-приёмник и получить координаты в удобоваримом виде с минимальным числом подпрыгиваний на бубне.

Лирическое отступление

Физически соединение, как правило, осуществляется через последовательный порт (RS-232, USB, Bluetooth). Для связи GPS-приёмника с компьютером может использоваться двоичный (текстовый) протокол производителя приёмника (Garmin, Magellan и другие), либо производителя GPS-чипсета (Magellan, Sirf, Trimble и другие), при этом абсолютное большинство GPS-приёмников поддерживают обмен информацией с помощью текстового протокола NMEA.

(ц) википедия

Поддерживать даже часть этого многообразия в своей программе - сложная задача. Но есть практически "серебряная пуля" - GPSD.

Проект GPSD представляет собой набор инструментальных средств для управления коллекциями устройств GPS и другими датчиками, связанными с навигацией и continue.

GY-87

Итак, приехал мне GY-87, который на борту несёт:

  • акселерометр+гироскоп MPU6050
  • Барометр BPM180
  • Магнетометр HMC5883L

Хочу описать особенность данного модуля - сразу после включения на шине i2c не видно магнетометра. Похоже, что аксел и барометр прицеплены к основной шине i2c, а магнетометр - на вторичной i2c шине MPU6050.

Что-то вроде этого:

[v2r] ==o==>MPU6050 ---> HMC5883L
        \
         \===> BPM180

После старта MPU6050 не пропускает ничего из внешней шины во вторичную, самолично пожирая тактирующий сигнал и данные. HMC5883L ничего не получает от хоста.

По даташиту, чтобы хост увидел устройства на вторично шине, MPU6050 надо переключить в режим continue.

Стендовые испытания стабилизации

Квдрокоптер на стенде. Извините, снято на электро-лобзик.

Некоторые пояснения.

Вначале двигатели вращаются на минимальных оборотах. Стабилизации нет. Это вроде как контрольный режим для проверки направления вращения. Потом обороты поднимаются и включается стаблизация. Тяги двигателей хватает на выравнивание. Для отрыва недостаточно. Все наклоны/колебания - по командам с QGround­Con­trol

Управление идёт по воздуху по протоколу MAVLink (UDP). Тут изобретать вообще ничего не пришлось. Только в QGround­Con­trol добавил виджет для передачи значений RC каналов.

Провода, идущие вниз за кадр, это питание (батарейка на полу лежит, в кадр не попала) и UART-консоль через UART2USB преобразователь. Консоль в принципе можно отключить после запуска бинарника, а батарейку прицепить к корпусу. Будет совсем автономно болтанся continue.

Безъядерное демо-приложение для MPU-6050

Построил ядрёный драйвер для MPU-6050, но драйвер девайса не увидел. Симптомы похожи на то что описано тут

https://groups.google.com/forum/#!topic/bea­gle­board/hqqec­mO­jp­TU

Думал, что девайс дохлый.

Нашёл демо для RPi http://www.rasp­ber­rypi.org/phpBB3/viewtopic.php?t=22266

Построил консольные демки для в2р, заменив хардкоженный /dev/i2c-0 на /dev/i2c-1. Данные идут, даже похожи на правду

demо_dmp может выводить квартенионы. углы Эйлера, абсалюнтые и нормализованные ускорения по осям. Собственно, это все, что может потребоватчся от гира+акселя.

Дэмка жрёт 40% cpu.

Первый коннект

Забрал ништяки. Подключил консоль USB-UART (3 провода + minicom)

http://wiki.virt2real.ru/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_UART

Теперь есть терминал без шаманства.

Подключил MPU-6050 и компас по i2c

http://wiki.virt2real.ru/wiki/%D0%9F%D0%BE%D0%B4%D0%BA%D0%B­B%D1%8E%D1%87%D0%B5%D0%B­D%D0%B8%D0%B5_%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2_%D0%BF%D0%BE_I2C

Обе две железки видны в i2cdetect.

Драйвер для MPU-6050 в ядре не нашлось (или плохо искал). Пока отложил железку в сторону. Для HMC5883L драqвера нет, есть для HMC5843L.

В даташитах есть различия:

  • Регистры чтения по Z и Y поменяны местами
  • Con­fig­u­ra­tion Register A использует биты 5,6 (количество семплов для усреднения)
  • HMC5883L: Mode register - bit7 включить прддержку High Speed i2c (3400kHz)
  • Data output rate имеют большее в 1.5 раза значение
  • Чуствительность HMC5883L чють меньше
  • Status Register в HMC5883L не имеет бита REN

Воткнув драйвер от HMC5843L, смог что-то прочитать из values. Сначала всё читалось continue.

Жжж-ж!

Пожжужал двигателями с помощью аппаратных PWM в2р

http://wiki.virt2real.ru/wiki/PWM

Заказал USB-UART (на FTDI232RL), гироском+акселерометр MPU-5060, компас на HMC5883L, сонар HC-SR04

http://ardunn.ru

Без меток