Mündəricat:

Rpibot - Robototexnika öyrənmək haqqında: 9 addım
Rpibot - Robototexnika öyrənmək haqqında: 9 addım

Video: Rpibot - Robototexnika öyrənmək haqqında: 9 addım

Video: Rpibot - Robototexnika öyrənmək haqqında: 9 addım
Video: Робототехника 2.0: объединение искусственного интеллекта и RPA 2024, Noyabr
Anonim
Rpibot - Robototexnika öyrənmək haqqında
Rpibot - Robototexnika öyrənmək haqqında

Alman avtomobil şirkətində quraşdırılmış proqram mühəndisiyəm. Bu layihəni quraşdırılmış sistemlər üçün bir öyrənmə platforması olaraq başladım. Layihə erkən ləğv edildi, amma o qədər zövq aldım ki, boş vaxtlarımda davam etdim. Nəticə budur…

Aşağıdakı tələblərim vardı:

  • Sadə aparat (diqqət proqramdır)
  • Ucuz avadanlıq (təxminən 100 €)
  • Genişləndirilə bilər (bəzi variantlar artıq təsvirin bir hissəsidir)
  • Bütün komponentlər üçün tək 5V mənbədən enerji təchizatı (powerbank)

Öyrənməkdən başqa heç bir məqsəd yox idi. Platforma öyrənmə, müşahidə, robot yarışları,…

Yeni başlayanlar üçün bir dərs deyil. Bu mövzuda bəzi əsas biliklərə ehtiyacınız var:

  • Proqramlaşdırma (Python)
  • Əsas elektronika (modulları düzgün gərginliklə birləşdirmək üçün)
  • Əsas nəzarət nəzəriyyəsi (PID)

Nəhayət, mənim kimi problemlərlə üzləşəcəksiniz. Bir az maraq və dözümlülüklə layihəni keçəcək və problemləri həll edəcəksiniz. Kodum mümkün qədər sadədir və kritik kod xətləri göstərişlər vermək üçün şərh olunur.

Tam mənbə kodu və sənədlər burada mövcuddur:

Təchizat:

Mexanika

  • 1x Kontrplak lövhəsi (A4 ölçüsü, 4 mm qalınlığı)
  • 3x M4 x 80 Vida və somun
  • Enkoder üçün ikinci çıxış mili olan 2x dişli mühərriklər. Təkərlər.
  • 1x Pulsuz təkər

1x Pan və tilt kamera montajı (isteğe bağlı)

Elektronika

  • Başlıq və kamera ilə 1x Raspberry Pi Zero
  • 1x PCA 9685 servo idarəetmə
  • 2x Optik kodlayıcı təkər və dövrə
  • 1x Qadın tullanan tellər
  • 1x USB güc bankı
  • 1x DRV8833 ikili motor sürücüsü
  • Kamera yelləmək və əymək üçün 2x Micro servo SG90 (isteğe bağlı)
  • 1x MPU9250 IMU (isteğe bağlı)
  • 1x HC-SR04 ultrasəs məsafə sensoru (isteğe bağlı)
  • 1x delikli taxta və lehim teli, başlıqlar,…

Addım 1: Şassi qurun

Şassi qurun
Şassi qurun
Şassi qurun
Şassi qurun
Şassi qurun
Şassi qurun

Yaxşı mexanik dizayner deyiləm. Həm də layihənin məqsədi şassidə çox vaxt sərf etmək deyil. Hər halda, aşağıdakı tələbləri təyin etdim:

  • Ucuz materiallar
  • Sürətli montaj və sökülmə
  • Genişləndirilə bilər (məsələn, əlavə sensorlar üçün yer)
  • Elektronika üçün enerjiyə qənaət etmək üçün yüngül materiallar

Kontrplakdan asan və ucuz şassi hazırlana bilər. Çərçivə maşını və əl matkabı ilə işləmək asandır. Sensorlar və mühərriklər üçün tutacaqlar yaratmaq üçün kiçik taxta hissələri yapışdıra bilərsiniz.

Qüsurlu komponentlərin dəyişdirilməsi və ya elektrik ayıklama haqqında düşünün. Əsas hissələr dəyişdirilə bilən vintlər ilə sabitlənməlidir. İsti bir yapışqan silahı sadə ola bilər, amma yəqin ki, şassi qurmağın ən yaxşı yolu deyil … Parçaları asanlıqla sökmək üçün asan bir konsepsiya düşünmək üçün çox vaxt lazım idi. 3D çap yaxşı bir alternativdir, lakin olduqca bahalı və ya vaxt aparan ola bilər.

Pulsuz təkər nəhayət çox yüngüldür və montajı asandır. Alternativlərin hamısı ağır və ya sürtünmə ilə dolu idi (sonuncusunu tapmadan əvvəl onlardan bir neçəsini sınadım). Əsas təkərləri quraşdırdıqdan sonra quyruq boş təkərini düzəltmək üçün yalnız taxta boşluq kəsməliydim.

Təkər xüsusiyyətləri (proqram hesablamaları üçün)

Dairə: 21, 5 sm Pulslar: 20 puls/rev. Çözünürlük: 1 075 sm (nəhayət 1 nəbz təxminən 1 sm -dir, bu proqram hesablamaları üçün asandır)

Addım 2: Elektronika və Kablolama

Elektronika və naqillər
Elektronika və naqillər
Elektronika və naqillər
Elektronika və naqillər
Elektronika və naqillər
Elektronika və naqillər

Layihə diaqramda göstərildiyi kimi fərqli modullardan istifadə edir.

Raspberry Pi Zero əsas nəzarətçidir. Sensorları oxuyur və motorları PWM siqnalı ilə idarə edir. Uzaq bir kompüterə wifi ilə qoşulur.

DRV8833 ikili motorlu H körpüsüdür. Motorlara kifayət qədər cərəyan verir (Raspberry Pi bunu edə bilməz, çünki çıxışlar yalnız bir qədər mA verə bilər).

Optik kodlayıcı, işıq hər dəfə enkoder təkərlərindən keçəndə kvadrat şəkilli bir siqnal verir. Siqnal hər dəfə dəyişəndə məlumat almaq üçün Raspberry Pi -nin HW fasilələrindən istifadə edəcəyik.

Pca9695, servo idarəetmə lövhəsidir. I2C seriyalı avtobusla əlaqə qurur. Bu lövhə, kamın əyilməsi və əyilməsi üçün servoları idarə edən PWM siqnallarını və təchizat gərginliyini təmin edir.

MPU9265, 3 oxlu sürətləndirmə, 3 oxlu bucaq fırlanma sürəti və 3 oxlu maqnit axını sensoru. Əsasən pusula başlığı almaq üçün istifadə edəcəyik.

Fərqli modulların hamısı atlama teli ilə bir -birinə bağlıdır. Çörək taxtası dispetçer vəzifəsini yerinə yetirir və təchizat gərginliyini (5V və 3.3V) və zəmini təmin edir. Bağlantıların hamısı əlaqə cədvəlində təsvir edilmişdir (əlavəyə baxın). 5V -ni 3.3V -ə qoşmaq, ehtimal ki, çipinizi məhv edəcək. Ehtiyatlı olun və təchiz etməzdən əvvəl bütün kabellərinizi iki dəfə yoxlayın (burada xüsusi olaraq kodlayıcı nəzərə alınmalıdır). Bütün lövhələri bağlamadan əvvəl, dispetçer lövhəsindəki əsas təchizat gərginliklərini multimetrlə ölçməlisiniz. Modullar neylon vintlər ilə şassiyə sabitləndi. Həm də burada onları düzəltməyimdən məmnun idim, amma arızalar halında da çıxarıla bilər.

Yalnız lehimləmə nəhayət mühərriklər, çörək taxtası və başlıqlar idi. Düzünü desəm, tullanan telləri sevirəm, amma əlaqənin kəsilməsinə səbəb ola bilər. Bəzi hallarda, bəzi proqram monitorinqləri əlaqələri təhlil etməkdə sizə dəstək ola bilər.

Addım 3: Proqram Altyapısı

Proqram Altyapısı
Proqram Altyapısı
Proqram İnfrastrukturu
Proqram İnfrastrukturu

Mexanikaya çatdıqdan sonra, rahat inkişaf şərtlərinə sahib olmaq üçün bəzi proqram infrastrukturu quracağıq.

Git

Bu pulsuz və açıq mənbə versiyasına nəzarət sistemidir. Linux kimi böyük layihələri idarə etmək üçün istifadə olunur, ancaq kiçik layihələr üçün də asanlıqla istifadə edilə bilər (bax Github və Bitbucket).

Layihə dəyişiklikləri yerli olaraq izlənilə bilər və eyni zamanda proqramı cəmiyyətlə paylaşmaq üçün uzaq bir serverə göndərilə bilər.

Əsas istifadə olunan əmrlər bunlardır:

git clone https://github.com/makerobotics/RPIbot.git [Mənbə kodunu və git konfiqurasiyasını əldə edin]

git pull mənbə ustası [uzaq depodan ən son məlumatı əldə edin]

git statusu [yerli deponun vəziyyətini əldə edin. Dəyişdirilən fayllar varmı?] Git log [öhdəliklərin siyahısını alın] git add. [bütün dəyişdirilmiş faylları növbəti öhdəlik üçün nəzərə alınacaq mərhələyə əlavə edin] git əmr -m "öhdəlik üçün şərh et" [dəyişiklikləri yerli depoya köçürmək] git push mənbə ustası [bütün öhdəlikləri uzaq depoya köçürmək]

Giriş

Python, bəzi quraşdırılmış giriş funksiyalarını təmin edir. Proqram quruluşu, daha da inkişaf etdirməyə başlamazdan əvvəl artıq bütün qeyd sistemini təyin etməlidir.

Qeydiyyatçı, terminalda və ya bir qeyd sənədində müəyyən bir formatla daxil olmaq üçün konfiqurasiya edilə bilər. Nümunəmizdə, logger web server sinfi tərəfindən konfiqurasiya edilmişdir, lakin biz bunu özümüz də edə bilərik. Burada yalnız qeyd səviyyəsini DEBUG olaraq təyin edirik:

logger = logging.getLogger (_ adı_)

logger.setLevel (logging. DEBUG)

Ölçmə və qurma

Vaxt keçdikcə siqnalları təhlil etmək üçün ən yaxşısı onları bir cədvəldə qurmaqdır. Raspberry Pi -nin yalnız bir konsol terminalı olduğu üçün məlumatları nöqtəli vergüllə ayrılmış csv faylında izləyəcəyik və uzaq PC -dən düzəldəcəyik.

Nöqtəli vergüllə ayrılmış iz faylı əsas python kodumuz tərəfindən yaradılır və bu kimi başlıqlara malik olmalıdır:

zaman damgası; yawCorr; encoderR; I_L; odoDistance; ax; encoderL; I_R; yaw; eSpeedR; eSpeedL; pwmL; speedL; CycleTimeControl; wz; pwmR; speedR; Iyaw; hdg; m_y; m_x; eYaw; cycleTime

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;

Birinci sütunda vaxt damgası var. Aşağıdakı sütunlar pulsuzdur. Planlaşdırma skripti, çəkiləcək sütunların siyahısı ilə çağırılır:

uzaq@pc: ~/python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

Süjet skripti alət qovluğunda mövcuddur:

Hiyləgər Pythonda mathplotlib istifadə edir. Kompüterinizə kopyalamalısınız.

Daha çox rahatlıq üçün, python skripti, Raspberry Pi iz faylını uzaq bir PC -yə kopyalamaq və siqnal seçimi ilə plotterə zəng etmək üçün istifadə olunan bash script (plot.sh) ilə çağırılır. fayl kopyalanmalıdırsa. Bu hər dəfə əl ilə kopyalamaq əvəzinə mənim üçün daha əlverişli idi. "sshpass" faylını Raspberry Pi -dən uzaq PC -yə scp vasitəsilə kopyalamaq üçün istifadə olunur. Şifrə istəmədən bir faylı kopyalaya bilir (parametr olaraq ötürülür).

Nəhayət, şəkildə göstərildiyi kimi süjetli bir pəncərə açılır.

Uzaqdan ünsiyyət

Raspberry Pi üçün inkişaf interfeysi SSH -dir. Dosyalar birbaşa hədəfdə düzəldilə bilər və ya scp ilə kopyalana bilər.

Robotu idarə etmək üçün Pi üzərində Websockets vasitəsilə nəzarət təmin edən bir veb server çalışır. Bu interfeys növbəti addımda təsvir edilmişdir.

Raspberry Pi qurun

Mənbə kodunun "doc" qovluğunda (setup_rpi.txt) Raspberry Pi quruluşunu izah edən bir fayl var. Açıqlamalar çox deyil, faydalı əmrlər və bağlantılar çoxdur.

Addım 4: İstifadəçi Arayüzü

İstifadəçi İnterfeysi
İstifadəçi İnterfeysi

İstifadəçi interfeysini yerləşdirmək üçün yüngül Tornado veb serverindən istifadə edirik. Robot idarəetmə proqramını işə salanda çağırdığımız Python moduludur.

Proqram memarlığı

İstifadəçi interfeysi aşağıdakı fayllar əsasında qurulmuşdur: gui.html [Veb səhifə nəzarət və tərzinin təsviri] gui.js [Nəzarətləri idarə etmək və robotumuza internet bağlantısı açmaq üçün JavaScript kodunu ehtiva edir] gui.css [Şəkillər html nəzarət edir. Nəzarətçilərin mövqeləri burada müəyyən edilir]

Veb yuvası ünsiyyəti

İstifadəçi interfeysi ən keyfiyyətli deyil, amma işi görür. Burada Websockets kimi mənim üçün yeni olan texnologiyalara diqqət yetirdim.

Veb sayt, Websockets vasitəsi ilə robot veb serveri ilə əlaqə qurur. Bu, əlaqə başladıqca açıq qalacaq ikitərəfli bir əlaqə kanalıdır. Robotun əmrlərini Websocket vasitəsi ilə Raspberry Pi -yə göndəririk və məlumatı (sürət, mövqe, kamera axını) yenidən ekran üçün alırıq.

İnterfeys düzeni

İstifadəçi interfeysində əmrlər üçün əl ilə giriş var. Bu, robotun əmrlərini göndərmək üçün başlanğıcda istifadə edilmişdi. Yoxlama qutusu kamera axınını açır və söndürür. İki sürüşmə kameranın sürüşməsini və əyilməsini idarə edir. İstifadəçi interfeysinin sağ üst hissəsi robotların hərəkətini idarə edir. Sürəti və hədəf məsafəni idarə edə bilərsiniz. Əsas telemetriya məlumatları robot rəsmində göstərilir.

Addım 5: Robot Platformasının Proqramlaşdırılması

Robot Platformasının Proqramlaşdırılması
Robot Platformasının Proqramlaşdırılması
Robot Platformasının Proqramlaşdırılması
Robot Platformasının Proqramlaşdırılması
Robot Platformasının Proqramlaşdırılması
Robot Platformasının Proqramlaşdırılması

Bu hissə layihənin əsas məqsədi idi. DC mühərrikləri ilə yeni şassi təqdim edərkən bir çox proqramı yenidən hazırladım və fərqli səbəblərə görə Python'u proqramlaşdırma dili olaraq istifadə etdim:

  • Raspberry Pi əsas dilidir
  • Bir çox daxili xüsusiyyətləri və uzantıları olan yüksək səviyyəli bir dildir
  • Obyekt yönümlüdür, lakin ardıcıl proqramlaşdırma üçün də istifadə edilə bilər
  • Kompilyasiya və ya alət zəncirinə ehtiyac yoxdur. Kodu redaktə edin və işə salın.

Əsas proqram memarlığı

Proqram bir neçə obyektə bölünmüş obyekt yönümlüdür. Fikrim, kodu 3 funksional bloka bölmək idi:

Sense Düşünmək

Sense.py

Əsas sensorların alınması və işlənməsi. Məlumatlar aşağıdakı mərhələdə istifadə etmək üçün lüğətdə saxlanılır.

Control.py

Bir aktuasiya alt sinfi, bəzi abstraksiyadan sonra mühərrikləri və servoları idarə edir. Əsas Control obyekti yüksək səviyyəli əmrləri və motor üçün idarəetmə alqoritmlərini (PID) idarə edir.

rpibot.py

Bu əsas obyekt Tornado veb serverini idarə etmək və ayrı mövzularda məna və nəzarət siniflərini yaratmaqdır.

Hər bir modul tək başına və ya bütün layihənin bir hissəsi olaraq işlədilə bilər. Sensorların düzgün bağlandığını yoxlamaq və doğru məlumatı çatdırmaq üçün yalnız sensor məlumatlarını hiss edə və çap edə bilərsiniz.

PID nəzarəti

İlk vəzifə nəyə nəzarət etmək istədiyimizi öyrənməkdir. Çox mürəkkəb və çox kömək etməyən mövqeyi idarə etməyə çalışaraq başladım.

Nəhayət, hər bir təkər sürətini və robotun istiqamətini idarə etmək istəyirik. Bunu etmək üçün iki nəzarət məntiqini kaskad etməliyik.

Mürəkkəbliyi addım -addım artırmaq üçün robot idarə olunmalıdır:

açıq döngə (sabit güclə)

pwm = K

sonra yaxın döngə alqoritmini əlavə edin

pwm = Kp.speedError+Ki. İnteqrasiya (speedError)

və nəhayət son bir addım olaraq istiqamət nəzarətini əlavə edin.

Sürəti idarə etmək üçün "PI" və yalnız yaw üçün "P" nəzarətindən istifadə etdim. Təcrübə edərək parametrləri əl ilə təyin etdim. Yəqin ki, burada daha yaxşı parametrlərdən istifadə oluna bilər. Hədəfim düz bir xətt idi və demək olar ki, əldə etdim. İstifadəçi interfeysi ilə bəzi dəyişənləri yazmaq üçün proqramda bir interfeys yaratdım. Kp parametrini 1.0 olaraq təyin etmək üçün istifadəçi interfeysində aşağıdakı əmr lazımdır:

SET; Kp; 1.0

P parametrini hər hansı bir aşmamaq üçün kifayət qədər aşağı təyin edə bilərdim. Qalan səhv I parametri ilə düzəldilir (inteqrasiya edilmiş səhv)

Hər iki idarəetməni necə kaskadlaşdıracağımı öyrənmək mənim üçün çətin idi. Həll sadədir, amma əvvəllər bir çox başqa yol sınamışam … Nəhayət, təkərlərin sürət hədəfini bu və ya digər istiqamətə çevirmək üçün dəyişdim. Sürət tənzimləyicisinin bu pozuntunu aradan qaldırmağa çalışdığı üçün sürət idarəetmə çıxışını birbaşa dəyişdirmək səhv idi.

İstifadə olunan idarəetmə diaqramı əlavə olunur. Robot idarəetməsinin yalnız sol tərəfini göstərir.

Addım 6: Sensorun Kalibrlənməsi

Sensorun Kalibrlənməsi
Sensorun Kalibrlənməsi
Sensorun Kalibrlənməsi
Sensorun Kalibrlənməsi
Sensorun Kalibrlənməsi
Sensorun Kalibrlənməsi

Nəzərə alınmalı olan ilk şey, bütün İİB -in düzgün işləməsidir. 3 hissə sifariş etdim və tam işləyən bir sensora sahib olana qədər geri göndərdim. Hər bir əvvəlki sensorda sensorun bəzi hissələri düzgün işləmirdi və ya ümumiyyətlə işləmirdi. Robota quraşdırmadan əvvəl əsasları yoxlamaq üçün bəzi nümunə skriptlərdən istifadə etdim.

IMU sensor siqnalları istifadə etməzdən əvvəl kalibrlənməlidir. Bəzi sensor siqnalları montaj bucağından və mövqeyindən asılıdır.

Sürətlənmə və fırlanma sürətinin kalibrlənməsi

Ən asan kalibrləmə uzunlamasına sürətləndirmədir (A_x). Duranda 0 m/s² ətrafında olmalıdır. Sensoru düzgün döndərsəniz, çəkisini ölçə bilərsiniz (təxminən 9, 8 m/s²). A_x -i kalibrləmək üçün onu düzgün şəkildə bağlamalı və sonra 0 m/s² dayanıqlılıq əldə etmək üçün ofseti təyin etməlisiniz. İndi A_x kalibrləndi, dayanma vəziyyətində oxşar şəkildə fırlanma sürətlərinin əvəzini əldə edə bilərsiniz.

Pusula üçün maqnitometrin kalibrlənməsi

Maqnit sahəsi sensorları üçün daha mürəkkəb bir kalibrləmə lazımdır. Maqnit sahəsini üfüqi səviyyədə əldə etmək üçün m_x və m_y istifadə edəcəyik. M_x və m_y -yə sahib olmaq bizə pusula başlığını hesablamaq imkanı verəcək.

Sadə məqsədimiz üçün yalnız sərt dəmir sapmasını kalibr edəcəyik. Bu, maqnit sahəsinin pozulmalarından asılı olaraq sensor son mövqedə olduğu üçün edilməlidir.

Robotu z oxunun ətrafında döndərərkən m_x və m_y qeyd edirik. XY qrafikində m_x vs m_y qururuq. Şəkildə göstərildiyi kimi bir nəticə elips şəklindədir. Elipsin mənşəyi mərkəzləşdirilməlidir. Burada hər iki istiqamətdə ofsetləri əldə etmək üçün m_x və m_y maksimum və minimum dəyərlərini nəzərdən keçiririk. Nəhayət, kalibrləmə yoxlayırıq və elipsin indi mərkəzdə olduğunu görürük.

Yumşaq dəmir kalibrləmə, şəkli bir elipsdən bir dairəyə dəyişməyimiz deməkdir. Bu, hər bir senor dəyərinə bir faktor əlavə etməklə edilə bilər.

Yenidən kalibrləmə və ya heç olmasa sensorların hələ də kalibrlənib -yoxlanmadığını yoxlamaq üçün bir test proqramı kodlaşdırıla bilər.

Pusula başlığı

Maqnitometr məlumatları indi kompas başlığını hesablamaq üçün istifadə olunacaq. Bunun üçün m_x və m_y siqnallarını bir açıya çevirməliyik. Python, bu hədəfi olan math.atan2 funksiyasını birbaşa təmin edir. Tam hesablama mpu9250_i2c.py faylında ("calcHeading (mx, my, mz)") müəyyən edilmişdir.

Addım 7: Alternativ Dizaynlar

Alternativ Dizaynlar
Alternativ Dizaynlar
Alternativ Dizaynlar
Alternativ Dizaynlar
Alternativ Dizaynlar
Alternativ Dizaynlar

Dizayn tamamilə açıq olduğu üçün layihə çox vaxt aldı. Hər bir komponent üçün bir prototip tətbiq etdim və sistemin məhdudiyyətlərini yaşadım.

Ən mürəkkəb mövzu təkər kodlayıcısı idi. Hal -hazırda istifadə olunan optik kodlayıcı tapmadan əvvəl 3 fərqli variantı sınadım. Düşünürəm ki, belə bir layihədə ləğv edilmiş həllər də çox maraqlıdır. Ən çox öyrəndiyim hissələrə aiddir.

Pca 9695 -ə qoşulan davamlı fırlanma servo

Bir DC mühərriki üçün əlavə bir H körpüsünün qarşısını almaq üçün əvvəlcə davamlı fırlanma servoları ilə başladım. Bunlar artıq mövcud olan pca 9695 servo sürücüsü tərəfindən idarə edilmişdir. Bütün hərəkət mexanikası və müxbir elektronika daha sadə idi. Bu dizaynın iki çatışmazlığı var idi:

  • Servoların zəif idarəetmə diapazonu.
  • Eksik kodlayıcı saxlama yeri

Servo 50% pwm ilə hərəkət etməyə başlayır və təxminən 55% tam sürətə malikdir. Bu çox zəif bir nəzarət aralığıdır.

Bir kodlayıcı tutmadan, işə hazır bir kodlayıcı tapmaq çox çətin idi. Şassiyə quraşdırılmış 3 fərqli əks etdirmə kodlayıcısını sınadım. Təkərin kənarında qara və ağ hissələri olan özüyeriyən kodlayıcı çarxı yapışdırdım. Doğru siqnal almaq üçün çoxlu siqnal işlənməsinə ehtiyac duyan QTR-1RC sensorlarından istifadə etdim. Raspberry Pi bu cür real vaxt emalını həyata keçirə bilmədi. Buna görə robota real vaxt nəzarətçisi olaraq NodeMCU D1 mini əlavə etmək qərarına gəldim. İşlənmiş sensor məlumatlarını çatdırmaq üçün UART seriyası ilə moruq Pi ilə əlaqələndirildi. NodeMCU eyni zamanda HC-SR04 sensorunu da idarə edirdi. Mexanika çətin və çox möhkəm deyildi, seriya xətti I2C xəttindən və mühərriklərdən səs-küy alırdı, buna görə də nəhayət şassinin ikinci versiyasını sadə dişli DC mühərrikləri ilə qurdum. bir H körpüsü. Bu mühərriklərdə optik kodlayıcı yerləşdirmək üçün ikincil çıxış mili var.

Addım 8: Şəkil İşlənməsi

Şəkil İşlənməsi
Şəkil İşlənməsi
Şəkil İşlənməsi
Şəkil İşlənməsi
Şəkil İşlənməsi
Şəkil İşlənməsi
Şəkil İşlənməsi
Şəkil İşlənməsi

Avtonom sürücülük qabiliyyətini yaxşılaşdırmaq üçün bəzi görüntü emal edə bilərik.

Opencv kitabxanası bunun üçün bir istinaddır. Python tərəfindən maneələrin aşkarlanmasını sürətlə həyata keçirmək üçün istifadə edilə bilər.

Bir şəkil çəkirik və bəzi görüntü işləmə vəzifələrini tətbiq edirik:

İlk sınaqlar Canny və Sobel dəyişiklikləri ilə edildi. Canny yaxşı namizəd ola bilər, amma kifayət qədər məntiqli deyil. Sobel çox həssasdır (çox obyekt aşkarlanıb).

Nəhayət bütün üfüqi və şaquli qradiyentləri qarışdırmaq üçün öz filtrimi hazırladım (mebelləri aşkar edin):

  • Rəng görüntüsünü boz səviyyəli bir görüntüyə çevirin
  • Kiçik səs -küyü aradan qaldırmaq üçün görüntünü bulanıqlaşdırın
  • Görüntünü qara və ağ görüntüyə eşik edin
  • İndi divar və mebel kimi obyektləri aşkar etmək üçün üfüqi və şaquli qradiyentləri aşkar edirik
  • Yalnız qalan böyük konturları süzürük (şəkildəki rəngli konturlara baxın)

İndi bu yeni məlumatları maneələri aşkar etmək üçün istifadə edə bilərik …

Addım 9: Növbəti addımlar…

Növbəti addımlar…
Növbəti addımlar…
Növbəti addımlar…
Növbəti addımlar…

İndi sensorlar, aktuatorlar və kamera olan sadə bir robot platformasına sahibik. Məqsədim, müstəqil olaraq hərəkət etmək və başqa heç bir sensor əlavə etmədən stansiyaya qayıtmaqdır. Bunun üçün aşağıdakı addımlara ehtiyacım olacaq:

  • Yaw və maqnit başlıq siqnallarının sensor birləşməsi
  • Kamera görüntü emalı (bunun üçün yalnız aşağı CPU mövcuddur)
  • Toqquşma aşkarlanması (ultrasəs məsafəsi və kamera)
  • Xəritə qurma və ya istiqamətləndirmə

İndi gedin öz problemlərinizi və ya hədəflərinizi yaradın …

Tövsiyə: