
Мазмуну:
- 1 -кадам: Аппараттык камсыздоо керек
- 2 -кадам: Шассиди чогултуу
- 3 -кадам: Электрониканы орнотуу
- 4 -кадам: Веб -камераны кошуу
- 5 -кадам: Баарын зымга өткөрүү
- 6 -кадам: RPI орнотуу
- 7 -кадам: RPI сериялык портун конфигурациялоо
- 8 -кадам: Python модулдарын орнотуу
- 9 -кадам: RoboClaw орнотуу
- 10 -кадам: Rover программасын/файлдарын орнотуу
- 11 -кадам: Ботту баштоо
- 12 -кадам: Bot Control Pageге кирүү
- 13 -кадам: Python/Flask Code
- 14 -кадам: Башка жабдыктарды колдонуу
2025 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2025-01-23 14:51


Роботторду куруу жана ойноо - менин жашоомдогу эң башкы күнөөлүү ырахатым. Башкалар гольф же лыжа ойношот, бирок мен роботторду курайм (анткени мен гольф же лыжа ойной албайм:-). Мен аны эс алдыруучу жана кызыктуу деп эсептейм! Ботторумдун көбүн жасаш үчүн, мен шасси комплекттерин колдоном. Топтомдорду колдонуу мага жаккан нерсени, программалык камсыздоону жана электрониканы жасоого жардам берет, ошондой эле өзүмдүн бармагым үчүн жакшыраак шасси түзөт.
Бул Нускамада биз жөнөкөй, бирок күчтүү 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 порту барлар иштейт
- Стандарттык Servo Plate B x1
- 90 ° Бир бурчтуу канал кронштейн x1
- RoboClaw 2x5a мотор айдоочусу
- S3003 же ушуга окшош стандарттык көлөмдөгү servo
- Чакан нан же Мини нан
- Аялдан Аялга секирүүчү зымдар
- Эркектен Аялга секирүүчү зымдар
- Веб камера (милдеттүү эмес) - Мен Logitech C110 колдоном жана бул жерде RPI үчүн колдоого алынган камералардын тизмеси
- Серво күчү үчүн 5v-6v энергия булагы
- 7.2v-11.1v батареясы моторду иштетүү үчүн
- RPI үчүн 5v 2600mah (же андан жогору) USB кубат банкы
- USB Wifi адаптери
Менин ботумда, мен 4 дюймду колдонуп, аны бир аз көбүрөөк Террен-Жабык кылып алам. Бул параметр үчүн сизге керек болот:
- 4 "Оор жүк ташуучу дөңгөлөк x2
- 4мм Bore Set Screw Hub (0.770 дюйм) x2
2 -кадам: Шассиди чогултуу



Адегенде шассиге же видеого киргизилген көрсөтмөлөрдү аткарып, шассини чогултуп алыңыз. Бүтүргөндөн кийин сүрөттө окшош нерсе болушу керек. ЭСКЕРТҮҮ: Моюн бөлүгүн курап жатканда, жөн эле монтаж кронштейнин өчүрүп коюңуз.
Менин ботумда, мен шасси 4 оор дөңгөлөктөр үчүн келген дөңгөлөктөрдү алмаштырууну чечтим. Бул милдеттүү эмес, эгер сиз ошондой кылгыңыз келбесе.
3 -кадам: Электрониканы орнотуу



Gooseneck сиздин электроникаңызды орнотуу үчүн көптөгөн бөлмөлөргө жана мүмкүнчүлүктөргө ээ. Мен бул сүрөттөрдү сизге жол көрсөтүүчү катары берем, бирок сиз муну кантип коюуну өзүңүз тандай аласыз. Тактайга жана батареяларга монтаждоо үчүн эки тараптуу скотч, Velcro же servo-tape колдоно аласыз.
4 -кадам: Веб -камераны кошуу



Бул этап үчүн 90 градус кронштейнди, жеңил сервво хабын жана.3125 дюймунун төрт (4) бурамасын алыңыз:
- Серво түйүнүн алып, кронштейндин бир жагына коюп, сүрөттөгүдөй.2125 "бурамалар менен бекемдеңиз.
- Андан кийин сервону клапанга орнотуңуз
- Серво мүйүзү менен 90 градус кронштейнди servo омурткасына бекиңиз жана аларды бириктирүү үчүн servo менен келген мүйүз бурамасын колдонуңуз
- Эми калган бурамалар менен Сервону каздын моюнунун үстүнө кронштейнге орнотуңуз
- Камераны сыдырма же эки тараптуу скотч менен 90 градус кронштейнге орнотуңуз
Керек болсо, сүрөттөрдү гиддер үчүн колдонуңуз.
5 -кадам: Баарын зымга өткөрүү




Бул роботтун өткөргүчтөрү алдыга жылат.
Моторлор:
Эгерде сиз буга чейин андай кыла элек болсоңуз, анда эки моторду тең ээрчиңиз
Роботтор алдыңкы жагында (аягы каз моюну менен) сенден караган:
- Сол мотордогу мотор зымдарын M1A жана M1B каналына туташтырыңыз
- Оң мотордогу мотор зымдарын M2A жана M2B каналына туташтырыңыз
Жер (GND) байланыштары:
- RoboClawдагы бир жерге туташтыргычты жерге секирүү тактасына туташтырыңыз. RoboClawдагы жерге бекитилген линия борборго эң жакын (Сүрөттү караңыз)
- RPIдеги PIN 6ны секирүү тактасына туташтырыңыз. Тапшырмаларды алуу үчүн RPI башкы сүрөтүн караңыз.
- GVOну серво батареясынан секирүү тактасындагы казыктардын бирине туташтырыңыз.
- Өткөргүч тактан GND зымына секирүүчү зымды иштетиңиз.
RoboClawдан RPI:
RPI GPIO14 TXD пинин RoboClaw S1 пинине туташтырыңыз
Кубат:
- POS зымын servo батареядан servos POS коргошунуна туташтырыңыз
- POS зымын мотор батареясынан RoboClaw моторунун кирүү терминалынын POS (+) туташуусу. GND терминалын азырынча ажыратылган бойдон калтырабыз.
6 -кадам: RPI орнотуу

Мен бул жердеги колдонуучу Linux жана RPI жөнүндө кээ бир нерселерди билет деп ойлойм. Мен кантип орнотууну же ага туташууну камтыбайм. Эгер сизге жардам керек болсо, анда төмөнкү барактарды колдонуңуз.
Сиздин RPI орнотууңузду алуу үчүн, төмөнкү барактарды караңыз:
- RPI Негизги Орнотуу
- RPI Тез баштоо көрсөтмөсү
- NOOBS орнотуу гилдеи
Жалпы секирүү баракчалары үчүн, RPI башкы бети жана eLinux барактары баштоо үчүн эң сонун жерлер.
RPI жалпы Wifi орнотуусу үчүн бул шилтемени караңыз.
Эгерде сиз ботто кандайдыр бир камера же веб камера колдонууну пландап жатсаңыз, негизги керектүү файлдарды алуу үчүн бул барактарды карап чыгыңыз.
- RPI камерасын орнотуу
- eLinix RPI камерасын орнотуу
Видео агылтуу:
Видео агымын RPIде иштөөнүн бир нече жолу бар, бирок мен жактырган ыкма - Motion.
Аны RPIге орнотуу үчүн муну иштетиңиз: sudo apt-get install motion
Бул үйрөтүлө турган нерсе, аны агымга орнотуу үчүн дагы кетет.
7 -кадам: RPI сериялык портун конфигурациялоо
Бул порттон RoboClaw мотор контролери менен сүйлөшкүбүз келгендиктен, RX жана TX колдонуу үчүн Linux консолу режимин өчүрүшүбүз керек. Бул үчүн сиз бул ыкманы же бул куралды колдоно аласыз. Тандоо методу боюнча сиздики, анткени экөө тең аягында бир нерсени жасашат.
8 -кадам: Python модулдарын орнотуу
Сизге RPIде python орнотулган, ошондой эле python пакетин орнотуучу пип керек болот.
Пипти орнотуу үчүн:
- sudo apt-get python-setuptools орнотуу
- sudo easy_install pip
Андан кийин:
- sudo pip колбаны орнотуу
- sudo pip pyserial орнотуу
- sudo pip RPIO орнотуу
Бул коддун иштеши үчүн керектүү бардык модулдар болот.
9 -кадам: RoboClaw орнотуу
Менде роботтун коду бар, RoboClaw менен стандарттык сериялык режимде 19200 bod.
Бул үчүн RoboClaw орнотуу үчүн:
- RoboClawдагы "MODE" баскычын басыңыз
- Кечигүүлөрдүн ортосунда LED 5 (беш) жолу жаркыраганга чейин коюлган баскычты басыңыз
- Сактоо үчүн "LIPO" баскычын басыңыз
- Кийинкиде "SET" баскычын басып, LED кечигүүлөрдүн ортосунда 3 (үч) жолу жарк эткенге чейин
- Сактоо үчүн LIPO баскычын басыңыз
Бул мотор контроллерин орнотуу үчүн. Керек болсо, көбүрөөк маалымат алуу үчүн жогорудагы pdf файлын караңыз.
10 -кадам: Rover программасын/файлдарын орнотуу
Download жана rover.zip файлын pi колдонуучу каталогуна RPIге көчүрүү.
Эгерде сиз Linux же Mac менен иштеп жатсаңыз, анда муну аткаруу үчүн 'scp' колдоно аласыз:
scp ~/жайгашкан////файл/rover.zip pi@your_rpi_ip:/~
Windows үчүн, pscpди жүктөп алып, колдонсоңуз болот:
pscp /location/of/the/file/rover.zip pi@your_rpi_ip:/~
Zipfile RPIге көчүрүлгөндөн кийин, ага pi колдонуучусу катары кириңиз.
Азыр иштетүү:
ачуу rover.zip
Бул файлдарды 'rover' аттуу папкага чыгарат жана ал папканын астында төмөнкүлөр болот:
- restrover.py (роботтун питон коду)
- статикалык (башкаруу баракчасындагы баскычтар үчүн сүрөт файлдарын кармайт)
- шаблондор (index.htlm файлын, көзөмөлдөө веб баракчасын кармайт)
Эгерде сиз веб -камераны колдонуп жатсаңыз, шаблон папкасындагы index.html файлынын ылдый жагындагы линияны өзгөртүңүз. IFRAME сабындагы URL дарегин видео агымыңыздын src URLсине дал келтирүү үчүн өзгөртүңүз.
11 -кадам: Ботту баштоо

USB кубатын RPIге туташтырыңыз.
Бот кодун баштоо үчүн, pi колдонуучусу катары кирип, иштетиңиз:
- cd rover
- sudo python restrover.py
Эгерде баары ойдогудай болсо, бул кадамда сүрөттө окшош экранды көрүшүңүз керек
Эгерде сиз кандайдыр бир каталарды же көйгөйлөрдү көрсөңүз, анда алдыга кетүүдөн мурун аларды оңдоого туура келет.
Эми GND (-) зымын RoboClaw моторунун киришиндеги NEG (-) терминалына туташтырыңыз.
12 -кадам: Bot Control Pageге кирүү


Роботтун питон скрипти иштеп баштагандан кийин, RoboClaw'ды күйгүзүңүз, анан RPI'ңиздин IP дарегине өтүңүз:
your_rpi_ip
Вебди башкаруу баракчасы сүрөттөрдөгүдөй калкып чыгышы керек. Болбосо, RPI чыгаруу терминалын текшериңиз жана каталарды издеңиз жана аларды оңдоңуз.
Баракка киргенден кийин, сиз ботту башкарууга даярсыз.
Робот "Med run" режиминде жана Орто ылдамдыкта баштайт.
Ботту барактагы баскычтар же клавиатурадагы баскычтар аркылуу башкарса болот.
Ачкычтар:
- w - алдыга
- z - артка/артка
- а - узак солго бурулуш
- s - узун оң бурулуш
- q - солго кыска бурулуш
- e - кыска оң бурулуш
- 1 - камера солго
- 2 - панорама камерасы оңго
- 3 - толук солго
- 4 - панорама толук оңго
- / - үй/ борбордук камера
- h - роботту токтотуу/токтотуу
Жөнөтүлгөн командалардын ортосунда жарым секунддук кечигүү буфери бар. Мен муну керексиз кайталанган буйруктарды жок кылуу үчүн кылдым. Кааласаңыз, албетте, муну коддон алып салсаңыз болот (index.htmlде)
Калган көзөмөлдөр жана аны көзөмөлдөө өзүнөн өзү түшүнүктүү болушу керек.
13 -кадам: Python/Flask Code
Бул бот Python жана Flask веб алкагын колдонот. Эгер сизди кызыктырса, Flask жөнүндө көбүрөөк биле аласыз.
Flask колдонмосунан жана кадимки Python скриптинен чоң айырмачылык URI иштетүү үчүн колдонулган @app.route классы/методу. Мындан тышкары, бул көбүнчө кадимки Python.
#!/usr/bin/env python
# # Wifi/Желе менен башкарылуучу Rover # # Жазган Скотт Бисли - 2015 # # RPIO, pyserial жана Flask колдонот) # Комоб портуна туташуу үчүн Roboclaw мотор контроллери менен сүйлөшүп көрүңүз: # 19200 roboclaw = serial.dan айырмаланып турган болсо, бул жерде берилиш ылдамдыгын өзгөртүңүз. табылды ") sys.exit (0) # Ылдамдык жана дискти башкаруучу өзгөрмөлөр last_direction = -1 speed_offset = 84 turn_tm_offset = 0.166 run_time = 0.750 # Servo нейтралдуу абалы (үй) servo_pos = 1250 servo = PWM. Servo () servo.set_servo (18), servo_pos) # Убакытты жөнгө салуу үчүн бир аз жаша) def index (): return render_template ('index.html', name = None) @app.route ("/forward") def forward (): global last_direction, run_ti мага "Алга" басуу go_forward () last_direction = 0 # уйку 100ms + run_time time.sleep (0.100 + run_time) # Эгерде үзгүлтүксүз болбосо, анда run_time> 0 болсо, кечигүүдөн кийин токтотуңуз: last_direction = -1 halt () "макул" @ app.route ("/backward") def backward (): global last_direction, run_time print "Артка" go_backward () last_direction = 1 # уйку 100ms + run_time time.sleep (0.100 + run_time) # Эгерде үзгүлтүксүз болбосо, кийинкиге калтырылгандан кийин токтотуу эгер run_time> 0: last_direction = -1 stop () return "ok" @app.route ("/left") def left (): global last_direction, turn_tm_offset print "Left" go_left () last_direction = -1 # sleep @1 /2 second time.sleep (0.500 - turn_tm_offset) # stop stop () time.sleep (0.100) return "ok" @app.route ("/right") def right (): global last_direction, turn_tm_offset print "Right" go_right () # уйку @1/2 экинчи жолу. уктоо (0.500 - кезек_тм_жолу) акыркы_багыт = -1 # токтотуу токтотуу () time.sleep (0.100) "ok" @app.route ("/ltforward") def ltforward (): глобалдык акыркы_багыт, кезек_т m_offset print "Солго алдыга бурулуу" go_left () # уйку @1/8 экинчи жолу. уйку (0.250 - (turn_tm_offset / 2)) акыркы_багыт = -1 # токтоону токтотуу () убакыт.уйку (0.100) кайтаруу "макул" @app.rute ("/rtforward") def rtforward (): global last_direction, turn_tm_offset print "Оңго алдыга бурулуу" go_right () # уйку @1/8 экинчи жолу. stop stop () time.sleep (0.100) return "ok" @app.route ("/stop") def stop (): global last_direction print "Stop" токтотуу () last_direction = -1 # 100ms time.sleep (0.100)) "ok" @app.route ("/panlt") def panlf (): global servo_pos print "Panlt" servo_pos -= 100 if servo_pos 2500: servo_pos = 2500 servo.set_servo (18, servo_pos) # 150ms time. уйку (0.150) "ok" @app.route ("/home") def home (): global servo_pos print "Home" servo_pos = 1250 servo.set_servo (18, servo_pos) # 150ms time.sleep (0.150) return "макул" @app.route ("/panfull_lt") def panfull_lt (): глобалдык servo_pos басып чыгаруу "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 (): глобалдык servo_pos басып чыгаруу" Толук оңго "servo_pos = 2500 servo.set_servo (18, servo_pos) # уйку 150ms time.sleep (0.150) "ok" @app.route ("/speed_low") def speed_low (): global speed_offset, last_direction, turn_tm_offset speed_offset = 42 turn_tm_offset = 0.001 # Акыркы ылдамдыкка жетүү үчүн учурдагы багытты жаңыртуу == 0: go_forward () if last_direction == 1: go_backward () # sleep 150ms time.sleep (0.150) return "ok" @app.route ("/speed_mid") def speed_mid (): глобалдык 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)) кайтаруу "макул" @app.route ("/speed_hi") def speed_hi (): глобалдык ылдамдык_жолу, акыркы_багыт, turn_tm_offset speed_offset = 126 тур n_tm_offset = 0.332 # Учурдагы багытты жаңыртуу, эгерде акыркы_багыт == 0: go_forward () эгер акыркы_багыт == 1: go_backward () # уктоо 150ms time.sleep (0.150) "ok" @app.route ("/үздіксиз") кайтаруу ") def үздіксиз (): глобалдык иштөө убактысын басып чыгаруу" Үзгүлтүксүз иштөө "run_time = 0 # уйку 100ms time.sleep (0.100)" 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 () # уктоо 100ms time.sleep (0.100) return "макул" # # Мотор кыймылдаткычынын функциялары # def go_forward (): глобалдык ылдамдык_офсасы, эгерде speed_offset! = 42: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 +) speed_offset)) башка: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (255 - speed_offset)) def go_backward (): глобалдык speed_offset if speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.wri te (chr (255 - speed_offset)) башка: roboclaw.write (chr (1 + speed_offset)) roboclaw.write (chr (128 + speed_offset)) def go_left (): глобалдык speed_offset эгер speed_offset! = 42: roboclaw.write (chr (127 - speed_offset)) roboclaw.write (chr (128 + speed_offset)) башка: 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)) башка: 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тан мүчүлүштүктөрдү оңдоо маалыматын каалабасаңыз же керек болбосо, app.run линиясында мүчүлүштүктөрдү оңдоону 'false' деп коюңуз.
эгер _name_ == "_main_":
app.run (host = '0.0.0.0', port = 80, debug = False)
Сиз ошондой эле Flask http серверинин бул жерде уккан портун өзгөртө аласыз.
14 -кадам: Башка жабдыктарды колдонуу
Эгерде сиз башка жабдыктарды колдонууну кааласаңыз, башка SBC (Single Board Computer) сыяктуу, сизде Python менен Flaskтын Beagle Bone, PCDuino ж. жайгашуу жана жаңы тактанын сервопровод мүмкүнчүлүктөрүн колдонуу.
Башка типтеги мотор драйверин колдонуу үчүн, жөн гана go_forward, go_backward, go_left, go_right жана токтотуу функцияларын алмаштыруу керек, мотордун ошол функциясын аткарышы үчүн алмаштыруучу мотор драйверине керектүү нерсени жасоо керек.
Сунушталууда:
Автомобиль менен жүрүүчү кайыкты куруу (ArduPilot Rover): 10 кадам (сүрөттөр менен)

Автомобилди башкаруучу кайык куруу (ArduPilot Rover): Эмне сонун экенин билесизби? Учкучсуз өзүн өзү башкаруучу унаалар. Алар ушунчалык сонун болгондуктан, биз (менин университеттеги кесиптештерим жана мен) 2018 -жылы кайра өзүбүз кура баштадык. Ошол себептен бул жылы бош убактымда аягына чыгарууну чечтим. Бул Инстаграмда
RC Controled Rgb Led Strip: 4 кадам (Сүрөттөр менен)

RC Controlled Rgb Led Strip: Бөлмөнүн жекече жарыктандыруусу үчүн RC көзөмөлдөгөн лента тилкесин түзүңүз! Аны өчүрүү же күйгүзүү же түсүн өзгөртүү үчүн ресивердин алдында калышыңыз керек. Бул кызыксыз жана кайра эмес
Raspberry Pi - Автономдуу Mars Rover OpenCV объектилерин көзөмөлдөө менен: 7 кадам (сүрөттөр менен)

Raspberry Pi - Автономдуу Mars Rover OpenCV объектилерине көз салуу менен: Raspberry Pi 3, ачык резюме объектилерин таануу, ультрадыбыштуу сенсорлор жана редуктурлуу DC моторлору менен иштейт. Бул ровер үйрөтүлгөн нерселерди көзөмөлдөп, каалаган жерде кыймылдай алат
Walking Strandbeest, Java/Python жана App Controled: 4 Steps (Сүрөттөр менен)

Walking Strandbeest, Java/Python жана App Controlled: Бул Strandbeest комплект Тео Жансен ойлоп тапкан Strandbeestке негизделген DIY эмгеги. Гениалдуу механикалык дизайнга таң калып, аны толук маневрлүүлүк менен, андан кийин компьютердик интеллект менен жабдууну каалайм. Бул көрсөтмөдө, биз биринчи бөлүмдө иштейбиз
Gesture Hawk: Hand Gesture Controled Robot using Image Processing Based Interface: 13 Steps (Сүрөттөр менен)

Gesture Hawk: Hand Gesture Controlled Robot using Image Processing Based Interface: Gesture Hawk TechEvince 4.0де жөнөкөй сүрөт иштетүүгө негизделген адам-машина интерфейси катары көрсөтүлдү. Анын пайдалуулугу ар кандай роботтордо иштеген робот машинаны көзөмөлдөө үчүн колкаптан башка эч кандай кошумча сенсорлордун же тагынуунун кереги жоктугунда