Mundarija:

Rpibot - Robototexnika haqida: 9 qadam
Rpibot - Robototexnika haqida: 9 qadam

Video: Rpibot - Robototexnika haqida: 9 qadam

Video: Rpibot - Robototexnika haqida: 9 qadam
Video: Робототехника 2.0: объединение искусственного интеллекта и RPA 2024, Iyul
Anonim
Rpibot - Robototexnika o'rganish haqida
Rpibot - Robototexnika o'rganish haqida

Men nemis avtomobilsozlik kompaniyasida dasturiy ta'minot muhandisiman. Men bu loyihani o'rnatilgan tizimlar uchun o'quv platformasi sifatida boshladim. Loyiha erta bekor qilindi, lekin menga shu qadar yoqdiki, bo'sh vaqtimda davom etdim. Bu natija…

Menda quyidagi talablar bor edi:

  • Oddiy uskuna (asosiy e'tibor dasturiy ta'minot)
  • Arzon uskunalar (taxminan 100 evro)
  • Kengaytirilishi mumkin (ba'zi variantlar allaqachon tavsifning bir qismi)
  • Barcha komponentlar uchun besleme zo'riqishida bitta 5V manbadan (quvvat banki)

O'qishdan boshqa maqsad yo'q edi. Platformani o'rganish, kuzatish, robot tanlovlari uchun ishlatish mumkin …

Bu yangi boshlanuvchilar uchun qo'llanma emas. Sizga ba'zi asosiy bilimlar kerak:

  • Dasturlash (Python)
  • Asosiy elektronika (modullarni to'g'ri kuchlanish bilan ulash uchun)
  • Boshqarish nazariyasi (PID)

Nihoyat, siz men kabi muammolarga duch kelishingiz mumkin. Qiziqish va sabr -toqat bilan siz loyihadan o'tasiz va muammolarni hal qilasiz. Mening kodim iloji boricha sodda va maslahat berish uchun tanqidiy kod satrlari izohlangan.

To'liq manba kodi va fayllar bu erda mavjud:

Ta'minot:

Mexanika

  • 1x kontrplak taxtasi (A4 o'lchami, qalinligi 4 mm)
  • 3x M4 x 80 Vint va non
  • Enkoder uchun ikkinchi chiqish milli 2x tishli motorlar. G'ildiraklar.
  • 1x bepul g'ildirak

1x Pan va qiyalik kamerani o'rnatish (ixtiyoriy)

Elektronika

  • Sarlavha va kamera bilan 1x Raspberry Pi Zero
  • 1x PCA 9685 servo boshqaruvi
  • 2x optik kodlovchi g'ildiragi va sxemasi
  • 1x ayol o'tish simlari
  • 1x USB quvvat banki
  • 1x DRV8833 ikkita dvigatelli haydovchi
  • Kamerani siljitish va egish uchun 2x Micro servo SG90 (ixtiyoriy)
  • 1x MPU9250 IMU (ixtiyoriy)
  • 1x HC-SR04 ultrasonik masofa sensori (ixtiyoriy)
  • 1x teshilgan taxta va lehim simlari, sarlavhalar,…

1 -qadam: Shassini yarating

Shassini yarating
Shassini yarating
Shassini yarating
Shassini yarating
Shassini yarating
Shassini yarating

Men yaxshi mexanik dizayner emasman. Loyihaning maqsadi shassisda ko'p vaqt sarflash emas. Qanday bo'lmasin, men quyidagi talablarni aniqladim:

  • Arzon materiallar
  • Tez yig'ish va demontaj qilish
  • Kengaytirilishi mumkin (masalan, sensorlar uchun joy)
  • Elektron uchun energiyani tejash uchun engil materiallar

Kontrplakdan oson va arzon shassi yasash mumkin. Tarmoqli arra va qo'l matkap bilan ishlov berish oson. Datchiklar va motorlar uchun tutqichlarni yaratish uchun siz kichik yog'och qismlarni yopishtirishingiz mumkin.

Nosoz komponentlarni almashtirish yoki elektr nosozliklarni tuzatish haqida o'ylab ko'ring. Asosiy qismlar almashtiriladigan vintlar bilan mahkamlanishi kerak. Issiq yopishtiruvchi qurol oddiy bo'lishi mumkin, lekin, ehtimol, shassi yasashning eng yaxshi usuli emas … Menga qismlarni osongina qismlarga ajratishning oson kontseptsiyasi haqida o'ylash uchun ko'p vaqt kerak edi. 3D bosib chiqarish yaxshi alternativ, lekin ancha qimmat yoki ko'p vaqt talab qilishi mumkin.

Bepul g'ildirak nihoyat juda engil va oson o'rnatiladi. Muqobil variantlarning hammasi og'ir yoki ishqalanish bilan to'la edi (men oxirgisini topishdan oldin bir nechtasini sinab ko'rdim). Men faqat asosiy g'ildiraklarni o'rnatgandan so'ng, dumsiz g'ildirakni tekislash uchun yog'ochdan ajratgichni kesishim kerak edi.

G'ildirak xususiyatlari (dasturiy ta'minotni hisoblash uchun)

Davrasi: 21, 5 sm Pulslar: 20 ta puls/rev. O'lchami: 1 075 sm (nihoyat 1 puls - taxminan 1 sm, bu dasturiy hisoblar uchun oson)

2 -qadam: Elektronika va simlar

Elektronika va simlar
Elektronika va simlar
Elektronika va simlar
Elektronika va simlar
Elektronika va simlar
Elektronika va simlar

Loyihada diagrammada ko'rsatilganidek, har xil modullar ishlatiladi.

Raspberry Pi Zero asosiy nazoratchi hisoblanadi. Bu sensorlarni o'qiydi va dvigatellarni PWM signali bilan boshqaradi. U Wi -Fi orqali masofaviy kompyuterga ulangan.

DRV8833-bu ikki dvigatelli H-ko'prigi. Bu dvigatellarga etarlicha oqim beradi (Raspberry Pi buni qila olmaydi, chunki chiqishlari faqat ma ni etkazib berishi mumkin).

Optik kodlovchi har safar yorug'lik enkoder g'ildiraklaridan o'tayotganda kvadrat shaklidagi signal beradi. Biz signal har safar o'zgarganda ma'lumot olish uchun Raspberry Pi ning HW uzilishlaridan foydalanamiz.

Pca9695 - bu servo boshqaruv paneli. U I2C seriyali avtobus orqali aloqa o'rnatadi. Ushbu taxta PWM signallari va kameraning egilishi va egilishi uchun servolarni boshqaradigan besleme zo'riqishini ta'minlaydi.

MPU9265-bu 3 o'qli tezlanish, 3 o'qli burchak aylanish tezligi va 3 o'qli magnit oqim sensori. Biz asosan kompas yo'nalishini olish uchun foydalanamiz.

Turli xil modullar bir -biriga o'tish kabeli orqali ulangan. Non paneli dispetcher vazifasini bajaradi va besleme zo'riqishlarini (5V va 3.3V) va maydonlarni ta'minlaydi. Ulanishlarning barchasi ulanish jadvalida tasvirlangan (ilovaga qarang). 5V -ni 3.3V -ga ulash, ehtimol sizning chipingizni yo'q qiladi. Ehtiyot bo'ling va etkazib berishdan oldin barcha simlaringizni ikki marta tekshiring (bu erda, ayniqsa, kodlovchi hisobga olinishi kerak). Barcha taxtalarni ulashdan oldin siz dispetcherlik panelidagi asosiy besleme kuchlanishlarini multimetr bilan o'lchashingiz kerak. Modullar neylon vintlar yordamida korpusga o'rnatildi. Bu erda men ularni tuzatganimdan xursand bo'ldim, lekin ishlamay qolganda olib tashlandi.

Faqat lehim nihoyat dvigatellar, non paneli va sarlavhalar edi. Rostini aytsam, menga o'tish simlari yoqadi, lekin ular uzilib qolishi mumkin. Ba'zi hollarda, ba'zi dasturiy ta'minot monitoringi ulanishlarni tahlil qilishda sizga yordam berishi mumkin.

3 -qadam: dasturiy ta'minot infratuzilmasi

Dasturiy infratuzilma
Dasturiy infratuzilma
Dasturiy infratuzilma
Dasturiy infratuzilma

Mexanikaga erishgandan so'ng, biz qulay rivojlanish sharoitlariga ega bo'lish uchun dasturiy ta'minot infratuzilmasini o'rnatamiz.

Git

Bu bepul va ochiq manbali versiyalarni boshqarish tizimi. U Linux kabi yirik loyihalarni boshqarish uchun ishlatiladi, lekin uni kichik loyihalarda ham ishlatish mumkin (qarang Github va Bitbucket).

Loyihadagi o'zgarishlarni mahalliy kuzatib borish mumkin, shuningdek, dasturiy ta'minotni hamjamiyat bilan bo'lishish uchun uzoq serverga yuborish mumkin.

Asosiy ishlatiladigan buyruqlar:

git klon https://github.com/makerobotics/RPIbot.git [Manba kodini va git konfiguratsiyasini oling]

git pull boshlang'ich ustasi [masofaviy ombordan so'nggi yangiliklarni oling]

git status [mahalliy ombor holatini oling. O'zgartirilgan fayllar bormi?] Git log [majburiyatlar ro'yxatini olish] git add. [barcha o'zgartirilgan fayllarni keyingi topshiriq uchun ko'rib chiqiladigan bosqichga qo'shing] git obligatsiya -m "majburiyat uchun sharh" [o'zgarishlarni mahalliy omborga topshirish] git push kelib chiqish ustasi [barcha majburiyatlarni masofaviy omborga o'tkazing]

Yog'och kesish

Python bir nechta o'rnatilgan kirish funktsiyalari bilan ta'minlaydi. Dasturiy ta'minot tuzilmasi, keyinchalik ishlab chiqishni boshlashdan oldin, barcha ro'yxatga olish tizimlarini belgilashi kerak.

Jurnalni terminalda yoki jurnal faylida belgilangan format bilan jurnalga yozish uchun sozlash mumkin. Bizning misolimizda, logger veb -server sinfi tomonidan tuzilgan, lekin biz buni o'zimiz ham qila olamiz. Bu erda biz faqat yozish darajasini DEBUG -ga o'rnatdik:

logger = logging.getLogger (_ nomi_)

logger.setLevel (logging. DEBUG)

O'lchash va chizish

Vaqt o'tishi bilan signallarni tahlil qilish uchun ularni jadvalda tuzish eng yaxshisidir. Raspberry Pi -da faqat konsol terminali bo'lganligi sababli, biz ma'lumotni nuqta -vergul bilan ajratilgan csv faylida kuzatib boramiz va uni masofaviy kompyuterdan tuzamiz.

Nuqtali vergul bilan ajratilgan iz fayli bizning asosiy python kodimiz tomonidan yaratilgan va shunday sarlavhalarga ega bo'lishi kerak:

Vaqt tamg'asi;

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;

Birinchi ustun vaqt tamg'asini o'z ichiga oladi. Quyidagi ustunlar bepul. Chizma skript chizilgan ustunlar ro'yxati bilan chaqiriladi:

masofadan@kompyuter: ~/python rpibot_plotter -f trace.csv -p tezlikL, tezlikR, pwmL, pwmR

Syujet skriptlari asboblar papkasida mavjud:

Plotter Pythonda mathplotlib dan foydalanadi. Siz uni shaxsiy kompyuteringizga nusxalashingiz kerak.

Python skripti qulayroq bo'lishi uchun bash skript (plot.sh) deb nomlanadi, u Raspberry Pi iz faylini uzoq kompyuterga ko'chirish va signal tanlash bilan plotterni chaqirish uchun ishlatiladi. "Plot.sh" bosh skripti agar faylni nusxalash kerak bo'lsa. Bu har safar qo'lda nusxa ko'chirish o'rniga men uchun qulayroq edi. "sshpass" Raspberry Pi -dan faylni scp orqali masofaviy kompyuterga nusxalash uchun ishlatiladi. Faylni parol so'ramasdan nusxalash mumkin (u parametr sifatida uzatiladi).

Nihoyat, rasmda ko'rsatilgandek, uchastkasi bo'lgan oyna ochiladi.

Masofaviy aloqa

Raspberry Pi -ning rivojlanish interfeysi SSH. Fayllarni to'g'ridan -to'g'ri maqsadda tahrir qilish yoki scp yordamida nusxalash mumkin.

Robotni boshqarish uchun Pi -da veb -server ishlaydi, u Websockets orqali boshqarishni ta'minlaydi. Bu interfeys keyingi bosqichda tasvirlangan.

Raspberry Pi -ni o'rnating

Manba kodining "doc" papkasida (setup_rpi.txt) Raspberry Pi ni sozlashni tavsiflovchi fayl mavjud. Ko'p tushuntirishlar yo'q, lekin juda ko'p foydali buyruqlar va havolalar.

4 -qadam: Foydalanuvchi interfeysi

Foydalanuvchi interfeysi
Foydalanuvchi interfeysi

Biz foydalanuvchi interfeysini joylashtirish uchun engil Tornado veb -serveridan foydalanamiz. Bu Python moduli, biz robotlarni boshqarish dasturini ishga tushirganda chaqiramiz.

Dasturiy ta'minot arxitekturasi

Foydalanuvchi interfeysi quyidagi fayllar yordamida qurilgan: gui.html [Veb -sahifa boshqaruvini va tartibini tavsiflash] gui.js [Boshqaruvlarni boshqarish va robotimizga veb -rozetkali ulanishni ochish uchun JavaScript kodini o'z ichiga oladi] gui.css [O'z uslublarini o'z ichiga oladi. html boshqaruv elementlari. Bu erda boshqaruv elementlarining pozitsiyasi aniqlangan]

Veb -tarmoqli aloqa

Foydalanuvchi interfeysi eng zo'r emas, lekin u vazifani bajaradi. Men bu erda men uchun yangi Websockets kabi texnologiyalarga e'tibor qaratdim.

Veb -sayt robot -server bilan Websockets orqali aloqa o'rnatadi. Bu ikki tomonlama aloqa kanali bo'lib, ulanish boshlanganda ochiq qoladi. Biz robotning buyruqlarini Websocket orqali Raspberry Pi -ga yuboramiz va ma'lumotlarni (tezlik, pozitsiya, kamera oqimi) ekranga qaytaramiz.

Interfeys tartibi

Foydalanuvchi interfeysi buyruqlar uchun qo'lda kiritishga ega. Bu boshida robotga buyruqlar yuborish uchun ishlatilgan, tasdiqlash qutisi kamera oqimini yoqadi va o'chiradi. Ikkala slayder ham kamerani siljitish va egishni boshqaradi, foydalanuvchi interfeysining o'ng yuqori qismi robotlar harakatini boshqaradi. Siz tezlikni va maqsadli masofani boshqarishingiz mumkin. Asosiy telemetriya ma'lumotlari robot chizishida ko'rsatiladi.

5 -qadam: Robot platformasini dasturlash

Robot platformasini dasturlash
Robot platformasini dasturlash
Robot platformasini dasturlash
Robot platformasini dasturlash
Robot platformasini dasturlash
Robot platformasini dasturlash

Bu qism loyihaning asosiy maqsadi edi. Men ko'plab dasturiy ta'minotni qayta ko'rib chiqdim, chunki men yangi shassisni shahar motorlari bilan tanishtirdim, turli sabablarga ko'ra Pythonni dasturlash tili sifatida ishlatardim:

  • Bu Raspberry Pi -ning asosiy tili
  • Bu yuqori darajali til bo'lib, ko'pgina xususiyatlar va kengaytmalarni o'z ichiga oladi
  • Bu ob'ektga yo'naltirilgan, lekin ketma -ket dasturlash uchun ham ishlatilishi mumkin
  • Hech qanday kompilyatsiya yoki asboblar zanjiri kerak emas. Kodni tahrirlang va ishga tushiring.

Asosiy dasturiy ta'minot arxitekturasi

Dastur ob'ektga yo'naltirilgan bo'lib, bir nechta ob'ektlarga bo'lingan. Mening fikrim kodni 3 funktsional blokga bo'lish edi:

Sezgi o'ylash

Sense.py

Asosiy sensorni olish va qayta ishlash. Ma'lumotlar keyingi bosqichda foydalanish uchun lug'atda saqlanadi.

Control.py

Dvigatellar va servolarni bir nechta abstraktsiyadan so'ng harakatlantiruvchi kichik sinf boshqaradi. Boshqaruvning asosiy ob'ekti - bu yuqori darajadagi buyruqlar, shuningdek dvigatelni boshqarish algoritmlari (PID).

rpibot.py

Bu asosiy maqsad Tornado veb -serverini boshqarish va alohida tarmoqlarda sezish va boshqarish sinflarini ishga tushirishdir.

Har bir modul yakka o'zi yoki butun loyihaning bir qismi sifatida ishlashi mumkin. Sensorlarning to'g'ri ulanganligini tekshirish va kerakli ma'lumotlarni etkazib berish uchun siz faqat sensor ma'lumotlarini sezishingiz va chop etishingiz mumkin.

PID nazorati

Birinchi vazifa - biz nimani boshqarishni xohlayotganimizni aniqlash. Men pozitsiyani boshqarishga urinishdan boshladim, bu juda murakkab va ko'p yordam bermadi.

Nihoyat, biz har bir g'ildirak tezligini va robot yo'nalishini boshqarishni xohlaymiz. Buning uchun biz ikkita boshqaruv mantig'ini kaskad qilishimiz kerak.

Bosqichma -bosqich murakkablikni oshirish uchun robotni boshqarish kerak:

ochiq pastadir (doimiy quvvat bilan)

pwm = K

keyin yopish loop algoritmini qo'shing

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

va nihoyat, oxirgi qadam sifatida yo'nalishni boshqarishni qo'shing.

Tezlikni boshqarish uchun men "PI" boshqaruvini va "P" ni faqat yaw uchun ishlatardim. Men tajriba orqali parametrlarni qo'lda o'rnatdim. Ehtimol, bu erda juda yaxshi parametrlardan foydalanish mumkin. Maqsadim to'g'ri chiziq edi va men deyarli erishdim. Men foydalanuvchi interfeysi orqali ba'zi o'zgaruvchilarni yozish uchun dasturda interfeys yaratdim. Kp parametrini 1.0 ga o'rnatish foydalanuvchi interfeysida quyidagi buyruqni talab qiladi:

O'rnatish; Kp; 1.0

Men P parametrini hech qanday haddan tashqari tushmaslik uchun juda past darajaga qo'yishim mumkin edi. Qolgan xato I parametri bilan tuzatiladi (o'rnatilgan xato)

Menga ikkala boshqaruvni qanday kaskad qilishni bilish qiyin edi. Yechim oddiy, lekin men oldin boshqa yo'llarni sinab ko'rdim … Nihoyat, men g'ildiraklarning tezligini bir tomonga burish uchun o'zgartirdim. Tezlikni boshqarish moslamasining chiqishini o'zgartirish xato edi, chunki tezlikni boshqarish moslamasi bu buzuqlikni olib tashlashga harakat qilardi.

Ishlatilgan boshqaruv sxemasi ilova qilingan. U robot boshqaruvining faqat chap tomonini ko'rsatadi.

6 -qadam: Sensorni kalibrlash

Sensorni kalibrlash
Sensorni kalibrlash
Sensorni kalibrlash
Sensorni kalibrlash
Sensorni kalibrlash
Sensorni kalibrlash

Ko'rib chiqish kerak bo'lgan birinchi narsa shundaki, butun O'I to'g'ri ishlashi kerak. Men 3 qismga buyurtma berdim va to'liq ish sensori bo'lmaguncha qaytarib yubordim. Har bir oldingi sensorda sensorning ba'zi qismlari to'g'ri ishlamasligi yoki umuman ishlamasligi bor edi, men robotga o'rnatishdan oldin asoslarni sinab ko'rish uchun ba'zi misol skriptlaridan foydalandim.

IMU sensori signallari uni ishlatishdan oldin sozlanishi kerak. Ba'zi sensor signallari o'rnatish burchagi va holatiga bog'liq.

Tezlashtirish va aylanish tezligini kalibrlash

Kalibrlashning eng oson usuli uzunlamasına tezlanishdir (A_x). To'xtab turgan joyda taxminan 0 m/s² bo'lishi kerak. Agar siz sensorni to'g'ri aylantirsangiz, siz tortish kuchini o'lchashingiz mumkin (taxminan 9, 8 m/s²). A_x -ni kalibrlash uchun siz uni to'g'ri o'rnatishingiz va to'xtab turganda 0 m/s² olish uchun ofsetni belgilashingiz kifoya. Endi A_x kalibrovka qilingan, siz aylanish tezligi uchun ofsetlarni shu tarzda to'xtab turganda olishingiz mumkin.

Kompas uchun magnitometrni kalibrlash

Magnit maydon sensorlar uchun murakkabroq kalibrlash zarur. Biz gorizontal darajadagi magnit maydonni olish uchun m_x va m_y dan foydalanamiz. M_x va m_y ga ega bo'lish bizga kompas sarlavhasini hisoblash imkoniyatini beradi.

Bizning oddiy maqsadimiz uchun biz faqat qattiq temir burilishini sozlaymiz. Buni bajarish kerak, chunki sensor oxirgi holatda, chunki u magnit maydonining buzilishiga bog'liq.

Biz robotni z o'qi atrofida aylantirganda m_x va m_y ni yozamiz. Biz m_x va m_y ni XY grafikda chizamiz. Natijada rasmda ko'rsatilgandek ellips paydo bo'ladi. Ellips boshiga qarab markazlashtirilgan bo'lishi kerak. Bu erda biz ikkala yo'nalishda ham ofsetlarni olish uchun m_x va m_y ning maksimal va minimal qiymatlarini ko'rib chiqamiz. Nihoyat, biz kalibrlashni tekshiramiz va endi ellips markazlashtirilganligini ko'ramiz.

Yumshoq temir kalibrlash biz rasmni ellipsdan aylanaga o'zgartirishni anglatadi. Buni har bir senor qiymatiga omil qo'shish orqali amalga oshirish mumkin.

Sinov tartibini endi qayta kalibrlash yoki hech bo'lmaganda datchiklar sozlanganligini tekshirish uchun kodlash mumkin.

Kompas sarlavhasi

Endi magnitometr ma'lumotlari kompas yo'nalishini hisoblash uchun ishlatiladi. Buning uchun biz m_x va m_y signallarini burchakka aylantirishimiz kerak. Python bu maqsadga ega bo'lgan math.atan2 funktsiyasini to'g'ridan -to'g'ri ta'minlaydi. To'liq hisoblash mpu9250_i2c.py faylida aniqlangan ("calcHeading (mx, my, mz)").

7 -qadam: muqobil dizaynlar

Muqobil dizaynlar
Muqobil dizaynlar
Muqobil dizaynlar
Muqobil dizaynlar
Muqobil dizaynlar
Muqobil dizaynlar

Loyiha juda ko'p vaqtni oldi, chunki dizayn butunlay ochiq edi. Har bir komponent uchun men prototipni amalga oshirdim va tizim chegaralarini boshdan kechirdim.

Eng murakkab mavzu g'ildirak kodlovchi edi. Men hozir ishlatilayotgan optik kodlovchi topilmasdan oldin 3 xil variantni sinab ko'rdim. O'ylaymanki, bunday loyihada bekor qilingan echimlar ham juda qiziq. Bu men eng ko'p o'rgangan qismlarga tegishli.

Uzluksiz aylanadigan servo pca 9695 ga ulangan

DC dvigateli uchun qo'shimcha H-ko'prigiga yo'l qo'ymaslik uchun men birinchi navbatda uzluksiz aylanishli servolardan boshladim. Bularni allaqachon mavjud pca 9695 servo drayveri boshqargan. Barcha harakat mexanikasi va korrespondent elektronika ancha sodda edi. Ushbu dizayn ikkita kamchilikka ega edi:

  • Servolarni nazorat qilish diapazoni yomon.
  • Yo'qolgan kodlovchi joyi

Servo 50% pwm bilan harakat qila boshlaydi va to'liq tezligi taxminan 55%. Bu juda yomon nazorat diapazoni.

Enkoder bo'lmasa, ishga tayyor kodlovchi topish juda qiyin edi. Men shassiga o'rnatilgan 3 xil aks ettiruvchi kodlovchi sinovdan o'tkazdim. Men qora va oq qismli g'ildirakning tashqi tomonida o'z -o'zidan ishlab chiqarilgan kodlovchi g'ildirakni yopishtirdim. Men to'g'ri signalni olish uchun signalni qayta ishlashga muhtoj bo'lgan QTR-1RC sensorlaridan foydalanardim. Raspberry Pi real vaqtda bunday ishlov berishni amalga oshira olmadi. Shuning uchun men robotga real vaqt rejimida NodeMCU D1 mini ni qo'shishga qaror qildim. U qayta ishlangan sensor ma'lumotlarini etkazib berish uchun UART seriyali malina Pi bilan bog'langan. NodeMCU, shuningdek, HC-SR04 sensorini boshqarardi. Mexanika juda qiyin va mustahkam emas edi, ketma-ket I2C liniyasi va dvigatellardan shovqin eshitardi, shuning uchun men shassining ikkinchi versiyasini oddiy tishli doimiy dvigatelli dvigatel bilan qurdim. H-ko'prigi. Bu motorlar optik enkoderni joylashtirish uchun ikkinchi darajali chiqish miliga ega.

8 -qadam: tasvirni qayta ishlash

Rasmni qayta ishlash
Rasmni qayta ishlash
Rasmni qayta ishlash
Rasmni qayta ishlash
Rasmni qayta ishlash
Rasmni qayta ishlash
Rasmni qayta ishlash
Rasmni qayta ishlash

Avtonom haydashni yaxshilash uchun biz tasvirni qayta ishlashimiz mumkin.

Opencv kutubxonasi bunga havola. Bu Python tomonidan to'siqlarni aniqlashni tez amalga oshirish uchun ishlatilishi mumkin.

Biz tasvirni olamiz va tasvirni qayta ishlash bo'yicha ba'zi vazifalarni bajaramiz:

Birinchi sinovlar Canny va Sobel konvertatsiyalari yordamida o'tkazildi. Canny yaxshi nomzod bo'lishi mumkin, lekin aqlli emas. Sobel juda aqlli (juda ko'p narsalar aniqlangan).

Nihoyat, men barcha filtrlarni gorizontal va vertikal gradyanlarni aralashtirish uchun qildim (mebelni aniqlang):

  • Rangli tasvirni kulrang darajadagi tasvirga aylantiring
  • Kichkina shovqinni olib tashlash uchun tasvirni xiralashtiring
  • Rasmni qora va oq tasvirga aylantiring
  • Endi biz ob'ektlarni devor va mebel sifatida aniqlash uchun gorizontal va vertikal gradyanlarni aniqlaymiz
  • Biz faqat qolgan katta konturlarni filtrlaymiz (rasmdagi rangli konturlarni ko'ring)

Endi biz bu yangi ma'lumotlardan to'siqlarni aniqlash uchun foydalanishimiz mumkin …

9 -qadam: Keyingi qadamlar …

Keyingi qadamlar…
Keyingi qadamlar…
Keyingi qadamlar…
Keyingi qadamlar…

Endi bizda sensorlar, aktuatorlar va kamerali oddiy robot -platforma bor. Mening maqsadim - avtonom harakat qilish va boshqa datchiklar qo'shilmasdan stansiyaga qaytish. Buning uchun menga quyidagi qadamlar kerak bo'ladi:

  • Yag va sensorli magnit yo'nalish signallarining sensorli birikmasi
  • Kamera tasvirini qayta ishlash (buning uchun faqat past CPU mavjud)
  • To'qnashuvni aniqlash (ultratovushli masofa va kamera)
  • Xarita tuzish yoki yo'naltirish

Endi borib, o'z qiyinchiliklaringizni yoki maqsadlaringizni yarating …

Tavsiya: