Съдържание:

Автономно превозно средство: 7 стъпки (със снимки)
Автономно превозно средство: 7 стъпки (със снимки)

Видео: Автономно превозно средство: 7 стъпки (със снимки)

Видео: Автономно превозно средство: 7 стъпки (със снимки)
Видео: Динко Вълев иска да вкара Стоян Колев в багажника 2024, Ноември
Anonim
Автономно превозно средство
Автономно превозно средство
Автономно превозно средство
Автономно превозно средство

Този проект е автономно навигиращ робот, който се опитва да достигне целта си, като същевременно избягва препятствията по пътя си. Роботът ще бъде оборудван със сензор LiDAR, който ще се използва за откриване на обекти в околностите му. Тъй като обектите се откриват и роботът се движи, картата в реално време ще бъде актуализирана. Картата ще се използва за запазване на местоположенията на идентифицираните препятствия. По този начин роботът няма да опита отново неуспешен път към позицията на целта. Вместо това ще се опитат пътища, които или нямат пречки, или пътища, които все още не са проверени за препятствия.

Роботът ще се движи с две колела с постоянен ток и две колела. Двигателите ще бъдат прикрепени към дъното на кръгла платформа. Двигателите ще се управляват от двама шофьори. Драйверите на двигателя ще получават PWM команди от процесора Zynq. Енкодерите на всеки двигател се използват за проследяване на позицията и ориентацията на превозните средства. Цялата система ще се захранва с LiPo батерия.

Стъпка 1: Сглобяване на превозното средство

Сглобяване на превозното средство
Сглобяване на превозното средство
Сглобяване на превозното средство
Сглобяване на превозното средство
Сглобяване на превозното средство
Сглобяване на превозното средство
Сглобяване на превозното средство
Сглобяване на превозното средство

Роботът се задвижва от два двигателя, прикрепени към страничните колела и след това допълнително се поддържа от две колела, едно отпред и едно отзад. Платформата и опорите на двигателя са изработени от алуминий от ламарина. Закупена е моторна главина за закрепване на колелата към двигателя. Необходимо е обаче да се направи междинен разклонител по поръчка, тъй като моделът на отворите на главината е различен от модела на отворите на колелото.

Избраният двигател е Port Escap 12V DC мотор с вградени енкодери. Този мотор може да бъде закупен в ebay на много разумна цена (вж. Проект за материали). Потърсете ключови думи „12V Escap 16 безредовна редукторна DC мотор с енкодери“в ebay, за да намерите двигателя. Обикновено има доста продавачи, от които да избирате. Спецификациите и изводите на двигателите са показани на диаграмите по -долу.

Сглобяването на робота започна с CAD моделен дизайн на шасито. Моделът по -долу показва изглед отгоре на профила с 2D форма, проектиран за шасито.

Предлага се шасито да бъде проектирано като 2D профил, така че да може лесно да се произвежда. Изрязахме 12”X12” лист алуминий във формата на шасито с помощта на фреза за водна струя. Платформата на шасито може да се реже и с лентов трион.

Стъпка 2: Монтиране на двигатели

Монтажни двигатели
Монтажни двигатели
Монтажни двигатели
Монтажни двигатели

Следващата стъпка е да направите опорите на двигателя. Предлага се опорите на двигателя да бъдат изработени от 90-градусов алуминий от ламарина. Използвайки тази част, двигателят може да бъде прикрепен конзолно към едната страна на ламарината, като се използват двете

М2 отворите на двигателя и другата страна могат да бъдат закрепени към платформата. В стойката на двигателя трябва да се пробият отвори, така че да могат да се използват винтове за закрепване на двигателя върху стойката на двигателя и опората на двигателя върху платформата. Монтажът на двигателя може да се види на горната фигура.

След това главината за двигатели Pololu (виж Кодекса за материалите) се поставя върху вала на двигателя и се затяга с предоставения фиксиращ винт и гаечен ключ. Моделът на отворите на главината на двигателя Pololu не съвпада с модела на отворите на колелото VEX, така че трябва да се направи междинен съединител по поръчка. Предлага се скрап ламарина алуминий, използван за направата на платформата на шасито, да се използва за направата на съединителя. Моделът на отворите и размерите на тази двойка са показани на фигурата по -долу. Външният диаметър и форма (не е задължително да е кръг) на алуминиевия съединител по поръчка няма значение, стига всички отвори да се поберат на детайла.

Стъпка 3: Създаване на Vivado Block Design

Създаване на Vivado Block Design
Създаване на Vivado Block Design
Създаване на Vivado Block Design
Създаване на Vivado Block Design

- Започнете, като създадете нов проект на Vivado и изберете Zybo Zynq 7000 Z010 като целево устройство.

- След това щракнете върху създаване на нов дизайн на блок и добавете Zynq IP. Щракнете двукратно върху Zynq IP и импортирайте предоставените XPS настройки за Zynq. След това активирайте UART0 с MIO 10..11 в раздела MIO конфигурации и също така се уверете, че Timer 0 и Watchdog timer са активирани.

- Добавете два AXI GPIOS към дизайна на блока. За GPIO 0 активирайте двуканален и настройте и двата на всички изходи. Задайте ширината на GPIO за канал 1 до 4 бита и за канал 2 до 12 бита, тези канали ще се използват за задаване на посоката на двигателя и изпращане на броя на отметките, които енкодерът измерва до процесора. За GPIO 1 настройте само един канал към всички входове с ширина на канала 4 бита. Това ще се използва за получаване на данни от енкодерите. Направете всички GPIO портове външни.

- След това добавете два AXI таймера. Направете портовете pwm0 на двата таймера външни. Това ще бъдат PWM, които контролират скоростта, при която се въртят двигателите.

- Накрая стартирайте автоматизацията на блока и автоматизацията на връзката. Уверете се, че дизайнът на блока, който имате, съответства на предоставения.

Стъпка 4: Общуване с LiDAR

Този LiDAR използва протокол SCIP 2.0 за комуникация чрез UART, прикаченият файл описва целия протокол.

За комуникация с LiDAR ще използваме UART0. LiDAR връща 682 точки от данни, всяка от които представлява разстоянието до обект под този ъгъл. LiDAR сканира обратно на часовниковата стрелка от -30 градуса до 210 градуса със стъпка от 0,351 градуса.

- Цялата комуникация с LiDAR се осъществява с ASCI знаци, вижте протокола SCIP за използвания формат. Започваме, като изпращаме QT командата за включване на LiDAR. След това изпращаме GS командата няколко пъти, като искаме 18 точки от данни наведнъж, за да ft в UARTS 64 байта FIFO. След това данните, върнати от LiDAR, се анализират и съхраняват в глобалния масив SCANdata.

- Всяка съхранена точка от данни е 2 байта кодирани данни. Предаването на тези данни в декодера ще върне разстояние в милиметри.

Във файла main_av.c ще намерите следните функции за комуникация с LiDAR

sendLIDARcmd (команда)

- Това ще изпрати входния низ към LiDAR през UART0

recvLIDARdata ()

- Това ще получава данни, след като команда е изпратена до LiDAR и ще съхранява данните в RECBuffer

requestDistanceData ()

- Тази функция ще изпрати поредица от команди за извличане на всички 682 точки от данни. След получаване на всеки набор от 18 точки от данни parseLIDARinput () се извиква да анализира данните и да съхранява постепенно точките от данни в SCANdata.

Стъпка 5: Попълване на мрежата с препятствия

Попълване на мрежа с препятствия
Попълване на мрежа с препятствия
Попълване на мрежа с препятствия
Попълване на мрежа с препятствия

GRID, който се съхранява, е 2D масив, като всяка индексна стойност представлява местоположение. Данните, съхранявани във всеки индекс, са или 0, или 1, без препятствие и препятствие съответно. Квадратното разстояние в милиметри, което представлява всеки индекс, може да бъде променено с определението GRID_SCALE във файла vehicle.h. Размерът на 2D масива също може да се променя, за да позволи на превозното средство да сканира по -голяма площ чрез промяна на дефиницията GRID_SIZE.

След сканиране на нов набор от данни за разстоянието от LiDAR се извиква updateGrid (). Това ще повтори всяка точка от данни, съхранена в масива SCANdata, за да определи кои индекси в мрежата имат пречки. Използвайки текущата ориентация на превозното средство, можем да определим ъгъла, който съответства на всяка точка от данни. За да определите къде е препятствие, просто умножете съответното разстояние по cos/sin на ъгъла. Добавянето на тези две стойности към текущата позиция x и y на превозните средства ще върне индекса в решетката на препятствието. Разделянето на разстоянието, върнато от тази операция, на GRID_SCALE ще ни позволи да варираме колко голямо е квадратното разстояние на всеки индекс.

Горните снимки показват текущата среда на превозните средства и получената мрежа.

Стъпка 6: Комуникация с двигатели

За да комуникираме с двигателите, започваме, като инициализираме GPIO, за да контролираме посоката на въртене на двигателя. След това записването директно на базовия адрес на ШИМ в AXI таймера ни позволява да зададем неща като периода и работния цикъл, които директно контролират скорост на въртене на двигателя.

Стъпка 7: Планиране на пътя

Предстои да се приложи в близко бъдеще.

Използвайки функционалността на мрежата и двигателя, описана по -горе, е много лесно да се внедрят алгоритми като A*. Докато автомобилът се движи, той ще продължи да сканира околността и да определи дали пътят, по който е, все още е валиден

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