Jump to content
Korean Random

kharlashkin

User
  • Content Count

    829
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by kharlashkin

  1. Прям как я несколько лет назад ;)
  2. Долго возился с привязкой получаемого кватерниона с "костью" головы в Blender - как-то все запутанно там. Кость имеет свои координаты, получаемые командой: bpy.data.armatures['Armature'].bones['head'].matrix.to_quaternion() # Blender Render Но новые координаты задаются не от глобального кватерниона, а от нулевого видом (1.0, 0.0 , 0.0, 0.0). Ничего лучше не придумал (пока), при обновлении положения кости, сначала кватернион, обратный реальной позиции умножить на нужный поворот, затем умножить на реальный, к тому же направление осей датчика должно совпадать с направлением осей кости. В принципе, эту математику можно "зашить" напрямую в ардуинку (ресурсов то предостаточно пока), но тогда получиться прямая привязка расположения датчиков и существующего скелета, или переложить расчеты на Blender. Но можно столкнуться с нехваткой ресурсов при записи положений от множества датчиков. В общем, идет работа помаленьку.
  3. Когда то давно на форуме обсуждался этот бот, и встал вопрос откуда у бота положительный рейтинг и кто ему его накручивает. ИМХО, я не хочу чтобы роботы захватили планету и возложил на себя миссию по уменьшению важности бота на форуме ;)
  4. Да, сейчас пойду @C.M. дальше вгонять в "глубокий минус".
  5. Блин, я тут подумал - значит @C.M.вернут репутацию в 0? Значит я зря минусил его в течении очень долгого времени.
  6. В таких делах лучше не спешить - делайте основательно. Мне очень понравился движок форума на тесте, ну и "с почином"!
  7. Приятная неожиданность, а плюсик поставить низзя @Mr 13 - так и задумано?
  8. Пока ничего лучше не смог придумать, кроме как корректировать получаемый кватернион в момент прохождения датчика горизонта...
  9. Так получилось, что в скетче я перепутал переменные - таким образом мой кватернион коррекции по компасу с помощью низкочастотного фильтра просто тупо стремился к нулевому вида (1, 0, 0, 0) и умножая полученный из DMP датчика на него у меня и получался вот тот супер стабильный ;) Смутило что когда я коробок двигал - кубик вращался, но это только за счет того что фильтр не отрабатывает моментально. В общем не спал пол ночи, результатом является вот это: Особенно интересным выглядит вращение беспорядочное в конце - это я за шнурок кручу-верчу коробку с датчиком и возвращая коробок в первоначальное положение - получаю практически те же значения, что и в положении покоя. Так же видно, что есть некоторая задержка корректировки - пока не придумал что с ней делать, ну и немного трясет кубик по оси Z.
  10. Можно сказать на финишной прямой ;) Учитывая, что датчик в коробке находиться на столе рядом с клавой, мышей, usb-хабом и 2-мя мониторами (менее 20 см) и под столом ПК (менее 30 см) в помещении результаты думаю неплохие. И самое главное, если взять коробок и неистово начать его вертеть, а затем положить его на место - данные о положении меняются очень незначительно (в пределах пары градусов). Пока нужно ставить эксперименты и проверять - всё ли так как мне кажется сейчас ;) Прошу прощения огромная фатальная ошибка.
  11. Поздравляю с выходом Sublime Text 3.0, только вот сегодня заново его попробовал как альтернативу Arduino IDE - нравится всё.
  12. Вопрос скорее всего в том, что игр с прямым управлением персонажа даже для VR нет и вряд ли в ближайшее время появятся. Разве что в какие-то игры для Kinect попробовать подключить. Тут выявилось несколько других проблем. После подключение магнитометра непосредственно в вычисления DMP - точность кватерниона повысилась, но дрифт по оси Z никуда не делся. После активных вращений и возвращение датчика в первоначальное положение, кватернионы уже не будут как первоначальные. Хотя примерно после 10 секунд после активации, данные стабилизируются и в неподвижном положении очень точны. Этот же датчик с таким же кодом но без подключенного в DMP магнитометра имеет постоянный дрифт. Конфигурация 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 Моя реализация корректировки по компасу пока не до конца продуманна - я пробую получать из кватерниона вычисленного в DMP вектор гравитации, затем получаю вектор нормали к плоскости образованной векторами компаса и гравитации, потом вычисляю из того- же кватерниона вектор, который должен быть коллинеарным вектору нормали, вычисляю угол между ними и доворачиваю объект.
  13. Инструкция хороша, плюсанул за труды. Аффтар пешы ысчо ©
  14. Гы. Создал в MakeHuman персонажа со скелетом, набросал скриптик для забора данных из Arduino и отправки кватернионов для положения кости головы персонажа. Весело получилось - крутить на usb-шнуре коробок с датчиком и ардуинкой и смотреть как голова сходит с ума.
  15. Думаю что настоящему программисту, а не поделке в моем лице, работы было бы на пару дней. Мне больше для души нравится копошиться в этом всём, математику пришлось подтянуть для понимания общего процесса. Ну уже с Вами обсуждалось какую диковинку :) Сейчас у меня лежит 3 датчика 9250, 3 платки Arduino Pro Mini + едет батарейка с платкой именно для продолжение проекта. Думаю попробовать сделать подобие отслеживания руки (плечо, предплечье и кисть). Ломал на дня голову с корпусами - решил использовать обычные двойные телефонные розетки, сразу вопрос с соединениями отпадёт - все таки разъемные с нормальным проводом это плюс ;) Тестировал дома код для MPU-9250 чет не такой стабильный оказался на столе, но выявилась проблема с домашней экспериментальной Uno - рандомно ложится передача данных. Пробовал на ноуте/ПК под разными ОС - идет передача данных 2-5-10-20 сек и потом всё замирает. Хотя после повторной инициализации соединения - все работает нормально. На работе где экспериментирую с Nano - все более-менее стабильно.
  16. Спасибо Вам, Павел, за поддержку. Очень часто, именно вот таких простых слов от окружающих в отношении того, что ты делаешь - не хватает ;)
  17. После отпуска по доставал свои игрушки, взялся с новыми силами за положения в пространстве датчика MPU-9250. Получилось заставить DMP обрабатывать данные от магнитометра, дополнительно включил математику в обработку кватерниона от DMP по этой статье. В принципе получилось очень даже ничего, особенно учитывая что данные от магнитометра без калибровки. Есть лишь небольшое подергивание кубика в блендер, но зато практически полностью пропал дрифт. Видео чуть позже добавлю. Залил проект на github. Имхо, будет неплохо наложить фильтр Калмана на данные от магнетометра, повысить точность позиционирования например на 4 знака после запятой (сейчас, как видно 2). test.7z
  18. Должен сообщить, что OpenWrt лучше родной прошивки. Приведу пример. Выше отписывал, что гроза потянула за собой стационарный ПК, который у меня как HTPC работает. Выгорел сетевой порт, и отвалились часть usb-портов. Во временное пользование был выпрошен у знакомого Wi-Fi usb-свисток. Так вот с родной прошивкой от Xiaomi наблюдалось периодическое отваливание беспроводной сети, помогало только физическое передергивание модуля. Изначально грешил именно на беспроводной модуль - так как мне сразу говорили что он очень глючный и пришлось повозиться с драйверами (в комплекте не было, в интернете тоже не сразу нашлись). После перепрошивки маршрутизатора, отваливаний не наблюдаю пока от слова "вообще".
  19. Ну хоть один человек (кроме меня) одобрил мой выбор - плюсик поставил. Заказал я себе 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: Далее в соседней вкладке вводим в адресную строку: 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 - вдвойне ;)
  20. Прошла гроза, сгорел мой добрый Asus RT-N16. Вот взял во временное пользование у знакомого железку попользоваться, теперь есть некоторое время ломать голову покупкой нового маршрутизатора. Денег много как то вообще не готов отдавать, потому как гроза за собой потянула и стационарный комп (пока масштаб бедствий не известен). Что нужно - usb, пара внутренних портов и наверное AC. Разумеется чтобы работало это все под OpenWRT. Вот смотрю в сторону Xiaomi Mini, кто что думает?
  21. Как-то позабылась тема. В основном из-за того, что много пересекающихся связей между маршрутизатором и ардуинкой ;) Как-то статья мимо меня прошла - "Умный обход блокировок в Украине". Ну и ссылка на репозиторий.
  22. Приехала новая "тинька". Как не странно, всё завелось "с пол пинка". 'Код Digispark' 'Код Arduino' Есть багофича - значения менее 17 тинька отрабатывает но вентилятор не крутится. Думаю переделать на более вменяемые значения мощности :) P.S. Думаю что первоначальная платка имела брак - потому как новая завелась под Ubuntu на рабочем ноуте без "бубна";)
  23. Сегодня получилось уделить немного времени подключению ардуинки по Bluetooth. Платка где-то месяц уже у меня не все никак руки не доходили. Итак, платка вот такая HC-06 (фото не мое): Перво-наперво нужно настроить модуль для работы, думаю понятно что скорость 9600 б/с будет маловата. Инструкций в интернетах несколько, попробовав некоторые - привожу что и как получилось у меня. В качестве транслятора команд для настройки модуля я использовал саму ардуинку. Собственно код, который позволяет обмен данными между ПК и модулем: #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", т.е. не поменять ни скорость, ни пин-код, ни посмотреть версию прошивки не смогли. Так же прилагаю документ с AT-командами. P.S. Собственно я уже попробовал крутить кубик в Blender через беспроводной интерфейс ;) Жду в течении 7/10 дней портативный аккумулятор и буду делать более корректное видео кручения автономного кубика (привет Portal/Portal2) + причесывать код. HMComAssistant.7z AT_HC05.pdf
  24. Чет, не могу считать данные магнитометра. Код для получения кватерниона с помощью DMP брал отсюда (улыбнуло размещение сайта - kr). Относительно управления платформой кватернионами, нашел интересную статью - "Применение кватернионов в задачах наведения антенной системы ретранслятора связи на беспилотном летательном аппарате". Решается задача подобная моей для антенны с 3-мя степенями свободы, а чтобы получить 6 степеней нужно наверное будет использовать бикватернионы. Кому интересно статья во вложении. primenenie-kvaternionov-v-zadachah-navedeniya-antennoy-sistemy-retranslyatora-svyazi-na-bespilotnom-letatelnom-apparate.pdf
  25. Прочел книгу про кватернионы и трехмерную геометрию, начал заново копать ориентацию в пространстве с помощью MPU-9250. Набаловавшись до "не могу" со всякими фильтрами Маджвика, Махони и Калмана и так и не получив внятную картинку в Blender - пошел по пути наименьшего сопротивления. А если быть точным решил попробовать DMP (digital motion process), который по-умолчанию есть в датчике. Результат на видео. Если я правильно понимаю, то для более точного позиционирования (а кубик гуляет по оси Z где то секунд 10, в самом начале), нужно дополнительно забирать данные магнитометра и корректировать полученный из DMP кватернион.
×
×
  • Create New...