Съдържание:

4WD робот, управляван чрез отдалечен USB геймпад: 6 стъпки
4WD робот, управляван чрез отдалечен USB геймпад: 6 стъпки

Видео: 4WD робот, управляван чрез отдалечен USB геймпад: 6 стъпки

Видео: 4WD робот, управляван чрез отдалечен USB геймпад: 6 стъпки
Видео: ZemiSmart ZM-H7 - индукционный зигби выключатель, работающий от взмаха руки 2024, Юни
Anonim
Image
Image

За следващия ми проект по роботика бях принуден да проектирам/проектирам собствена платформа за роботи поради непредвидени обстоятелства.

Целта е тя да бъде автономна, но първо трябваше да тествам основните й шофьорски способности, затова си помислих, че би било забавен страничен проект да се държим и да бъдем контролирани, сякаш е RC (радиоуправляемо) превозно средство, но вместо това използвайте USB геймпад.

Резултатите бяха приблизително толкова добри или по -добри, отколкото очаквах.

Предимството на преминаването по маршрута на USB геймпад с много програмиране е, че мога да го персонализирам и добавя към това, което вече съм направил. Нямам реален опит в изграждането на RC превозно средство, но си представям, че е почти заседнало с каквото и да е RC предавател (джойстици/бутони и т.н.) и RC приемник.

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

По избор може да се добавят някои USB уеб камери към робота, в зависимост от това колко и тяхното разположение, може да се кара роботът около жилищната зона и в друга стая, докато седи някъде другаде пред компютъра, към който е свързан USB геймпад то.

Тази инструкция няма да бъде вярно, подробно, всеобхватно, стъпка по стъпка как, но ще се опитам да дам колкото се може повече подробности.

Консумативи

Предложени части: Повечето от това получих от Servo City (Actobotics).

2 - 13,5 U -канали, за страните на основната рамка. Двигателите са монтирани върху това. Аз отидох с нещо по -късо и моторите ми са монтирани в самите ъгли и това затрудни монтирането им.

2 - 12 U -канала за предната и задната част на основната рамка.

2 - 15 U -канала за брони, отпред и отзад

2 - 7 (или беше 7,5 ?) U -канали за предните колони. Това не е твърде критично, дължините могат да варират. Зависи колко високи са задните колони и на каква височина сте избрали да поставите ъгловите U-канал, който се свързва помежду им.

2-(дължина?) U-канали за ъгловия елемент, отпред-назад, свързващи изправените колони. Това е от решаващо значение, тъй като Servo City / Actobotics продава 45 градусови ъглови панели или скоби за тази цел, но ще трябва да направите малко математика / триг, за да сте сигурни, че получавате правилните дължини.

2-(дължина?) U-канали, които да служат като странични брони от по-високо ниво, отново те зависят от това, което правите с основата

2-(дължина?) U-канали, които да служат като предна и задна броня от по-високо ниво, също така по-горе.

1 - (дължина?) U -канал, който служи като най -горния член, обхваща задните колони. Това може да не е твърде критично, тъй като можете да го монтирате отгоре или пред / зад изправените колони.

12 (около) L-канала или скоби. Те служат за множество цели, но по същество осигуряват структурна цялост/здравина на ъглите на основната рамка И изправените колони.

4 (+?) Плоски канала с 3 отвора до 5 отвора. Те също така осигуряват структурна здравина на робота.

ServoCity продава два основни вида плоски панели с голяма площ, полезни за използване като долна плъзгаща се табла или отгоре, където биха отишли вашата батерия и / или контролери, или дори за по-висока повърхност за сензори.

Има 4 (4,5?) Панел "X 12" и мисля, че другият е панел 9 (9,5?) "X 12.

Тук нещата стават интересни и може да са объркващи и скъпи (малки части се събират). Всички канали и т.н. могат да бъдат свързани помежду си чрез тези свързващи части, от които има НЯКОЛКО. Тук съжалявам, че нямам изчерпателен, подробен и конкретен списък с части.

И работата е там, че всъщност не знаете кои от тях може да ви трябват или колко.. защото има толкова много начини, по които можете да поставите тези парчета заедно.

Мога да изброя какво съм използвал:

www.servocity.com/90-quad-hub-mount-c

www.servocity.com/side-tapped-pattern-moun…

www.servocity.com/90-quad-hub-mount-d

Следните две са много удобни и просто бих се запасил с тях:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Следва всички винтове (болтове). Започнах с пакет от ВСЕКИ размер и преминах през повечето от тях. Използвах по -дълги винтове, където размерът нямаше значение, и запазих по -късите за мястото, където бяха ЗАДЪЛЖИТЕЛНИ, защото друга дължина нямаше да работи.

И накрая, трябва да получите 1 торба от тези:

www.servocity.com/6-32-nylock-nuts-pack

Не използвах толкова много, но те (мисля) са от решаващо значение, за да се уверите, че двигателите ви не вибрират от рамката с течение на времето. Само два ще работят на мотор, поради U-канала

Ще ви трябват най -малко 4 от тях, може да получите допълнителен, ако го повредите (повярвайте ми, може да поставяте / сваляте моторите няколко пъти):

www.servocity.com/heavy-duty-clamping-shaf…

Обикновено валовете на двигателите са 6 мм, а осите са 1/4 (0,25 инча).

Бих взел някои черни винтове, уж по -здрави, и бих ги използвал за горните скоби, а НЕ използвам винтовете, които идват със скобите:

(Мисля, че това са тези):

Лагери с диаметър 4 - 1/4 "(0,25")

1 - торба с черни разделители 1/4"

4 - Затягащи D -главини

www.servocity.com/0-770-clamping-d-hubs

4-D-валове (#6340621.375 "(1-3/8")

4 - 6 -инчови джанти за тежък товар

www.servocity.com/6-heavy-duty-wheel

Обърнете внимание, че обичам тези колела, но те имат твърд гумен ръб. Изглежда, че се справят добре на твърди подове, килими и вероятно твърди бетонни разходки. Няма да се справи добре с трева, пясък и т.н.

СЪЩО, те ще са склонни да размазват килима ви !!!

4 - двигатели:

www.servocity.com/motors-actuators/gear-mo…

Отидох с 223 оборота в минута, добра максимална скорост на закрито, също можех да премествам робота си (тежък с 2 SLA 12V батерии) доста бавно.

2 - моторни енкодери за двигателите. (Roboclaw от Servo City се справя само с 2 кодера)

1 - Контролер на двигателя на Roboclaw 2X45A, уверете се, че сте получили този със зелените клеми, а не щифтовете…. добре … всеки има своите предимства. Отзад.. Може да съм получил щифтовете.

Мисля, че това е от Servo City.

SparkFun продава Arduino Uno (това е, което използвах), а също и Redboard Artemis като ваш мениджър на устройства.

Ще искате Raspberry Pi 3 (или 4?) Като ваши "мозъци" на високо ниво и интерфейс за вас.

Ще ви трябват окабеляване, превключватели, предпазители и много здрав диод за „прелитане“.

Използвах SLA батерия с дълъг цикъл Duracell 12V 14AH, но можете да използвате каквото и да е.

ВНИМАНИЕ! Дизайнът на този робот (ВИСОК и широк, но КРАТКИ) предполага вид на тежък център на тежестта, като например SLA батерия. Може да не се справи добре с тези други видове батерии с по -нова технология. LiPo, Lion и др. Може лесно да се преобърне.

От Pololu получих няколко адаптера за барел, за да мога независимо да захранвам Arduino и/или Redboard, въпреки че те ще бъдат свързани към Raspberry чрез USB, защото не исках да разчитам на мощността на Raspberry. (Особено монтаж на камери, сензори и др.)

Ще ви е необходим регулатор на напрежение от 12 до 5V, минимум 5A (?) За малината. Другите могат да се справят с всичко между 7 до 15V толкова директно към SLA батерията.

Това е всичко за части.

Това, което НЕ бих направил - 90 градусова скосена предавка.

Отново има много видеоклипове в плейлиста ми за YouTube на Robotics, подробно описващи повечето от горните.

Стъпка 1: Строителство

Честно казано, всички мои строителни стъпки вече са под формата на youtubes. Можете да ги видите в плейлиста ми за роботика, започвайки от „Wallace Robot 4“. Предишните (Wallace II, Wallace III) също имат добър материал

www.youtube.com/playlist?list=PLNKa8O7lX-w…

Стъпка 2: Тествайте Roboclaw, двигатели и енкодери

Производителите на Roboclaw (BasicMicro) имат приложение за Windows, което можете да използвате, за да се уверите, че сте свързали правилно двигателите и енкодерите към Roboclaw. Ще свързвате двигатели от една и съща страна успоредно на Roboclaw. Можете да изберете да използвате проводниците на енкодера, само на задните двигатели, или на предните двигатели, или може би дори по -добре - ДИАГОНАЛНО.

Причината за предложението ми е свързана с (по -късно) проверка за заседнал робот. Да имаш диагонално състояние, ако предните/задните колела не се въртят, може да е по -добро от само предните или само задните.

ЗАБЕЛЕЖКА: това, което НЕ съм направил, е да използвам Arduino за свързване (чрез GPIO щифтове) към енкодерите - ако сте направили това, можете да накарате Roboclaw да управлява 2 енкодера, а след това да накара Arduino да обработва другите два и просто попитайте Roboclaw за неговите две стойности на енкодера (и скорости).

ЗАБЕЛЕЖКА: Използвах приложението BasicMicro, за да конфигурирам предварително Roboclaw за Ramping Up / Ramping Down. Това е добре за защита на хардуера и електрониката. Има видео за това в плейлиста ми за роботика.

Почти забравих: Купих и някои кабели за свързване на куршуми, които минават между кабелите на двигателя и Roboclaw. ЗАБЕЛЕЖКА: ако направите това, ще забележите, че общата дължина на кабела е НАИСТИНА ДЪЛГА. Но не исках да се нарязвам, ако не се наложи. Аз (за по -късни стъпки) срещам проблеми с комуникацията с USB между Raspberry и Arduino, вероятно поради шума от EMI.. но съм работил около това със софтуер.

Ако това стане проблем, можете да отрежете проводниците късо - можете също да закупите метална екранировка (от Amazon, диаметър 1 ).

Последно нещо: Това, което тепърва ми предстои да направя-да настроя или конфигурирам автоматично настройката на Roboclaw (използвайки енкодери), така че и лявата, и дясната страна да се движат със същата скорост, а роботът да върви направо.

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

Стъпка 3: Добавяне и програмиране на Arduino

Ще ви е необходим щепсел на цевта и малко окабеляване, също и USB кабел. Уверете се, че сте получили правилния за конектора Arduino.

Ще трябва да изтеглите Arduino IDE.

Тук в Github е най -новата скица, която управлява шофирането на робота:

github.com/elicorrales/wallace.robot.ardui…

Ще свържете Arduino към вашия компютър, работещ с IDE, и въз основа на начина, по който е написана скицата, ще използвате щифтове 10 и 11 на Arduino за серийни комуникации (Software Serial) с Roboclaw.

Разработих прост комуникационен протокол между Raspberry Pi и Arduino.

Той е базиран на ASCII символи, което улеснява отстраняването на грешки и тестването само с помощта на прозореца за сериен монитор на Arduino IDE.

Командите започват от номер "0" (нула) и просто се издигат според нуждите

Командите, започващи в "20", са директни команди на Roboclaw, а тези под този номер са строго свързани с Arduino команди.

Поради EMI шума подобрих командния низ, за да включа контролна сума.

Така че всеки низ ще включва:

# брой символи в низ, включително този

контролната сума

Например, кажете, че искате Arduino да отговори със своето меню от команди:

4 0 12 16

"4" е четири символа в низ.

"0" е командата MENU.

"12" е случайното число, което избрах.

"16" е сумата от 4 + 0 + 12.

Същата команда MENU може да бъде различна:

4 0 20 24

Тъй като избрах различно произволно число, контролната сума също е различна.

Например, да речем, че искате да продължите напред със 100 % скорост:

5 29 0 134 100

"5" пет жетона

"29" командата НАПРЕД

"0" случайното число

"134" контролната сума

"100" параметър 1 (скоростта в този случай)

Ако Arduino не може да провери този входящ низ, той просто го изпуска / игнорира, няма отговор.

Ако Arduino не получи следваща команда за движение с X милисекунди, той изпраща STOP двигатели към Roboclaw.

Arduino се стартира и започва да изпраща автоматично състояние до USB порта … освен ако не му бъде казано да спре да прави това.

В този момент трябва да сте готови да опитате да контролирате Roboclaw и да наблюдавате как двигателите се въртят, само като използвате "Serial Monitor" на IDE.

Стъпка 4: Добавяне и програмиране на Raspberry Pi (node.js)

Отново, ако погледнете моя плейлист за роботика, дори от самото начало, преминах през всяка стъпка, за да стартирам Raspberry.

Единственото нещо, което може да съм пренебрегнал, е, че ще се нуждаете от 5V регулатор и или по някакъв начин ще изградите, изрежете/промените USB кабел за него или захранвате малината по друг начин.

Тук в Github има всичко необходимо в Raspberry за комуникация с Arduino чрез USB.

github.com/elicorrales/wallace.robot.raspb…

Има дори тестови скриптове.

Можете да разгледате кода на сървъра node.js и ще видите как Raspberry преобразува кратките цифрови инструкции в URL низове тип REST. Можете да използвате „curl“за изпращане на тестови команди.

Пример:

вашият RP3 IP адрес: 8084/arduino/api/forward/50

ще накара моторите за момент да завъртят колелата напред.

Ако поставите това в цикъл на скрипт на черупка, ще видите, че колелата продължават да се въртят.

Кодът node.js (server.js) включва функция за повторно свързване в случай, че серийните комуникации са загубени за Arduino. Можете да тествате това, като просто изключите Arduino от Raspberry и го включите отново.

Уверете се, че съответствате на серийната скорост на предаване между двете.

Поради изпускането на лоши пакети от данни на Arduino и тъй като на ниво node.js и на ниво javascript на браузъра всичко е кодирано за изпращане на много команди за "задвижване", успях да изпълня до 2 000 000 бода (2Mbps).

Ако стартирате тестовите скриптове и виждате как колелата се въртят, значи сте готови за следващата стъпка.

Стъпка 5: Последна стъпка - Програмиране / Използване на клиента на уеб страница

Включени във връзката на Github към частта от малината на всичко това са клиентските файлове.

index.html. index.js. p5.min.js.

Те управляват USB геймпада чрез API за геймпад (базиран на браузър) и трябва да видите различните бутони и плъзгачи, достъпни също на уеб страницата.

Кодът на JavaScript запитва (анкетира) стойностите на оста X и Y за един от джойстиците.. (в зависимост от това какви джойстици/геймпад имате, може да се наложи да промените кода). Опитва се много бързо и изхвърля всички тези стойности на сървъра node.js, който слуша на 8084.

Суровите стойности на оста X и Y на джойстиците са между 0 и 1.

Но библиотечната функция на Roboclaw контролера на двигателя, използвана в Arduino за задвижване на двигателите, очаква стойност между -100 до 0 (назад) или (0 до 100) напред.

Су …. това е целта да се включи p5.min.js. Случва се да имате тази много хубава, удобна функция map (), където й давате сурова стойност, нейния суров (текущ) диапазон и новия, желания диапазон. И той преобразува суровата стойност в стойността в новия, картографиран диапазон.

Друг момент: При 100 скорости роботът може да бъде много труден. Постоянно се сблъсквах с нещо. Но дори и да се усъвършенствате в това, той все още е трогателен при завъртане наляво или надясно.

Нещо, което да добавите, би било подобно на текущия плъзгач за максимална скорост на уеб страницата. Този плъзгач определя коя е най -високата или максималната стойност, към която ще нанесете джойстиците Xs и Ys.

Пример:

Да речем, че картографирате 0 -> 1 до 0 -> 100. Когато натиснете точката на джойстика, вие сте на 100. Докосване. Може да е твърде бързо.

Но ако плъзнете този плъзгач за максимална скорост малко назад, сега картографирате 0 -> 1 до 0 -> 80 или 70.

Това означава, че имате повече свобода на движение, за да преместите джойстика си, без да се изпраща толкова голяма промяна в скоростта до node.js (и към Arduino).

Освен това можете да направите това да разделите Xs (завъртане наляво или надясно) от Ys (напред или назад) в техните собствени максимални налични скорости.

По този начин можете да оставите Ys на 0 до 100, 0 до -100 за бързо линейно движение, но да намалите максималната скорост на Xs за по -контролирано въртеливо движение. Най-доброто от двата свята.

Стъпка 6: По избор: Управлявайте робот с мишката Плъзнете и / или докоснете събития

Ако сте стигнали дотук, знаете, че софтуерните слоеве, започвайки от браузъра и пробивайки надолу през Javascript и към сървъра Raspberry node.js, накрая към arduino, преобразуват джойстика X и Y на геймпада в " команди напред (или "назад" и т.н.) (и тяхната скорост).

Освен това знаете, че докато Xs и Ys на джойстиците са отрицателни 1, през нула, до плюс 1, те трябва да бъдат преобразувани между нула и 100. Е, максималната зависи от настройката за максимална скорост на уеб страницата.

Така че … единственото нещо, което трябва да направите, за да използвате или мишката, или докосване на събития (както на смартфон), е да заснемете тези събития, да вземете X и Y.

НО ---- тези X и Y не са между отрицателни 1 и 1. Те започват с 0 и се увеличават положително, защото по същество те са пикселите или относителните координати на екрана на някой HTML елемент (като например начален панел) или платно.

Така че отново функцията "map ()" на библиотеката на J5 на P5 е много удобна за пренасочване към това, от което се нуждаем.

Преработих кода, за да има две различни уеб страници, едната за настолни компютри с помощта на геймпада, другата за мобилни, използвайки събития за докосване.

Също така, след като X и Y са пренасочени, те се подават в същата верига от код и т.н., както и X и Y от геймпада.

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