Автономный квадрокоптер
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Что дальше?
Нужно решить две очередные задачи - в ПЛИС выделить границы объектов, и, собственно, их координаты передать на микрокомпьютер для дальнейшей обработки.
Тут есть несколько трудностей:
- в определении границ объектов необходимо, как минимум, три очередных строки (по 640 бит бинарного изображения) держать постоянно в памяти для того чтобы использовать алгоритм Собеля (https://ru.wikipedia.org/wiki/Оператор_Собеля)
Упрощенно для бинарного изображения матрица для алгоритма Собеля вырождается в примитивный вариант 3х3:
XXX
XZX
XXX
где значение Z - "граничный ли это пиксел либо нет" определяется простым правилом:
"для того, чтобы средний пиксел из 9 в матрице 3х3 считался граничным, должны одновременно быть выполнены 2 условия: хотя бы один из окружающих (соседних) пикселов должен иметь то же значение, что и рассматриваемый (средний) пиксел и, одновременно, среди окружающих пикселов должен быть хотя бы один противоположного значения".
В принципе, можно даже не использовать DRAM память, а использовать оставшиеся логические ячейки плиски (как мы помним, в проекте сейчас задействовано около 1 тыс. ячеек, для периодического сохранения трех строк нужно 640х3 = 1920 ячеек ПЛИС). Ну, ещё будут какие-то задействованы для самих лог. операций, но, думаю, все равно должно хватить 5 тыс на "все-провсе"...
Хотя я забыл о второй задаче - нужно на плиске синтезировать какой-то интерфейс для передачи на распберри.
Сразу передавать (например, брать с того же старшего разряда "зеленого", а также синхро- сигналы и передавать это все - сильно сомнительно, что получится).
Даже если передавать по одному разряду на каждый пиксел (а собственно, так и надо для черно-белого изображения), нужно чтобы "адресат" (микрокомп) мог принять с такой скоростью (640 х 480 х 30 = 9216000 бит/сек, т.е., частота приема должна быть не менее 9,2 МГц). Пины миникомпа способны максимум на несколько килогерц, то есть на три порядка меньше..
Выход видится только один - синтезировать со стороны ПЛИС интерфейс SPI, скорость передачи которого достигает нескольких десятков МГц. Этого будет уже достаточно.
А в распберри изначально интегрирован интерфейс SPI.
Задача посложнее, чем две предыдущие, но - безусловно решаемая.
Нашел примерs синтеза SPI интерфейса для ПЛИС/
Например:
https://nikellanjilo.ru/?p=1935
Или вот (работает на 18 МГц):
https://sites.google.com/site/vanyambauseslinux/fpga/fpga-slave-modul-interfejsa-spi
Вообще в процессе коллеги спрашивали - чего я "прицепился" к камере OV7670? Ведь гораздо логичнее использовать спец. камеру для распберри. То есть, плиску логически (и аппаратно, естественно) включить между камерой и распберри. При этом, даже не придется задействовать внешнюю память для буферизации - все преобразования делать "на лету" - интерфейс камеры это, типа, позволяет.
Хотя интерфейс у неё посложнее
Но тут 2 "но":
- не хочется "распускать" контактный шлейф камеры
- при получении преобразованного изображения на распберри уже не будет реального, а это не есть хорошо, так как выделение границ только один из алгоритмов, а предполагается ещё, например, цветвой анализ...
Нужно решить две очередные задачи - в ПЛИС выделить границы объектов, и, собственно, их координаты передать на микрокомпьютер для дальнейшей обработки.
Тут есть несколько трудностей:
- в определении границ объектов необходимо, как минимум, три очередных строки (по 640 бит бинарного изображения) держать постоянно в памяти для того чтобы использовать алгоритм Собеля (https://ru.wikipedia.org/wiki/Оператор_Собеля)
Упрощенно для бинарного изображения матрица для алгоритма Собеля вырождается в примитивный вариант 3х3:
XXX
XZX
XXX
где значение Z - "граничный ли это пиксел либо нет" определяется простым правилом:
"для того, чтобы средний пиксел из 9 в матрице 3х3 считался граничным, должны одновременно быть выполнены 2 условия: хотя бы один из окружающих (соседних) пикселов должен иметь то же значение, что и рассматриваемый (средний) пиксел и, одновременно, среди окружающих пикселов должен быть хотя бы один противоположного значения".
В принципе, можно даже не использовать DRAM память, а использовать оставшиеся логические ячейки плиски (как мы помним, в проекте сейчас задействовано около 1 тыс. ячеек, для периодического сохранения трех строк нужно 640х3 = 1920 ячеек ПЛИС). Ну, ещё будут какие-то задействованы для самих лог. операций, но, думаю, все равно должно хватить 5 тыс на "все-провсе"...
Хотя я забыл о второй задаче - нужно на плиске синтезировать какой-то интерфейс для передачи на распберри.
Сразу передавать (например, брать с того же старшего разряда "зеленого", а также синхро- сигналы и передавать это все - сильно сомнительно, что получится).
Даже если передавать по одному разряду на каждый пиксел (а собственно, так и надо для черно-белого изображения), нужно чтобы "адресат" (микрокомп) мог принять с такой скоростью (640 х 480 х 30 = 9216000 бит/сек, т.е., частота приема должна быть не менее 9,2 МГц). Пины миникомпа способны максимум на несколько килогерц, то есть на три порядка меньше..
Выход видится только один - синтезировать со стороны ПЛИС интерфейс SPI, скорость передачи которого достигает нескольких десятков МГц. Этого будет уже достаточно.
А в распберри изначально интегрирован интерфейс SPI.
Задача посложнее, чем две предыдущие, но - безусловно решаемая.
Нашел примерs синтеза SPI интерфейса для ПЛИС/
Например:
https://nikellanjilo.ru/?p=1935
Или вот (работает на 18 МГц):
https://sites.google.com/site/vanyambauseslinux/fpga/fpga-slave-modul-interfejsa-spi
Вообще в процессе коллеги спрашивали - чего я "прицепился" к камере OV7670? Ведь гораздо логичнее использовать спец. камеру для распберри. То есть, плиску логически (и аппаратно, естественно) включить между камерой и распберри. При этом, даже не придется задействовать внешнюю память для буферизации - все преобразования делать "на лету" - интерфейс камеры это, типа, позволяет.
Хотя интерфейс у неё посложнее
Но тут 2 "но":
- не хочется "распускать" контактный шлейф камеры
- при получении преобразованного изображения на распберри уже не будет реального, а это не есть хорошо, так как выделение границ только один из алгоритмов, а предполагается ещё, например, цветвой анализ...
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
В праздничные дни особо работать не рекомендуется, но "чуть-чуть" поразмышлять можно.
Так вот, - размышления на тему как в одной плисине на 6200 ячеек уместить все необходимое, привело меня к кардинальному решению.
А именно - есть у меня ещё одна отладочная плата с таким же точно чипом но, практически без "периферии":
По размерам раза в два меньше, чем первая. На ней нет никаких VGA, IR, внешней памяти (SDRAM), и т.д., ну, практически вообще ничего нет, однако, есть самое необходимое - непосредственно сам чип (точно такой же, как и на первой плате, т.е., на 6200 лог. элементов), JTAG и AS разъемы для его прошивки, 16-мегабитная флэш-память для сохранения конфигурации (прошивки), всякая мелочь в виде кварца, RESET-ов, разъемов и обвязки по питанию да выводы PIN.
Далее специалистам по вент. матрицам читать не рекомендуется - я собираюсь использовать вторую плиску.
Понимаю, что это - "из пушки по воробьям", но не стоит забывать, что у нас в очень большой степени ещё и обучающий проект, так что..
Взаимодействие между двумя плисинами на системном уровне организовать проще простого - общий клок и все!
На обеих платах одинаковые 50-мегагерцовые кварцы, сами чипы имеют встроенные множители по 2 шт. (так что спокойно можно работать на частотах до 200 МГц).
Далее - из массы вариантов взаимодействия необходимо выбрать наиболее оптимальный.
Например, вторая плиска принимает данные о бинарном изображении, выделяет границы и по SPI передает на одноплатник (Raspberry)...
Так вот, - размышления на тему как в одной плисине на 6200 ячеек уместить все необходимое, привело меня к кардинальному решению.
А именно - есть у меня ещё одна отладочная плата с таким же точно чипом но, практически без "периферии":
По размерам раза в два меньше, чем первая. На ней нет никаких VGA, IR, внешней памяти (SDRAM), и т.д., ну, практически вообще ничего нет, однако, есть самое необходимое - непосредственно сам чип (точно такой же, как и на первой плате, т.е., на 6200 лог. элементов), JTAG и AS разъемы для его прошивки, 16-мегабитная флэш-память для сохранения конфигурации (прошивки), всякая мелочь в виде кварца, RESET-ов, разъемов и обвязки по питанию да выводы PIN.
Далее специалистам по вент. матрицам читать не рекомендуется - я собираюсь использовать вторую плиску.
Понимаю, что это - "из пушки по воробьям", но не стоит забывать, что у нас в очень большой степени ещё и обучающий проект, так что..
Взаимодействие между двумя плисинами на системном уровне организовать проще простого - общий клок и все!
На обеих платах одинаковые 50-мегагерцовые кварцы, сами чипы имеют встроенные множители по 2 шт. (так что спокойно можно работать на частотах до 200 МГц).
Далее - из массы вариантов взаимодействия необходимо выбрать наиболее оптимальный.
Например, вторая плиска принимает данные о бинарном изображении, выделяет границы и по SPI передает на одноплатник (Raspberry)...
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Всех - с Праздником!
Прежде чем идти дальше, попросили меня исправить неточности, ошибки, просто более подробно объяснить по предыдущему повествованию... Ну, вобщем, некоторые спецы просмотрели, сказали что "принципиально - все правильно", но - "есть, что подисправить.."
Чем пока я и займусь...
Прежде чем идти дальше, попросили меня исправить неточности, ошибки, просто более подробно объяснить по предыдущему повествованию... Ну, вобщем, некоторые спецы просмотрели, сказали что "принципиально - все правильно", но - "есть, что подисправить.."
Чем пока я и займусь...
- Топтыжка
- Сообщения: 8637
- Зарегистрирован: 08 ноя 2012, 13:17
- Пол: мужской
- Семейное положение: свободен
- Благодарил (а): 428 раз
- Поблагодарили: 1223 раза
Автономный квадрокоптер
Вообще ничего не понимаю из того, что ты пишешь. Но респект... уважаю знатоков (не из "кто, где, с кем"...
увы, всему на свете есть предел:
облез фасад и высохли стропила.
в автобусе на девку посмотрел,
она мне молча место уступила.
облез фасад и высохли стропила.
в автобусе на девку посмотрел,
она мне молча место уступила.
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Топтыжка писал(а):Вообще ничего не понимаю из того, что ты пишешь. Но респект... уважаю знатоков (не из "кто, где, с кем"...
Просто, в свое время "поразбрасывался камнями", и вот - пришло время "собирать"
На самом деле - просто, не все равно, в каком обществе будут жить мои внуки (как ни пафосно это звучит )
Все, что возможно - сделаем. Пусть один из нескольких десятков воспримет то, о чем я пишу - значит, уже все не зря...
Автономный квадрокоптер
adiagnost писал(а):Источник цитаты просто, не все равно, в каком обществе будут жить мои внуки
Как в Халфлайфе2?
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Прошу прощения, вышел на работу - а там накопилось.., приходится дома ещё "хвосты" по работе подбирать.. На проект времени пока нет.
Думаю, за эту неделю разгрести и продолжим..
Надеюсь, что все же получше.
Но занятия для желающих будут в это воскресенье (15 апреля), время - чуть позже уточню..
Думаю, за эту неделю разгрести и продолжим..
downland писал(а):Как в Халфлайфе2?
Надеюсь, что все же получше.
Но занятия для желающих будут в это воскресенье (15 апреля), время - чуть позже уточню..
- Dark Pearl
- Сообщения: 19656
- Зарегистрирован: 08 фев 2008, 22:50
- Пол: женский
- Благодарил (а): 1338 раз
- Поблагодарили: 3089 раз
Автономный квадрокоптер
adiagnost писал(а):Источник цитаты Но занятия для желающих будут в это воскресенье (15 апреля), время - чуть позже уточню..
ждем
Ничего не получится из ничего, если ничего не делать
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
В настоящее время происходит смена формата - на github созданы соответствующие репозитории, работа над проектом будет вестись коллективно. В настоящее время ведется их наполнение кодом. Как будет готово, рег. данные и ссылки будут выложены. Все желающие смогут присоединиться к проекту (так как есть желающие издалека, в том числе из дальнего зарубежья).
Плановых (по расписанию) встреч больше не будет, а местных участников (с Новочеркасска) будем собирать только для конкретных этапов испытаний по результатам предыдущих разработок. В начале июня предстоит первое испытание с винтами (без винтов уже отлажено)...
Плановых (по расписанию) встреч больше не будет, а местных участников (с Новочеркасска) будем собирать только для конкретных этапов испытаний по результатам предыдущих разработок. В начале июня предстоит первое испытание с винтами (без винтов уже отлажено)...
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
К сожалению, намеченные на июнь испытания с винтами отложились аж на 3 месяца - непредвиденные обстоятельства (всех и без того малочисленных участников) подвели - каникулы, отпуска, юга, дачи-огороды, ремонты и проч. .
К тому же - остался только 1 упорный участник - школьник, с которым мы занимаемся у меня дома - где-то ещё смысла нет.
Профи, конечно, помогают, например, адаптация прошивки полетного контроллера и вся силовая часть сделаны практически полностью одним из них.
На "верхнем" уровне системы управления также есть сдвиги (правда, в сторону усложнения) - одним из профи доказано и наглядно показано, что для распознавания образов недостаточно "тупого" перебора по базе данных, вернее, достаточно, но уж очень долго - для распознавания простого квадратного листа 1 м х 1 м нужно не менее 10 различных ракурсов с различием не менее чем 25%. В общем, оперативное время на такое распознавание - порядка полутора минут, что чересчур много. Поэтому придется использовать элементы ИИ (искусственного интеллекта) - встроенную в OpenCV библиотеку работы с нейросетями со всеми этими интеграциями, обучениями и прочими делами, присущими нейросетям. Это, конечно, интересно (с одной стороны), однако, проект и так уже довольно сложный, но по другому явно не получится - нейросети позволят на пару порядков сократить время распознавания.
Также ПЛИС, как показали опыты не эффективна в распознавании и будет использоваться в связке с "мини - тепловизором" на основе датчика amg8833. Это относительно бюджетный вариант - матрица всего 8 х 8, максимальная частота обновления картинки 10 Гц.
Собственно, вот даташит:
https://www.farnell.com/datasheets/2058257.pdf
А вот описание:
https://www.rlocman.ru/review/article.html?di=276975
С помощью интерполяции можно добиться разрешения 32 х 32, однако, это будет "неправдивое" разрешение, а смоделированное программно. А вот чтобы добиться правдивого (по прикидкам - вплоть до "стандартных" 640 х 480 за 1-2 секунды), нужно использовать дополнительные условия, которые есть у нашего проекта - способность передвижения относительно рассматриваемого объекта. Вот здесь-то ПЛИС будет максимально эффективна - для обработки больших однообразных потоков меняющейся информации в реальном режиме времени.
И у нас появляется дополнительный признак распознаваемого объекта - его температура (даже её "распределенно - площадное" значение)
Сейчас аппарат выглядит так:
Незамысловатое крепление изолентой (синяя изолента - наше все! ) - временное, так как нужно будет производить окончательную балансировку. А пока не встроены: видеокамеры с передатчиком, миникомпютер с ПЛИС и тепловизором, GPS навигатор, ультразвуковые датчики расстояния, лазеры.
Ещё из пока не решенного - в проекте изначально не предусматривалось управление стандартными пультами с соответствующими радиоканалами, поэтому для настройки "без винтов" пришлось полопатить исходные коды прошивки, найти и подменить данные от радиоприемника (если кому интересно, - файл Rx.cpp прошивки Multiwii).
А управление подразумевалось по Wi-Fi от ноутбука (можно со смартфона) со своей соответствующей программулиной. Далее, - миникомпьютер на квадрике принимает по Wi-Fi управляющие сигналы и передает их на полетный контроллер. (Альтернатива, кстати, - автономный полет под управлением миникомпьютера, что не противоречит совместному использованию режимов).
Так вот, - пока не сделана прога для ноута (смарта) и не определена связь "миникомп - полетный контроллер". Хотя и есть уже встроенные интерфейсы и там и там I2C и SPY, однако, видимо (в учебно - познавательных целях) задействуем шину CAN, для чего придется задействовать внешние CAN-контроллеры со стороны миникомпьютера (в Raspberry нет встроенной шины CAN), тогда как в Arduino DUE (который у нас является полетным контроллером) - есть.
Кстати, настройка производится довольно легко с помощью спец. приложения для Multiwii - MultiWiiWinGUI:
Так что работа возобновилась - буду добавлять по мере "продвижения"
К тому же - остался только 1 упорный участник - школьник, с которым мы занимаемся у меня дома - где-то ещё смысла нет.
Профи, конечно, помогают, например, адаптация прошивки полетного контроллера и вся силовая часть сделаны практически полностью одним из них.
На "верхнем" уровне системы управления также есть сдвиги (правда, в сторону усложнения) - одним из профи доказано и наглядно показано, что для распознавания образов недостаточно "тупого" перебора по базе данных, вернее, достаточно, но уж очень долго - для распознавания простого квадратного листа 1 м х 1 м нужно не менее 10 различных ракурсов с различием не менее чем 25%. В общем, оперативное время на такое распознавание - порядка полутора минут, что чересчур много. Поэтому придется использовать элементы ИИ (искусственного интеллекта) - встроенную в OpenCV библиотеку работы с нейросетями со всеми этими интеграциями, обучениями и прочими делами, присущими нейросетям. Это, конечно, интересно (с одной стороны), однако, проект и так уже довольно сложный, но по другому явно не получится - нейросети позволят на пару порядков сократить время распознавания.
Также ПЛИС, как показали опыты не эффективна в распознавании и будет использоваться в связке с "мини - тепловизором" на основе датчика amg8833. Это относительно бюджетный вариант - матрица всего 8 х 8, максимальная частота обновления картинки 10 Гц.
Собственно, вот даташит:
https://www.farnell.com/datasheets/2058257.pdf
А вот описание:
https://www.rlocman.ru/review/article.html?di=276975
С помощью интерполяции можно добиться разрешения 32 х 32, однако, это будет "неправдивое" разрешение, а смоделированное программно. А вот чтобы добиться правдивого (по прикидкам - вплоть до "стандартных" 640 х 480 за 1-2 секунды), нужно использовать дополнительные условия, которые есть у нашего проекта - способность передвижения относительно рассматриваемого объекта. Вот здесь-то ПЛИС будет максимально эффективна - для обработки больших однообразных потоков меняющейся информации в реальном режиме времени.
И у нас появляется дополнительный признак распознаваемого объекта - его температура (даже её "распределенно - площадное" значение)
Сейчас аппарат выглядит так:
Незамысловатое крепление изолентой (синяя изолента - наше все! ) - временное, так как нужно будет производить окончательную балансировку. А пока не встроены: видеокамеры с передатчиком, миникомпютер с ПЛИС и тепловизором, GPS навигатор, ультразвуковые датчики расстояния, лазеры.
Ещё из пока не решенного - в проекте изначально не предусматривалось управление стандартными пультами с соответствующими радиоканалами, поэтому для настройки "без винтов" пришлось полопатить исходные коды прошивки, найти и подменить данные от радиоприемника (если кому интересно, - файл Rx.cpp прошивки Multiwii).
А управление подразумевалось по Wi-Fi от ноутбука (можно со смартфона) со своей соответствующей программулиной. Далее, - миникомпьютер на квадрике принимает по Wi-Fi управляющие сигналы и передает их на полетный контроллер. (Альтернатива, кстати, - автономный полет под управлением миникомпьютера, что не противоречит совместному использованию режимов).
Так вот, - пока не сделана прога для ноута (смарта) и не определена связь "миникомп - полетный контроллер". Хотя и есть уже встроенные интерфейсы и там и там I2C и SPY, однако, видимо (в учебно - познавательных целях) задействуем шину CAN, для чего придется задействовать внешние CAN-контроллеры со стороны миникомпьютера (в Raspberry нет встроенной шины CAN), тогда как в Arduino DUE (который у нас является полетным контроллером) - есть.
Кстати, настройка производится довольно легко с помощью спец. приложения для Multiwii - MultiWiiWinGUI:
Так что работа возобновилась - буду добавлять по мере "продвижения"
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Еще из верхнего уровня – заказан аппаратный акселератор сверточных нейронных сетей Movidius от Интел для встраиваемых роботизированных систем на базе специального проца myriad https://software.intel.com/en-us/neural-compute-stick. Сверточные сети считаются лучшими для рсапознавания изображений.
Вроде, 100 гигафлопс они обещают. А это уже вполне серьезно.
Он производит сверхбыстрые параллельные вычисления по перемножению матриц, а, собственно, для прохода слоев нейросети это самое главное..
Жалко, что не применяется при обучении сети (а это львиная доли времени на разработку). Зато есть прямая поддержка ОС Raspbian для raspberry…
Вроде, 100 гигафлопс они обещают. А это уже вполне серьезно.
Он производит сверхбыстрые параллельные вычисления по перемножению матриц, а, собственно, для прохода слоев нейросети это самое главное..
Жалко, что не применяется при обучении сети (а это львиная доли времени на разработку). Зато есть прямая поддержка ОС Raspbian для raspberry…
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
leomond писал(а):Фюзеляж зачотный )
Ага, с фикспрайса, по-моему, колобашка...
А вообще, - все равно ещё центровать по весу, а потом хотим корпус прикинуть и чертежи для 3Д принтера подготовить.
Вроде, даже на этом форуме кто-то предлагал услуги по 3д - печати..
Хотели взять принтер, однако после изучения вопроса, оказалось, что более - менее нормальный порядка $500, пока нам столько печатать не надо..