И так сойдёт.

Mar 04, 2024 23:52



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



На видео машинка выполняет такой простенький скрипт.



Т.е. пару раз ездит туда-обратно и делает два разворота на 360 градусов.

Один разворот 8 раз по 45 градусов, а другой 4 раза по 90 градусов.

Теоретически машинка в конце должна приехать в то-же самое место. Но из-за накопления неточностей в коце положение совсем не то, что в начале.

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

Пора переходить к нейросеткам. Надо теперь смотреть, какая версия Yolo наиболее подходящая будет (скорее всего v5), вспоминать как это всё запускается. Как откручиваются лишнии слои и прикручивается свой backend ко всему этому. Как делать transfer learning и дисцилляцию нейросеток.

Из мечтаний по механнике. А вот было бы круто каждое колесо на свой сервопривод SG90 поставить, что-бы они могли независимо вращаться. Тогда при повороте всех колёс под 45 градусов можно было-бы очень ровно на месте крутиться без проскальзывания колёс. При повороте на 90 градусов можно было-бы двигать машинку перпендикулярно камере и очень легко позиционироваться.

Из забавного. Использую VL53L0X для определения расстояние спереди и сзади. Определяет конечно не особо быстро. Одно измерение 50 милисекунд. Но этого хватает, что-бы машинка не врезалась в стены если вдруг программу кривую ей задашь. Библитека от STM32 для VL53L0X какая-то уж большо замудрёная (там штук 10 функций для общения по I2C определять надо). Поэтому использовал Adruino порт, поторый сэкспортили на ESP32, а я уж подпихнул ему функции I2C чтения для STM32. B их почему-то нужно всего 2 штуки vl53l0x_i2c_write и vl53l0x_i2c_read. Почему разработчики сидящие в фирме STM не смогли сделать такой интерфейс - загадка! Впрочем у автора Adruino варианта библиотеки есть тоже косяк. Он читает только регистр, где определяется расстояние до препятсвия. На коротких расстояниях это работает, а вот на больших расстояниях выдаёт всякую хрень. Причем на форумах автор библиотеки советует советы уровня «приложить подорожник». Он советует: снять защитную плёночку с датчика, проверить, что питание датчика совпадает по уровню с питанием МК, поставить спереди тёмное стекло, подпаять дополнительный конденсатор по питанию. Только не советуюет самого главного - прочитать регистр SignalRate (0x14 + 6) в котором определяется сила отраженного сигнала. После чтения этого регистра можно легко определить, что сигнал слабый и стена где-то ооочень далекооо.

Ещё про нейросетки. Очень большой плюс в том, что поток достаточно свободно льётся на ПК. Т.е. можно будет сначала на видеоакселераторе отлаживаться, а уже потом заливать нейросетки на Maix III. В этот раз попытаюсь таки воспользоваться transfer learning. Т.е. возьму уже обученную Yolo большую, коорая умная и жирная. Попытаюсь побыстрому обучить её на свой датасет заморозив все слои кроме конечных. А она уже потом (теоретически) сможет мне разметить большой датасет уже для маленькой нейросетки, которая будет быстро работать на Maix III. Ещё надо будет попробовать следящие нейросети, которым на вход даёшь не только текущую картинку, но и предположения нейросети о том, где находились объекты в предыдущий кадр. за счет большего объёма информации можно будет более стабильно вычленять положения объектов во время движения на смазанных кадрах.
Previous post Next post
Up