Съдържание:

Уеб контролиран ровър: 14 стъпки (със снимки)
Уеб контролиран ровър: 14 стъпки (със снимки)

Видео: Уеб контролиран ровър: 14 стъпки (със снимки)

Видео: Уеб контролиран ровър: 14 стъпки (със снимки)
Видео: 5 Яки Трика за iPhone, които НЕ ЗНАЕТЕ! 2024, Ноември
Anonim
Уеб контролиран роувър
Уеб контролиран роувър
Уеб контролиран роувър
Уеб контролиран роувър

Изграждането и играта с роботи е моето основно виновно удоволствие в живота. Други играят голф или ски, но аз изграждам роботи (тъй като не мога да играя голф или ски:-). Намирам го за релаксиращо и забавно! За да направя повечето си ботове, използвам комплекти шаси. Използването на комплекти ми помага да правя това, което обичам да правя повече, софтуера и електрониката, а също така прави по-доброто шаси за моето „всичко с палци“.

В тази инструкция ще разгледаме какво е необходимо, за да направим прост, но здрав Wifi/уеб роувър. Използваното шаси е Actobotics Gooseneck. Избрах го заради неговия размер, възможност за разширяване и цена, но можете да използвате всяко друго шаси по ваш избор.

За такъв проект ще ни трябва добър солиден едноплатен компютър и за този бот избрах да използвам Raspberry Pi (RPI) компютър, базиран на Linux. RPI (и Linux) ни дава много възможности за кодиране, а Python ще се използва за кодиране. За уеб интерфейса използвам Flask, лека уеб рамка за Python.

За да управлявам моторите, избрах RoboClaw 2x5a. Той позволява лесна серийна комуникация за управление и работи добре с RPI и двигателите на Gooseneck.

И накрая, той има уеб камера за видео обратна връзка тип POV за дистанционно управление. Ще разгледам всяка тема по -подробно по -късно.

Стъпка 1: Необходим хардуер

Необходим хардуер
Необходим хардуер
Необходим хардуер
Необходим хардуер
Необходим хардуер
Необходим хардуер
Необходим хардуер
Необходим хардуер
  • Actobotics Gooesneck шаси или подходящ заместител по ваш избор
  • Raspberry Pi по ваш избор (или клониране) - RPI модел B се използва на този бот, но всеки с поне два USB порта ще работи
  • Стандартна серво пластина B x1
  • 90 ° Едноъгълна канална скоба x1
  • RoboClaw 2x5a двигател
  • S3003 или подобен серво със стандартен размер
  • Малка дъска или мини дъска
  • Женски към женски джъмперни проводници
  • Мъжки към женски джъмперни проводници
  • Уеб камера (по избор) - Използвам Logitech C110 и ето списък на поддържаните камери за RPI
  • Източник на захранване 5v-6v за захранване на серво
  • 7.2v-11.1v батерия за захранване на задвижващ двигател
  • 5v 2600mah (или по -висока) USB захранваща банка за RPI
  • USB Wi -Fi адаптер

На моя бот използвам 4-инчови джанти, за да го направя малко повече All-Terrain-Indoor. За тази опция ще ви трябва:

  • 4 "тежкотоварно колело x2
  • Винтова главина с диаметър 4 мм (0,770 инча) x2

Стъпка 2: Сглобяване на шасито

Сглобяване на шасито
Сглобяване на шасито
Сглобяване на шасито
Сглобяване на шасито
Сглобяване на шасито
Сглобяване на шасито

Първо сглобете шасито, като следвате инструкциите, приложени към шасито или видеото. След като приключите, трябва да имате нещо като изображението. ЗАБЕЛЕЖКА: Когато сглобявате част за врата, просто оставете монтажната скоба изключена.

На моя бот избрах да заменя колелата, с които е доставено шасито, за 4 -инчови джанти за тежкотоварни условия. Това е по избор и не е необходимо, освен ако не искате да направите същото.

Стъпка 3: Монтиране на електрониката

Монтаж на електроника
Монтаж на електроника
Монтаж на електроника
Монтаж на електроника
Монтаж на електроника
Монтаж на електроника

Gooseneck има много място и възможности за монтиране на вашата електроника. Давам ви тези снимки като ориентир, но вие можете да изберете как искате да изложите всичко. Можете да използвате стойки, двустранна лента, велкро или серво лента за монтиране на платката и батериите.

Стъпка 4: Добавяне на уеб камера

Добавяне на уеб камера
Добавяне на уеб камера
Добавяне на уеб камера
Добавяне на уеб камера
Добавяне на уеб камера
Добавяне на уеб камера

Вземете 90 -градусовата скоба, леката серво концентратор и четири (4) от.3125 винта за тази стъпка:

  • Вземете серво концентратора и го поставете от едната страна на скобата и ги закрепете заедно с винтовете.2125 "като на снимката
  • След това монтирайте серво в серво скобата
  • Прикрепете 90 -градусовата скоба със серво клаксона към гръбнака на сервомотора и използвайте винта на клаксона, доставен със серво, за да ги свържете заедно
  • Сега монтирайте Servo в скоба върху горната част на гърдите с останалите винтове
  • Монтирайте камерата с ципове или двустранна лента върху скобата от 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

Настройване на RPI
Настройване на RPI

Предполагам, че потребителят тук знае нещо за Linux и RPI. Не обхващам как да настроя или да се свържа с такъв. Ако имате нужда от помощ, използвайте страниците по -долу.

За да получите настройката на RPI, разгледайте следните страници:

  • Основна настройка на RPI
  • RPI Ръководство за бързо стартиране
  • Настройка на NOOBS

За общи страници за прескачане, главната страница на RPI и страниците на eLinux са чудесни места за започване.

Вижте тази връзка за обща настройка на Wi -Fi за RPI.

Ако планирате да използвате някаква камера или уеб камера на бота, разгледайте тези страници, за да получите основните необходими файлове.

  • Настройка на RPI камера
  • eLinix RPI настройка на камерата

Поточно видео:

Има няколко начина да накарате поточното видео да работи на RPI, но методът, който предпочитам, е да използвам Motion.

За да го инсталирате на вашия RPI, изпълнете следното: sudo apt-get install motion

Този инструктаж преминава и през настройването му за стрийминг.

Стъпка 7: Конфигуриране на серийния порт RPI

Ще трябва да деактивираме конзолния режим на Linux за използване на RX и TX, тъй като искаме да говорим с контролера на двигателя RoboClaw от този порт. За да направите това, можете да използвате този метод или този инструмент. Изборът е на вашия метод, тъй като и двамата правят едно и също нещо в крайна сметка.

Стъпка 8: Инсталиране на Python модули

Ще ви е необходим python, инсталиран на RPI, както и инсталационният пип на пакета python.

За да инсталирате pip, направете:

  1. sudo apt-get install python-setuptools
  2. sudo easy_install pip

Тогава:

  1. sudo pip колба за инсталиране
  2. sudo pip инсталирайте pyserial
  3. sudo pip инсталирайте RPIO

Това ще бъдат всички модули, необходими за изпълнението на кода.

Стъпка 9: Настройка на RoboClaw

Имам код на робота, който говори с RoboClaw в стандартен сериен режим на 19200 бода.

За да настроите RoboClaw за това, направете следното:

  1. Натиснете бутона „MODE“на RoboClaw
  2. Натиснете бутона за настройка, докато светодиодът започне да мига 5 (пет) пъти между закъсненията
  3. Натиснете бутона "LIPO" за съхранение
  4. След това натиснете бутона "SET", докато светодиодът започне да мига 3 (три) пъти между закъсненията
  5. Натиснете бутона LIPO за съхранение

Това е всичко за настройка на контролера на двигателя. Вижте PDF файла, свързан по -горе за повече информация, ако е необходимо.

Стъпка 10: Инсталиране на програмата/файловете на Rover

Изтеглете и копирайте файла rover.zip във вашия RPI във вашата потребителска директория pi.

Ако използвате Linux или Mac, можете да използвате „scp“, за да го направите:

scp ~/location/of/the/file/rover.zip pi@your_rpi_ip:/~

За Windows можете да изтеглите и използвате pscp и след това да направите:

pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~

След като zip файлът бъде копиран в RPI, влезте в него като потребител на pi.

Сега стартирайте:

разархивирайте ровера.zip

Това ще разархивира файловете в папка с име „rover“и ще има следното в тази папка:

  • restrover.py (Python кодът за робота)
  • статичен (съдържа файловете с изображения за бутоните на контролната страница)
  • шаблони (съдържа файла index.htlm, контролната уеб страница)

Ако използвате уеб камера, променете реда в долната част на файла index.html в папката с шаблони. Променете URL адреса в реда IFRAME, така че да съответства на URL адреса src за вашия видео поток.

Стъпка 11: Стартиране на Bot Up

Стартиране на Bot Up
Стартиране на Bot Up

Свържете USB захранването към RPI.

За да стартирате кода на бота, влезте като потребител на pi и стартирайте:

  • cd ровър
  • sudo python restrover.py

Ако всичко беше наред, трябва да видите екран, подобен на изображението в тази стъпка

Ако видите някакви грешки или проблеми, ще трябва да ги поправите, преди да продължите напред.

Сега свържете кабела GND (-) към терминала NEG (-) на входа за захранване на двигателя на RoboClaw.

Стъпка 12: Достъп до страницата за управление на ботове

Достъп до страницата за управление на ботове
Достъп до страницата за управление на ботове
Достъп до страницата за управление на ботове
Достъп до страницата за управление на ботове

След като скриптът на робота на python се стартира, включете RoboClaw и след това отидете до ip на вашия RPI като:

your_rpi_ip

Трябва да видите изскачащата уеб страница за управление, както на изображенията. Ако не, проверете изходния терминал на RPI и потърсете грешки и ги поправете.

Веднъж на страницата, вие сте готови да контролирате бота.

Роботът ще стартира в настройката "Med run" и със средна скорост.

Ботът може да се управлява чрез бутоните на страницата или чрез клавишите на клавиатурата.

Ключовете са:

  • 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

# # Wifi/уеб управляван Rover # # Написано от Scott Beasley - 2015 # # Използва RPIO, pyserial и Flask # време за импортиране импортира серийно от RPIO импортира PWM от колба за импортиране на колба, render_template, заявка за приложение = колба (_name_, static_url_path = ") # Свържете се към комуникационния порт, за да говорите с контролера на двигателя на Roboclaw, опитайте: # Променете скоростта на предаване тук, ако е различна от 19200 roboclaw = serial. Serial ('/dev/ttyAMA0', 19200) с изключение на IOError: print ("Comm port не намерено ") 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)) def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): глобална last_direction, run_ti аз отпечатвам "Напред" go_forward () last_direction = 0 # sleep 100ms + run_time time.sleep (0.100 + run_time) # Ако не е непрекъснато, тогава спира след закъснение, ако run_time> 0: last_direction = -1 halt () връщане "ok" @ app.route ("/backward") def backward (): глобална last_direction, run_time print "Backward" go_backward () last_direction = 1 # спящ 100ms + run_time time.sleep (0.100 + run_time) # Ако не е непрекъснат, тогава се спира след закъснение ако run_time> 0: last_direction = -1 halt () връща "ok" @app.route ("/left") def left (): глобална last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 second 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 () # sleep @1/2 секунди time.sleep (0.500 - turn_tm_offset) last_direction = -1 # stop halt () time.sleep (0.100) връщане "ok" @app.route ("/ltforward") def ltforward (): глобална last_direction, turn_t m_offset print "Наляво напред завой" go_left () # sleep @1 /8 second time.sleep (0.250 - (turn_tm_offset / 2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/rtforward") def rtforward (): глобална last_direction, turn_tm_offset печат "right right turn" go_right () # sleep @1/8 second time.sleep (0.250 - (turn_tm_offset/2)) last_direction = -1 # stop halt () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): глобална last_direction печат "Stop" halt () last_direction = -1 # спящ 100ms time.sleep (0.100) връщане "ok" @app.route ("/panlt") def panlf (): глобален servo_pos печат "Panlt" servo_pos -= 100 ако servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # спящ 150ms време. 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) # сън 150ms time.sleep (0.150) връщане" ok " @app.route ("/panfull_rt ") def panfull_rt (): global servo_pos печат" Pan full right "servo_pos = 2500 servo.set_servo (18, servo_pos) # спящ 150ms time.sleep (0.150) връщане "ok" @app.route ("/speed_low") def speed_low (): глобална скорост_изместване, последна_посока, turn_tm_offset скорост_изместване = 42 turn_tm_offset = 0.001 # Актуализирайте текущата посока, за да получите нова скорост, ако last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms 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 # Актуализирайте текущата посока, за да получите нова скорост, ако last_direction == 0: go_forward () if last_direction == 1: go_backward () # спящ 150ms time.sleep (0.150) връщане "ok" @app.route ("/speed_hi") def speed_hi (): global speed_offset, last_direction, turn_tm_offset speed_offset = 126 tur n_tm_offset = 0.332 # Актуализирайте текущата посока, за да получите нова скорост, ако last_direction == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/непрекъснато ") def continual (): 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 100ms 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 if 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, отстраняване на грешки = невярно)

Можете също да промените порта, който Flask http сървърът слуша и тук.

Стъпка 14: Използване на друг хардуер

Ако искате да използвате друг хардуер, като друг тип SBC (Single Board Computer), трябва да имате малки проблеми при стартирането на Python и Flask на други платки като Beagle Bone, PCDuino и т.н. … Ще трябва да промените кода, за да съответства на GPIO оформление и използвайте възможностите за серво задвижване на новата платка.

За да използвате друг тип драйвер на мотор, просто трябва да промените функциите go_forward, go_backward, go_left, go_right и halt, за да направите каквото и да е необходимо на заменящия драйвер на двигателя, за да накара двигателя да изпълнява тази конкретна функция.

Препоръчано: