Как сделать дистанционное управление моделью
Пульт радиоуправления моделями своими руками
Всем привет. Представляю на общее обозрение самодельный пульт радиоуправления для управления различными объектами на расстоянии. Это может быть машинка, танк, катер и т.д. изготовленное мной для “детского” радио кружка. С применением радио модуля NRF24L01 и микроконтроллера ATMEGA16.
Давно у меня лежала коробка одинаковых поломанных игровых джойстиков от приставок. Досталась от игрового заведения. Особого применения в неисправных игровых джойстиках я не видел, да и выкидывать или разбирать жалко. Вот и стояла коробка мертвым грузом пылилась. Идея применения игровых джойстиков, пришла, как только пообщался со своим приятелем. Приятель вел кружок для юных радиолюбителей в интернате, причем бесплатно по выходным, приобщал любознательных детишек к миру радиоэлектроники. Дети они ведь как губка, впитывают информацию. Так как я сам очень приветствую подобные кружки для детей, а тут еще и в таком месте. То и предложил идею, как задействовать нерабочие джойстики. Идея заключалась в следующем: создать самодельный радио дистанционный пульт управления моделями, собранными своими руками, который хотелось бы предложить детям для изучения проекта. Идея ему очень понравилась, учитывая, что финансирование детских учреждений мягко сказать не очень, да и мне был интересен данный проект. Пускай я тоже внесу свою лепту в развитие радио кружка.
Цель проекта создать законченное устройство не только как радио дистанционный пульт, но и ответную часть на радиоуправляемый объект. Учитывая, что пульт для детей то и подключение приёмной части на модель, также должно быть по возможности простым.
Сборка и комплектующие:
Разобрав игровой джойстик на составляющие, сразу стало ясно, нужно изготовить новую печатную плату, причем, весьма необычной формы. Сначала, хотел развести печатную плату на микроконтроллер ATMEGA48, но как оказалось портов микроконтроллера просто не хватает под все кнопки. Конечно, такое количество кнопок в принципе не нужно и можно было ограничиться только четырьмя портами микроконтроллера АЦП для двух джойстиков и два порта для тактовых кнопок, размещенных на джойстиках. Но мне захотелось по возможности максимально большое количество кнопок задействовать, кто знает, чего там детишки ещё захотят добавить. Так была рождена печатная плата под микроконтроллер ATMEGA16. Сами микроконтроллеры у меня были в наличии, остались от какого-то проекта.
Резинки на кнопках очень сильно были изношены, и восстановлению не подлежали. Но это не удивительно учитывая, где джойстики использовались. По этой причине применил тактовые кнопки. Пожалуй, к минусам тактовых кнопок можно отнести сильное щелканье, возникавшие в результате нажатия на кнопку. Но для данного проекта это весьма терпимо.
Плату с джойстиками не пришлось переделывать, оставил какая есть, что значительно сэкономило времени. Торцевые кнопки также сохранил в первоначальном виде.
В качестве приемопередатчика выбрал радиомодуль NRF24L01, так как цена весьма мала в Китае по цене 0.60$ за шт. купил. Несмотря на свою малую стоимость, радиомодуль обладает не малыми возможностями и конечно мне подходил. Следующей проблемой, с которой столкнулся, а собственно где радиомодуль разместить. Пространство в корпусе свободного маловато, по этой причине радио модуль разместил в одной из ручек корпуса джойстика. Даже фиксировать не пришлось, модуль плотно прижимался, когда собирался полностью корпус.
Пожалуй, самой большой проблемой стал вопрос с питанием для радио пульта. Покупка каких-то специализированных аккумуляторов, скажем литиевых, влетало в немалую копеечку, так как собирать решено было семь комплектов. Да и оставшееся свободное пространство в корпусе не очень позволяло использовать стандартные аккумуляторы серии AA. Хотя потребление и не значительное можно использовать разные подходящие источники питания. Как всегда, на помощь пришла дружба, коллега на работе подогнал аккумуляторы литиевые плоские от мобильных телефонов и бонусом зарядки к ним. Все же немного пришлось переделать их, но это незначительно и гораздо лучше, чем делать с нуля зарядку для аккумуляторов. Вот на плоских литиевых аккумуляторах я и остановился.
В процессе испытания радио модуль, свою заявленную дальность оправдал и уверенно работал по прямой видимости на расстоянии 50 метров, через стены дальность значительно уменьшилась. Также было в планах установить вибромотор, который реагировал, скажем на какие-то столкновения или другие действия в радиоуправляемой модели. В связи с этим предусмотрел на печатной плате транзисторный ключ для управления. Но дополнительные усложнения я оставил на потом сначала нужно обкатать программу, так как она ещё сыровата. Да и конструкция, учитывая, что это прототип требует мелких доработок. Вот так как говорится “с миру по нитке”, практически с минимальными вложениями был создан пульт радиоуправление.
Радиоуправляемая модель гоночного автомобиля своими руками
Доброго времени суток любители помастерить что своими руками. В сегодняшней статье будем собирать довольно интересную самоделку для вашего досуга и веселого времяпровождения. А именно соберём радиоуправляемую модель автомобиля. Одной из ключевой особенностью данной самоделки является то что она будет собрана из максимально самодельных и доступных комплектующих использовав минимальное количество покупных заводских элементов. Данную самоделку ни в коем случае нельзя отнести к каким-то серьёзным моделям, но она запросто сможет обогнать любую игрушечную модель из детского магазина игрушек и в добавок ещё иметь больший функционал (по количеству разных настроек). Эта самоделка может уступить игрушкам лишь внешним видом, но тут уже все зависит от вас.
Ссылки на некоторые компоненты конструкции вы можете найти в конце статьи.
Для данной радиоуправляемой модели автомобиля понадобится следующее, а именно:
— Металлические оси
— Пластиковая труба 20мм
— Подшипники
— Колеса 4шт
— Небольшой кусочек резины (например, от велокамеры)
— Алюминиевый профиль (тот что используется для монтажа гипсокартона)
— Электродвигатель
— Небольшой лист фанеры
— Пластиковые стяжки
— Металлические шайбы
— Болты
— Гайки
— Листовой ПВХ пластик
— Сервопривод
— Регулятор оборотов коллекторного электродвигателя
— Аккумуляторная батарея
— Аппаратура радиоуправления со своим приемником
— Обыкновенный гофрированный картон
В случаем с автором, каких-либо трудностей с установкой подшипников на вал не возникло, их диаметры четко совпали, а вот с внешним корпусом оси в виде пластиковой трубы пришлось слегка повозиться. Так как подшипники не влезли в трубу, причем им не хватает всего пары миллиметров, автор решил взять ступенчатое сверло и немного увеличить отверстия по краям. После вооружившись молотком получилось забить подшипники в трубу (см. фото). Хоть подшипники и сидят плотно, все же необходимо дополнительно закрепить их суперклеем. Вставляем ось в подшипники и переходим к следующему шагу.
Для следующего шага понадобятся колеса. Колеса можно купить отдельно от профессиональных моделей, либо снять со старых игрушек. Так как у нас нет возможности закреплять колеса с помощью гаек, в таком случае нам бы понадобились услуги токаря. Автор же сделал все максимально бюджетно, подобрал подходящее по диаметру корончатое сверло и сделал заглушки для колесных дисков из фанерного листа, и уже сам вал необходимо будет забивать в фанерные заглушки.
Как уже ранее говорилось выпиливаем фанерные заглушки такого диметра чтобы они плотно забивались в колесные диски. Запрессовав заглушки во внутрь каждого диска, желательно дополнительно бы закрепить их при помощи суперклея.
Далее необходимо обеспечить передачу привода с мотора на колеса. Для этого необходимо вырезать из фанеры круглую заготовку, причем круг должен быть максимально ровным, иначе будет неравномерная передача момента. Рекомендую вырезать такую деталь корончатым сверлом. От диаметра данной окружности зависит скорость и тяга модели, так как данная окружность является ведомым роликом. Чем она будет больше, тем ниже скорость, но больше тяга, и наоборот, чем она меньше, тем выше скорость, но меньше тяга.
Вырезав окружность её следует хоть немного зашлифовать дабы убрать появившиеся во время вырезания зазубрины. Чтобы обеспечить хорошее сцепление между ведомым и ведущим роликом на них необходимо наклеить резину таким образом получив резиновую поверхность. Подходящий по размеру отрезок резины можно вырезать из старой колесной камеры. Потом просто аккуратно приклеиваем при помощи суперклея резину так, чтобы она не стыковалась внахлёст и не было зазора между краями. Так как это тоже непосредственно повлияет на передачу крутящего момента.
Сразу после получившейся ведомый ролик надеваем на металлический колесный вал изготовленный в самом начале так как это изображено на фото ниже. В данном случае обязательно использование суперклея, так как данный ролик не должен прокручиваться на оси. Надеваем с обеих сторон колеса на вал и задняя ось у нас практически готова.
Переходим к изготовлению рамы автомобиля. Раму автор решил сделать из простого алюминиевого профиля, который используется при монтаже гипсокартона. Длина рамы подбирается вами индивидуально так как от это напрямую зависит размер готовой модели. Закрепляем нашу заднюю ось на раме при помощи пластиковых стяжек и суперклея (см. фото).
Далее на раму необходимо закрепить электродвигатель. Перед тем как его крепить на его валу необходимо закрепить ведущий ролик. Его также изготавливаем из фанеры и тоже обклеиваем резиной для сцепления. От размера ролика также зависит скорость и тяга модели, но только обратно пропорционально ведомому ролику. Закрепить двигатель необходимо так, чтобы ролики соприкасались между собой, для этого автор использовал специальную фанерную проставку.
Для того, чтобы обеспечить чуть большее сцепление, автор дополнительно прижал электродвигатель пластиковыми стяжками, с их помощью ролики будут меньше проскальзывать.
Изготовим рулевые кулаки. Просто из фанеры вырезаем две «Т» образные заготовки и проделываем в них все необходимые для их работы отверстия (см. фото). Эти кулаки естественно следует установить на два оставшихся колеса. Закреплять их следует на полуосях, которые представляет из себя болты с гайками, которые вращаются внутри колеса. Сами кулаки закрепляем на полуосях суперклеем.
Изготавливаем переднюю балку. Для неё понадобится листовой ПВХ пластик и небольшая дощечка или фанерка. На фанерный прямоугольник перпендикулярно нужно приклеить две пластиковые полосы с разных сторон (см. фото). Между этими пластиковыми элементами и будут крепиться рулевые кулаки. Кулаки к ним будем
крепить с помощью болтов и гаек, так вот как раз для них проделываем сквозные крепёжные отверстия.
Устанавливаем кулаки на свое место закрепив их болтами с гайками, но ещё стоит отметить то что между пластиковыми балками и кулаками желательно подложить по одной металлической шайбе. После чего для того чтобы колеса стали зависимыми друг от друга, то есть при повороте одного колеса поворачивало и другое. Изготавливаем и закрепляем распорку. Тут как раз-таки время выставить развал схождения, в радиоуправляемых моделях делают это не совсем так, как у настоящих. Передние колеса должны слегка смотреть в разные стороны «в наружу», так управляемость и удержание прямой будет более легкое чем если они стояли ровно.
После чего устанавливаем сервопривод на модель, соединяем качалку привода с хотя бы одним из рулевых кулаков и практически все готово! Остаётся лишь нацепить всю электронику, а именно приемник и регулятор оборотов, запитать все это при помощи аккумулятора и можно стартовать. Электронику следует подключать так как указывает в инструкции производитель именно ваших комплектующих. Доделываем внешний вид автомобиля и тестируем
Все готово! В итоге у нас получилась весьма интересная радиоуправляемая модель, которая может занять вас и вашего ребёнка на долгое время.
Вот видео автора самоделки:
Ну и всем спасибо за внимание и удачи в будущих проектах самодельщики!
Рцборда, или Как Сделать Управляемую через Интернет Машинку
За последние несколько лет мне довелось сделать немало дистанционно управляемых устройств. Некоторые управлялись локально, с обычного ПК или со смартфона. Некоторые — через Интернет. Все устройства объединяет общий принцип — управляет ими человек, ориентируясь по картинке с видеокамеры на борту устройства. А само управление, в итоге, сводится к выдаче управляющих сигналов на сервомоторы или регуляторы (драйверы) моторов.
Так что, набравшись опыта в данном деле, решил попробовать более-менее систематизировать различные типы управления устройствами, чтоб при создании нового девайса не приходилось кучу всего переписывать, а достаточно было лишь изменить некоторые параметры конфигурации. В результате родился программный комплекс RCboard, или РЦборда. Т.к. все управляемые штуки я делаю с контролером Virt2real (Виртурилка) в качестве главного бортового мозга, то и рцборда изначально писалась именно под неё. Так что всю связку можно пафосно называть «Программно-аппаратный комплекс РЦборда».
В общем, в продолжении топика попробую написать рецепт про то как с помощью Виртурилки и РЦборды из обычной радиоуправляемой машинки сделать машинку, управляемую через Интернет (ну и локально она тоже будет управляться). Каналом связи будет обычный Wi-Fi (выход в инет через домашний роутер) или 4G связь через свисток Yota.
Краулер BSD Racing 4WD RTR 2.4Ghz 1:10
Сразу уточню — под термином «радиоуправляемая машинка» я подразумеваю не дешёвые китайские машинки, в которых вся электроника реализована на одной плате, а более-менее приличные машинки, построенные по модульной схеме — которые имеют регулятор оборотов двигателя (коллекторного, бесколлекторного — неважно) и сервомашинку для управления поворотом передних колёс.
Такую машинку я приведу в качестве подопытного кролика лишь в этом рецепте, так как проще всего для повторения. С небольшими изменениями в настройках рцборды и добавлением платки-регулятора оборотов движка всё то же самое можно сделать и с любой машинкой, главное чтобы у машинки были колёса (да хоть гусеницы) и был моторчик.
Что понадобится для сборки
Но сначала, чтобы продемонстрировать некоторые варианты использования
Где это уже было использовано
Как я уже писал, рцборду мы уже много где использовали, но из задокументированных случаев нашёл только вот эти:
Испытания рцборды на багги в Шеньчжене, управление из Москвы
Испытания рцборды на краулере в Питере, управление из Москвы
habrahabr.ru/company/virt2real/blog/223145
Испытания рцборды на самолёте над Питером, управление из Москвы
habrahabr.ru/company/virt2real/blog/223183
Клёвый снегоуборщик под управлением рцборды
Кстати, сам снегоуборщик — разработка пермских ребят http://omiplow.ru
Самый тяжёлый девайс под управлением рцборды
Совместный проект с открытым научно-исследовательским центром перспективных технологий
Итак, подопытный кролик
Краулер для дистанционного управления хорош тем что он обладает очень высокой проходимостью.
У краулера полный привод, постоянная блокировка дифференциалов (все колёса крутятся одновременно) и постоянная «пониженная передача». Т.е. он ездит сравнительно медленно, но мощно и проходимо.
Настройка Виртурилки
Перед тем как собирать машинку, надо настроить Виртурилку. Сначала рассмотрим вариант с подключением по Wi-Fi.
Проверка подключения Виртурилки к сети
Общий принцип подключения моторов машинки
Обычно у RC машинки два мотора. Один обычный, коллекторный — крутит колёса. Второй — сервомотор, поворачивает передние колёса в нужную сторону. Т.е. получается что требуется всего два канала управления — газ и руль. Изначально (если машинка куплена в собранном виде) все каналы подключены к штатному радиоприёмнику трёхпиновыми разъёмами типа JR (стандартный серворазъём). Чёрный (или коричневый) провод — земля, красный — питание (5-6В), жёлтый (или белый, или оранжевый) — сигнальный провод.
Именно по сигнальному проводу мы и будем управлять моторами, но сначала надо подать питание на серву, которая рулит колёсами. Тут общий принцип такой — с бортового аккумулятора силовое питание с напряжением, равным напряжению аккумулятора, идёт по толстым проводам на мощный регулятор коллекторного (или бесколлекторного) мотора. Внутри этого регулятора есть так называемый BEC — преобразователь напряжения, делающий из различного аккумуляторного напряжения стабильные 5 Вольт (иногда 6В, можно выбирать перемычкой на регуляторе), требуемые для питания бортовых сервомашинок, приёмника и различной другой электроники. Это стабилизированное питание обычно рассчитано на нагрузку не более чем 2-3А, хотя это тоже зависит от модели регулятора.
Выходное напряжение BEC по чёрному и красному проводам тонкого трёхжильного шлейфа от регулятора подаётся на приёмник. Здесь таится главный нюанс, который не все сразу осмысливают. Повторюсь — от регулятора идёт кабель с тремя жилами. Из них две жилы это питание, которое выдаётся с регулятора, т.е. это выход. А третий провод (белый, жёлтый или оранжевый) — это провод управления, т.е. вход. Вроде мелочь, а почему-то многие путаются.
В приёмнике есть несколько групп трёхпиновых контактов. Их количество зависит от количества каналов, на которое приёмник рассчитан. У машинок обычно 2 или 3 канала, так что групп, соответственно, 3 или 4 (одна группа для установки перемычки Pair (сигнал на спаривание приёмника и передатчика). У этих групп контактов все пины питания замкнуты между собой, т.е. земля и питание приходят с регулятора и подаётся сразу на все группы контактов. А вот сигнальные пины все независимые, на них выдаётся сигнал, принятый приёмником с радиоаппаратуры управления.
Должно получиться примерно такое подключение
Если под рукой есть сервоудлинители — удобно сделать подключение с их помощью. У меня с ними вечный напряг, так что я просто обрезаю проводки и кручиваю-спаиваю.
И да, самое главное — питание на Виртурилку подаём прямо с контактов аккумулятора. Ей нестрашно напряжение вплоть до 20В, так что чем выше напряжение — тем лучше, ток меньший будет потреблять. КПД преобразователя питания (SEPIC, установлен на самой Виртурилке) падает только после 15В, так что идеальное питание — от 12 до 15 В, при этом в полной нагрузке (с вифи) Виртурилка будет потреблять около 150-300 мА. Хотя это тоже зависит от свистка (свисток Yota шибко прожорливый, с ним будет поболее).
Сборка машинки
Я попробовал заснять видео процесса сборки моего краулера. Не знаю, насколько там всё понятно, но лишним, думаю, не будет. Вот видеоролик про сборку:
Настройка сервера рцборды
Все настройки рцборды можно редактировать в специальной панели управления рцбордой (не путать с админкой Виртурилки). Вот так сейчас выглядит панель управления рцборды (первая версия)
Во вкладке «Общие настройки» можно задать имя устройства (отображается при обнаружении девайса в приложениях), указать надо ли запускать сервер рцборды автоматически при загрузке Виртурилки, задать тип конфигурации.
Конфигурация может быть локальная (т.е. файл конфигурации постоянно находится в каталоге рцборды и доступен для редактирования в панели управления), а может быть удалённая, когда файл конфигурации скачивается при каждом запуске рцборды с веб-сервера.
Сервер удалённых конфигов, по дефолту, http://rc.virt2real.ru/getconfig, создавать и редактировать конфигурации там разрешено только зарегистрированным пользователям форума forum.virt2real.ru
В топике я расскажу лишь про локальную конфигурацию, удалённую сами можете попробовать, если кому интересно. К слову, когда я катался на машинке по Шеньчженю (видео в конце топика), то как раз удалённый конфиг использовал, чтобы можно было менять настройки. Изменение настроек из приложения есть пока в виде набросков, толком ещё не работает, но даже когда и доделаю — удалённый конфиг всё равно пригодится.
Итак, больше всего нас сейчас интересует вкладка «Локальная конфигурация». Вообще, дефолтный конфиг уже настраивает рцборду в режим сервера, можно подключать машинку и управлять локально (в локальной сети, с виндового приложения, с андроидного или с айфонно-айпадного). Разве что может потребоваться каналы поменять местами. А вот для режима P2P (peer-to-peer), для управления через Интернет, настройки придётся менять.
По умолчанию за всё управление отвечает библиотека universal.so, параметры для которой находятся в конце конфига, в разделе «[universal]».
Соответствие каналов управления и каналов PWM/PPM задаётся параметром axis.
По дефолту настроено 4 канала PPM, которые находятся на пинах CON43, CON44, CON19, CON42. За это отвечают вот эти строчки конфига
ch0=43,ppm,500,1500,2500,127,0
ch1=44,ppm,500,1500,2500,127,0
ch2=19,ppm,500,1500,2500,127,1
ch3=42,ppm,500,1500,2500,127,1
Формат настройки канала такой:
chX=CON,TYPE,MIN,CENTER,MAX,NEUTRAL,NOAUTOCENTER
Где
X — номер канала PWM/PPM, от 0 до 3
CON — номер пина (не GPIO, а именно пина, см. схему)
TYPE — тип сигнала, ppm или pwm. Для машинки нужно ppm, для типа pwm другой формат строки конфига.
MIN — минимальное положение PPM сигнала, в миллисекундах.
MAX — максимальное положение PPM сигнала, в миллисекундах.
CENTER — центральное положение PPM сигнала, в миллисекундах.
NEUTRAL — относительное значение нейтрали, т.е. нейтральное значение команд управления. Обычно = 127
NOAUTOCENTER — если = 0 — автоматически возвращать сигнал в центральное положение, = 1 — не возвращать. Для каналов газа и руля машинки нужно указать 0, для каналов сервоприводов, которые используются для вращения камеры обзора — нужно указать 1 (если такие есть, конечно)
Если на машинке стоят фары, можно сделать их включение-выключение, потребуется собрать простейший усилитель транзисторный (один полевой транзистор, по сути). Для получения управляющего сигнала используется параметр «pins». Он задаёт пины, которые будут устанавливаться в 0 или 1 при нажатии кнопки в Virt2real Player (на экранных кнопках, на клавиатуре, мышкой или на геймпаде).
Формат такой:
pins=CHANNEL,CON,DEFVALUE,SAVESTATE|.
где
CHANNEL — канал кнопки (от 1 до 32)
CON — номер пина, который требуется установить в 0 или 1 по приходу команды управления с кнопок
DEFVALUE — значение, в которое данный пин будет установлен при запуске рцборды
SAVESTATE — если = 0 — при нажатии кнопки пин установить в 1, при отпускании — установить в 0. Если = 1 — при нажатии кнопки пин установить в 1, при отпускании кнопки ничего не делать. При следующем нажатии кнопки пин установить в 0, при отпускании — снова ничего не делать. И так в цикле.
Каналы кнопок можно указывать подряд, через разделитель «|».
Краткий вывод из этой смутной информации — если у вас перепутаны каналы газа и руля — можно их поменять местами, изменив параметр axis на axis=1,0,2,3 🙂
Если нужно ограничить крайнее положение сервы руля — меняем значения MIN и MAX для нужного канала. Если машинка при нейтральном положении едет вперёд или назад — изменить значение CENTER для нужного канала.
Дополнительные модули
Во вкладке «Дополнительные модули» находится список активных и неактивных модулей рцборды.
Модуль — это отдельное приложение (исполняемый бинарник), которое обычно выступает в качестве источника телеметрии. Активные модули — это те, которые запускаются автоматически при старте рцборды и завершаются при завершении её работы. В панели управления можно перемещать модули из одного столбца в другой, нажатием на оранжевую стрелочку. При перемещении в колонку активных — модуль сразу запускается, неважно, запущена рцборда или нет. При перемещении в неактивные — модуль автоматически прекращает работу.
Модули работают просто — читают требуемые параметры и по UDP отправляют на локальный порт (ext_telemetry), указанный в конфиге. А там уже рцборда принимает инфу и передаёт по каналу телеметрии в приложение Virt2real Player. Одновременно с этим та же информация передаётся в пользовательскую библиотеку девайса (в нашем случае это universal.so), чтоб приложение могло анализировать информацию и использовать по своему назначению. Например, у меня была библиотека девайса под названием autobot.so — управляемая тележка, которая помимо управления пользователем могла ещё и автономно ездить, ориентируясь по сигналу с ультразвукового дальномера.
Из основных модулей — statuswifi поставляет в рцборду информацию о статусе вайфай линка. Airosstatus.php (да, модуль можно и на похапе писать) — читает статус линка с оборудования Ubiquity, gps — читает GPS приёмник. Модуль imu обрабатывает инфу с инерциальных датчиков (углы Эйлера формирует, азимут и компас), правда он пока работает только с одним типом датчиков, так что для универсального использования ещё не годится. Nfc — читает NFC метки, но тоже работает только с одним типом ридеров. rc.in — читает PPM сигналы с RC приёмника, т.е. машинкой можно ещё и с обычной аппы управлять, у неё приоритет перед командами управления через вайфай. rfid — читает метки RFID. statusyota — читает статус линка 4G модема Yota. usrange — читает показания ультразвуковых дальномеров. voltage — определяет напряжение питания борта, требуется простенький делитель напряжения (2 резистора) подключить к ADC0. В общем, интересных модулей куча, по каждому предстоит подробное описание делать, так что пока считаем что я упомянул их для затравки 🙂
Для нашего рецепта управляемой машинки актуален модуль statuswifi — если настраиваем подключение через Wi-Fi или statusyota — если подключаем Виртурилку через свисток Yota.
Настройка приложений
В Андроидном и айпадно-айфонном приложениях настройки несложные, заключаются лишь в выборе каналов управления. В Андроидном есть ещё выбор канала кнопок (по умолчанию канал не задан, кнопки не отображаются). А вот в виндовом приложении я столько фич накрутил, что сам прихожу в состояние лёгкой паники при осознании того что всё это задокументировать надо. Пока могу только дать ссылочку на описание прошлой версии приложения
http://wiki.virt2real.ru/wiki/Как_сделать_управляемую_тележку_2
http://wiki.virt2real.ru/wiki/RCboard
Протокол управления с тех пор заметно видоизменился, но вот настройка виндового приложения поменялась несильно, так что может помочь при ковырянии. А подробное описание текущей версии постараюсь написать в следующем году 🙂
Кстати, в самой ранней версии для передачи телеметрии я использовал протокол MAVLINK, но по мере обрастания фичами его стало не хватать, так что перешёл на свой протокол. А MAVLINK подумываю добавить в качестве параллельного канала телеметрии, но это уже в следующей версии приложения.
Скажу лишь одно — лучше всего машинкой управлять с USB руля и педалей, подключённых к компу. Ну или хотя бы с RC аппы, подключённой тренерским разъёмом к компу. А пальцами по экрану смартфона может быть и круто, но нифига не удобно без тактильных ощущений.
А теперь самое главное — управление через Интернет
Вводная информация про P2P режим
Так как для канала управления и для канала видео используется UDP — так и хотелось сделать полноценный P2P (Peer-to-peer) линк, чтоб не гонять видео от борта до сервера и обратно до клиента. Ну, раз хотелось — взял и сделал 🙂 Фактически, получился простой и лёгкий аналог адобовского RTMFP (не путать с RTMP). Только вот передачу звука добавить никак руки не дойдут, так что рцборда пока немая и глухая.
С UDP какая основная проблема — преодоление NAT. Так как на одном из концов линка (на передающей стороне или на приёмной) обязательно есть NAT — просто указать адрес и порт сервера (или клиента) не получится — NAT помешает. В виндовом Virt2real Player есть возможность с помощью UPnP сделать проброс порта, но это не совсем то чего я хотел. А то что хотел — получилось только после вдумчивого курения технологии UDP Hole Punching. В итоге всё получилось как надо — неважно, какой роутер, неважно где клиент или сервер. Главное чтоб был выход в Интернет. Хотя вру, есть один единственный тип NAT, который пробить пока не удалось. Всё время забываю как он правильно называется, вроде бы симметричный NAT.
И да, обычные TURN и STUN серверы в рцборде не используются, только своя реализация. Как я обычно говорю: хочешь изучить технологию — сделай по своему, а потом сравни с общепринятыми решениями. Любители велосипедов меня поймут. Однако часто оказывается что велосипед не так уж плох и свои задачи выполняет лучше чем общепринятые решения.
Это так, лёгкий оффтоп был. Продолжаем про NAT. Поддержка P2P есть пока только в виндовом приложении Virt2real Player, в андроидное и айфонно-айпадное ещё не добавлял. Проверял работу с коннектом через свисток Yota, через свисток Beeline 4G, через точку доступа на смартфоне, который в инет выходил тоже через Beeline 4G. Во всех этих случаях всё работает, но заметил что идеально только через Yota. Через билайн (в любом из опробованных видах) тоже работает, но коннект дольше времени занимает. Почему так происходит — пока не разбирался. Из печального — пока не удалось заставить работать линк (и команд, и видео) когда и клиент и сервер подключены через 4G свистки. Возможно, тут как раз симметричный NAT и подкрался.
Настройка P2P режима, на борту стоит Wi-Fi
К Виртурилке на борту машинки подключён свисток Wi-Fi (т.е. как делали до сих пор по инструкции из этого топика). Только сначала мы управляли машинкой локально, а теперь сможем дать кому-нибудь порулить из Инета.
Для включения p2p режима идём веб-панель управления рцборды, раздел «Локальные настройки». Там устанавливаем параметр
Теперь необходимо задать параметры p2p_uid и p2p_hash. Это эдакий аналог логина-пароля, но полноценной авторизации пока нет (но будет обязательно), так что используем именно такую связку. p2p_uid лучше брать из своей учётки на rc.virt2real.ru/remoteconfig там он называется «ID пользователя», тогда будет механизм инвайтов работать (об этом чуть ниже). А p2p_hash надо придумать самостоятельно. Любой набор символов, максимальная длина 40 символов.
Всё, на этом настройка p2p режима рцборды закончена. Необходимо убедиться что Виртурилка имеет выход в инет и можно запускать Virt2real Player виндовый. Если его запустить в локальной сети, там же где и рцборда — плеер обнаружит локальную рцборду (неважно что она в p2p режиме) и можно будет подключиться напрямую. А вот если плеер запускается в другой сети, надо настроить его на p2p режим.
Иногда бывает что сообщения не появляются, тогда лучше просто перезапустить плеер (мой косяк, не отловил его ещё), при запуске он сам сразу начнём коннектиться с теми параметрами, которые мы ему задали, т.е. в режиме P2P.
Из замеченных нюансов — если плеер запускаем на компе, который выходит в инет через Yota — коннект быстро устанавливается. Само собой, если у Йоты сигнал нормальный. А вот если через роутер Yota или 4G свисток от Билайна — первое подключение может длиться до минуты. Но зато все последующие почти мгновенно будут. Я примерно знаю, где я накосячил, но исправить пока руки не дошли.
Настройка P2P режима, на борту стоит Yota
К micro-USB порту Виртурилки на борту машинки подключаем свисток Yota (через переходник USB-OTG, само собой). Те свистки, которые сейчас в продаже у Yota
В остальном всё аналогично предыдущему пункту. Разве что в настройках рцборды в разделе «Дополнительные модули» хорошо бы убрать из активных скриптов модуль statuswifi и наоборот, поместить в активные скрипты модуль statusyota, для того чтоб в плеере видеть параметры сигнала Yota.
Иллюстрации различных типов коннекта
К сожалению, дома у меня Yota еле-еле фурычит, так что полноценно не покатаешься. А вот Билайновский 4G отлично работает, поток 3 мегабита (и входящий, и исходящий) пролазит без проблем.
Во всех нижеприведённых экспериментах все настройки одинаковые, меняется лишь вид связи.