Оглавление:

Автомобиль RasbperryPi с камерой FPV. Управление через веб-браузер: 31 шаг (с изображениями)
Автомобиль RasbperryPi с камерой FPV. Управление через веб-браузер: 31 шаг (с изображениями)

Видео: Автомобиль RasbperryPi с камерой FPV. Управление через веб-браузер: 31 шаг (с изображениями)

Видео: Автомобиль RasbperryPi с камерой FPV. Управление через веб-браузер: 31 шаг (с изображениями)
Видео: МК Игоря Смирнова- Апгрейд квадрокоптера 2024, Ноябрь
Anonim
Image
Image

Мы построим полноприводную машину - рулевое управление будет как в танке - при повороте одна сторона колеса будет вращаться с другой скоростью, чем другая. В машине будет размещена камера на специальном держателе, где мы сможем изменить положение камеры. Роботом будет управлять веб-браузер (Chrome или firefox на рабочем столе или firefox на мобильном телефоне), в браузере мы будем получать видео с камеры (с задержкой всего 200 мс), а из браузера мы можем контролировать движения автомобиля и положение камеры. Чтобы упростить общение, я использовал систему app.remoteme.org, также существует возможность управления этим типом автомобилей из коробки, поэтому вам не нужно писать собственный код, но, конечно, вы можете изменять скрипты, добавляя новые возможности и т. д.

Перед подключением питания к печатной плате дважды проверьте все соединения

Шаг 1. Некоторая информация о App.remoteme.org

Система состоит из трех частей

  • веб-приложение - когда вы размещаете свои управляющие веб-страницы и связывает все коммуникации
  • rasbperryPi program - программа, которая отправляет видео, управляет вашими скриптами на Python
  • библиотеки, в которых вы найдете определения классов, функций

Remoteme.org является системным. Вы связываете все свои устройства вместе, вы можете размещать там свои веб-страницы, просматривать ваши подключенные устройства. Система Remoteme.org была создана, чтобы помочь вам начать создавать свои проекты, не беспокоясь о связи по протоколу. Основная идея состоит в том, чтобы отправлять двоичные сообщения между различными устройствами, такими как веб-страницы, RasbeprryPI, arduino и скрипты.

С другой стороны, Remoteme.org дает вам полный контроль над вашими файлами, вы можете легко изменить его, написав свои собственные функции.

В этом уроке я покажу Вам, как создать отличный проект почти без написания кода.

В конце этого руководства я поместил полезные ссылки, которые помогут вам разобраться в системе remoteme.org.

Шаг 2: Что необходимо:

Что нужно
Что нужно
Что нужно
Что нужно
  • Малина PI Zero W
  • Выделенная камера
  • 16-канальный 12-битный ШИМ / сервопривод Adafruit - интерфейс I2C - PCA9685 или его клон
  • Два сервомеханизма, совместимые с держателем камеры
  • Держатель камеры
  • Батареи - в учебнике две возможности подключения
  • Н-мост TB6612FNG, для контроля скорости вращения колес
  • Файлы PCB Eagle Легко сделать метод термопереноса DC-DC
  • Модуль понижающего преобразователя постоянного тока
  • Чехол для робота

Шаг 3: Подключения

Подключения
Подключения

Сервомеханизм управления Raspberry Pi через модуль PWM и скорость двигателя с помощью моста H, который подключен к контактам RasbperryPi, вход PWM на мост H генерируется тем же модулем, который я использовал для сервоприводов (какие части я упоминал выше, логические преобразователи не нужны)

Шаг 4: печатная плата

Печатная плата
Печатная плата
Печатная плата
Печатная плата

Вы можете скачать файлы PCB eagle отсюда. Пути толстые, поэтому их легко сделать методом термопереноса.

Шаг 5: Выходы печатной платы

Выходы на печатную плату
Выходы на печатную плату
Выходы на печатную плату
Выходы на печатную плату
  1. Вход ШИМ для приводных двигателей должен быть подключен к 15 и 16 контактам модуля ШИМ (проверьте зеленый прямоугольник на изображении модуля ШИМ)
  2. Потребляемая мощность для приводных двигателей (проверьте, с каким максимальным напряжением могут работать ваши двигатели)
  3. Питание для модуля RasbperryPi и PWM - должно быть ровно
  4. Выходы приводных двигателей (есть два выхода, потому что мы будем объединять приводные двигатели)
  5. Питание сервомеханизмов - также вы должны проверить, какое напряжение для них подходит
  6. Установите перемычкой его нынешнюю мощность с 5-го входа, чтобы запитать также двигатели, поэтому нет необходимости подключать что-либо ко входу 2.
  7. Перемычка, если присутствует RasbperryPi будет питанием от 3-го входа - перед тем, как поставить перемычку, проверьте, в порядке ли соединения - вы не хотите сжигать свой RPi
  8. Паяем сюда кабели, ведь нам не нужны логические преобразователи.

Шаг 6. Как это будет работать

В RasbperryPi есть скрипт python, который использует две библиотеки

  • импортировать RPi. GPIO как GPIO - для контактов 25-AIN1, 8-AIN2, 24-BIN1, 23-BIN2 (обозначение BCM), которые подключены к мосту H
  • импортировать Adafruit_PCA9685 для модуля PWM

Контакты Rpi подключаются следующим образом: 25-AIN1, 8-AIN2, 24-BIN1, 23-BIN2 (BCM) и режим управления H-мостом (вперед, назад, остановка, короткий перерыв). Мост H также нуждается в двух сигналах PWM, чтобы мы могли контролировать скорость или вращение двигателя. Поскольку в проекте у нас уже есть ШИМ-контроллер (используемый для сервопривода), мы будем использовать его также для генерации ШИМ для H-моста.

Модуль PWM использует протокол связи I2C. Я использовал разработку из коробки Adafruit_PCA9685. библиотека

Шаг 7: Сборка автомобиля - колеса

Сборка автомобилей - Колеса
Сборка автомобилей - Колеса
Сборка автомобилей - Колеса
Сборка автомобилей - Колеса

Начнем с подключения приводных двигателей к корпусу автомобиля. Двигатели с левой / боковой стороны подключаются друг к другу, и обе пары подключаются к некоторому силовому кабелю, который позже будет подключен к печатной плате. Важное примечание: при подключении двигателей колеса с каждой стороны должны вращаться в одном направлении.

Шаг 8: Питание (аккумуляторы AA) Вариант 1/2

Питание (аккумуляторы AA) Вариант 1/2
Питание (аккумуляторы AA) Вариант 1/2
Питание (аккумуляторы AA) Вариант 1/2
Питание (аккумуляторы AA) Вариант 1/2
Питание (аккумуляторы AA) Вариант 1/2
Питание (аккумуляторы AA) Вариант 1/2
Питание (аккумуляторы AA) Вариант 1/2
Питание (аккумуляторы AA) Вариант 1/2

Я напишу две возможности питания. Автомобиль. Первый - от аккумуляторов 10xAA. На последнем изображении я нарисовал красные перемычки, которые нужно поставить.

Шаг 9: Питание (Li-Po батареи 7,2 В), вариант 2/2

Питание (Li-Po батареи 7,2 В) Вариант 2/2
Питание (Li-Po батареи 7,2 В) Вариант 2/2
Питание (Li-Po батареи 7,2 В) Вариант 2/2
Питание (Li-Po батареи 7,2 В) Вариант 2/2

И второй вариант - аккумулятор 7.2 LI-PO. В данном случае мы получили 3 напряжения - 5 В для Rpi и модуля, 6 В для сервоприводов и непосредственно от аккумуляторов 7,2 В для приводных двигателей. Пришлось использовать два понижающих модуля

Вариант 2 с LI-PO лучше:

  • Аккумуляторы больше ёмкости - машина дольше будет ездить
  • Большее напряжение на приводные двигатели - машина будет ехать быстрее
  • Меньшая вероятность того, что после того, как приводные двигатели начнут обнаруживать, у нас может быть огромное падение напряжения и перезапуск RPI.

Шаг 10: пайка

Пайка
Пайка
Пайка
Пайка
Пайка
Пайка
Пайка
Пайка

Я поставил на печатную плату несколько проставок для модуля ШИМ. Нечего писать, просто посмотрите изображения, как все спаять вместе

Шаг 11: Камера

Камера
Камера

подключаем камеру, здесь написано, как центрировать сервомеханизмы перед установкой в держатель камеры, но самый короткий способ - аккуратно вручную проверить максимальное положение поворота и установить сервоприводы в центральное положение. Этот центрированный сервомеханизм мы помещаем в держатель камеры в центральном положении (камера направлена прямо, как на фото).

Шаг 12: Собираем детали автомобилей вместе

Собираем детали автомобилей вместе
Собираем детали автомобилей вместе
Собираем детали автомобилей вместе
Собираем детали автомобилей вместе
Собираем детали автомобилей вместе
Собираем детали автомобилей вместе

Для печатной платы сделал небольшой стол из оргстекла.

Шаг 13: настройка App.remoteme.org

Конфигурация App.remoteme.org
Конфигурация App.remoteme.org

Я использовал бесплатную систему app.remoteme.org, она помогает вам устанавливать связи, и в ней уже есть скрипты, которые нам нужны

В этом руководстве я просто шаг за шагом покажу, что нужно сделать, чтобы автомобиль водил (здесь вы найдете более подробную информацию).

  • Зарегистрируйтесь на https://app.remoteme.org после регистрации Вы будете автоматически авторизованы
  • откройте вкладку «Токен» слева, затем нажмите «новый токен», введите имя и нажмите «ОК». Мы только что создали новый токен (изображение на экране)
  • в этом примере значение токена: ~ 1_ & p @ + BNnZ @ A + x8 (ваше будет другим;))

Шаг 14: Настройка RasbperryPi

Конфигурация RasbperryPi
Конфигурация RasbperryPi

на консоли шпатлевки (здесь, как настроить наш RPi, включить связь камеры I2c)

git clone git: //github.com/remoteme/remoteme.git

cd remoteme

python3.5 install.py

  • Установщик задаст нам несколько вопросов на все ответы, которые мы ответим [Да], и подтвердит, нажав [ввод]
  • при установке запросит токен вставляем (shift + insert) токен, скопированный из приложения и Enter
  • имя например Rpi
  • deviceId 1 Введите
  • после установки - запустить программу

./runme.sh

Шаг 15: Проверка подключений

Проверка подключений
Проверка подключений

Вернемся на

На вкладке устройств мы увидим наш подключенный RPi (зеленый значок ссылки означает, что RPi подключен прямо сейчас)

Шаг 16: Добавление скрипта Python

Добавление скрипта Python
Добавление скрипта Python
Добавление скрипта Python
Добавление скрипта Python

Теперь мы добавим скрипт python, он уже находится в шаблонах, поэтому нам не нужно ничего программировать.

На вкладке устройств откройте меню RasbperryPi и выберите «Добавить внешний скрипт».

Когда появится новое окно, предоставьте информацию, как на изображении выше.

Не забудьте выбрать шаблон car4wd. После этих шагов remoteme.org добавит скрипт python в наш RasbperryPi и перезапустит его.

Шаг 17: Проверка успешности добавления скрипта Python

Проверка успешности добавления скрипта Python
Проверка успешности добавления скрипта Python

На вкладке устройств должно быть добавлено новое устройство сценария Python, и его deviceId равняется 2. Веб-страница с идентификатором устройства будет отправлять сообщения для управления автомобилем.

Шаг 18: добавление веб-страницы для управления автомобилем

Добавление веб-страницы в систему управления автомобилем
Добавление веб-страницы в систему управления автомобилем

на вкладке устройств нажмите «Создать», затем «Веб-страница». Мы просто добавляем еще одно устройство - webPage, которое мы будем использовать для управления нашей машиной. И поскольку мы использовали шаблон car4wdDesktop на веб-странице, файлы уже почти готовы к использованию.

Шаг 19: Настройте устройство веб-страницы для управления автомобилем 1/2

Настройте устройство веб-страницы для управления автомобилем 1/2
Настройте устройство веб-страницы для управления автомобилем 1/2

Разверните веб-страницу на вкладке устройства и щелкните index.html, затем откройте

Шаг 20. Настройте устройство веб-страницы для управления автомобилем 2/2

Настройте устройство веб-страницы для управления автомобилем 2/2
Настройте устройство веб-страницы для управления автомобилем 2/2

Появится окно, и нам нужно предоставить deviceId нашего скрипта python в нашем случае deviceId - 2. Давайте изменим место, показанное на изображении.

Шаг 21: Откройте Центр управления автомобилем

Центр управления открытым автомобилем
Центр управления открытым автомобилем
Центр управления открытым автомобилем
Центр управления открытым автомобилем

Теперь пора открыть нашу страницу и посмотреть, как она работает. На вкладке устройства нажмите index.html, а затем «Открыть в новой вкладке». Чтобы получить предварительный просмотр видео, вы должны использовать браузер Chrome или Firefox, другие браузеры не поддерживают webRTC полностью.

Шаг 22: Конфигурация камеры 1/2

Конфигурация камеры 1/2
Конфигурация камеры 1/2

Когда мы перемещаем мышь в области видео, камера должна менять положение, и это должно работать точно так же, как в играх FPS. Вероятно, он не будет двигаться правильно

Шаг 23: Конфигурация камеры 2/2

Конфигурация камеры 2/2
Конфигурация камеры 2/2

Откройте script.js (вкладка устройств разверните веб-страницу, затем щелкните script.js, затем откройте) и найдите место, которое я показал на экране.

в моем случае центральное положение 560 и 430, а диапазон перемещений для обеих осей 200

Вы должны поэкспериментировать с этими числами, чтобы получить центр положения камеры и плавные движения. Если вы использовали этот учебник, просто скопируйте вставленные заданные значения.

Шаг 24: Вождение 1/2

За рулем 1/2
За рулем 1/2

Если u нажмет стрелку вверх на клавиатуре, датчики должны изменить положение и автомобиль должен ехать. Если Вы нажмете стрелку «вверх» и машина поворачивает, то Вам нужно добавить / убрать минус в местах на экране.

После этой операции после нажатия стрелки «вверх» автомобиль должен двигаться вперед, а автомобиль со стрелкой вниз - назад.

Шаг 25: Вождение 2/2

Вождение 2/2
Вождение 2/2

Теперь поворачиваем - нажмите стрелку влево, если машина поворачивает направо. Вам нужно перевернуть кабели (проверьте изображение выше)

Если вы припаяете эти кабели, вы можете изменить его в script.js, просто измените порядок отправки скорости двигателей, до:

pos = putByte (ret, pos, carController.getMotorMode (carController.getRightSideSpeed ())); pos = putByte (ret, pos, Math.abs (carController.getRightSideSpeed () * 255));

pos = putByte (ret, pos, carController.getMotorMode (-carController.getLeftSideSpeed ()));

pos = putByte (ret, pos, Math.abs (carController.getLeftSideSpeed () * 255));

после:

pos = putByte (ret, pos, carController.getMotorMode (-carController.getLeftSideSpeed ()));

pos = putByte (ret, pos, Math.abs (carController.getLeftSideSpeed () * 255));

pos = putByte (ret, pos, carController.getMotorMode (carController.getRightSideSpeed ()));

pos = putByte (ret, pos, Math.abs (carController.getRightSideSpeed () * 255));

и теперь вам нужно поиграть с минусами, например, за один шаг до того, чтобы он работал правильно;). Как вы, вероятно, заметили после нажатия стрелки вверх, автомобиль не едет на полной скорости, чтобы заставить машину двигаться быстрее, просто быстро отпустите стрелку вверх, когда она находится в максимальном положении и снова нажмите и удерживайте

Шаг 26: как это работает

Веб-страница отправляет 9-байтовые сообщения в скрипт Python в формате:

  • 1 байт однобайтное целочисленное значение 1
  • 2 байта целое число X положение камеры
  • 2 байта целое число Y положение камеры
  • 1-байтовый целочисленный режим левого двигателя (3 = назад, 1 = вперед, 2 = останов)
  • 1 байт целое число скорость левого двигателя
  • 1-байтовый целочисленный режим правого двигателя (3 = назад, 1 = вперед, 2 = останов)
  • 1 байт целое число скорость правого двигателя

отправка сообщения производится в файле script.js в функции "sendNow ()"

в RasbperryPi python.py получает это сообщение в функции «onUserMessage»

Вы можете проверить это и немного поиграть, чтобы знать, что происходит.

описание функций класса здесь

Шаг 27: планшет, мобильное рулевое управление

Планшет, мобильное рулевое управление
Планшет, мобильное рулевое управление

Мы добавляем новую веб-страницу точно так же, как и в прошлый раз, но теперь выбираем шаблон "car4wdMobile"

Затем мы настраиваем все в script.js, как мы это делали для веб-страницы управления рабочим столом. Формат сообщения точно такой же, поэтому нам не нужно изменять скрипт python.py.

Шаг 28: Откройте страницу на мобильном телефоне

Открыть страницу на мобильном телефоне
Открыть страницу на мобильном телефоне
Открыть страницу на мобильном телефоне
Открыть страницу на мобильном телефоне

Вместо того, чтобы входить в свою учетную запись с мобильного телефона, просто отсканируйте любой URL-адрес QR.

детали QR здесь

Если ваше мобильное управление работает, когда RPi и мобильный телефон подключены к одному и тому же Wi-Fi, но не работает, если вы используете мобильный Интернет, тогда вам нужно добавить сервер поворота, как это сделать, я написал здесь

Шаг 29: добавление Turn Server

Добавление Turn Server
Добавление Turn Server
Добавление Turn Server
Добавление Turn Server
Добавление Turn Server
Добавление Turn Server

Иногда (когда вы находитесь за NAT или некоторыми настройками брандмауэра) вы не можете подключить своего робота из другой сети, тогда ваш робот подключен. Это не большая проблема, и тогда вам нужно добавить сервер поворота.

Я протестировал сервер от компании XIRSYS (бесплатный для разработчиков) и покажу, как настроить сервер поворота с помощью системы XIRSYS.

регистр:

global.xirsys.net/dashboard/signup

затем нажмите «плюс», чтобы добавить приложение

справа под «статическими кредитными данными» у вас есть все необходимые данные. Скопируйте его в файл webrtc_streamer.conf, чтобы сделать это, перейдите на

развернуть устройства RaspberryPi

щелкните файл webrtc_streamer.conf

нажмите открыть

и добавить информацию

turn_server = turn_username =

turn_credential =

после того, как вы закончите редактирование, у вас должно появиться что-то подобное на экране.

затем нажмите Сохранить и перезапустите You Rpi, щелкнув меню на устройстве RasbperryPi и выберите перезапуск

После перезапуска программы RPi Вы можете просматривать видео на своем мобильном телефоне, даже если Вы пользуетесь мобильным интернетом.

Шаг 30: мобильное рулевое управление

Мобильное рулевое управление
Мобильное рулевое управление

в круг 1 мы помещаем большой палец левой руки, в 2 справа - не обязательно точно в этих точках - веб-страница установит нулевое положение сразу после того, как вы прикоснетесь к экрану, и перемещая большие пальцы (левое движение, правое положение камеры), вы можете управлять Ваш автомобиль

Шаг 31: Резюме

Надеюсь, вам понравился этот урок, поскольку я уже писал ранее, что в этом уроке есть более подробная информация о том, как он работает под капотом.

некоторые ссылки:

remoteme.org - домашняя страница remoteme.org там вы найдете документацию и руководства.

FB fanpage - фан-страница Facebook самая свежая информация о remoteme.org

Youtube - некоторые видео проекта, уроки

Ваше здоровье, Maciek

Рекомендуемые: