Мазмұны:

Rpibot - Робототехниканы үйрену туралы: 9 қадам
Rpibot - Робототехниканы үйрену туралы: 9 қадам

Бейне: Rpibot - Робототехниканы үйрену туралы: 9 қадам

Бейне: Rpibot - Робототехниканы үйрену туралы: 9 қадам
Бейне: 0-сабақ. Робототехникаға кіріспе #roboalem #robotics 2024, Шілде
Anonim
Rpibot - Робототехниканы үйрену туралы
Rpibot - Робототехниканы үйрену туралы

Мен неміс автокөлік компаниясында енгізілген бағдарламалық қамтамасыз ету инженерімін. Мен бұл жобаны енгізілген жүйелерді оқыту платформасы ретінде бастадым. Жоба мерзімінен бұрын тоқтатылды, бірақ маған ұнады, мен бос уақытымда жалғастырдым. Бұл нәтиже…

Менде келесі талаптар болды:

  • Қарапайым аппараттық құрал (фокус - бұл бағдарламалық қамтамасыз ету)
  • Арзан жабдықтар (шамамен 100 €)
  • Кеңейтілетін (кейбір опциялар сипаттаманың бөлігі болып табылады)
  • Барлық компоненттер үшін кернеу 5В бір көзден (қуат банкі)

Оқудан бөлек мақсат болмады. Платформаны оқу, бақылау, роботтық жарыстар үшін қолдануға болады …

Бұл жаңадан бастаушыларға арналған оқулық емес. Сізге бірнеше негізгі білім қажет:

  • Бағдарламалау (Python)
  • Негізгі электроника (модульдерді дұрыс кернеу арқылы қосу үшін)
  • Басқарудың негізгі теориясы (PID)

Ақырында, сіз мен сияқты проблемаларға тап болуыңыз мүмкін. Біршама қызығушылық пен шыдамдылықпен сіз жобадан өтіп, қиындықтарды шешесіз. Менің кодым мүмкіндігінше қарапайым және кеңестер беру үшін сыни код жолдары түсіндіріледі.

Толық бастапқы код пен файлдарды мына жерден алуға болады:

Жабдықтар:

Механика

  • 1x фанера тақтасы (A4 өлшемі, қалыңдығы 4 мм)
  • 3x M4 x 80 Бұранда және гайка
  • Кодер үшін екінші шығыс білігі бар 2x редукторлар. Дөңгелектер.
  • 1x Бос дөңгелек

1x панорамалық және көлбеу камераны орнату (міндетті емес)

Электроника

  • 1x Raspberry Pi Zero тақырыбы мен камерасы бар
  • 1x PCA 9685 серво басқару
  • 2х оптикалық кодер дөңгелегі мен схемасы
  • 1х аналық секіргіш сымдар
  • 1x USB қуат банкі
  • 1x DRV8833 қос қозғалтқыш драйвері
  • Камераны жылжыту мен еңкейтуге арналған 2x Micro servo SG90 (міндетті емес)
  • 1x MPU9250 IMU (міндетті емес)
  • 1x HC-SR04 ультрадыбыстық қашықтық сенсоры (міндетті емес)
  • 1x перфорацияланған тақта мен дәнекерлеу сымы, тақырыптар,…

1 -қадам: шасси құрастырыңыз

Шасси құрастырыңыз
Шасси құрастырыңыз
Шасси құрастырыңыз
Шасси құрастырыңыз
Шасси құрастырыңыз
Шасси құрастырыңыз

Мен жақсы механик -дизайнер емеспін. Сонымен қатар, жобаның мақсаты - шассиде көп уақыт жұмсау емес. Қалай болғанда да мен келесі талаптарды анықтадым:

  • Арзан материалдар
  • Жылдам жинау және бөлшектеу
  • Кеңейтілетін (мысалы, сенсорларға арналған орын)
  • Электроникаға энергия үнемдеуге арналған жеңіл материалдар

Қарапайым және арзан шасси фанерден жасалуы мүмкін. Станокпен және қолмен бұрғымен өңдеу оңай. Сенсорлар мен қозғалтқыштарға арналған ұстағыштарды жасау үшін ағаштан жасалған кішкене бөлшектерді желімдеуге болады.

Ақаулы компоненттерді ауыстыру немесе электрлік жөндеуді ойлаңыз. Негізгі бөліктер ауыстырылатын бұрандалармен бекітілуі керек. Ыстық желім тапаншасы қарапайым болуы мүмкін, бірақ шасси жасаудың ең жақсы әдісі емес … Бөлшектерді оңай бөлшектеудің қарапайым тұжырымдамасы туралы ойлануға көп уақыт қажет болды. 3D басып шығару - жақсы балама, бірақ өте қымбат немесе көп уақытты қажет етуі мүмкін.

Ақысыз дөңгелек ақырында өте жеңіл және оңай орнатылады. Баламалар өте ауыр немесе үйкеліске толы болды (мен олардың соңғысын таппас бұрын олардың екеуін сынап көрдім). Негізгі дөңгелектерді орнатқаннан кейін құйрықсыз дөңгелекті тегістеу үшін тек ағаш аралықты кесуге тура келді.

Дөңгелектердің қасиеттері (бағдарламалық қамтамасыз етуді есептеу үшін)

Шеңбер: 21, 5 см Импульстер: 20 импульс/айн. Шешімі: 1 075 см (ақырында 1 импульс шамамен 1 см, бұл бағдарламалық қамтамасыз етуді есептеуге оңай)

2 -қадам: Электроника және сымдар

Электроника және сымдар
Электроника және сымдар
Электроника және сымдар
Электроника және сымдар
Электроника және сымдар
Электроника және сымдар

Жоба диаграммада көрсетілгендей әр түрлі модульдерді қолданады.

Raspberry Pi Zero - негізгі контроллер. Ол сенсорларды оқиды және қозғалтқыштарды PWM сигналымен басқарады. Ол қашықтағы дербес компьютерге wifi арқылы қосылған.

DRV8833-бұл қос моторлы H көпірі. Бұл қозғалтқыштарға жеткілікті ток береді (Raspberry Pi мұны істей алмайды, себебі шығыс тек кейбір мА жеткізе алады).

Оптикалық кодер жарық кодер дөңгелектерінен өткен сайын төртбұрышты сигнал береді. Біз сигнал ауысқан сайын ақпаратты алу үшін Raspberry Pi -дің HW үзілістерін қолданамыз.

Pca9695 - бұл серво басқару тақтасы. Ол I2C сериялық шинасымен байланысады. Бұл тақта PWM сигналдары мен беріліс кернеуін қамтамасыз етеді, олар камераның айналуы мен қисаюына арналған серводы басқарады.

MPU9265-3 осьтік үдеу, 3 осьтік бұрыштық айналу жылдамдығы және 3 осьті магнит ағынының сенсоры. Біз оны негізінен компас бағытына жету үшін қолданамыз.

Әр түрлі модульдер бір -бірімен секіргіш сыммен қосылған. Нан тақтасы диспетчер қызметін атқарады және кернеуді (5В және 3.3В) және алаңдарды қамтамасыз етеді. Қосылымдардың барлығы қосылу кестесінде сипатталған (қосымшаны қараңыз). 5 Вт -ты 3,3 В кернеуіне қосу сіздің чипті бұзуы мүмкін. Жеткізуден бұрын барлық сымдарды мұқият қадағалаңыз және тексеріңіз (мұнда арнайы кодерді ескеру қажет). Барлық тақталарды қоспас бұрын диспетчерлік тақтадағы негізгі кернеуді мультиметрмен өлшеу керек. Модульдер шассиге нейлон бұрандалармен бекітілген. Сондай -ақ, мұнда мен оларды жөндегеніме қуаныштымын, бірақ ақаулық болған жағдайда оны алып тастауға болады.

Жалғыз дәнекерлеу ақырында қозғалтқыштар мен тақталар мен тақырыптар болды. Шынымды айтсам, мен секіргіш сымдарды жақсы көремін, бірақ олар байланыстың үзілуіне әкелуі мүмкін. Кейбір жағдайларда бағдарламалық қамтамасыз етудің кейбір мониторингі қосылымдарды талдауға көмектеседі.

3 -қадам: Бағдарламалық қамтамасыз ету инфрақұрылымы

Бағдарламалық қамтамасыз ету инфрақұрылымы
Бағдарламалық қамтамасыз ету инфрақұрылымы
Бағдарламалық қамтамасыз ету инфрақұрылымы
Бағдарламалық қамтамасыз ету инфрақұрылымы

Механикаға қол жеткізгеннен кейін біз қолайлы даму жағдайлары үшін бағдарламалық қамтамасыз етудің кейбір инфрақұрылымын орнатамыз.

Git

Бұл ақысыз және ашық бастапқы нұсқаны басқару жүйесі. Ол Linux сияқты ірі жобаларды басқару үшін қолданылады, бірақ оны кіші жобалар үшін де оңай қолдануға болады (Github және Bitbucket қараңыз).

Жобаның өзгеруін жергілікті бақылауға болады, сонымен қатар бағдарламалық қамтамасыз етуді қоғаммен бөлісу үшін қашықтағы серверге жіберуге болады.

Негізгі қолданылатын командалар:

git clone https://github.com/makerobotics/RPIbot.git [Бастапқы код пен git конфигурациясын алу]

git pull orig master [қашықтағы репозиторийден ең соңғы нұсқаны алу]

git status [жергілікті репозиторийдің күйін алу. Файлдар өзгерді ме?] Git журналы [міндеттер тізімін алу] git add. [барлық өзгертілген файлдарды келесі тапсырма үшін қарастырылатын кезеңге қосыңыз] git міндеттеме -m «міндеттеме бойынша түсініктеме» [өзгерістерді жергілікті репозиторийге тапсыру] git push бастапқы шебері [барлық міндеттемелерді қашықтағы репозиторийге итеру]

Тіркеу

Python кіріктірілген тіркеу функцияларын ұсынады. Бағдарламалық қамтамасыз ету құрылымы одан әрі дамытуды бастамас бұрын барлық тіркеу жүйесін анықтауы керек.

Тіркеу журналын терминалда немесе журнал файлында анықталған форматпен журнал жүргізуге конфигурациялауға болады. Біздің мысалда, тіркеуші веб -сервер класы бойынша конфигурацияланған, бірақ біз оны өз бетімізше жасай аламыз. Мұнда біз тек тіркеу деңгейін DEBUG деп орнатамыз:

logger = logging.getLogger (_ аты_)

logger.setLevel (logging. DEBUG)

Өлшеу және сызба салу

Уақыт өте келе сигналдарды талдау үшін оларды диаграммада салу жақсы. Raspberry Pi -де тек консольдық терминал болғандықтан, біз деректерді нүктелі үтірмен бөлінген csv файлында қадағалап, оны қашықтағы дербес компьютерден саламыз.

Нүктелі үтірмен бөлінген іздеу файлы біздің негізгі питон кодымен жасалады және келесідей тақырыптары болуы керек:

уақыт белгісі; yawCorr; encoderR; I_L; odoDistance; ax; encoderL; I_R; yaw; eSpeedR; eSpeedL; pwmL; speedL; CycleTimeControl; wz; pwmR; speedR; Iyaw; hdg; m_y; m_x; eYaw;

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

Бірінші бағанда уақыт белгісі бар. Келесі бағандар тегін. Сценарий салу үшін бағандардың тізімімен шақырылады:

қашықтағы@компьютер: ~/python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

Сюжет сценарийі құралдар қалтасында бар:

Плоттер Python -да mathplotlib қолданады. Сіз оны компьютерге көшіруіңіз керек.

Питон сценарийі ыңғайлы болу үшін Raspberry Pi іздеу файлын қашықтағы дербес компьютерге көшіру үшін пайдаланылатын bash сценарийімен аталады (plot.sh). егер файлды көшіру қажет болса. Бұл әр жолы қолмен көшірудің орнына маған ыңғайлы болды. «sshpass» файлды Raspberry Pi -ден қашықтағы компьютерге scp арқылы көшіру үшін қолданылады. Ол файлды парольді сұрамай -ақ көшіре алады (ол параметр ретінде беріледі).

Соңында суретте көрсетілгендей сюжеті бар терезе ашылады.

Қашықтан байланыс

Raspberry Pi әзірлеу интерфейсі - SSH. Файлдарды тікелей мақсатты түрде өңдеуге немесе scp арқылы көшіруге болады.

Роботты басқару үшін Pi -де веб -сервер жұмыс істейді, ол Websockets арқылы басқаруды қамтамасыз етеді. Бұл интерфейс келесі қадамда сипатталған.

Raspberry Pi орнатыңыз

Бастапқы кодтың «doc» қалтасында Raspberry Pi қондырғысын сипаттайтын файл бар (setup_rpi.txt). Көптеген түсініктемелер жоқ, бірақ көптеген пайдалы командалар мен сілтемелер.

4 -қадам: Пайдаланушы интерфейсі

Қолданушы интерфейсі
Қолданушы интерфейсі

Біз пайдаланушы интерфейсін орналастыру үшін жеңіл Tornado веб -серверін қолданамыз. Бұл роботты басқару бағдарламалық жасақтамасын іске қосқанда біз атайтын Python модулі.

Бағдарламалық қамтамасыз ету архитектурасы

Қолданушы интерфейсі келесі файлдар арқылы құрылады: gui.html [Веб -беттің басқару элементтері мен орналасуын сипаттау] gui.js [Басқару элементтерін басқаруға және біздің роботқа веб -розетка байланысын ашуға арналған JavaScript кодын қамтиды] gui.css [Құрамында стильдер бар html басқару элементтері. Бұл жерде басқару элементтерінің позициялары анықталған]

Веб -сокет байланысы

Пайдаланушы интерфейсі керемет емес, бірақ ол тапсырманы орындайды. Мен мұнда Websockets сияқты мен үшін жаңа технологияларға назар аудардым.

Веб -сайт роботтың веб -серверімен Websockets арқылы байланысады. Бұл қосарланған байланыс арнасы, ол қосылу кезінде ашық қалады. Біз роботтың командаларын Websocket арқылы Raspberry Pi -ге жібереміз және ақпаратты (жылдамдық, позиция, камера ағыны) экранға қайтарамыз.

Интерфейстің орналасуы

Қолданушы интерфейсінде командалар үшін қолмен енгізу бар. Бұл роботқа пәрмендерді жіберу үшін қолданылған. Құсбелгі камера ағынын қосады және өшіреді. Екі сырғытпа камераның жылжуын және көлбеуін басқарады. Қолданушы интерфейсінің оң жақ жоғарғы бөлігі роботтардың қозғалысын басқарады. Сіз жылдамдықты және мақсатты қашықтықты басқара аласыз. Негізгі телеметриялық ақпарат роботтың суретінен көрсетіледі.

5 -қадам: Робот платформасын бағдарламалау

Робот платформасын бағдарламалау
Робот платформасын бағдарламалау
Робот платформасын бағдарламалау
Робот платформасын бағдарламалау
Робот платформасын бағдарламалау
Робот платформасын бағдарламалау

Бұл бөлім жобаның негізгі мақсаты болды. Мен жаңа қозғалтқышты тұрақты қозғалтқыштармен таныстырған кезде мен көптеген бағдарламалық жасақтаманы реформаладым. Мен Python -ды әртүрлі себептермен бағдарламалау тілі ретінде қолдандым:

  • Бұл Raspberry Pi негізгі тілі
  • Бұл жоғары деңгейлі тіл, оның көптеген мүмкіндіктері мен кеңейтімдері бар
  • Ол объектіге бағытталған, бірақ оны дәйекті бағдарламалау үшін де қолдануға болады
  • Құрастыру немесе құралдар тізбегі қажет емес. Кодты өңдеңіз және оны іске қосыңыз.

Негізгі бағдарламалық қамтамасыз ету архитектурасы

Бағдарламалық қамтамасыз ету объектіге бағытталған, бірнеше объектілерге бөлінген. Менің ойым кодты 3 функционалды блокқа бөлу болды:

Сезіммен ойлаңыз

Sense.py

Негізгі сенсорды алу және өңдеу. Деректер келесі кезеңде қолдану үшін сөздікте сақталады.

Control.py

Бірнеше абстракциядан кейін қозғалтқыштар мен сервопроцестерді басқарудың қосалқы класы. Басқарудың негізгі объектісі - жоғары деңгейлі командаларды, сонымен қатар қозғалтқышты басқару алгоритмдерін (PID) басқару.

rpibot.py

Бұл негізгі объект - Tornado веб -серверін басқару және бөлек ағындарда сезім мен бақылау сыныптарын құру.

Әрбір модульді жалғыз немесе бүкіл жобаның бөлігі ретінде іске қосуға болады. Сенсорлардың дұрыс жалғанғанын тексеру және дұрыс ақпаратты жеткізу үшін сенсордың ақпаратын ғана сезуге және басып шығаруға болады.

PID бақылауы

Бірінші міндет - нені басқарғымыз келетінін анықтау. Мен позицияны бақылауға тырыстым, бұл өте күрделі және көп көмектеспеді.

Ақырында, біз әр дөңгелектің жылдамдығын, сонымен қатар роботтың бағытын басқарғымыз келеді. Ол үшін бізге екі басқару логикасын каскадтау керек.

Біртіндеп күрделілікті арттыру үшін роботты басқару керек:

ашық цикл (тұрақты қуатпен)

pwm = K

содан кейін жақын цикл алгоритмін қосыңыз

pwm = Kp.speedError+Ki. Integration (speedError)

және ақырында соңғы қадам ретінде бағытты басқаруды қосыңыз.

Жылдамдықты басқару үшін мен «PI» басқару пультін және «P» -ді тек иек үшін қолдандым. Мен эксперимент арқылы параметрлерді қолмен қоямын. Мүмкін мұнда әлдеқайда жақсы параметрлерді қолдануға болады. Менің мақсатым тек түзу болды, мен оған дерлік жеттім. Мен пайдаланушы интерфейсі арқылы кейбір айнымалыларды жазу үшін бағдарламалық қамтамасыз етуде интерфейс жасадым. Kp параметрін 1.0 -ге орнату пайдаланушы интерфейсінде келесі пәрменді қажет етеді:

SET; Kp; 1.0

Мен Р параметрін кез келген асып кетуден аулақ болу үшін өте төмен деңгейге қоя аламын. Қалған қате I параметрімен түзетіледі (біріктірілген қате)

Маған екі басқару элементін қалай каскадтау керектігін білу қиын болды. Шешім қарапайым, бірақ мен бұған дейін көптеген басқа әдістерді қолданып көрдім … Ақырында, мен дөңгелектердің жылдамдығын бір бағытқа бұру үшін өзгерттім. Жылдамдықты басқару шығысын өзгерту қателік болды, себебі жылдамдықты басқару бұл бұзушылықты жоюға тырысты.

Қолданылған басқару схемасы қоса беріледі. Ол роботты басқарудың тек сол жағын көрсетеді.

6 -қадам: сенсордың калибрленуі

Сенсордың калибрлеуі
Сенсордың калибрлеуі
Сенсордың калибрлеуі
Сенсордың калибрлеуі
Сенсордың калибрлеуі
Сенсордың калибрлеуі

Ең алдымен ескеру керек, барлық ӨИЖ дұрыс жұмыс істеуі керек. Мен 3 бөлікке тапсырыс бердім және толық жұмыс істейтін сенсор болғанша оларды жібердім. Әрбір алдыңғы сенсорда сенсордың кейбір бөліктері дұрыс жұмыс істемейтін немесе мүлде жұмыс істемейтін болды. Мен роботқа орнатпас бұрын негіздерді тексеру үшін кейбір мысал сценарийлерін қолдандым.

IMU сенсорлық сигналдарын қолданар алдында калибрлеу қажет. Кейбір сенсорлық сигналдар орнату бұрышына және орналасуына байланысты.

Жылдамдық пен айналу жылдамдығын калибрлеу

Ең оңай калибрлеу - бойлық үдеу үшін (A_x). Тоқтағанда шамамен 0 м/с² болуы керек. Егер сенсорды дұрыс айналдырсаңыз, ауырлық күшін өлшеуге болады (шамамен 9, 8 м/с²). A_x калибрлеу үшін оны дұрыс орнату керек, содан кейін тоқтағанда 0 м/с² алу үшін ығысуды анықтау керек. Енді A_x калибрленеді, сіз тоқтаған кезде айналу жылдамдығының дәл осылай өзгеруіне қол жеткізе аласыз.

Компас үшін магнитометрді калибрлеу

Магнит өрісінің сенсорлары үшін күрделі калибрлеу қажет. Горизонтальды деңгейдегі магнит өрісін алу үшін m_x және m_y қолданамыз. M_x және m_y болуы бізге компастың бағытын есептеуге мүмкіндік береді.

Қарапайым мақсат үшін біз тек темірдің ауытқуын калибрлейміз. Бұл сенсор соңғы күйде болғандықтан орындалуы керек, себебі ол магнит өрісінің бұзылуына байланысты.

Біз m_x және m_y жазамыз, роботты z осінің айналасында айналдырамыз. Біз m_x пен m_y XY диаграммасында саламыз. Нәтижесінде суретте көрсетілгендей эллипс пайда болады. Эллипс бастапқы нүктеге бағытталуы керек. Мұнда біз m_x және m_y максималды және минималды мәндерін екі бағытта да жылжыту үшін қарастырамыз. Соңында біз калибрлеуді тексереміз және эллипс енді орталықта орналасқанын көреміз.

Жұмсақ темір калибрлеу суретті эллипстен шеңберге өзгертуді білдіреді. Мұны әр сенсордың мәніне коэффициент қосу арқылы жасауға болады.

Енді тестілеуді калибрлеу немесе сенсорлардың әлі де калибрленгенін тексеру үшін кодтауға болады.

Компас тақырыбы

Енді магнитометрдің мәліметтері компастың бағытын есептеу үшін пайдаланылатын болады. Ол үшін m_x және m_y сигналдарын бұрышқа түрлендіру керек. Python осы мақсатқа ие math.atan2 функциясын тікелей қамтамасыз етеді. Толық есептеу mpu9250_i2c.py файлында анықталған («calcHeading (mx, my, mz)»).

7 -қадам: Альтернативті дизайн

Альтернативті дизайн
Альтернативті дизайн
Альтернативті дизайн
Альтернативті дизайн
Альтернативті дизайн
Альтернативті дизайн

Дизайн толығымен ашық болғандықтан, жоба көп уақытты алды. Әр компонент үшін мен бірнеше прототип енгіздім және жүйенің шектеулерін бастан өткердім.

Ең күрделі тақырып дөңгелекті кодтаушы болды. Мен қазіргі уақытта қолданылатын оптикалық кодтаушыны таппас бұрын 3 түрлі нұсқаны сынап көрдім. Менің ойымша, мұндай жобада тоқтатылған шешімдер де өте қызықты. Бұл мен көп білген бөліктерге қатысты.

Pca 9695 қосылған үздіксіз айналмалы серво

Тұрақты ток қозғалтқышы үшін қосымша H көпіріне жол бермеу үшін мен алдымен үздіксіз айналмалы серводардан бастадым. Бұларды pca 9695 серво драйвері басқарды. Барлық қозғалыс механикасы мен корреспонденттік электроника әлдеқайда қарапайым болды. Бұл дизайнның екі кемшілігі болды:

  • Сервалардың нашар басқару диапазоны.
  • Кодерді ұстайтын орын жоқ

Серво 50% айналыммен қозғала бастайды және толық жылдамдығы шамамен 55%. Бұл өте нашар басқару диапазоны.

Егер кодер жоқ болса, дайын кодерді табу өте қиын болды. Мен шассиде орнатылған 3 түрлі рефлексиялық кодерді сынап көрдім. Мен доңғалақтың сыртына ақ -қара қимасы бар өздігінен жасалған кодер дөңгелегін жапсырдым. Мен дұрыс сигналды алу үшін сигналды өңдеуді қажет ететін QTR-1RC сенсорларын қолдандым. Raspberry Pi нақты уақыт режимінде өңдеуді жүзеге асыра алмады. Сондықтан мен роботқа нақты уақыттағы контроллер ретінде NodeMCU D1 mini қосуды шештім. Ол өңделген сенсор деректерін жеткізу үшін UART сериялық таңқурай Pi -ге қосылды. NodeMCU сонымен қатар HC-SR04 датчигін басқарды. Механикасы қиын және өте берік емес, сериялық желі I2C желісінен және қозғалтқыштардан шу шығарды, сондықтан мен шассидің екінші нұсқасын қарапайым редукторлы тұрақты ток қозғалтқыштарымен басқардым. H көпірі Бұл қозғалтқыштарда оптикалық кодерді орналастыру үшін екінші шығыс білігі бар.

8 -қадам: кескінді өңдеу

Суретті өңдеу
Суретті өңдеу
Суретті өңдеу
Суретті өңдеу
Суретті өңдеу
Суретті өңдеу
Суретті өңдеу
Суретті өңдеу

Автономды жүргізуді жақсарту үшін біз суретті өңдей аламыз.

Opencv кітапханасы - бұл анықтама. Оны кедергілерді анықтауды жылдам енгізу үшін Python қолдана алады.

Біз суретке түсіреміз және суретті өңдеудің кейбір тапсырмаларын қолданамыз:

Алғашқы сынақтар Канни мен Собель түрлендірулерімен жүргізілді. Кэнни жақсы үміткер бола алады, бірақ ақылға қонымды емес. Собель тым сезімтал (тым көп объектілер анықталды).

Ақырында мен барлық көлденең және тік градиенттерді араластыру үшін жеке сүзгіні жасадым (жиһазды анықтаңыз):

  • Түсті кескінді сұр деңгейлі суретке айналдырыңыз
  • Кішкене шуды кетіру үшін суретті бұлдыратыңыз
  • Кескінді ақ -қара кескінге шектеу
  • Енді біз қабырғалар мен жиһаз ретінде объектілерді анықтау үшін көлденең және тік градиенттерді анықтаймыз
  • Біз қалған үлкен контурларды ғана сүземіз (суреттегі түсті контурларды қараңыз)

Енді біз бұл жаңа ақпаратты кедергілерді анықтау үшін пайдалана аламыз …

9 -қадам: Келесі қадамдар…

Келесі қадамдар…
Келесі қадамдар…
Келесі қадамдар…
Келесі қадамдар…

Енді бізде сенсорлар, жетектер мен камерасы бар қарапайым робот платформасы бар. Менің мақсатым - автономды түрде қозғалу және басқа сенсорларды қоспай станцияға қайту. Ол үшін маған келесі қадамдар қажет:

  • Айналу мен магниттік бағыттау сигналдарының сенсорлық қосылуы
  • Камера кескінін өңдеу (бұл үшін тек төмен процессор бар)
  • Соқтығысуды анықтау (ультрадыбыстық қашықтық және камера)
  • Карта құру немесе бағдарлау

Енді барыңыз және өзіңіздің жеке міндеттеріңізді жасаңыз …

Ұсынылған: