Оглавление:
- Шаг 1. Требуется оборудование
- Шаг 2: Сборка шасси
- Шаг 3: Установка электроники
- Шаг 4: Добавление веб-камеры
- Шаг 5: Подключите все
- Шаг 6. Настройка RPI
- Шаг 7: Настройка последовательного порта RPI
- Шаг 8: Установка модулей Python
- Шаг 9: Настройка RoboClaw
- Шаг 10: Установка программы / файлов Rover
- Шаг 11: запуск бота
- Шаг 12: доступ к странице управления ботами
- Шаг 13: Код Python / Flask
- Шаг 14: Использование другого оборудования
Видео: Ровер, управляемый через Интернет: 14 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Строить роботов и играть с ними - мое главное виноватое удовольствие в жизни. Другие играют в гольф или на лыжах, но я создаю роботов (так как я не могу играть в гольф или кататься на лыжах:-). Я нахожу это расслабляющим и веселым! Чтобы сделать большинство своих ботов, я использую комплекты шасси. Использование комплектов помогает мне делать то, что мне нравится больше, - программное обеспечение и электронику, а также помогает улучшить шасси для моей полной самооценки.
В этом руководстве мы рассмотрим, что нужно для создания простого, но надежного ровера с Wi-Fi / веб-управлением. Используемое шасси - Actobotics Gooseneck. Я выбрал его из-за его размера, возможностей расширения и стоимости, но вы можете использовать любое другое шасси по своему усмотрению.
Для такого проекта нам понадобится хороший надежный одноплатный компьютер, и для этого бота я решил использовать Raspberry Pi (RPI) на базе Linux. RPI (и Linux) дает нам множество вариантов кодирования, а для кодирования будет использоваться Python. В качестве веб-интерфейса я использую Flask, легкий веб-фреймворк для Python.
Для привода двигателей я выбрал RoboClaw 2x5a. Он обеспечивает простую последовательную связь для управления им и хорошо работает с RPI и двигателями на Gooseneck.
Наконец, у него есть веб-камера для видео обратной связи типа POV для удаленного управления. Позже я расскажу о каждой теме более подробно.
Шаг 1. Требуется оборудование
- Шасси Actobotics Gooesneck или подходящая замена по вашему выбору
- Raspberry Pi по вашему выбору (или клон) - на этом боте используется модель B RPI, но подойдет любой, имеющий как минимум два USB-порта.
- Стандартная сервопластина B x1
- Одноугловой кронштейн канала 90 ° x1
- Драйвер двигателя RoboClaw 2x5a
- S3003 или аналогичный сервопривод стандартного размера
- Малый макет или мини-макет
- Перемычки между женщиной и женщиной
- Перемычки между мужчинами и женщинами
- Веб-камера (необязательно) - я использую Logitech C110, и вот список поддерживаемых камер для RPI.
- Источник питания 5v-6v для сервопривода
- Аккумулятор 7,2–11,1 В для питания приводного двигателя
- Внешний аккумулятор USB 5 в, 2600 мАч (или выше) для RPI
- USB-адаптер Wi-Fi
На моем боте я использую 4-дюймовые колеса, чтобы сделать его немного более вездеходным и закрытым. Для этого варианта вам понадобятся:
- 4-дюймовые колеса для тяжелых условий эксплуатации x2
- Ступица с установочным винтом диаметром 4 мм (0,770 дюйма) x2
Шаг 2: Сборка шасси
Сначала соберите шасси, следуя инструкциям, прилагаемым к шасси или видео. После завершения у вас должно получиться что-то вроде изображения. ПРИМЕЧАНИЕ. При сборке шейной части просто отключите монтажный кронштейн.
В моем боте я решил заменить колеса, которые поставлялись с шасси, на 4-дюймовые сверхмощные колеса. Это необязательно и не нужно, если вы не хотите делать то же самое.
Шаг 3: Установка электроники
Gooseneck имеет много места и вариантов для установки вашей электроники. Я даю вам эти изображения в качестве ориентира, но вы можете выбрать, как вы хотите все это выложить. Вы можете использовать стойки, двусторонний скотч, липучку или серво-ленту для крепления платы и батарей.
Шаг 4: Добавление веб-камеры
Для этого шага возьмите 90-градусный кронштейн, легкую ступицу сервопривода и четыре (4) винта 0,3125 дюйма:
- Возьмите сервоцентр, поместите ее на одну сторону кронштейна и закрепите их вместе винтами 0,2125 дюйма, как показано на рисунке.
- Затем установите сервопривод в кронштейн сервопривода.
- Прикрепите 90-градусный кронштейн с рогом сервопривода к стержню сервопривода и используйте винт рог, поставляемый с сервоприводом, чтобы соединить их вместе.
- Теперь закрепите сервопривод в кронштейне на вершине гусиной шеи с помощью оставшихся винтов.
- Закрепите камеру с помощью стяжки или двустороннего скотча на 90-градусном кронштейне.
При необходимости используйте изображения в качестве руководства.
Шаг 5: Подключите все
Электропроводка для этого робота довольно прямолинейна.
Моторы:
Припаяйте выводы к обоим двигателям, если вы еще этого не сделали
Поверните переднюю часть робота (конец с гусиной шеей) от вас:
- Подключите провода двигателя на левом двигателе к каналам M1A и M1B.
- Подключите провода двигателя на правом двигателе к каналам M2A и M2B.
Соединения с землей (GND):
- Подключите один контакт заземления RoboClaw к плате перемычки заземления. Линия заземления на RoboClaw находится ближе всего к центру (см. Рис.)
- Подключите PIN 6 на RPI к плате перемычек. См. Рисунок заголовка RPI для получения информации о назначении контактов.
- Подключите GND от серво аккумуляторной батареи к одному из контактов на плате перемычки.
- Подключите перемычку от платы перемычек к проводу GND сервоприводов.
RPI для RoboClaw:
Подключите вывод RPI GPIO14 TXD к выводу RoboClaw S1
Власть:
- Подключите провод POS от сервоаккумулятора к выводу POS сервопривода.
- Подключите провод POS от аккумуляторной батареи двигателя к POS (+) входной клеммы питания двигателя RoboClaw. Мы пока оставим клемму GND отключенной.
Шаг 6. Настройка RPI
Я предполагаю, что пользователь здесь кое-что знает о Linux и RPI. Я не рассказываю, как настроить или подключиться к одному из них. Если вам нужна помощь, воспользуйтесь приведенными ниже страницами.
Чтобы настроить RPI, взгляните на следующие страницы:
- Базовая настройка RPI
- RPI Краткое руководство
- Гильда установки NOOBS
Для общих переходных страниц отличным местом для начала являются главная страница RPI и страницы eLinux.
См. Эту ссылку для общей настройки Wi-Fi RPI.
Если вы планируете использовать какую-то камеру или веб-камеру на боте, загляните на эти страницы, чтобы получить основные необходимые файлы.
- Настройка камеры RPI
- Настройка камеры eLinix RPI
Потоковое видео:
Есть несколько способов заставить потоковое видео работать с RPI, но я предпочитаю использовать движение.
Чтобы установить его на свой RPI, выполните следующее: sudo apt-get install motion
В этом руководстве также рассматривается настройка его для потоковой передачи.
Шаг 7: Настройка последовательного порта RPI
Нам нужно будет отключить режим консоли Linux для использования RX и TX, поскольку мы хотим разговаривать с контроллером мотора RoboClaw через этот порт. Для этого вы можете использовать этот метод или этот инструмент. Выбор метода остается за вами, поскольку в конечном итоге они оба делают одно и то же.
Шаг 8: Установка модулей Python
Вам понадобится python, установленный на RPI, а также пакет установщика пакетов python.
Чтобы установить pip, выполните:
- sudo apt-get install python-setuptools
- sudo easy_install pip
Потом:
- sudo pip установить колбу
- sudo pip установить pyserial
- sudo pip установить RPIO
Это будут все модули, необходимые для запуска кода.
Шаг 9: Настройка RoboClaw
У меня есть код робота, который разговаривает с RoboClaw в стандартном последовательном режиме на скорости 19200 бод.
Чтобы настроить RoboClaw для этого, выполните:
- Нажмите кнопку "РЕЖИМ" на RoboClaw.
- Нажимайте кнопку настройки, пока светодиодный индикатор не мигнет 5 (пять) раз между задержками.
- Нажмите кнопку «LIPO», чтобы сохранить
- Затем нажимайте кнопку «SET», пока светодиод не мигнет 3 (три) раза между задержками.
- Нажмите кнопку LIPO, чтобы сохранить
Вот и все, что нужно для настройки контроллера мотора. При необходимости см. Ссылку в формате pdf, указанную выше.
Шаг 10: Установка программы / файлов Rover
Загрузите и скопируйте файл rover.zip в свой RPI в каталоге пользователя pi.
Если вы используете Linux или Mac, вы можете использовать scp для этого:
scp ~ / расположение / из / файла / rover.zip pi @ your_rpi_ip: / ~
Для Windows вы можете загрузить и использовать pscp, а затем выполнить:
pscp /location/of/the/file/rover.zip pi @ your_rpi_ip: / ~
Как только zip-файл будет скопирован в RPI, войдите в него как пользователь pi.
Теперь запустите:
разархивировать rover.zip
Это распакует файлы в папку с именем 'rover', в которой будут находиться следующие файлы:
- restrover.py (код на Python для робота)
- статический (содержит файлы изображений для кнопок на странице управления)
- шаблоны (содержит файл index.htlm, веб-страницу управления)
Если вы используете веб-камеру, измените строку в нижней части файла index.html в папке шаблона. Измените URL-адрес в строке IFRAME, чтобы он соответствовал URL-адресу src для вашего видеопотока.
Шаг 11: запуск бота
Подключите питание USB к RPI.
Чтобы запустить код бота, войдите в систему как пользователь pi и запустите:
- cd rover
- sudo python restrover.py
Если все в порядке, вы должны увидеть экран, похожий на изображение на этом шаге.
Если вы обнаружите какие-либо ошибки или проблемы, вам нужно будет исправить их, прежде чем двигаться дальше.
Теперь подключите провод GND (-) к клемме NEG (-) на входе питания двигателя RoboClaw.
Шаг 12: доступ к странице управления ботами
После того, как скрипт python робота будет запущен, включите RoboClaw, а затем перейдите к IP-адресу вашего RPI, например:
ваш_rpi_ip
Вы должны увидеть всплывающую страницу веб-управления, как на изображениях. Если нет, проверьте выходной терминал RPI, найдите ошибки и исправьте их.
Оказавшись на странице, вы готовы управлять ботом.
Робот запустится в режиме «Средний бег» и на средней скорости.
Ботом можно управлять с помощью кнопок на странице или клавиш на клавиатуре.
Ключи:
- w - вперед
- z - назад / назад
- а - длинный левый поворот
- s - длинный правый поворот
- q - короткий левый поворот
- е - короткий правый поворот
- 1 - панорамирование камеры влево
- 2 - панорамирование камеры вправо
- 3 - панорамирование полностью влево
- 4 - панорама полная правая
- / - главная / центральная камера
- h - остановка / остановка робота
Между отправленными командами есть буфер задержки в полсекунды. Я сделал это, чтобы исключить нежелательные повторяющиеся команды. Вы, конечно, можете удалить это из кода, если хотите (в index.html)
Остальные элементы управления и управление им не требуют пояснений.
Шаг 13: Код Python / Flask
Этот бот использует Python и веб-фреймворк Flask. Вы можете узнать больше о Flask здесь, если вам интересно.
Большое отличие от приложения Flask и обычного скрипта Python - это класс / метод @ app.route, используемый для обработки URI. В остальном это по большей части обычный Python.
#! / usr / bin / env python
# # Ровер, управляемый Wi-Fi / Интернетом # # Написано Скоттом Бизли, 2015 г.) # Подключитесь к коммуникационному порту, чтобы поговорить с контроллером мотора Roboclaw. Попробуйте: found ") sys.exit (0) # Переменные управления скоростью и приводом last_direction = -1 speed_offset = 84 turn_tm_offset = 0,166 run_time = 0,750 # Нейтральное положение сервопривода (исходное) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18, servo_pos) # Небольшая задержка для установления времени time.sleep (3) # # Обработчики URI - все действия страницы бота выполняются здесь # # Отправка страницы управления ботами (домашняя страница) @ app.route ("/") def index (): return render_template ('index.html', name = None) @ app.route ("/ forward") def forward (): global last_direction, run_ti me print "Forward" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Если не непрерывно, то останавливаться после задержки, если run_time> 0: last_direction = -1 halt () return "ok" @ app.route ("/ backward") def backward (): global last_direction, run_time print "Backward" go_backward () last_direction = 1 # sleep 100 мс + run_time time.sleep (0.100 + run_time) # Если не непрерывно, то остановится после задержки если run_time> 0: last_direction = -1 halt () return "ok" @ app.route ("/ left") def left (): global last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @ 1 / 2 секунды time.sleep (0.500 - turn_tm_offset) # stop halt () time.sleep (0.100) return "ok" @ app.route ("/ right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # сон @ 1/2 секунды time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @ app.route ("/ ltforward") def ltforward (): global last_direction, turn_t m_offset print "Левый поворот вперед" go_left () # сон @ 1/8 секунды time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/ rtforward") def rtforward (): global last_direction, turn_tm_offset print "Правый поворот вперед" go_right () # sleep @ 1/8 секунды time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @ app.route ("/ stop") def stop (): global last_direction print "Stop" halt () last_direction = -1 # сон 100 мс time.sleep (0.100) return "ok" @ app.route ("/ panlt") def panlf (): global servo_pos print "Panlt" servo_pos - = 100, если servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # время сна 150 мс. sleep (0.150) return "ok" @ app.route ("/ home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @ app.route ("/ panfull_lt") def panfull_lt (): global servo_pos print "Pan full l eft "servo_pos = 500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return" ok "@ app.route (" / panfull_rt ") def panfull_rt (): global servo_pos print" Pan full right "servo_pos = 2500 servo.set_servo (18, servo_pos) # sleep 150ms time.sleep (0.150) return "ok" @ app.route ("/ speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # Обновить текущее направление, чтобы получить новую скорость, если last_direction == 0: go_forward () if last_direction == 1: go_backward () # сон 150 мс time.sleep (0.150) return "ok" @ app.route ("/ speed_mid") def speed_mid (): global speed_offset, last_direction, turn_tm_offset speed_offset = 84 turn_tm_offset = 0.166 # Обновить текущее направление, чтобы получить новую скорость if last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @ app.route ("/ speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 тур. n_tm_offset = 0.332 # Обновить текущее направление, чтобы получить новую скорость, если last_direction == 0: go_forward () if last_direction == 1: go_backward () # сон 150 мс time.sleep (0.150) return "ok" @ app.route ("/ continuous ") def continuous (): global run_time print" Continuous run "run_time = 0 # sleep 100ms time.sleep (0.100) return" ok "@ app.route (" / mid_run ") def mid_run (): global run_time print" Mid run "run_time = 0.750 halt () # sleep 100ms time.sleep (0.100) return" ok "@ app.route (" / short_time ") def short_time (): global run_time print" Short run "run_time = 0.300 halt () # sleep 100 мс time.sleep (0.100) return "ok" # # Функции привода двигателя # def go_forward (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): global speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) else: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_right (): global speed_offset, если speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (255 - speed_offset)) else: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) def halt (): roboclaw.write (chr (0)) if _name_ == "_main_": app.run (host = '0.0.0.0', port = 80, debug = True)
Если вы не хотите или не нуждаетесь в отладочной информации из Flask, установите для параметра debug значение false в строке app.run.
если _name_ == "_main_":
app.run (хост = '0.0.0.0', порт = 80, отладка = False)
Вы также можете изменить порт, который прослушивает http-сервер Flask, здесь.
Шаг 14: Использование другого оборудования
Если вы хотите использовать другое оборудование, например, другой тип SBC (одноплатный компьютер), у вас должны возникнуть небольшие проблемы с запуском Python и Flask на других платах, таких как Beagle Bone, PCDuino и т. Д. Вам придется изменить код, чтобы он соответствовал GPIO макет и использовать возможности сервопривода новой платы.
Чтобы использовать драйвер двигателя другого типа, вам просто нужно изменить функции go_forward, go_backward, go_left, go_right и halt, чтобы они делали то, что требуется сменному драйверу двигателя, чтобы заставить двигатель выполнять эту конкретную функцию.
Рекомендуемые:
Управление Led через приложение Blynk с помощью Nodemcu через Интернет: 5 шагов
Управление светодиодом через приложение Blynk с помощью Nodemcu через Интернет: Привет всем, сегодня мы покажем вам, как вы можете управлять светодиодом с помощью смартфона через Интернет
Светодиод, управляемый через Интернет, с использованием веб-сервера на базе ESP32: 10 шагов
Светодиод, управляемый через Интернет с использованием веб-сервера на основе ESP32: обзор проекта В этом примере мы выясним, как настроить веб-сервер на основе ESP32 для управления состоянием светодиода, доступного из любой точки мира. Для этого проекта вам понадобится компьютер Mac, но вы можете запустить это программное обеспечение даже на i
Плотти Ботти: робот для рисования, управляемый через Интернет!: 10 шагов
Plotti Botti: робот для рисования, управляемый через Интернет !: Plotti Botti - это XY-плоттер, прикрепленный к доске, которым может управлять кто угодно через LetsRobot.tv
Светодиод, управляемый через Интернет с использованием NodeMCU: 6 шагов
Светодиодный индикатор, управляемый через Интернет с использованием NodeMCU: Интернет вещей (IoT) - это система взаимосвязанных вычислительных устройств, механических и цифровых машин, объектов, животных или людей, которым предоставлены уникальные идентификаторы и возможность передавать данные по сети без участия человека
Светодиодный индикатор Arduino, управляемый через Интернет: 5 шагов (с изображениями)
Светодиодный индикатор Arduino, управляемый через Интернет: в этом руководстве показано, как создать трехцветный светодиод с подключением к Интернету на основе Arduino и экрана WIZnet Ethernet, которым можно управлять из любого веб-браузера. Поскольку светодиод отображается через простой веб-сервис RESTful, работающий на цвете Arduino