Автономный квадрокоптер
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Вот это действительно интересно - на глубокое обучение сверточной сети обычно тратится уйма времени. А это я не знал:
Самое главное, наверное, заключается в том, что самые большие сверточные нейросети, обученные для одних задач распознавания образов, можно модифицировать, приспособить для родственных задач распознавания образов, слегка или совсем слегка их доучив. Причем под «совсем слегка» понимается и то, что такое обучение не требует много времени и что такое дообучение не требует большого количества новых обучающих данных (это, может быть, еще более важно). За счет этого в интернете стали появляться так называемые зоопарки сверточных нейронных сетей, откуда исследователи могут скачать предобученную в течение многих дней или недель и очень хорошо работающую сверточную нейронную сеть определенного типа и доучить такую сеть для частных задач, которые их интересуют.
Сам материал:
https://postnauka.ru/video/66872
Самое главное, наверное, заключается в том, что самые большие сверточные нейросети, обученные для одних задач распознавания образов, можно модифицировать, приспособить для родственных задач распознавания образов, слегка или совсем слегка их доучив. Причем под «совсем слегка» понимается и то, что такое обучение не требует много времени и что такое дообучение не требует большого количества новых обучающих данных (это, может быть, еще более важно). За счет этого в интернете стали появляться так называемые зоопарки сверточных нейронных сетей, откуда исследователи могут скачать предобученную в течение многих дней или недель и очень хорошо работающую сверточную нейронную сеть определенного типа и доучить такую сеть для частных задач, которые их интересуют.
Сам материал:
https://postnauka.ru/video/66872
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Пока прибор в пути, посмотрел примеры из зоопарка к мовидиусу. Самый подходящий (причем, практически без изменений и дообучений) это проект video_objects. Из ридми (гугл - переводчик):
Этот проект использует SSD Mobile Net для распознавания и классификации объектов для уличной камеры.
Сеть уже обучена. Изменения коснутся только того, что в готовом примере используется видеопоток не от камеры, а из видеофайла, а также - отрисовывается GUI с выделенными объектами (сам GUI в нашем проекте, естественно, не нужен).
Остальное - то что нам нужно - по нескольким десяткам категорий ("человек ", "животное".... , "автомобиль" и т.д.). Причем, насколько я понял, некоторые категории ещё подразделяются, например, для человека - пол, возраст. Для авто - цвет - белый, красный, черный и т.д. Животные - собака, лошадь, кошка и т.д.
Дальше - дело техники - удерживать нужный объект(ы) в поле зрения, действовать по заложенной программе и т.д.. В общем, сеть интегрируется в нашу систему, и дальше уже наше ПО верхнего уровня будет работать.
Этот проект использует SSD Mobile Net для распознавания и классификации объектов для уличной камеры.
Сеть уже обучена. Изменения коснутся только того, что в готовом примере используется видеопоток не от камеры, а из видеофайла, а также - отрисовывается GUI с выделенными объектами (сам GUI в нашем проекте, естественно, не нужен).
Остальное - то что нам нужно - по нескольким десяткам категорий ("человек ", "животное".... , "автомобиль" и т.д.). Причем, насколько я понял, некоторые категории ещё подразделяются, например, для человека - пол, возраст. Для авто - цвет - белый, красный, черный и т.д. Животные - собака, лошадь, кошка и т.д.
Дальше - дело техники - удерживать нужный объект(ы) в поле зрения, действовать по заложенной программе и т.д.. В общем, сеть интегрируется в нашу систему, и дальше уже наше ПО верхнего уровня будет работать.
- leomond
- Сообщения: 19484
- Зарегистрирован: 21 май 2009, 22:12
- Пол: мужской
- Благодарил (а): 319 раз
- Поблагодарили: 1862 раза
Автономный квадрокоптер
а будет ли происходить такое в процессе обучения?
Либерализм это иудаизм для гоев (с) Шарон
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
leomond писал(а):а будет ли происходить такое в процессе обучения?
Никто не застрахован..
Обучение сети (а с ней и всего верхнего уровня) происходит вообще-то не на "носителе", то есть, "полу- теоретически" - долго рассказывать...
К огибанию препятствий и действиям в аварийных (критических) ситуациях вообще не имеет никакого отношения - это две разные системы, приоритет - у критичной, естественно.
Есть такое подозрение, что ПР тупо подставили (как в безветренную погоду далеко не самый глупый дрон "привели" в стену - это умудриться надо! - он "упрется" всеми своими шестью винтами . Ну, либо.. специально сделать )
- Дионис
- Сообщения: 30692
- Зарегистрирован: 15 сен 2013, 16:04
- Пол: мужской
- Езжу на: двустоповый опорно-двигательный аппарат
- Благодарил (а): 14334 раза
- Поблагодарили: 2449 раз
- Контактная информация:
Автономный квадрокоптер
Вот, вот ... "распознавание пол, возраст" ... а потом штрафы за переход на красный приходят.
Есть куда стремится - распознавать конкретных людей из базы данных. и бомбить голубинным помётом.
Есть куда стремится - распознавать конкретных людей из базы данных. и бомбить голубинным помётом.
У меня нет принципов — приспособляемость ко всему вот мой принцип.
У меня нет закона — самосохранение мой закон.
У меня нет ни жизни, ни смерти — вечность для меня жизнь и смерть.
У меня нет закона — самосохранение мой закон.
У меня нет ни жизни, ни смерти — вечность для меня жизнь и смерть.
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Дионис писал(а):Есть куда стремится - распознавать конкретных людей из базы данных.
В zoo есть сети и по распознаванию лиц конкретных людей.
Если надо, прогоняется по нескольким сетям - первая категорирует все объекты на изображении, на вход второй, в итоге, подаются только, скажем, распознанные автомобили на белом фоне (или люди-человеки), а эта (вторая) сеть заточена под марки авто (под конкретных людей из базы). Одновременно со второй или опять же последовательно - после второй подается на вход сети заточенной под номера и т.д.
Или все это может делать одна многослойная сеть. Интересно то, что нет никаких четких (и уж тем более математических) рекомендаций, как будет наиболее эффективно в каком-либо конкретном случае.
Кстати, "усредненная" сеть для решения конкретных жизненных задач состоит из нескольких десятков слоев в среднем по 10 ядер (фильтров) на слой. Например, одна из сетей по распознаванию авто и номерных знаков содержит 36 слоев.
Ребята, тестировавшие мовидиус на этой сетке получили результат более 90% в городских условиях четырехполосной дороги за ~ 100 мс на картинке 800 х 600.
Для сравнения - четыре ядра распберри (каждое по 1,2 ГГц) будут обсчитывать один цикл порядка нескольких десятков секунд да ещё при 100% загрузке. Естественно, оперативное время теряется..
Интересно также, что такая настроенная и обученная сеть (слои и фильтры) "весит" всего несколько кБ.
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Интересно, у них тоже бабло пилят под видом новейших разработок?
Дарпа представило промежуточный этап - потрачено уже около $1млн., как-то не впечатляет по такому бюджету:
https://www.youtube.com/watch?time_continue=160&v=LaXc-jmN89U
Дарпа представило промежуточный этап - потрачено уже около $1млн., как-то не впечатляет по такому бюджету:
https://www.youtube.com/watch?time_continue=160&v=LaXc-jmN89U
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Пока ожидаем прибытия приборов - ускорителя сетей и батареи (один акк. из двух навернулся), занимаемся потихоньку верхним уровнем.
Налажен обмен с AMG8833 (мини- тепловизором), однако, во-первых, ПО, которое с ним идет "из коробки" необходимо допиливать - пока видим только, к примеру, разогретый процессор или кружку с горячим кофе с расстояния 10-20 см. А необходимо - человека с расстояния до 7 м. Хотя, насколько я понимаю, при расстоянии 7 м человек "поместится" в 1 пиксель.
Во-вторых, хорошо бы сделать что-то вроде объективчика для увеличения расстояния действия . Однако, при изучении вопроса оказалось, что для инфракрасного излучения необходимы специальные линзы - обычное стекло практически не пропускает инфрарэд. Такие линзы делают из германия, кремния, ещё там из чего-то и найти их не просто. Хотя, интересно, что отражающая часть обычного зеркала практически полностью отражает инфракрасное излучение (именно поэтому материалы для утепления , как правило, имеют зеркальный отражающий слой). Теоретически, можно было бы смастерить что-то вроде зеркального телескопа- рефлектора на основе вогнутой зеркальной линзы
А также, завалялся тут у нас комнатный syma не помню уже точно какой - судя по виду, что-то типа такого:
с камерой (с какой-то очень хиленькой, типа ov7670),сам квадрик чисто комнатного исполнения - сантиметров 20 по диагонали и весом грамм 200-300 (на улице его сдувает даже в несильный ветер - проверено )
Тут интересно другое - управляется он по wi-fi со смартфона или от пульта по радиоканалу.
Будем делать взаимодействие между дронами.
Вернее, в полном смысле взаимодействия не получится - просто "мелкий" "большому" будет слать картинку с камеры по wi-fi, а большой - управлять мелким по радиоканалу, хотя все элементы обратной связи присутствуют.
Причем, для управления будем использовать плату из штатного пульта "мелкого", которую установим на "большой", вместо стикеров джойстика пульта будет задействовано 2 канала ЦАП arduino due (нашего полетного контроллера) - стикеры в итоге задают именно уровень напряжения (вернее 2-х напряжений - по осям X и Y - уже разобрали пульт и поняли как он работает). А дальше - по радиоканалу - управляющие сигналы на мелкий - вроде метров до 50 от пульта работает, также должно быть и при удалении одного дрона от другого.
Осталось придумать логику управления ...
В идеале было бы так - большой доставляет мелкого в заданный район на себе (он сидит как жук сверху - электромеханические микрозацепы не проблема), далее - запускает его прямо в воздухе, и у него появляется ещё один "мобильный глаз", которым он управляет..
Налажен обмен с AMG8833 (мини- тепловизором), однако, во-первых, ПО, которое с ним идет "из коробки" необходимо допиливать - пока видим только, к примеру, разогретый процессор или кружку с горячим кофе с расстояния 10-20 см. А необходимо - человека с расстояния до 7 м. Хотя, насколько я понимаю, при расстоянии 7 м человек "поместится" в 1 пиксель.
Во-вторых, хорошо бы сделать что-то вроде объективчика для увеличения расстояния действия . Однако, при изучении вопроса оказалось, что для инфракрасного излучения необходимы специальные линзы - обычное стекло практически не пропускает инфрарэд. Такие линзы делают из германия, кремния, ещё там из чего-то и найти их не просто. Хотя, интересно, что отражающая часть обычного зеркала практически полностью отражает инфракрасное излучение (именно поэтому материалы для утепления , как правило, имеют зеркальный отражающий слой). Теоретически, можно было бы смастерить что-то вроде зеркального телескопа- рефлектора на основе вогнутой зеркальной линзы
А также, завалялся тут у нас комнатный syma не помню уже точно какой - судя по виду, что-то типа такого:
с камерой (с какой-то очень хиленькой, типа ov7670),сам квадрик чисто комнатного исполнения - сантиметров 20 по диагонали и весом грамм 200-300 (на улице его сдувает даже в несильный ветер - проверено )
Тут интересно другое - управляется он по wi-fi со смартфона или от пульта по радиоканалу.
Будем делать взаимодействие между дронами.
Вернее, в полном смысле взаимодействия не получится - просто "мелкий" "большому" будет слать картинку с камеры по wi-fi, а большой - управлять мелким по радиоканалу, хотя все элементы обратной связи присутствуют.
Причем, для управления будем использовать плату из штатного пульта "мелкого", которую установим на "большой", вместо стикеров джойстика пульта будет задействовано 2 канала ЦАП arduino due (нашего полетного контроллера) - стикеры в итоге задают именно уровень напряжения (вернее 2-х напряжений - по осям X и Y - уже разобрали пульт и поняли как он работает). А дальше - по радиоканалу - управляющие сигналы на мелкий - вроде метров до 50 от пульта работает, также должно быть и при удалении одного дрона от другого.
Осталось придумать логику управления ...
В идеале было бы так - большой доставляет мелкого в заданный район на себе (он сидит как жук сверху - электромеханические микрозацепы не проблема), далее - запускает его прямо в воздухе, и у него появляется ещё один "мобильный глаз", которым он управляет..
- Дионис
- Сообщения: 30692
- Зарегистрирован: 15 сен 2013, 16:04
- Пол: мужской
- Езжу на: двустоповый опорно-двигательный аппарат
- Благодарил (а): 14334 раза
- Поблагодарили: 2449 раз
- Контактная информация:
Автономный квадрокоптер
На самообучение его пустите?
Пофлужу немного:
https://nplus1.ru/news/2018/10/13/prancing-bot?utm_source=yxnews&utm_medium=desktop
А так же
https://nplus1.ru/news/2018/10/15/griddrones
Мне кажется он просто дёргает один дрон вверх и вниз, а прочие просто повторяют его координаты в пространстве, или я не прав?
Пофлужу немного:
https://nplus1.ru/news/2018/10/13/prancing-bot?utm_source=yxnews&utm_medium=desktop
Разработчики из Google Brain представили среду для обучения искусственного интеллекта, в которой созданный бот модифицирует собственное тело для лучшего (но при этом экономичного) выполнения задания. Для преодоления препятствий боту пришлось увеличить толщину задней ноги для более простой навигации.
Скрытый текст: Показать
А так же
Инженеры из Дании и Канады превратили рой (15) дронов в интерактивный экран, которым можно управлять с помощью жестов, например растягивать или формировать фигуры из полотна образованного дронами.
https://nplus1.ru/news/2018/10/15/griddrones
Скрытый текст: Показать
Мне кажется он просто дёргает один дрон вверх и вниз, а прочие просто повторяют его координаты в пространстве, или я не прав?
У меня нет принципов — приспособляемость ко всему вот мой принцип.
У меня нет закона — самосохранение мой закон.
У меня нет ни жизни, ни смерти — вечность для меня жизнь и смерть.
У меня нет закона — самосохранение мой закон.
У меня нет ни жизни, ни смерти — вечность для меня жизнь и смерть.
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Дионис писал(а):Мне кажется он просто дёргает один дрон вверх и вниз, а прочие просто повторяют его координаты в пространстве, или я не прав?
Скорее всего где-то рядом есть комп, с которым связаны все дроны. Они посылают свои координаты на комп, тот обсчитывает и управляет каждым в отдельности в цикле по заложенному алгоритму, либо при управлении в он-лайне.
Например, алгоритм повторения за каким-то конкретным дроном (который "дергает" оператор)
Например, даже обычным вайфаем можно 50 раз в секунду передавать одно сообщение на 30 байт - для каждого дрона по два байта, содержащие команду на его перемещение в данный конкретный момент (самый примитивный вариант). А каждый дрон принимает этот фрейм и знает (заранее настроен), в каких конкретно байтах содержится указание именно ему.
В этом смысле даже догадываюсь, почему дронов именно 15 - видимо, управляющий компьютер 8-миядерный с 16-тью потоками (одно ядро для системы все же надо оставить.. )
Отправлено спустя 24 минуты 14 секунд:
Прочитал более внимательно:
управление всем роем в целом обеспечивается внешней системой захвата движений. Она состоит из высокоскоростных камер, закрепленных по периметру комнаты и отслеживающих положение светоотражающих маркеров на дронах, а также на большом и указательном пальцах пользователя
В любом случае - управление внешнее.
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Интересную задачку пришлось решить (пока наполовину) для перехвата видео от нонэйм камеры мелкого нонэйм же квадрика по wi-fi - дело в том, что не известен был ни протокол обмена, ни, естественно пароли, ни метод шифрования (а он есть). У квадрика вообще даже маркировка всех чипов вытравлена. А специальное приложение, устанавливаемое на смартфон, уже имеет все необходимые настройки, которые оттуда никак не вытянуть.
Известно было только имя сети - да и то - чисто вычислено, в момент включения квадрика просто появлялась ещё одна сеть
Но этого, а также того, что запускать сеть на квадрике мы могли сами в любой нужный нам момент, оказалось достаточно для использования Aircrack-ng, набора прикольных тулсов для линуха: https://kali.tools/?p=515
Как раз оказалось, что они на дебиане работают, поэтому с помощью малины, переведя её вайфай - карту в режим монитора, удалось подобрать пароль минут за 10-12 (он оказался динамически неизменным, что также оказалось очень даже кстати).
В общем - хакнут пароль и ключи WPA (хорошо, что не WPA2, что было бы на порядок сложнее, хотя, как я понял, и это возможно за разумное время), и на настоящий момент обладаем непосредственно нешифрованными данными из пакетов передачи видео.
Однако, остается ещё вторая половина задачи - понять, как их интерпретировать.
Самый "тупой" и в лоб - зная угол обзора камеры (который легко вычислить по маркерной картинке, по ощущениям градусов 50-60) и разрешение камеры (максимум 640х480), используя разлинованную прямоугольную картинку 640х480 с подкрашенными как нам надо квадратиками, и поместив её на таком расстоянии от камеры, чтобы она покрывала весь угол обзора, вычислить конкретные битовые адреса каждого пиксела камеры...
Известно было только имя сети - да и то - чисто вычислено, в момент включения квадрика просто появлялась ещё одна сеть
Но этого, а также того, что запускать сеть на квадрике мы могли сами в любой нужный нам момент, оказалось достаточно для использования Aircrack-ng, набора прикольных тулсов для линуха: https://kali.tools/?p=515
Как раз оказалось, что они на дебиане работают, поэтому с помощью малины, переведя её вайфай - карту в режим монитора, удалось подобрать пароль минут за 10-12 (он оказался динамически неизменным, что также оказалось очень даже кстати).
В общем - хакнут пароль и ключи WPA (хорошо, что не WPA2, что было бы на порядок сложнее, хотя, как я понял, и это возможно за разумное время), и на настоящий момент обладаем непосредственно нешифрованными данными из пакетов передачи видео.
Однако, остается ещё вторая половина задачи - понять, как их интерпретировать.
Самый "тупой" и в лоб - зная угол обзора камеры (который легко вычислить по маркерной картинке, по ощущениям градусов 50-60) и разрешение камеры (максимум 640х480), используя разлинованную прямоугольную картинку 640х480 с подкрашенными как нам надо квадратиками, и поместив её на таком расстоянии от камеры, чтобы она покрывала весь угол обзора, вычислить конкретные битовые адреса каждого пиксела камеры...
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Прибыл ускоритель сетей:
На фото, кстати, попал и подключенный тепловизионный датчик..
Нарыл, вроде, рабочий вариант:
https://www.pyimagesearch.com/2018/02/12/getting-started-with-the-intel-movidius-neural-compute-stick/
Будем потихоньку разбираться...
На фото, кстати, попал и подключенный тепловизионный датчик..
Нарыл, вроде, рабочий вариант:
https://www.pyimagesearch.com/2018/02/12/getting-started-with-the-intel-movidius-neural-compute-stick/
Будем потихоньку разбираться...
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
На днях приступаем к этапу общей сборки.
Для movidius не подошла ОС raspbian jessy (с гитхаба все клонировали, но make собрать не может), он просит установить raspbian stretch. Естественно, этого мы делать не будем - слишком много уже сделано на распберри на этой оси другого нужного. Поэтому для нейросетей выделим отдельный миникомп - "апельсинку" - (Orange Pi PC2). Он даже чуток попроворнее распберри будет - 1,6 ГГц по ядрам против 1,2 у малины при той же оперативке (1 ГБ). Свяжем по ethernet распберри с соответствующим ПО. На апельсике, скорее всего, будет ось Ubuntu - под неё, вроде, лучше с мовидиус работается. Правда, камера для апельсина - 2 Мп против 5-ти у малины, но для наших задач пойдет с запасом - все равно ещё придется делать компресс кадров перед отправкой в нейросеть.. То есть, апельсин будет заниматься одной единственной задачей - прогон по нейросети изображения с его камеры с ускорением мовидиусом и передачей в распберри результатов распознавания. Наверное, так будет правильнее, - а то у малины итак много других задач...
Поэтому, пока ещё все разобрано перед окончательной подгонкой и сборкой, можно восстановить некоторую хронологию событий, упущенную мной ранее (в чем меня недавно уличили). А именно, - как прошла отладка прошивки контроллера (помним, что у нас это arduino due). При этом, какие-то фото и скрины у меня сохранились ещё с весны, когда в основном это делалось, какие-то я буду делать в ходе "повествования" - благо все пока "раскинуто" можно повторить все шаги - когда соберем, уже подробно расписать не получится по понятным причинам.
Итак, в наличии у нас были исходные коды multiwii - универсальной прошивки для массы различных контроллеров (в основном, ардуиновских), скачанные с гитхаба. Относительно недавно, один из разработчиков прошивки любезно добавил в неё и ардуино дуе.
Однако, у нас не совсем тривиальная задача - как не имея хотя бы какой-нибудь стандартный пульт управления (с джойстиками там, радиоканалами и остальными "делами") и соответствующим приемником на квадрике , наладить управление?
Вернее, как наладить управление более-менее в общих чертах было ясно - по вай-фай или 4-канальному приемо-передатчику, который тоже есть в наличии, но как это "привязать" к прошивке?
Конфигурирование прошло "безболезненно" и без особых проблем - в файле config.cpp просто раскомментировать все что связано с нашим контроллером и использующимися датчиками.
Для начала надо было вообще определить, куда (на какие пины) что-то передается на контроллере (ардуино дуе) для управления регуляторами движков, так как по тексту кодов в самых разных местах встречались разные обозначения пинов. Со второго раза удалось вычислить - это пины 34, 36, 38 и 40, которые находятся на поперечной гребенке дуе (стрелкой указаны подключенные входы логического анализатора):
Однако, ничего на них не приходило после первичных прошивок контроллера.
Дальше мы вспомнили (прочли в нете), что, как правило, все квадрики "армированы", то есть, имеют два состояния - disarm и arm - то есть, "нерабочее" и "рабочее" (по типу разблокировки телефона, я так понял, это сделано для того, чтобы случайно что-то там не нажать, и квадрик бы не полетел "не штатно" - типа, надо джойстки перевести одновременно в какие-либо заранее предустановленные положения, чтобы разблокировать квадрик - перевести из дисарма в арм- состояние и пульт на это тоже калибруется).
Так как никаких джойстиков у нас нет, нужно было найти место в прошивке, где она армируется и посмотреть, что можно сделать.
"Тупой" поиск по "буквосочетанию" arm дал результат - в файле Rx.cpp найдено место, где можно армировать состояние, причем, надо было его армировать по прошествии секунд 30 (обусловлено тем, что необходимо за это время провести калибровку акселерометра-гироскопа). Как это сделать?
Просто ввели счетчик циклов (cycles), каждый программный цикл инкрементировали его на 1, и смотрели, когда в настроечной программе (MultiwiiwinGUI) "подсветится" ARM. Так и определили, что один программный цикл длится порядка 3 мс. Соответственно, дали 10000 циклов до армирования (стрелка 1 на рис. ниже). В один из ключевых методов записали присвоение arm-у по достижению счетчика (стрелка 2):
Продолжение следует...
Для movidius не подошла ОС raspbian jessy (с гитхаба все клонировали, но make собрать не может), он просит установить raspbian stretch. Естественно, этого мы делать не будем - слишком много уже сделано на распберри на этой оси другого нужного. Поэтому для нейросетей выделим отдельный миникомп - "апельсинку" - (Orange Pi PC2). Он даже чуток попроворнее распберри будет - 1,6 ГГц по ядрам против 1,2 у малины при той же оперативке (1 ГБ). Свяжем по ethernet распберри с соответствующим ПО. На апельсике, скорее всего, будет ось Ubuntu - под неё, вроде, лучше с мовидиус работается. Правда, камера для апельсина - 2 Мп против 5-ти у малины, но для наших задач пойдет с запасом - все равно ещё придется делать компресс кадров перед отправкой в нейросеть.. То есть, апельсин будет заниматься одной единственной задачей - прогон по нейросети изображения с его камеры с ускорением мовидиусом и передачей в распберри результатов распознавания. Наверное, так будет правильнее, - а то у малины итак много других задач...
Поэтому, пока ещё все разобрано перед окончательной подгонкой и сборкой, можно восстановить некоторую хронологию событий, упущенную мной ранее (в чем меня недавно уличили). А именно, - как прошла отладка прошивки контроллера (помним, что у нас это arduino due). При этом, какие-то фото и скрины у меня сохранились ещё с весны, когда в основном это делалось, какие-то я буду делать в ходе "повествования" - благо все пока "раскинуто" можно повторить все шаги - когда соберем, уже подробно расписать не получится по понятным причинам.
Итак, в наличии у нас были исходные коды multiwii - универсальной прошивки для массы различных контроллеров (в основном, ардуиновских), скачанные с гитхаба. Относительно недавно, один из разработчиков прошивки любезно добавил в неё и ардуино дуе.
Однако, у нас не совсем тривиальная задача - как не имея хотя бы какой-нибудь стандартный пульт управления (с джойстиками там, радиоканалами и остальными "делами") и соответствующим приемником на квадрике , наладить управление?
Вернее, как наладить управление более-менее в общих чертах было ясно - по вай-фай или 4-канальному приемо-передатчику, который тоже есть в наличии, но как это "привязать" к прошивке?
Конфигурирование прошло "безболезненно" и без особых проблем - в файле config.cpp просто раскомментировать все что связано с нашим контроллером и использующимися датчиками.
Для начала надо было вообще определить, куда (на какие пины) что-то передается на контроллере (ардуино дуе) для управления регуляторами движков, так как по тексту кодов в самых разных местах встречались разные обозначения пинов. Со второго раза удалось вычислить - это пины 34, 36, 38 и 40, которые находятся на поперечной гребенке дуе (стрелкой указаны подключенные входы логического анализатора):
Однако, ничего на них не приходило после первичных прошивок контроллера.
Дальше мы вспомнили (прочли в нете), что, как правило, все квадрики "армированы", то есть, имеют два состояния - disarm и arm - то есть, "нерабочее" и "рабочее" (по типу разблокировки телефона, я так понял, это сделано для того, чтобы случайно что-то там не нажать, и квадрик бы не полетел "не штатно" - типа, надо джойстки перевести одновременно в какие-либо заранее предустановленные положения, чтобы разблокировать квадрик - перевести из дисарма в арм- состояние и пульт на это тоже калибруется).
Так как никаких джойстиков у нас нет, нужно было найти место в прошивке, где она армируется и посмотреть, что можно сделать.
"Тупой" поиск по "буквосочетанию" arm дал результат - в файле Rx.cpp найдено место, где можно армировать состояние, причем, надо было его армировать по прошествии секунд 30 (обусловлено тем, что необходимо за это время провести калибровку акселерометра-гироскопа). Как это сделать?
Просто ввели счетчик циклов (cycles), каждый программный цикл инкрементировали его на 1, и смотрели, когда в настроечной программе (MultiwiiwinGUI) "подсветится" ARM. Так и определили, что один программный цикл длится порядка 3 мс. Соответственно, дали 10000 циклов до армирования (стрелка 1 на рис. ниже). В один из ключевых методов записали присвоение arm-у по достижению счетчика (стрелка 2):
Продолжение следует...
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Кстати, скрин настройки:
Отправлено спустя 12 минут 41 секунду:
Но затем нужно было понять, где конкретно в исходных кодах задаются задания на движки. Оказывается, можно здесь (файл protocol.cpp - общение по последовательному UART):
Соответственно, задания были закомментированы, а мы подали на них значения, которые позволят нам понять, что это именно "наши" присвоенные (1600, 1650, 1700 и 1750):
С помощью логического анализатора посмотрели, что "творится" на выходах контроллера по каналам шим (управление движками через регуляторы):
А творилось все нормально - ширина импульса по каналам менялась от 1,6 мс до 1,75 соответственно.
Это все хорошо, мы нашли место, где сами можем задавать движкам задания.
Но нам надо найти место, где приходит не для каждого двигателя в отдельности, а в общем, как с джойстика - "полететь вверх", "вправо", "обернуться вокруг" оси и проч. "тангажи", "рыскания" и т.д. - то есть, pich, roll, yaw и т.д...
Продолжение следует..
Отправлено спустя 12 минут 41 секунду:
Но затем нужно было понять, где конкретно в исходных кодах задаются задания на движки. Оказывается, можно здесь (файл protocol.cpp - общение по последовательному UART):
Соответственно, задания были закомментированы, а мы подали на них значения, которые позволят нам понять, что это именно "наши" присвоенные (1600, 1650, 1700 и 1750):
С помощью логического анализатора посмотрели, что "творится" на выходах контроллера по каналам шим (управление движками через регуляторы):
А творилось все нормально - ширина импульса по каналам менялась от 1,6 мс до 1,75 соответственно.
Это все хорошо, мы нашли место, где сами можем задавать движкам задания.
Но нам надо найти место, где приходит не для каждого двигателя в отдельности, а в общем, как с джойстика - "полететь вверх", "вправо", "обернуться вокруг" оси и проч. "тангажи", "рыскания" и т.д. - то есть, pich, roll, yaw и т.д...
Продолжение следует..
-
- Сообщения: 873
- Зарегистрирован: 04 май 2015, 15:46
- Пол: мужской
- Благодарил (а): 2 раза
- Поблагодарили: 189 раз
Автономный квадрокоптер
Кстати, про распознавание целей (затронутое в соседней теме) - Дарпа удивило в очередной раз.
Хотят добиться в проекте до 50 Гфлопс на 1 Вт (кстати, с полгода как проект заморозили на какой-то срок) при массе системы до 1,5 кг.
У нас УЖЕ есть 100 Гфлопс на 1 Вт при весе всей системы до 0,5 кг (правда, без апертурного радара) .
https://www.aex.ru/news/2016/5/26/154047/
Хотят добиться в проекте до 50 Гфлопс на 1 Вт (кстати, с полгода как проект заморозили на какой-то срок) при массе системы до 1,5 кг.
У нас УЖЕ есть 100 Гфлопс на 1 Вт при весе всей системы до 0,5 кг (правда, без апертурного радара) .
https://www.aex.ru/news/2016/5/26/154047/