Мазмұны:
- 1 -қадам: Қолдау тізбегін қосыңыз (MCP3008)
- 2 -қадам: IR сенсорларын орнатыңыз
- 3 -қадам: тестілеу уақыты
- 4 -қадам: Виртуалды сенсор - AmpSensor
- 5 -қадам: Навигация
- 6 -қадам: Қорытынды ойлар, келесі кезең …
Бейне: Уоллес автономды роботы - 4 -бөлім - IR қашықтығы мен «күшейткіш» сенсорларын қосыңыз: 6 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:26
Сәлеметсіз бе, бүгін біз Уоллестің мүмкіндіктерін жақсартудың келесі кезеңін бастаймыз. Атап айтқанда, біз инфрақызыл қашықтық датчиктерінің көмегімен кедергілерді анықтау және болдырмау қабілетін жақсартуға тырысамыз, сонымен қатар Roboclaw мотор-контроллерінің токты бақылап, оны виртуалды (бағдарламалық қамтамасыз ету) «сенсорға» айналдыру мүмкіндігін пайдаланамыз. Соңында, біз SLAMсіз қалай жүруге болатынын қарастырамыз (бір мезгілде орналасу мен картаға түсіру) (әзірше), өйткені роботта әлі де IMU (инерция өлшеу бірлігі) немесе ToF (ұшу уақыты) сенсорлары жоқ.
Навигация арқылы бастапқыда бұл екі негізгі мақсат болады:
- кедергілерден аулақ болыңыз
- ол бір жерде тұрып қалғанын және ешқандай ілгерілемейтінін біліңіз. («прогресс» бұл кез келген маңызды қашықтыққа алға жылжуды білдіреді)
- 3 -ші мақсат - қабырғаға өздігінен теңестіруге тырысу.
Бұл жоба роботтар жиынтығынан басталды және пернетақта мен ssh байланысын қолдана отырып, негізгі қозғалыстарды қабылдады.
Екінші кезең көптеген датчиктерді қосуға дайындалу үшін жеткілікті тірек тізбектерді қосу болды.
Алдыңғы нұсқаулықта біз бірнеше HCSR04 акустикалық датчиктерін қостық, енді робот пәтер айналасында жүріп кедергілерден аулақ бола алады.
Бұл ас үйде және кіреберісте жақсы, қатты тегіс беттері бар болғанымен, асханаға жақындағанда мүлде соқыр болады. Ол үстел мен орындықтың аяқтарын «көре» алмайды.
Жақсартудың бір түрі-әдеттегі қозғалтқыш ағындарын қадағалау, ал егер мәндер секірсе, онда робот бір нәрсеге тиген болуы керек. Бұл жақсы «В жоспары» немесе тіпті С. Бірақ бұл оған асханаға баруға көмектеспейді.
(Жаңарту: шын мәнінде, қазіргі уақытта, ағымдағы бақылау-бұл артқа айналдыру кезінде А жоспары, себебі мен уақытша алып тастадым және сенсорлар артқы жағынан).
Бұл бөлімге арналған бейне кедергілерді болдырмау датчиктерінің соңғы кезеңі болып табылады.
Бейнеде алты HCSR04 акустикалық сенсоры мен екі Sharp IR сенсоры көрінеді. IR сенсорлары бейнеде көп ойнаған жоқ. Олардың роботтары көбінесе робот үстел мен орындықтың аяқтарына қарайтын асханада болады.
Датчиктерден басқа, ағымдық монитор, егер ол бір нәрсеге соғылып қалса, кері айналдыру кезінде ойнады.
Ақырында, ол соңғы 100 қозғалыстың тарихын және бір сұраққа жауап беру үшін кейбір негізгі талдауды пайдаланады:
«Жақында нақты алға жылжу болды ма (немесе ол қайталанатын биде қалып қойды ма?)»
Бейнеде сіз алға-артқа қайталануды көргенде, ол бұрылады, бұл оның алға-артқа үлгіні танығанын білдіреді, осылайша басқа нәрсені қолданады.
Бағдарламалық жасақтаманың осы нұсқасының жалғыз бағдарламаланған мақсаты - үздіксіз алға жылжуға ұмтылу және кедергілерден аулақ болу.
1 -қадам: Қолдау тізбегін қосыңыз (MCP3008)
Инфрақызыл сенсорларды қоспас бұрын, олар мен Raspberry Pi арасындағы интерфейс схемасы қажет болады.
Біз MCP3008 аналогты-цифрлық түрлендіргішті қосамыз. Бұл чипті Raspberry Pi -ге қалай қосуға болатыны туралы көптеген онлайн -ресурстар бар, сондықтан мен бұған көп араласпаймын.
Негізінде, бізде таңдау бар. Егер IR сенсорларының нұсқасы 3В жұмыс істесе, MCP3008 де жұмыс істей алады, содан кейін біз тікелей таңқурайға қосыла аламыз.
[3В IR сенсоры] - [MCP3008] - [Raspberrry Pi]
Менің жағдайда, мен көбінесе 5В жұмыс істеймін, бұл екі бағытты ауыстыруды білдіреді.
[5В IR сенсоры]-[MCP3008]-[5В-тан 3В-ке дейінгі екі бағытты шина]-[Raspberry Pi]
Ескерту: IR сенсорынан бір ғана сигнал шығысы бар. Ол MCP3008 кіріс аналогтық сигнал желілерінің біріне тікелей барады. MCP3008-ден Raspberry Pi-ге (екі бағытты шина арқылы) қосылуымыз керек 4 деректер желісі бар.
Қазіргі уақытта біздің робот екі инфрақызыл сенсорды қолдана бастайды, бірақ біз басқаларын оңай қосамыз. MCP3008 сегіз аналогты кіріс арнасы.
2 -қадам: IR сенсорларын орнатыңыз
Sharp бірнеше түрлі инфрақызыл сенсорларды жасайды және олардың диапазоны мен қамту аймағы әр түрлі. Мен GP2Y0A60SZLF моделіне тапсырыс бердім. Сіз таңдаған модель сенсордың орналасуына және бағдарына әсер етеді. Өкінішке орай, мен қай сенсорды алу керектігін нақты зерттемедім. Бұл «олардың қайсысын беделді көздерден ақылға қонымды уақытта және бағамен алуға болады» шешімі болды.
(Жаңарту: бұл маңызды болмауы мүмкін, себебі бұл сенсор ішкі жарықтандыруды шатастырады. Мен бұл мәселені әлі де зерттеп жатырмын)
Бұл сенсорларды роботқа орнатудың кемінде үш әдісі бар.
- Оларды бекітілген күйде, бір -бірінен сәл алшақ қаратып, алдыңғы жағына қойыңыз.
- Оларды бір -бірінен сәл алшақ қаратып, алдыңғы жағына сервоға қойыңыз.
- Оларды бекітілген күйде, алдыңғы жағына қойыңыз, бірақ бір -біріне қарама -қарсы бұрышта, сол жақта және оң жақта.
№1 таңдауды #3 таңдауымен салыстыра отырып, менің ойымша, №3 соқтығысу аймағын көбірек қамтиды. Егер сіз суреттерге қарасаңыз, №3 таңдау тек сенсорлық өрістер бір -біріне сәйкес келуі үшін ғана емес, сонымен қатар олар роботтың ортасы мен енінің сыртында да жабылуы мүмкін.
№1 таңдау кезінде сенсорлар бір -бірінен қаншалықты алыс орналасқан сайын, орталықтағы соқыр нүкте соғұрлым көп болады.
Біз №2 жасай алар едік (мен мүмкіндік ретінде серво бар кейбір суреттерді қостым) және оларды тазалауды сұрай аламыз, және бұл көп аумақты қамтуы мүмкін. Дегенмен, мен кем дегенде екі себеп бойынша серво пайдалануды мүмкіндігінше кешіктіргім келеді:
- Біз Raspberry Pi -де PWM байланыс арналарының бірін қолданамыз. (Мұны жақсартуға болады, бірақ бәрібір …)
- Сервомен ағымдағы ұтыс маңызды болуы мүмкін
- Ол аппараттық және бағдарламалық жасақтамаға көбірек қосады
Мен ұшу уақыты (ToF) сияқты маңызды сенсорларды немесе мүмкін камераны қосқанда, серво опциясын кейінірек қалдырғым келеді.
№2 таңдаудың тағы бір мүмкін артықшылығы бар, ол басқа екі нұсқада қол жетімді емес. Бұл IR сенсорлары жарыққа байланысты шатастыруы мүмкін. Мүмкін, робот жақын орналасқан объектіні оқи алады, бірақ жақын орналасқан объект жоқ. №3 таңдау кезінде, олардың өрістері бір -біріне сәйкес келуі мүмкін болғандықтан, екі сенсор да бір объектіні тіркей алады (әр түрлі бұрыштан).
Сондықтан біз №3 орналастыру таңдауымен жүреміз.
3 -қадам: тестілеу уақыты
Біз Raspberry Pi, MCP3008 ADC және Sharp IR сенсорлары арасындағы барлық байланыстарды орнатқаннан кейін, тестілеудің уақыты келді. Жүйенің жаңа сенсорлармен жұмыс істейтініне көз жеткізу үшін қарапайым тест.
Алдыңғы нұсқаулықтардағыдай, мен мүмкіндігінше wiringPi C кітапханасын қолданамын. Істерді жеңілдетеді. WiringPi веб -сайтына шолу жасау өте айқын емес нәрсе - бұл MCP3004/3008 тікелей қолдауының болуы.
Онсыз да SPI кеңейтімін қолдануға болады. Бірақ қажет емес. Егер сіз WordPi үшін Гордонның git репозиторийіне мұқият қарасаңыз, олардың біреуі MCP3004/3008 арналған чиптер тізімін көресіз.
Мен кодты файл ретінде тіркеуді шештім, себебі мен оны осы бетте дұрыс көрсете алмадым.
4 -қадам: Виртуалды сенсор - AmpSensor
Сыртқы әлем туралы роботты алудың әр түрлі әдістері соғұрлым жақсы.
Қазіргі уақытта роботта HCSR04 акустикалық дыбыс датчиктерінің сегіз датчигі бар (олар осы нұсқаулықта емес), енді оның екі Sharp IR қашықтық сенсоры бар. Жоғарыда айтылғандай, біз тағы бір нәрсені пайдалана аламыз: Робоклавтың қозғалтқыш токтарын сезу мүмкіндігі.
Біз бұл сұранысты мотор-контроллерге C ++ класына орап, оны AmpSensor деп атай аламыз.
Бағдарламалық жасақтамаға кейбір «ақылдыларды» қосу арқылы біз түзу қозғалыста (алға, артқа), сондай-ақ айналмалы қозғалыстарда (солға, оңға) әдеттегі ток тартылуын бақылай аламыз және реттей аламыз. Біз ампер диапазонын білгеннен кейін, біз сыни мәнді таңдай аламыз, егер AmpSensor мотор-контроллерден осы мәннен асып кететін ток алса, біз қозғалтқыштардың тоқтап қалғанын білеміз және бұл әдетте робот соғылғанын көрсетеді. бір нәрсеге.
Егер біз бағдарламалық жасақтамаға біршама икемділік қосатын болсақ (жұмыс кезінде командалық жолдың аргументтері және / немесе пернетақтаның кірісі), онда біз роботтың қозғалуына және объектілерге соғылуына мүмкіндік беру арқылы эксперимент кезінде «сыни ампер» шегін арттыра / төмендете аламыз, екеуі де тікелей немесе айналу кезінде.
Бағдарламалық жасақтаманың навигациялық бөлігі қозғалыс бағытын білетіндіктен, біз бұл ақпаратты қолдана аламыз, мүмкін қозғалысты тоқтатамыз және басқа әрекетті бастамас бұрын қысқа уақытқа қозғалысты өзгертуге тырысамыз.
5 -қадам: Навигация
Қазіргі уақытта робот нақты әлемдегі кері байланыспен шектелген. Ол кедергілерден аулақ болуға арналған бірнеше жақын датчиктерге ие, ал қашықтық датчиктері кедергіні жіберіп алса, ағымдағы қозғалысты бақылаудың артқа шегіну техникасы бар.
Олда кодерлері бар қозғалтқыштар жоқ, және ИМУ (инерциалды-өлшеу бірлігі) жоқ, сондықтан оның шынымен қозғалатынын немесе айналатынын, қаншалықты екенін білуді қиындатады.
Қазіргі уақытта роботта орналасқан датчиктермен қашықтықты анықтауға болады, бірақ олардың көзқарасы кең және болжау мүмкін емес. Акустикалық дыбыс артқа дұрыс көрінбеуі мүмкін; инфрақызыл басқа жарықтандырумен, тіпті бірнеше шағылысатын беттермен шатастырылуы мүмкін. Мен роботтың қаншалықты және қай бағытта қозғалатынын білу үшін қашықтықтың өзгеруін бақылауға тырысудың қажеті жоқ екеніне сенімді емеспін.
Мен әдейі Arduino сияқты микроконтроллерді пайдаланбауды таңдадым, себебі а) маған psuedo-C ++ ортасы ұнамайды, б) және тым көп даму оқу-жазу жадын тоздырады (?), Және мен дамыту үшін негізгі компьютер қажет болады (?). Немесе мен Raspberry Pi сияқты болатын шығармын.
Raspbian жұмыс істейтін Pi-бұл нақты уақыттағы ОЖ емес, сондықтан сенсорлардың тұрақсыздығы мен ОЖ әр уақытта дәл оқымайтын арасында мен сенсорлардың мақсаты кедергілерден аулақ болу үшін қолайлы екенін сездім. нақты қашықтықты өлшеу.
Бұл тәсіл ToF (ұшу уақыты) сенсорларын (кейінірек) осы мақсатта (SLAM) қолдана алатын кезде, пайдасы көп емес сияқты көрінді.
Біз қолдана алатын тәсілдердің бірі-соңғы X секунд ішінде қандай командалар шығарылғанын бақылау.
Мысал ретінде робот диагональ бойынша бұрышқа қарап тұрып қалды деп айтыңыз. Датчиктердің бір жиынтығы оның бір қабырғаға тым жақын орналасқанын айтады, сондықтан ол айналады, бірақ содан кейін басқа сенсорлар оған басқа қабырғаға тым жақын екенін айтады. Бұл жай ғана жанама үлгіні қайталаумен аяқталады.
Жоғарыда келтірілген мысал өте қарапайым жағдай. Ақылдылықты қосу қайталанатын үлгіні жаңа деңгейге көтеруі мүмкін, бірақ робот бұрышта қалады.
Мысалы, артқа және артқа айналудың орнына, ол бір жаққа бұрылады, бір сәтте кері айналады (содан кейін маңызды қашықтық көрсеткіштерін тазартады), ал егер ол басқа бағытта бұрылса да, ол әлі де бір бұрышпен бұрышқа қарай алға жылжиды., бір нәрсенің күрделірек үлгісін қайталау.
Бұл дегеніміз, біз командалар тарихын қолдана аламыз және бұл ақпаратты қалай пайдалану керектігін қарастырамыз.
Мен қозғалыс тарихын қолданудың екі негізгі (қарапайым) тәсілін ойлай аламын.
- қозғалыстардың соңғы X саны үшін олар Y паттернге сәйкес келеді. Қарапайым мысал болуы мүмкін (және бұл болды) «АЛҒА, РЕВЕРС, АЛҒА, РЕВЕРС, …..». Сонымен, TRUE (үлгі табылды) немесе FALSE (табылмады) қайтаратын сәйкес функция бар. Егер TRUE болса, бағдарламаның шарлау бөлігінде басқа қозғалыс тізбегін қолданып көріңіз.
- қозғалыстардың соңғы X саны үшін жалпы немесе таза алға қозғалысы бар ма? Нақты алға жылжу дегенді қалай анықтауға болады? Жақсы.. бір қарапайым салыстыру - бұл соңғы X қозғалысы үшін «АЛҒА» «РЕВЕРС» -ке қарағанда жиі кездеседі. Бірақ бұл жалғыз болуы керек емес. Бұл қалай: «ДҰРЫС, ОҢ, СОЛ, ОҢ». Бұл жағдайда робот бұрыштан шығу үшін дұрыс бұрылыстар жасауы керек немесе қабырғаға бұрышпен жақындағандықтан, бұл нақты алға ілгерілеу деп санауға болады. Екінші жағынан, «СОЛҒА, ОҢҒА, СОЛҒА, ОҢҒА …» нақты алға жылжу деп санауға болмайды. Осылайша, егер «ДҰРЫС» «СОЛҒА» немесе «СОЛҒА» «ОҢҒА» қарағанда көп орын алса, онда бұл нақты прогресс болуы мүмкін.
Нұсқаулықтың басында мен 3 -ші мақсаттың квадратқа немесе қабырғаға туралауға болатынын айттым. Бұл үшін бізге «біз қандай да бір объектіге жақынбыз» дегеннен гөрі қажет. Мысалы, егер біз қашықтыққа қатысты жақсы, тұрақты жауаптар беру үшін алдыға бағытталған екі акустикалық сенсорды ала алатын болсақ (егер бұл мақалада емес), егер біреуі екіншісінен әлдеқайда өзгеше болса, робот қабырғаға жақындады. бұрышта және бұл мәндердің бір -біріне жақындағанын (қабырғаға төртбұрышты қараған) қарау үшін маневр жасауға тырысуы мүмкін.
6 -қадам: Қорытынды ойлар, келесі кезең …
Бұл нұсқаулық кейбір идеялар берді деп үміттенемін.
Датчиктерді қосу кейбір артықшылықтар мен қиындықтарды көрсетеді.
Жоғарыда айтылған жағдайда, барлық акустикалық сенсорлар бір-бірімен жақсы жұмыс жасады және бұл бағдарламалық жасақтамамен өте қарапайым болды.
Инфрақызыл сенсорлар микске енгізілгеннен кейін бұл біршама қиынға соқты. Себебі, олардың кейбір көзқарастары акустикалық сенсорлармен сәйкес келеді. Инфрақызыл сенсорлар қоршаған орта жағдайының өзгеруіне байланысты біршама сезімтал және күтпеген болып көрінді, ал әрине акустикалық сенсорларға жарық әсер етпейді.
Егер акустикалық сенсор бізге ешқандай кедергі жоқ екенін айтса, не істеу керек болды, бірақ IR сенсоры.
Әзірге, сынақтан және қателіктен кейін, заттар келесі басымдықпен аяқталды:
- күшейту сезімі
- IR сенсорлық
- акустикалық сезгіштік
Мен IR сенсорларының сезімталдығын төмендету үшін жасадым, сондықтан олар өте жақын объектілерді (мысалы, орындықтың аяқтары) анықтай алады.
Әзірге көп ағынды немесе үзіліспен басқарылатын бағдарламалық жасақтаманы жасаудың қажеті болған жоқ, дегенмен мен кейде Raspberry Pi мен Roboclaw мотор-контроллері арасындағы басқарудың жоғалуына (сериялық байланыстың жоғалуына) тап боламын.
Бұл жерде E-Stop схемасы (алдыңғы нұсқауларды қараңыз) әдетте қолданылады. Алайда, мен әзірге Робоклавты қалпына келтіруге мәжбүр болғым келмегендіктен, робот соншалықты тез жүрмейді, мен оны бақылап, өшіруге дайынмын. E-Stop қосылды.
Ақыр соңында, көп ағынды қажет болады.
Келесі қадамдар…
Осы уақытқа дейін жеткізгеніңізге рахмет.
Мен бірнеше VL53L1X IR лазерлік ToF (ұшу уақыты) сенсорларын алдым, сондықтан бұл сервомен бірге келесі нұсқаулықтың тақырыбы.
Ұсынылған:
Өңдеу мен Arduino мен 7 сегменті мен сервистік GUI контроллерін қосу: 4 қадам
Processing and Arduino мен Make 7 Segment and Servo GUI контроллерін қосу: Кейбір жобалар үшін сізге Arduino -ны қолдану қажет, себебі ол прототиптеудің оңай платформасын ұсынады, бірақ Arduino -ның сериялық мониторында графиканы көрсету өте ұзақ уақытты қажет етеді және тіпті қиын. Сіз Arduino сериялық мониторында графиктерді көрсете аласыз
Ардуино роботы қашықтығы, бағыты мен айналу дәрежесі (шығыс, батыс, солтүстік, оңтүстік) Bluetooth модулі мен автономды робот қозғалысы арқылы дауыспен басқарылады.: 6 қадам
Ардуино роботы қашықтығы, бағыты мен айналу дәрежесі бар (шығыс, батыс, солтүстік, оңтүстік) Bluetooth модулі мен автономды робот қозғалысының көмегімен дауыспен басқарылады. Бұл нұсқаулықта Arduino роботын қалай жасау керектігін түсіндіреді, оны қажетті бағытта жылжытуға болады (Алға, артқа) , Солға, Оңға, Шығысқа, Батысқа, Солтүстікке, Оңтүстікке) Дауыс пәрменін қолдану арқылы сантиметрдегі қашықтық қажет. Роботты автономды түрде жылжытуға болады
Автономды және қашықтан басқару роботы: 11 қадам
Автономды және қашықтан басқару роботы: Бұл робот салыстырмалы түрде арзан және жылдам болуға арналған. Мұнда сізге бастау керек: 1 Raspberry Pi 1 қос H-көпірлі мотор драйвері 1 конвертер 2 3V-6V тұрақты ток қозғалтқыштары HC-SR04 ультрадыбыстық сенсор Басқа шасси ретінде әрекет ететін қорап M
Май роботы: экзистенциалды дағдарысы бар Arduino роботы: 6 қадам (суреттермен)
Сары май роботы: экзистенциалды дағдарысы бар Arduino роботы: Бұл жоба «Рик пен Морти» анимациялық сериясына негізделген. Эпизодтардың бірінде Рик робот жасайды, оның жалғыз мақсаты - май әкелу. Брюсфейдің (Брюссель инженерлік факультетінің) студенттері ретінде бізде механикаға тапсырма бар
[Arduino роботы] Роботты қалай түсіруге болады - Бас бармақ роботы - Серво моторы - Бастапқы код: 26 қадам (суреттермен)
[Arduino роботы] Роботты қалай түсіруге болады | Бас бармақ роботы | Серво моторы | Бастапқы код: Бас бармақ роботы. MG90S сервоқозғалтқышының потенциометрі қолданылды. Бұл өте көңілді және оңай! Код өте қарапайым. Бұл шамамен 30 жол. Бұл қозғалысты түсіруге ұқсайды. Кез келген сұрақ немесе пікір қалдырыңыз! [Нұсқаулық] Бастапқы код https: //github.c