Jump to content
Korean Random

kharlashkin

User
  • Content Count

    829
  • Joined

  • Last visited

  • Days Won

    7

Posts posted by kharlashkin


  1. 6 минут назад, Tornado_Odan_Rot сказал:

    да что ж ты так не любишь его ?(

    Когда то давно на форуме обсуждался этот бот, и встал вопрос откуда у бота положительный рейтинг и кто ему его накручивает. ИМХО, я не хочу чтобы роботы захватили планету и возложил на себя миссию по уменьшению важности бота на форуме ;)


  2. Только что, Mr 13 сказал:

    Постараюсь как можно быстрее.

    В таких делах лучше не спешить - делайте основательно. Мне очень понравился движок форума на тесте, ну и "с почином"!


  3. Прошу прощения огромная фатальная ошибка.

     

    Так получилось, что в скетче я перепутал переменные - таким образом мой кватернион коррекции по компасу с помощью низкочастотного фильтра просто тупо стремился к нулевому вида (1, 0, 0, 0) и умножая полученный из DMP датчика на него у меня и получался вот тот супер стабильный ;)

    Смутило что когда я коробок двигал - кубик вращался, но это только за счет того что фильтр не отрабатывает моментально.

    В общем не спал пол ночи, результатом является вот это:

    Особенно интересным выглядит вращение беспорядочное в конце - это я за шнурок кручу-верчу коробку с датчиком и возвращая коробок в первоначальное положение - получаю практически те же значения, что и в положении покоя. Так же видно, что есть некоторая задержка корректировки - пока не придумал что с ней делать, ну и немного трясет кубик по оси Z.

    post-19155-0-64110400-1505886467_thumb.jpg


  4. Можно сказать на финишной прямой ;)

    Учитывая, что датчик в коробке находиться на столе рядом с клавой, мышей, usb-хабом и 2-мя мониторами (менее 20 см) и под столом ПК (менее 30 см) в помещении результаты думаю неплохие.

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

    Прошу прощения огромная фатальная ошибка.

    • Upvote 2

  5.  

     

    еще бы физ. движок подключить с мультиплАером, классно бы было.

    Вопрос скорее всего в том, что игр с прямым управлением персонажа даже для VR нет и вряд ли в ближайшее время появятся. Разве что в какие-то игры для Kinect попробовать подключить.

     

    Тут выявилось несколько других проблем.

    1. После подключение магнитометра непосредственно в вычисления DMP - точность кватерниона повысилась, но дрифт по оси Z никуда не делся. После активных вращений и возвращение датчика в первоначальное положение, кватернионы уже не будут как первоначальные. Хотя примерно после 10 секунд после активации, данные стабилизируются и в неподвижном положении очень точны. Этот же датчик с таким же кодом но без подключенного в DMP магнитометра имеет постоянный дрифт.
    2. Конфигурация DMP сразу имеет в своем арсенале матрицу корректировки данных от магнитометра, никак не могу пока понять каким образом этот "некий функционал" работает - документации маловато.
          0x02,   0x40,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_00 inv_set_compass_calibration
          0x02,   0x44,   0x04,   0x40, 0x00, 0x00, 0x00,   // CPASS_MTX_01
          0x02,   0x48,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_02
          0x02,   0x4C,   0x04,   0x40, 0x00, 0x00, 0x00,   // CPASS_MTX_10
          0x02,   0x50,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_11
          0x02,   0x54,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_12
          0x02,   0x58,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_20
          0x02,   0x5C,   0x04,   0x00, 0x00, 0x00, 0x00,   // CPASS_MTX_21
          0x02,   0xBC,   0x04,   0xC0, 0x00, 0x00, 0x00,   // CPASS_MTX_22
      
    3. Моя реализация корректировки по компасу пока не до конца продуманна - я пробую получать из кватерниона вычисленного в DMP вектор гравитации, затем получаю вектор нормали к плоскости образованной векторами компаса и гравитации, потом вычисляю из того- же кватерниона вектор, который должен быть коллинеарным вектору нормали, вычисляю угол между ними и доворачиваю объект.
    • Upvote 1

  6. Гы.

    Создал в MakeHuman персонажа со скелетом, набросал скриптик для забора данных из Arduino и отправки кватернионов для положения кости головы персонажа. Весело получилось - крутить на usb-шнуре коробок с датчиком и ардуинкой и смотреть как голова сходит с ума.

    • Upvote 1

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

    Думаю что настоящему программисту, а не поделке в моем лице, работы было бы на пару дней. Мне больше для души нравится копошиться в этом всём, математику пришлось подтянуть для понимания общего процесса. Ну уже с Вами обсуждалось какую диковинку :)

    Сейчас у меня лежит 3 датчика 9250, 3 платки Arduino Pro Mini + едет батарейка с платкой именно для продолжение проекта.

    post-19155-0-01512300-1502688162_thumb.jpg

    Думаю попробовать сделать подобие отслеживания руки (плечо, предплечье и кисть). Ломал на дня голову с корпусами - решил использовать обычные двойные телефонные розетки, сразу вопрос с соединениями отпадёт - все таки разъемные с нормальным проводом это плюс ;)

    post-19155-0-71736800-1502688393_thumb.jpg

    Тестировал дома код для MPU-9250 чет не такой стабильный оказался на столе, но выявилась проблема с домашней экспериментальной Uno - рандомно ложится передача данных. Пробовал на ноуте/ПК под разными ОС - идет передача данных 2-5-10-20 сек и потом всё замирает. Хотя после повторной инициализации соединения - все работает нормально. На работе где экспериментирую с Nano - все более-менее стабильно.

    • Upvote 2

  8. После отпуска по доставал свои игрушки, взялся с новыми силами за положения в пространстве датчика MPU-9250.

     

    Чет, не могу считать данные магнитометра.

     

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

    Залил проект на github.

    Имхо, будет неплохо наложить фильтр Калмана на данные от магнетометра, повысить точность позиционирования например на 4 знака после запятой (сейчас, как видно 2).

    test.7z

    • Upvote 2

  9. Должен сообщить, что OpenWrt лучше родной прошивки. Приведу пример.

    Выше отписывал, что гроза потянула за собой стационарный ПК, который у меня как HTPC работает. Выгорел сетевой порт, и отвалились часть usb-портов. Во временное пользование был выпрошен у знакомого Wi-Fi usb-свисток. Так вот с родной прошивкой от Xiaomi наблюдалось периодическое отваливание беспроводной сети, помогало только физическое передергивание модуля. Изначально грешил именно на беспроводной модуль - так как мне сразу говорили что он очень глючный и пришлось повозиться с драйверами (в комплекте не было, в интернете тоже не сразу нашлись). После перепрошивки маршрутизатора, отваливаний не наблюдаю пока от слова "вообще".

    • Upvote 1

  10. Ну хоть один человек (кроме меня) одобрил мой выбор - плюсик поставил. Заказал я себе Xiaomi MiWiFi Mini, при чем оаказалось что дешевле и быстрее заказать себе этот маршрутизатор по месту, в Украине. На AliExpress цена около 718 грн с бесплатной доставкой, в интернет-магазине ROZETKA я покупал во вторник за 609 грн +35 грн доставка (сейчас ещё подешевел до 599 грн.). Вчера днем его забрал, вечером настроил на китайской стоковой прошивке и больше суток все нормально работало до сегодняшнего вечера.

    Сегодня же руки зачесались, и решил попробовать установить на него ту прошивку для которого эта железка и покупалась - OpenWrt. Всё встало/заработало без проблем и считаю своим долгом поделиться опытом.

    Первым делом сходил на страничку с описанием маршрутизатора на OpenWrt и увидел способ прошивки без плясок с бубном, регистрации и смс.

    Вчера я обновлял прошивку на последнюю от производителя, и при попытке получить telnet доступ я не получил правильное сообщение об ошибки из описания:

    {"msg":"未能連線到指定Wi-Fi(Probe timeout)","code":1616} 

    Был ответ на китайском с кодом 1617 ;)

    Первым делом я откатился в ручном режиме на стоковую прошивку с версией 2.1.6, хотя маршрутизатор после перезагрузки ругался что последняя версия доступная 2.15.78:

    post-19155-0-81682900-1500151086_thumb.png

    Далее в соседней вкладке вводим в адресную строку:

    http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/xqnetwork/set_wifi_ap?
    ssid=whatever&encryption=NONE&enctype=NONE&channel=1%3B%2Fusr%2Fsbin%2Ftelnetd
    

    Где <STOK> это цифробуквенный код с обычного web-интерфеса, мой видно на скриншоте.

    Получаю правильную ошибку, и ввожу следующий запрос:

    http://192.168.31.1/cgi-bin/luci/;stok=<STOK>/api/xqsystem/set_name_password?oldPwd=<CURRENTPASS>&newPwd=<NEWPASS>
    

    Где <CURRENTPASS> это установленный на этапе настройки пароль доступа к вебморде (кстати в родной прошивке он ключ к Wi-Fi) и <NEWPASS>, соответственно новый пароль. Открываем консольку и телнетом перешиваем, последовательно вводя несколько команд - загрузка прошивки OpenWrt, проверка расположения MTD и собственно прошивка. Ниже привожу просто копипаст из терминала.

    kharlashkin@asus-K56CB:~$ telnet 192.168.31.1
    Trying 192.168.31.1...
    Connected to 192.168.31.1.
    Escape character is '^]'.
    XiaoQiang login: root
    Password: 
    
    
    BusyBox v1.19.4 (2015-03-20 10:08:59 CST) built-in shell (ash)
    Enter 'help' for a list of built-in commands.
    
     -----------------------------------------------------
            Welcome to XiaoQiang!
     -----------------------------------------------------
    root@XiaoQiang:~# cd /tmp; wget http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7620/openwrt-15.05.1-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin
    --2017-07-16 03:36:31--  http://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7620/openwrt-15.05.1-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin
    Resolving downloads.openwrt.org... 78.24.191.177
    Connecting to downloads.openwrt.org|78.24.191.177|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 3670020 (3.5M) [application/octet-stream]
    Saving to: 'openwrt-15.05.1-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin'
    
    100%[======================================>] 3,670,020   2.61M/s   in 1.3s    
    
    2017-07-16 03:36:33 (2.61 MB/s) - 'openwrt-15.05.1-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin' saved [3670020/3670020]
    
    root@XiaoQiang:/tmp# cat /proc/mtd
    dev:    size   erasesize  name
    mtd0: 01000000 00010000 "ALL"
    mtd1: 00030000 00010000 "Bootloader"
    mtd2: 00010000 00010000 "Config"
    mtd3: 00010000 00010000 "Factory"
    mtd4: 00c80000 00010000 "OS1"
    mtd5: 00b21c3e 00010000 "rootfs"
    mtd6: 00200000 00010000 "OS2"
    mtd7: 00100000 00010000 "overlay"
    mtd8: 00010000 00010000 "crash"
    mtd9: 00010000 00010000 "reserved"
    mtd10: 00010000 00010000 "Bdata"
    root@XiaoQiang:/tmp# mtd -r write openwrt-15.05.1-ramips-mt7620-xiaomi-miwifi-mi
    ni-squashfs-sysupgrade.bin OS1
    Unlocking OS1 ...
    
    Writing from openwrt-15.05.1-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin to OS1 ...     
    Rebooting ...
    

    После перезагрузки увидя активное сетевое подключения и посмотрев адрес полученный от dhcp - 192.168.1.115 я возликовал, а зайдя в веб-интерфейс и увидев OpenWrt - вдвойне ;)

    • Upvote 1

  11. Прошла гроза, сгорел мой добрый Asus RT-N16. Вот взял во временное пользование у знакомого железку попользоваться, теперь есть некоторое время ломать голову покупкой нового маршрутизатора. Денег много как то вообще не готов отдавать, потому как гроза за собой потянула и стационарный комп (пока масштаб бедствий не известен).

    Что нужно - usb, пара внутренних портов и наверное AC. Разумеется чтобы работало это все под OpenWRT. Вот смотрю в сторону Xiaomi Mini, кто что думает?

    • Upvote 1

  12. Как-то позабылась тема. В основном из-за того, что много пересекающихся связей между маршрутизатором и ардуинкой ;)

    Как-то статья мимо меня прошла - "Умный обход блокировок в Украине". Ну и ссылка на репозиторий.

    • Upvote 1

  13. умерла так умерла.

    Приехала новая "тинька". Как не странно, всё завелось "с пол пинка".

    'Код Digispark'

    #include "SoftSerial.h"
    #include "TinyPinChange.h"
    
    SoftSerial mySerial(3, 4);
    
    #define ControlSimistor 1 //  Выход на симистор, физический порт P1
    #define ControlZero 2 // Вход контроля перехода через 0, физический порт P2
    
    volatile byte dimming = 0; //  Начальное значение мощности
    
    void setup()
    {
      mySerial.begin(9600);
      pinMode(ControlSimistor, OUTPUT); // Включаем работу выхода на симистор
      pinMode(ControlZero, INPUT); // Переключаем контроль перехода через 0 на выход
      digitalWrite(ControlZero, HIGH); // Активируем контроль перехода через 0
      attachInterrupt(0, zero, RISING); //  Внешнее прерывание контроля перехода через ноль
    }
    
    void zero() //  Если есть переход через 0
    {
      if (dimming >= 255) // Если задано максимальное значение
      {
        digitalWrite(ControlSimistor, HIGH); // Тиристор постоянно открыт
      }
      else if (dimming <= 10) // Если минимум
      {
        digitalWrite(ControlSimistor, LOW); // Тиристор закрыт
      }
      else if (dimming > 10 && dimming < 255) // Если не минимум и не максимум
      {
        digitalWrite(ControlSimistor, LOW); // Сначала закрываем
        delayMicroseconds((5100 - dimming * 20)); // Ждем
        digitalWrite(ControlSimistor, HIGH); // Открываем тиристор
      }
    }
    
    void loop()
    {
      if (mySerial.available())
      {
        dimming = mySerial.read();
      }
    } 

    'Код Arduino'

    #include "SoftwareSerial.h"
    
    SoftwareSerial mySerial(10, 11); // Задаем программный порт на 10 и 11 портах
    
    volatile byte dimming = 0; // Начальное значение мощности
    
    void setup()
    {
      Serial.begin(57600);  // Включаем порт с ПК
      mySerial.begin(9600); // Включаем порт с Attiny85
    }
    
    void loop()
    {
      if (Serial.available()) // Если порт открыт
      {
        dimming = Serial.parseInt(); // Считываем данные и находим в них целое число
        mySerial.write(dimming); // Отправляем значение мощности в Attiny85
      }
    } 

    Есть багофича - значения менее 17 тинька отрабатывает но вентилятор не крутится. Думаю переделать на более вменяемые значения мощности :)

    P.S. Думаю что первоначальная платка имела брак - потому как новая завелась под Ubuntu на рабочем ноуте без "бубна";)

    • Upvote 1

  14. Сегодня получилось уделить немного времени подключению ардуинки по Bluetooth. Платка где-то месяц уже у меня не все никак руки не доходили.

    Итак, платка вот такая HC-06 (фото не мое):

    post-19155-0-38778300-1497963929_thumb.jpg

    Перво-наперво нужно настроить модуль для работы, думаю понятно что скорость 9600 б/с будет маловата. Инструкций в интернетах несколько, попробовав некоторые - привожу что и как получилось у меня. В качестве транслятора команд для настройки модуля я использовал саму ардуинку.

    post-19155-0-68747800-1497966883_thumb.png

    Собственно код, который позволяет обмен данными между ПК и модулем:

    #include <SoftwareSerial.h>
    #include <Time.h>
    
    int gLedPin = 13; 
    int gRxPin = 10; // Pin-ы подключения модуля
    int gTxPin = 11;
    
    SoftwareSerial BTSerial(gRxPin, gTxPin);
    
    void setup() {
      // Настраиваем скорости обмена от ПК в ардуину и в модуль
      BTSerial.begin(9600);
      Serial.begin(38400);
      delay(500);
    }
    
    void loop() {
      if (BTSerial.available()) {
        Serial.write(BTSerial.read());
      }
      if (Serial.available()) {
        BTSerial.write(Serial.read());
      }
    }
    

    Для работы с модулем корректно завелась программка терминала HMComAssistant (архив приложил). Остальные могли только одну команду "AT", т.е. не поменять ни скорость, ни пин-код, ни посмотреть версию прошивки не смогли.

    post-19155-0-28834700-1497966154_thumb.png

    Так же прилагаю документ с AT-командами.

     

    P.S. Собственно я уже попробовал крутить кубик в Blender через беспроводной интерфейс ;) Жду в течении 7/10 дней портативный аккумулятор и буду делать более корректное видео кручения автономного кубика (привет Portal/Portal2) + причесывать код.

    HMComAssistant.7z

    AT_HC05.pdf


  15. Чет, не могу считать данные магнитометра. Код для получения кватерниона с помощью DMP брал отсюда (улыбнуло размещение сайта - kr).

    Относительно управления платформой кватернионами, нашел интересную статью - "Применение кватернионов в задачах наведения антенной системы ретранслятора связи на беспилотном летательном аппарате". Решается задача подобная моей для антенны с 3-мя степенями свободы, а чтобы получить 6 степеней нужно наверное будет использовать бикватернионы. Кому интересно статья во вложении.

    primenenie-kvaternionov-v-zadachah-navedeniya-antennoy-sistemy-retranslyatora-svyazi-na-bespilotnom-letatelnom-apparate.pdf


  16. Прочел книгу про кватернионы и трехмерную геометрию, начал заново копать ориентацию в пространстве с помощью MPU-9250. Набаловавшись до "не могу" со всякими фильтрами Маджвика, Махони и Калмана и так и не получив внятную картинку в Blender - пошел по пути наименьшего сопротивления. А если быть точным решил попробовать DMP (digital motion process), который по-умолчанию есть в датчике. Результат на видео.

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

    • Upvote 1

  17. постоянная необходимость "идти на поклон" к разработчикам чтобы поддерживать "актуальность/совместимость с настоящем патчем"в свое время убила моё желание публиковать моды на res-mods.ru.

     

    Отписываюсь по результатам публикации мода - может кому интересно будет. Отправил на модерацию мод изменения разрешения в игре менее чем 1024х768 (например для нетбуков 1024х600 или 720р - 1280х720). Поле нескольких часов пришел ответ от проверяющего - что нельзя нажать кнопку применить :)

    post-19155-0-87281800-1496201299_thumb.jpg

    Тут как бы и моя ошибка - не указал явно что перед установкой нужно выставить "Масштабирование интерфейса" в позицию "х1", хотя на приложенном скриншоте это явно видно:

    post-19155-0-91360200-1496200756_thumb.jpg

    Ну да ладно, добавил строчку о необходимости, добавил скриншот с явно выделенным масштабированием, отправил повторно.

    Ну собственно практически то что и требовалось доказать от момента отправки мода на модерацию, до выставления его на портале возможно пройдут не одни сутки - при чем не факт что проверяющий одюжит установку и тестирование, если даже не постарался привести настройки графики, для примера как у меня на скриншоте, или через портал отправить мне сообщение уточняющего характера (уверен, что доступ к электронным адресам у WG есть).

     

    Тупо не сработало - нафиг, теперь опять ждите сутки или больше - именно про это я говорил в упоминании "идти на поклон". Тестировщик/модератор, имхо, должен помогать мододелам правильно оформлять и дополнять описания. В следующий раз когда патч клиента сделает невозможным использовать мод - проще выложить рабочий через тот же гугль-диск, чем ждать.

    • Upvote 5
×
×
  • Create New...