Съдържание:
- Стъпка 1: Необходим хардуер
- Стъпка 2: Сглобяване на шасито
- Стъпка 3: Монтиране на електрониката
- Стъпка 4: Добавяне на уеб камера
- Стъпка 5: Окабеляване на всичко
- Стъпка 6: Настройване на RPI
- Стъпка 7: Конфигуриране на серийния порт RPI
- Стъпка 8: Инсталиране на Python модули
- Стъпка 9: Настройка на RoboClaw
- Стъпка 10: Инсталиране на програмата/файловете на Rover
- Стъпка 11: Стартиране на Bot Up
- Стъпка 12: Достъп до страницата за управление на ботове
- Стъпка 13: Кодът на Python/Flask
- Стъпка 14: Използване на друг хардуер
Видео: Уеб контролиран ровър: 14 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Изграждането и играта с роботи е моето основно виновно удоволствие в живота. Други играят голф или ски, но аз изграждам роботи (тъй като не мога да играя голф или ски:-). Намирам го за релаксиращо и забавно! За да направя повечето си ботове, използвам комплекти шаси. Използването на комплекти ми помага да правя това, което обичам да правя повече, софтуера и електрониката, а също така прави по-доброто шаси за моето „всичко с палци“.
В тази инструкция ще разгледаме какво е необходимо, за да направим прост, но здрав 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
Предполагам, че потребителят тук знае нещо за 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, направете:
- sudo apt-get install python-setuptools
- sudo easy_install pip
Тогава:
- sudo pip колба за инсталиране
- sudo pip инсталирайте pyserial
- sudo pip инсталирайте RPIO
Това ще бъдат всички модули, необходими за изпълнението на кода.
Стъпка 9: Настройка на RoboClaw
Имам код на робота, който говори с RoboClaw в стандартен сериен режим на 19200 бода.
За да настроите RoboClaw за това, направете следното:
- Натиснете бутона „MODE“на RoboClaw
- Натиснете бутона за настройка, докато светодиодът започне да мига 5 (пет) пъти между закъсненията
- Натиснете бутона "LIPO" за съхранение
- След това натиснете бутона "SET", докато светодиодът започне да мига 3 (три) пъти между закъсненията
- Натиснете бутона 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
Свържете 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, за да направите каквото и да е необходимо на заменящия драйвер на двигателя, за да накара двигателя да изпълнява тази конкретна функция.
Препоръчано:
Интернет контролиран светодиод, използващ уеб сървър, базиран на ESP32: 10 стъпки
Интернет контролиран светодиод, използващ уеб сървър, базиран на ESP32: Преглед на проекта В този пример ще разберем как да направим базиран на ESP32 уеб сървър за управление на състоянието на светодиодите, което е достъпно от всяка точка на света. За този проект ще ви е необходим компютър с Mac, но можете да стартирате този софтуер дори на i
Използвайте повторно модул за уеб камера HP WebCam 101 Aka 679257-330 като обща USB уеб камера: 5 стъпки
Използвайте повторно модул на уеб камера HP WebCam 101 Aka 679257-330 като обща USB уеб камера: Искам да подправя 14-годишния си Panasonic CF-18 с чисто нова уеб камера, но Panasonic вече не поддържа тази прекрасна машина, затова трябва да използвайте сивото вещество за нещо по -лесно от b & b (бири и бургери). Това е първата част
Урок за IO на уеб драйвер Използване на уеб сайт на живо и примери за работа: 8 стъпки
Урок за IO на уеб драйвер Използване на уеб сайт на живо и примери за работа: Урок за IO на уеб драйвер Използване на уеб сайт на живо и работещи примери Последна актуализация: 26.07.2015 г. (Проверявайте често, докато актуализирам тези инструкции с повече подробности и примери) Предистория интересно предизвикателство ми беше представено. Трябваше да
Уеб контролиран Валентин: 8 стъпки (със снимки)
Уеб контролиран Валентин: С тази комбинация от софтуер и хардуер можете да запалите украсена със сърце нощна лампа отвсякъде с достъп до интернет. Така че независимо дали си спомняте по време на работа, в кафене, у дома или на мобилния си телефон (поддържащ мрежата), можете да кажете на Валентин, че вие
Уеб контролиран Arduino LED: 5 стъпки (със снимки)
Уеб контролиран светодиод Arduino: Тази инструкция ви показва как да изградите трицветен светодиод с активирана мрежа, базиран на Arduino и WIZnet Ethernet щит, контролируем от всеки уеб браузър. Тъй като светодиодът е изложен чрез проста уеб услуга RESTful, работеща на цвета Arduino