Мазмұны:

Автономды көлік: 7 қадам (суреттермен)
Автономды көлік: 7 қадам (суреттермен)
Anonim
Автономды көлік
Автономды көлік
Автономды көлік
Автономды көлік

Бұл жоба - автономды навигациялық робот, ол өз мақсатына жетуге тырысады, сонымен қатар жолында кедергілерді болдырмайды. Робот LiDAR сенсорымен жабдықталған, ол айналасындағы заттарды анықтауға арналған. Нысандар табылып, робот айналған сайын нақты уақыт картасы жаңартылады. Карта анықталған кедергілердің орнын сақтау үшін қолданылады. Осылайша робот мақсатқа жету үшін сәтсіз жолды қайталамайды. Ол оның орнына кедергілері жоқ жолдарды немесе кедергілер үшін әлі тексерілмеген жолдарды қолданады.

Робот тұрақты қозғалтқышпен жүретін екі доңғалақпен және екі дөңгелекпен қозғалады. Қозғалтқыштар дөңгелек платформаның түбіне бекітіледі. Қозғалтқыштарды екі мотор жүргізушісі басқаратын болады. Мотор драйверлері Zynq процессорынан PWM командаларын алады. Әр қозғалтқыштағы кодерлер автокөліктің орналасуы мен бағытын бақылау үшін қолданылады. Бүкіл жүйе LiPo батареясымен жұмыс істейтін болады.

1 -қадам: автокөлікті құрастыру

Көлікті құрастыру
Көлікті құрастыру
Көлікті құрастыру
Көлікті құрастыру
Көлікті құрастыру
Көлікті құрастыру
Көлікті құрастыру
Көлікті құрастыру

Робот бүйірлік доңғалақтарға бекітілген екі қозғалтқыштан тұрады, содан кейін екі дөңгелекті қосады: біреуі алдыңғы және артқы. Платформа мен моторлы тіректер алюминийден жасалған. Дөңгелектерді қозғалтқышқа бекіту үшін мотор хабы сатып алынды. Дегенмен, реттелетін аралық қосқыш жасау қажет болды, себебі хабтың тесік үлгісі дөңгелектің тесік үлгісінен өзгеше болды.

Таңдалған қозғалтқыш кіріктірілген кодерлері бар 12V DC Escap тұрақты ток қозғалтқышы болды. Бұл қозғалтқышты ebay -ден өте қолайлы бағаға сатып алуға болады (Материалдар тізімін қараңыз). Электрқозғалтқышты табу үшін ebay -де «12V Escap 16 Coreless Geared DC Encoders қозғалтқышы» кілт сөздерін іздеңіз. Әдетте таңдау үшін сатушылардың жеткілікті саны бар. Қозғалтқыштардың техникалық сипаттамалары мен түйіндері төмендегі диаграммаларда көрсетілген.

Роботты құрастыру шассидің CAD режимінің дизайнынан басталды. Төмендегі модель шасси үшін жасалған 2D пішінді профильдің жоғарғы көрінісін көрсетеді.

Шассиді оңай өндіруге болатындай етіп 2Dprofile ретінде жасау ұсынылады. Біз 12 дюймдік X12 дюймдік алюминий парағын шасси пішінінде су ағынымен кесеміз. Шасси платформасын таспалы арамен кесуге болады.

2 -қадам: қозғалтқыштарды орнату

Қозғалтқыштарды монтаждау
Қозғалтқыштарды монтаждау
Қозғалтқыштарды монтаждау
Қозғалтқыштарды монтаждау

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

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

Әрі қарай, қозғалтқыш білігіне Pololu қозғалтқыш хабын (материалдарды есепке алу бөлімін) орнатады және бекітілген бұранда мен Аллен кілтінің көмегімен бекітеді. Pololu қозғалтқыш хабының тесік үлгісі VEX дөңгелегінің тесік үлгісіне сәйкес келмейді, сондықтан арнайы аралық қосқыш жасау керек. Іліністі жасау үшін шасси платформасын жасау үшін қолданылатын алюминий қаңылтыр табақты қолдану ұсынылады. Бұл жұптың тесік үлгісі мен өлшемдері төмендегі суретте көрсетілген. Алюминий қосқышының сыртқы диаметрі мен пішіні (шеңбер болудың қажеті жоқ), егер барлық тесіктер бөлшекке сәйкес келсе, маңызды емес.

3 -қадам: Vivado блогының дизайнын жасау

Vivado блогының дизайнын жасау
Vivado блогының дизайнын жасау
Vivado блогының дизайнын жасау
Vivado блогының дизайнын жасау

- Жаңа Vivado жобасын құрудан бастаңыз және мақсатты құрылғы ретінде Zybo Zynq 7000 Z010 таңдаңыз.

- Содан кейін жаңа блок дизайнын жасауды нұқыңыз және Zynq IP қосыңыз. Zynq IP -ге екі рет шертіңіз және Zynq үшін ұсынылған XPS параметрлерін импорттаңыз. Содан кейін MIO конфигурациясы қойындысында MIO 10..11 көмегімен UART0 қосыңыз, сонымен қатар таймер 0 мен күзетші таймері қосылғанына көз жеткізіңіз.

- Блок дизайнына екі AXI GPIOS қосыңыз. GPIO 0 үшін қос арнаны қосыңыз және екеуін де барлық шығысқа орнатыңыз. GPIO енін 1 -ден 4 битке және 2 -ден 12 битке дейін орнатыңыз, бұл арналар қозғалтқыштың бағытын орнатуға және процессорға кодтаушы өлшемдерінің белгілерін жіберуге қолданылады. GPIO 1 үшін ені 4 бит болатын барлық кірістерге бір ғана арнаны орнатыңыз. Бұл кодерлерден деректерді алу үшін қолданылады. Барлық GPIO порттарын сыртқы етіп жасаңыз.

- Келесі екі AXI таймерін қосыңыз. Pwm0 портын екі таймерде де сыртқы етіп жасаңыз. Бұл қозғалтқыштардың айналу жылдамдығын басқаратын дөңгелектер болады.

- Соңында блокты автоматтандыруды және қосылуды автоматтандыруды іске қосыңыз. Сізде бар блок дизайны ұсынылғанға сәйкес келетінін тексеріңіз.

4 -қадам: LiDAR -мен байланыс

Бұл LiDAR UART арқылы байланысу үшін SCIP 2.0 протоколын қолданады, оған қоса берілген файл бүкіл хаттаманы сипаттайды.

LiDAR -мен байланысу үшін біз UART0 қолданамыз. LiDAR әрқайсысы осы бұрыштағы объектіге дейінгі қашықтықты білдіретін 682 деректер нүктесін қайтарады. LiDAR сағат тіліне қарсы -30 градустан 210 градусқа дейін 0,351 градус қадамымен сканерлейді.

- LiDAR -мен барлық байланыс ASCI таңбаларымен жүзеге асады, қолданылатын форматты SCIP протоколынан қараңыз. Біз LiDAR қосу үшін QT пәрменін жіберуден бастаймыз. Содан кейін біз GAR пәрменін UARTS 64 байтты FIFO -да бір уақытта 18 деректер нүктесін сұрайтын бірнеше рет жібереміз. LiDAR -дан қайтарылған деректер кейін талданады және SCANdata жаһандық массивінде сақталады.

- Сақталған әрбір деректер нүктесі кодталған мәліметтердің 2 байтын құрайды. Бұл деректерді декодерге жіберу қашықтықты миллиметрмен қайтарады.

Main_av.c файлында сіз LiDAR -мен байланысу үшін келесі функцияларды таба аласыз

sendLIDARcmd (команда)

- Бұл UART0 арқылы LiDAR -ге кіріс жолын жібереді

recvLIDARdata ()

- Бұл LiDAR -ға пәрмен жіберілгеннен кейін деректерді қабылдайды және деректерді RECBuffer -де сақтайды

requestDistanceData ()

- Бұл функция барлық 682 деректер нүктелерін шығаруға арналған командалар сериясын жібереді. 18 деректер нүктелерінің әрбір жиынтығын алғаннан кейін, деректерді талдау және SCANdata -да деректер нүктелерін біртіндеп сақтау үшін parseLIDARinput () шақырылады.

5 -қадам: торды кедергілермен толтыру

Кедергілермен толтырылатын тор
Кедергілермен толтырылатын тор
Кедергілермен толтырылатын тор
Кедергілермен толтырылатын тор

Сақталатын GRID - бұл 2D массиві, оның орналасқан жерін көрсететін әрбір индекс мәні бар. Әр индексте сақталатын мәліметтер 0 немесе 1 болады, тиісінше кедергі мен кедергі жоқ. Әр индекс көрсететін миллиметрдегі шаршы қашықтықты transport.h файлындағы GRID_SCALE анықтамасымен өзгертуге болады. 2D массивінің өлшемі GRID_SIZE анықтамасын өзгерту арқылы көлікке үлкен аумақты сканерлеуге мүмкіндік беру үшін де өзгертілуі мүмкін.

Қашықтықтағы жаңа деректер сканерленгеннен кейін LiDAR updateGrid () шақырылады. Бұл тордағы қандай индекстерде кедергілер бар екенін анықтау үшін SCANdata массивінде сақталған әрбір деректер нүктесі арқылы қайталанады. Көліктің ағымдағы бағытын қолдана отырып, біз әр нүктеге сәйкес келетін бұрышты анықтай аламыз. Кедергінің қай жерде екенін анықтау үшін сәйкес қашықтықты бұрыштың cos/sin -ге көбейту керек. Осы екі мәнді көлік құралдарының ағымдағы x және y позициясына қосу кедергілер торындағы индексті қайтарады. GRID_SCALE бойынша осы операция қайтарған қашықтықты бөлу бізге әр индекстің шаршы қашықтығын өзгертуге мүмкіндік береді.

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

6 -қадам: қозғалтқыштармен байланыс

Қозғалтқыштармен байланысу үшін біз GPIO -ді инициализациялаудан бастаймыз, бұл қозғалтқыштың айналу бағыты. Содан кейін AXI таймеріндегі PWM -дің негізгі мекен -жайына тікелей жазу бізге уақыт пен міндет циклі сияқты параметрлерді орнатуға мүмкіндік береді. қозғалтқыштың айналу жылдамдығы.

7 -қадам: Жолды жоспарлау

Жақын арада іске асырылатын болады.

Бұрын сипатталған тор мен мотор функциясын қолдана отырып, A*сияқты алгоритмдерді енгізу өте оңай. Көлік қозғалғанда ол айналаны тексеруді жалғастырады және оның жүретін жолының әлі де жарамды екенін анықтайды

Ұсынылған: