Евгений Агафонов http://quad-v2r.herokuapp.com/ mail@example.com Бложик о том, как создаётся квадрокоптер на базе <a href="http://virt2real.ru/content/kontroller-virt2real-virturilka" target="_blank">виртурилки</a> tag:quad-v2r.herokuapp.com,2011-06-11:/atom/ http://quad-v2r.herokuapp.com/favicon.ico http://quad-v2r.herokuapp.com/feed-logo.png 2014-03-13T20:00:00Z acrylamid Запускаем GPSD tag:quad-v2r.herokuapp.com,2014-03-14:/2014/zapuskaem-gpsd 2014-03-13T20:00:00Z Евгений Агафонов http://quad-v2r.herokuapp.com/ mail@example.com <p>Задача - подключить к виртурилке GPS-приёмник и получить координаты в удобоваримом виде с минимальным числом подпрыгиваний на бубне.</p> <h4>Лирическое отступление</h4> <blockquote> <p>Физически соединение, как правило, осуществляется через последовательный порт (RS-232, USB, Bluetooth). Для связи GPS-приёмника с компьютером может использоваться двоичный (текстовый) протокол производителя приёмника (Garmin, Magellan и другие), либо производителя GPS-чипсета (Magellan, Sirf, Trimble и другие), при этом абсолютное большинство GPS-приёмников поддерживают обмен информацией с помощью текстового протокола NMEA. </p> <p>(ц) <a href="http://ru.wikipedia.org/wiki/GPS-%D0%BF%D1%80%D0%B8%D1%91%D0%BC%D0%BD%D0%B8%D0%BA#.D0.9F.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D1.81.D0.BA.D0.B8.D0.B5_.D0.BF.D1.80.D0.B8.D1.91.D0.BC.D0.BD.D0.B8.D0.BA.D0.B8">википедия</a></p> </blockquote> <p>Поддерживать даже часть этого многообразия в своей программе - сложная задача. Но есть практически "серебряная пуля" - GPSD.</p> <blockquote> <p>Проект GPSD представляет собой набор инструментальных средств для управления коллекциями устройств GPS и другими датчиками, связанными с навигацией и хранением точного времени, в том числе морских радиосистем автоматической идентификации AIS (Automatic Identification System) и цифровых компасов. Основная программа — демон сервиса, называемый gpsd, управляет набором датчиков и формирует от них всех сообщения в виде потока объектов JSON на известном порту TCP/IP. Среди других программ, имеющихся в наборе, есть примеры клиентских программ, используемых в качестве модели кода, а также различные диагностические инструментальные средства.</p> <p>(ц) <a href="http://rus-linux.net/MyLDP/BOOKS/Architecture-Open-Source-Applications/Vol-2/gpsd-1.html">Глава 7 из книги "Архитектура приложений с открытым исходным кодом", том 2</a></p> </blockquote> <p>Задача-минимум:</p> <ul> <li>подключить имеющийся GPS-приёмник к виртурилке</li> <li>установить и запустить GPSD</li> <li>получить координаты</li> </ul> <h4>Подключаем приёмник</h4> <p>В моём распоряжении имеется GPS-приёмник GY-GPS6MV2 на чипе ublox NEO6MV2:</p> <ul> <li>Напряжение питания 3 - 5 В</li> <li>интерфейс: UART, cкорость по умолчанию 9600 бод</li> <li>Размеры: модуль 25x35 мм, антенна 25x25мм</li> </ul> <p>Подключается в UART1 на виртурилке согласно распиновке <a href="http://wiki.virt2real.ru/wiki/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_virt2real_1.1#J2">J2</a> и <a href="http://wiki.virt2real.ru/wiki/%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_virt2real_1.1#J14">J14</a></p> <ul> <li>1 (VCC) -&gt; Любой +3.3v (J2 pin 44, J14 pin 3)</li> <li>2 (RX) -&gt; J2 pin 13 (UART1 TX)</li> <li>3 (TX) -&gt; J2 pin 11 (UART1 RX)</li> <li>4 (GND) -&gt; Любой GND (J2 pin 2. J14 pin 41)</li> </ul> <h4>Включаем UART1</h4> <p>По умолчанию, UART1 отключен. Для его включения необходимо в файлике <a href="http://wiki.virt2real.ru/wiki/UEnv.txt">uEnv.txt</a> заменить "uart1=off" на "uart1=on"</p> <p>После перезапуска виртурилки можно проверить подключение GPS-приёмника. Он должен сыпать сообщениями в устройство /dev/ttyS1. Логинимся на виртурилку и запускаем <code>cat /dev/ttyS1</code>. Если ваш GPS-приёмник работает в текстовом протоколе и вы угадали со скоростью UART, то в консоль посыпятся строки с данными, что-то вроде этого:</p> <pre class="highlight"><code>[root@virt2real ~]# cat /dev/ttyS1 $GPTXT,01,01,02,u-blox ag - www.u-blox.com*50 $GPTXT,01,01,02,HW UBX-G60xx 00040007 FF7FFFFFp*53 $GPTXT,01,01,02,ROM CORE 7.03 (45969) Mar 17 2011 16:18:34*59 $GPTXT,01,01,02,ANTSUPERV=AC SD PDoS SR*20 $GPTXT,01,01,02,ANTSTATUS=DONTKNOW*33 $GPRMC,193047.93,V,,,,,,,140314,,,N*7C $GPVTG,,,,,,,,,N*30 $GPGGA,193047.93,,,,,0,00,99.99,,,,,,*64</code></pre> <p>Если валится абракадабра, то возможно протокол бинарный (что маловероятно) или не угадали со скоростью порта (что более вероятно)</p> <p>Скорость портa можно поменять командой</p> <pre class="highlight"><code>#&gt; stty -F /dev/ttyS1 33600</code></pre> <h4>Устанавливаем GPSD</h4> <p>Самый простой способ - поставить пакетом из http://files.virt2real.ru/packages/opkg. По умолчанию виртурилка смотрит на этот URL, так что для установки достаточно двух команд</p> <pre class="highlight"><code>#&gt; opkg-cl update #&gt; opkg-cl install gpsd</code></pre> <p>После установки надо запустить демон ручками</p> <pre class="highlight"><code>#&gt; /etc/init.d/S50gpsd start Starting gpsd: OK</code></pre> <h4>Общение с демоном (без продажи души)</h4> <p>Проверим, что демон случает TCP порт 2947</p> <pre class="highlight"><code>#&gt; netstat -tln | grep 2947 tcp 0 0 127.0.0.1:2947 0.0.0.0:* LISTEN</code></pre> <p>У-ху! Демон жив и ждёт подключений.</p> <p>В состав пакета gpsd помимо демона ходит кучка утилит. Одна из них - gpsmon. Запустим и полюбуемся на ascii-art</p> <pre class="highlight"><code>localhost:2947: Generic NMEA&gt; ┌──────────────────────────────────────────────────────────────────────────────┐ │Time: 2014-03-14T19:48:00.000Z Lat: 99 99' 99.9&quot; N Lon: 99 99' 9.99&quot; E │ └───────────────────────────────── Cooked PVT ─────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────────────┐ │ GPRMC GPVTG GPGGA GPGSA GPGSV GPGLL │ └───────────────────────────────── Sentences ──────────────────────────────────┘ ┌──────────────────┐┌────────────────────────────┐┌────────────────────────────┐ │Ch PRN Az El S/N ││Time: 194800.00 ││Time: 194800.00 │ │ 0 2 145 52 0 ││Latitude: 9999.9999 N ││Latitude: 9999.99999 │ │ 1 4 70 44 0 ││Longitude: 0999.99999 E ││Longitude: 0999.73833 │ │ 2 10 101 11 0 ││Speed: 0.260 ││Altitude: 92.7 │ │ 3 12 202 85 17 ││Course: ││Quality: 1 Sats: 05 │ │ 4 14 279 14 11 ││Status: A FAA: A ││HDOP: 2.88 │ │ 5 17 69 9 0 ││MagVar: ││Geoid: 6.5 │ │ 6 20 9 4 0 │└─────────── RMC ────────────┘└─────────── GGA ────────────┘ │ 7 24 189 23 0 │┌────────────────────────────┐┌────────────────────────────┐ │ 8 25 290 49 30 ││Mode: A 3 ││UTC: RMS: │ │ 9 29 245 18 27 ││Sats: 12 25 14 29 31 ││MAJ: MIN: │ │10 31 328 10 27 ││DOP: H=2.88 V=2.68 P=3.93 ││ORI: LAT: │ │11 │└─────────── GSA ────────────┘│LON: ALT: │ └────── GSV ───────┘ └─────────── GST ────────────┘ (35) $GPVTG,,T,,M,0.419,N,0.776,K,A*29 (73) $GPGGA,194756.00,9999.33656,N,9999.73647,E,1,05,2.88,92.2,M,6.5,M,,*5A (52) $GPGSA,A,3,12,25,14,29,31,,,,,,,,3.93,2.88,2.68*0D (64) $GPGSV,3,1,11,02,52,145,,04,44,070,,10,11,101,,12,85,202,18*7B (64) $GPGSV,3,2,11,14,14,279,08,17,09,069,,20,04,009,,24,23,189,*74 (57) $GPGSV,3,3,11,25,49,290,30,29,18,245,28,31,10,328,28*40</code></pre> <p>В верхней части экрана - в табличках - информация о положении в человеческом (ну, почти) виде, внизу экрана бежит лог сообщений, получаемых от GPS-приёмника в прямом эфире.</p> GY-87 tag:quad-v2r.herokuapp.com,2014-02-01:/2014/gy-87 2014-01-31T20:00:00Z Евгений Агафонов http://quad-v2r.herokuapp.com/ mail@example.com <p>Итак, приехал мне <a href="http://www.ebay.com/itm/231017647381">GY-87</a>, который на борту несёт:</p> <ul> <li>акселерометр+гироскоп MPU6050</li> <li>Барометр BPM180</li> <li>Магнетометр HMC5883L</li> </ul> <p>Хочу описать особенность данного модуля - сразу после включения на шине i2c не видно магнетометра. Похоже, что аксел и барометр прицеплены к основной шине i2c, а магнетометр - на вторичной i2c шине MPU6050.</p> <p>Что-то вроде этого:</p> <pre class="highlight"><code>[v2r] ==o==&gt;MPU6050 ---&gt; HMC5883L \ \===&gt; BPM180</code></pre> <p>После старта MPU6050 не пропускает ничего из внешней шины во вторичную, самолично пожирая тактирующий сигнал и данные. HMC5883L ничего не получает от хоста.</p> <p>По даташиту, чтобы хост увидел устройства на вторично шине, MPU6050 надо переключить в режим i2c bypass путём установки бита 2 регистра 55 Это равносильно тому, что лини SCL и SDA обоих шин соедияются внутри MPU6050. Как-то так.</p> <p>Вот буквы из даташита</p> <pre class="highlight"><code>4.15 Register 55 – INT Pin / Bypass Enable Configuration INT_PIN_CFG When I2C_BYPASS_EN is equal to 1 and I2C_MST_EN (Register 106 bit[5]) is equal to 0, the host application processor will be able to directly access the auxiliary I2C bus of the MPU-60X0. When this bit is equal to 0, the host application processor will not be able to directly access the auxiliary I2C bus of the MPU-60X0 regardless of the state of I2C_MST_EN.</code></pre> <p>Вот такая вот есть особенность MPU6050 и модуля GY-87 в частности. На кой ляд два девайса повесили на основную шину, а третий - на вторичную, мне не понятно.</p> <p>Теперь для работы с магнетометром надо ещё аксель инициализировать. Проблему решил, но осадок остался.</p> Стендовые испытания стабилизации tag:quad-v2r.herokuapp.com,2014-01-24:/2014/stendovye-ispytaniia-stabilizatsii 2014-01-23T20:00:00Z Евгений Агафонов http://quad-v2r.herokuapp.com/ mail@example.com <p>Квдрокоптер на стенде. Извините, снято на электро-лобзик.</p> <iframe width="420" height="315" src="//www.youtube.com/embed/EZJpRPjJYjU" frameborder="0" allowfullscreen></iframe> <p>Некоторые пояснения.</p> <p>Вначале двигатели вращаются на минимальных оборотах. Стабилизации нет. Это вроде как контрольный режим для проверки направления вращения. Потом обороты поднимаются и включается стаблизация. Тяги двигателей хватает на выравнивание. Для отрыва недостаточно. Все наклоны/колебания - по командам с QGroundControl</p> <p>Управление идёт по воздуху по протоколу MAVLink (UDP). Тут изобретать вообще ничего не пришлось. Только в QGroundControl добавил виджет для передачи значений RC каналов.</p> <p>Провода, идущие вниз за кадр, это питание (батарейка на полу лежит, в кадр не попала) и UART-консоль через UART2USB преобразователь. Консоль в принципе можно отключить после запуска бинарника, а батарейку прицепить к корпусу. Будет совсем автономно болтанся на рее^W стенде.</p> <p>Синим светодиодом светит аксель MPU6050. Он к раме прижат пластиковыми стяжками.</p> <p>Вообще там почти всё висит на на пластиковых стяжках ибо пока только стендовые испытания доступны. Собиратся в корпус всё будет, когда приедет интегрированный сенсорный модуль "всё-в-одном" и GPS.</p> <p>В планах вообще запилить отдельный второй этаж, на котором разместить все разъёмы и схему для контроля напряжения батарейки.</p> Безъядерное демо-приложение для MPU-6050 tag:quad-v2r.herokuapp.com,2013-12-19:/2013/bez-iadernoe-demo-prilozhenie-dlia-mpu-6050 2013-12-18T20:00:00Z Евгений Агафонов http://quad-v2r.herokuapp.com/ mail@example.com <p>Построил ядрёный драйвер для MPU-6050, но драйвер девайса не увидел. Симптомы похожи на то что описано тут</p> <p><a href="https://groups.google.com/forum/#!topic/beagleboard/hqqecmOjpTU">https://groups.google.com/forum/#!topic/beagleboard/hqqecmOjpTU</a></p> <p>Думал, что девайс дохлый.</p> <p>Нашёл демо для RPi <a href="http://www.raspberrypi.org/phpBB3/viewtopic.php?t=22266">http://www.raspberrypi.org/phpBB3/viewtopic.php?t=22266</a></p> <p>Построил консольные демки для в2р, заменив хардкоженный /dev/i2c-0 на /dev/i2c-1. Данные идут, даже похожи на правду</p> <p>demо_dmp может выводить квартенионы. углы Эйлера, абсалюнтые и нормализованные ускорения по осям. Собственно, это все, что может потребоватчся от гира+акселя.</p> <p>Дэмка жрёт 40% cpu.</p> Драйвер для MPU-6050 tag:quad-v2r.herokuapp.com,2013-12-17:/2013/draiver-dlia-mpu-6050 2013-12-16T20:00:00Z Евгений Агафонов http://quad-v2r.herokuapp.com/ mail@example.com <p>На свежую голову нашёл драйвер для MPU-6050 <a href="http://forum.virt2real.ru/viewtopic.php?f=38&amp;t=13332&amp;start=5">http://forum.virt2real.ru/viewtopic.php?f=38&amp;t=13332&amp;start=5</a></p> <pre class="highlight"><code>CONFIG_INV_MPU6050_IIO: Location: -&gt; Device Drivers -&gt; Industrial I/O support (IIO [=m])</code></pre> Первый коннект tag:quad-v2r.herokuapp.com,2013-12-16:/2013/pervyi-konnekt 2013-12-15T20:00:00Z Евгений Агафонов http://quad-v2r.herokuapp.com/ mail@example.com <p>Забрал ништяки. Подключил консоль USB-UART (3 провода + minicom)</p> <p><a href="http://wiki.virt2real.ru/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_UART">http://wiki.virt2real.ru/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_UART</a></p> <p>Теперь есть терминал без шаманства.</p> <p>Подключил MPU-6050 и компас по i2c</p> <p><a href="http://wiki.virt2real.ru/wiki/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%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">http://wiki.virt2real.ru/wiki/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%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</a></p> <p>Обе две железки видны в i2cdetect. </p> <p>Драйвер для MPU-6050 в ядре не нашлось (или плохо искал). Пока отложил железку в сторону. Для HMC5883L драqвера нет, есть для HMC5843L.</p> <p>В даташитах есть различия:</p> <ul> <li>Регистры чтения по Z и Y поменяны местами</li> <li>Configuration Register A использует биты 5,6 (количество семплов для усреднения)</li> <li>HMC5883L: Mode register - bit7 включить прддержку High Speed i2c (3400kHz)</li> <li>Data output rate имеют большее в 1.5 раза значение</li> <li>Чуствительность HMC5883L чють меньше</li> <li>Status Register в HMC5883L не имеет бита REN</li> </ul> <p>Воткнув драйвер от HMC5843L, смог что-то прочитать из values. Сначала всё читалось как -4096, потом 3-е значение стало менятся (около 200-300)</p> Жжж-ж! tag:quad-v2r.herokuapp.com,2013-12-15:/2013/zhzhzh-zh 2013-12-14T20:00:00Z Евгений Агафонов http://quad-v2r.herokuapp.com/ mail@example.com <p>Пожжужал двигателями с помощью аппаратных PWM в2р</p> <p><a href="http://wiki.virt2real.ru/wiki/PWM">http://wiki.virt2real.ru/wiki/PWM</a></p> <p>Заказал USB-UART (на FTDI232RL), гироском+акселерометр MPU-5060, компас на HMC5883L, сонар HC-SR04</p> <p><a href="http://ardunn.ru">http://ardunn.ru</a></p> Начало активных боевых действий tag:quad-v2r.herokuapp.com,2013-12-14:/2013/nachalo-aktivnykh-boevykh-deistvii 2013-12-13T20:00:00Z Евгений Агафонов http://quad-v2r.herokuapp.com/ mail@example.com <h3>14-Dec-2013</h3> <p>Куплена платформа DJI F450. Спаял за вечер.</p>