İçindekiler:

Rpibot - Robotik Öğrenme Hakkında: 9 Adım
Rpibot - Robotik Öğrenme Hakkında: 9 Adım

Video: Rpibot - Robotik Öğrenme Hakkında: 9 Adım

Video: Rpibot - Robotik Öğrenme Hakkında: 9 Adım
Video: 20 Dakikada Kodlama Öğrenmek | Yazılım Size Göre mi? | Python Temel Mantığı 2024, Kasım
Anonim
Rpibot - Robotik Öğrenme Hakkında
Rpibot - Robotik Öğrenme Hakkında

Bir Alman otomotiv şirketinde gömülü yazılım mühendisiyim. Bu projeye gömülü sistemler için bir öğrenme platformu olarak başladım. Proje erken iptal oldu ama ben o kadar keyif aldım ki boş zamanlarımda devam ettim. Sonuç bu…

Aşağıdaki gereksinimlerim vardı:

  • Basit donanım (odak yazılımdır)
  • Ucuz donanım (yaklaşık 100€)
  • Genişletilebilir (bazı seçenekler zaten açıklamanın bir parçasıdır)
  • Tek bir 5V kaynaktan (powerbank) tüm bileşenler için besleme voltajı

Aslında öğrenmenin dışında bir amacı yoktu. Platform, öğrenme, gözetleme, robotik yarışmalar, …

Başlangıç eğitimi değildir. Aşağıdakiler hakkında bazı temel bilgilere ihtiyacınız var:

  • Programlama (Python)
  • Temel elektronikler (modülleri doğru voltajla birbirine bağlamak için)
  • Temel kontrol teorisi (PID)

Sonunda muhtemelen benim gibi sorunlarla karşılaşacaksınız. Biraz merak ve dayanıklılık ile projeyi gözden geçirecek ve zorlukları çözeceksiniz. Kodum olabildiğince basit ve kritik kod satırları ipuçları vermek için yorumlandı.

Tam kaynak kodu ve dosyalar burada mevcuttur:

Gereçler:

mekanik

  • 1x Kontrplak levha (A4 boyutunda, 4 mm kalınlığında)
  • 3x M4 x 80 Vida ve somun
  • Enkoder için ikincil çıkış miline sahip 2 adet dişli motor. Tekerlekler.
  • 1x Serbest tekerlek

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

Elektronik

  • Başlık ve kamera ile 1x Raspberry Pi Zero
  • 1x PCA 9685 servo kontrolü
  • 2x Optik kodlayıcı çarkı ve devresi
  • 1x Dişi atlama telleri
  • 1x USB güç bankası
  • 1x DRV8833 çift motorlu sürücü
  • Kamera kaydırma ve eğme için 2x Mikro servo SG90 (isteğe bağlı)
  • 1x MPU9250 IMU (isteğe bağlı)
  • 1x HC-SR04 ultrasonik mesafe sensörü (opsiyonel)
  • 1x delikli tahta ve lehim teli, başlıklar, …

Adım 1: Kasayı Oluşturun

Kasayı İnşa Et
Kasayı İnşa Et
Kasayı İnşa Et
Kasayı İnşa Et
Kasayı İnşa Et
Kasayı İnşa Et

Ben iyi bir mekanik tasarımcı değilim. Ayrıca projelerin amacı şaside çok fazla zaman harcamamaktır. Neyse, aşağıdaki gereksinimleri tanımladım:

  • Ucuz malzemeler
  • Hızlı montaj ve demontaj
  • Genişletilebilir (ör. eklenen sensörler için alan)
  • Elektronik için enerji tasarrufu sağlayan hafif malzemeler

Kontrplaktan kolay ve ucuz bir kasa yapılabilir. Fretsaw ve el matkabı ile işlenmesi kolaydır. Sensörler ve motorlar için yuvalar oluşturmak için küçük ahşap parçaları yapıştırabilirsiniz.

Arızalı bileşenlerin değiştirilmesini veya elektrik hata ayıklamasını düşünün. Ana parçalar değiştirilebilir vidalarla sabitlenmelidir. Sıcak tutkal tabancası basit olabilir, ancak muhtemelen bir şasi oluşturmanın en iyi yolu değil… Parçaları kolayca sökmek için kolay bir konsept düşünmek için çok zamana ihtiyacım vardı. 3D baskı iyi bir alternatiftir, ancak oldukça pahalı veya zaman alıcı olabilir.

Serbest tekerlek nihayet çok hafif ve montajı kolaydır. Alternatiflerin hepsi ağır ya da sürtünmeyle doluydu (sonuncuyu bulmadan önce birkaç tanesini denedim). Ana tekerlekleri monte ettikten sonra kuyruksuz tekerleği düzleştirmek için sadece tahta bir ara parçası kesmek zorunda kaldım.

Tekerlek özellikleri (yazılım hesaplamaları için)

Çevre: 21, 5 cmDarbe: 20 darbe/devir. Çözünürlük: 1.075 cm (son olarak 1 darbe yaklaşık 1cm'dir, bu yazılım hesaplamaları için kolaydır)

Adım 2: Elektronik ve Kablolama

Elektronik ve Kablolama
Elektronik ve Kablolama
Elektronik ve Kablolama
Elektronik ve Kablolama
Elektronik ve Kablolama
Elektronik ve Kablolama

Proje, şemada gösterildiği gibi farklı modüller kullanıyor.

Raspberry Pi Zero ana kontrolördür. Sensörleri okuyor ve motorları bir PWM sinyali ile kontrol ediyor. Uzak bir bilgisayara wifi ile bağlanır.

DRV8833, çift motorlu bir H köprüsüdür. Motorlara yeterli akımı sağlıyor (çıkışlar sadece bir miktar mA verebildiği için Raspberry Pi'nin yapamadığı).

Optik kodlayıcı, ışık kodlayıcı tekerleklerinden her geçtiğinde kare şeklinde bir sinyal sağlar. Sinyal her değiştiğinde bilgi almak için Raspberry Pi'nin HW kesintilerini kullanacağız.

pca9695 bir servo kontrol kartıdır. Bir I2C seri veri yolu ile iletişim kuruyor. Bu kart, kamın pan ve tilt için servoları kontrol eden PWM sinyallerini ve besleme voltajını sağlar.

MPU9265, 3 eksenli bir hızlanma, 3 eksenli açısal dönüş hızı ve 3 eksenli manyetik akı sensörüdür. Bunu esas olarak pusula yönünü almak için kullanacağız.

Farklı modüllerin hepsi jumper kablosu ile birbirine bağlanmıştır. Bir devre tahtası dağıtıcı görevi görür ve besleme voltajları (5V ve 3,3V) ve topraklama sağlar. Bağlantıların tümü bağlantı tablosunda açıklanmıştır (bkz. ek). 5V'yi 3.3V girişe bağlamak muhtemelen çipinizi yok edecektir. Tedarik etmeden önce tüm kablolarınızı iki kez kontrol edin ve dikkatli olun (burada özellikle enkoder dikkate alınmalıdır). Tüm panoları bağlamadan önce sevk panosundaki ana besleme voltajlarını bir multimetre ile ölçmelisiniz. Modüller naylon vidalarla kasaya sabitlendi. Ayrıca burada onları tamir etmekten mutlu oldum ama aynı zamanda arıza durumunda çıkarılabilirler.

Tek lehimleme nihayet motorlar, devre tahtası ve başlıklardı. Dürüst olmak gerekirse, atlama kablolarını seviyorum ama gevşek bağlantıya neden olabilirler. Bazı durumlarda, bazı yazılım izlemeleri, bağlantıları analiz etmenize yardımcı olabilir.

3. Adım: Yazılım Altyapısı

Yazılım Altyapısı
Yazılım Altyapısı
Yazılım Altyapısı
Yazılım Altyapısı

Mekaniği sağladıktan sonra, rahat geliştirme koşullarına sahip olmak için bazı yazılım altyapılarını kuracağız.

Git

Bu ücretsiz ve açık kaynaklı bir sürüm kontrol sistemidir. Linux gibi büyük projeleri yönetmek için kullanılır, ancak küçük projeler için de kolayca kullanılabilir (bkz. Github ve Bitbucket).

Proje değişiklikleri yerel olarak izlenebilir ve ayrıca yazılımı toplulukla paylaşmak için uzak bir sunucuya aktarılabilir.

Kullanılan başlıca komutlar şunlardır:

git klon https://github.com/makerobotics/RPIbot.git [Kaynak kodunu ve git yapılandırmasını alın]

git pull Origin master [uzak depodan en son bilgileri alın]

git status [yerel deponun durumunu al. Değişen herhangi bir dosya var mı?] git log [taahhütlerin listesini al] git add. [değiştirilen tüm dosyaları bir sonraki işleme için göz önünde bulundurulmak üzere aşamaya ekleyin] git commit -m "comment for commit" [değişiklikleri yerel depoda yapın]git push Origin master [tüm taahhütleri uzak depoya gönderin]

Kerestecilik

Python, bazı yerleşik günlük işlevleri sağlıyor. Yazılım yapısı, daha fazla geliştirmeye başlamadan önce tüm kayıt çerçevesini zaten tanımlamalıdır.

Kaydedici, terminalde veya bir günlük dosyasında tanımlanmış bir formatta oturum açmak üzere yapılandırılabilir. Örneğimizde, günlükçü web sunucusu sınıfı tarafından yapılandırılmıştır ancak bunu kendi başımıza da yapabiliriz. Burada günlük kaydını yalnızca DEBUG olarak ayarladık:

günlükçü = logging.getLogger(_name_)

logger.setLevel(logging. DEBUG)

Ölçüm ve çizim

Sinyalleri zaman içinde analiz etmek için en iyisi onları bir grafikte çizmektir. Raspberry Pi'nin yalnızca bir konsol terminali olduğundan, verileri noktalı virgülle ayrılmış bir csv dosyasında izleyeceğiz ve uzak bilgisayardan çizeceğiz.

Noktalı virgülle ayrılmış izleme dosyası, ana python kodumuz tarafından oluşturulur ve aşağıdaki gibi başlıklara sahip olmalıdır:

timestamp;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;cycleTimeSense;

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;

İlk sütun zaman damgasını içerir. Aşağıdaki sütunlar ücretsizdir. Çizim komut dosyası, çizilecek sütunların bir listesiyle çağrılır:

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

Arsa komut dosyası araç klasöründe mevcuttur:https://github.com/makerobotics/RPIbot/tree/master/t…

Çizici, Python'da mathplotlib kullanıyor. PC'nize kopyalamanız gerekir.

Daha fazla rahatlık için, python betiği, Raspberry Pi izleme dosyasını uzak bilgisayara kopyalamak ve çiziciyi bir sinyal seçimi ile çağırmak için kullanılan bir bash betiği (plot.sh) tarafından çağrılır. Bash betiği "plot.sh" sorar dosyanın kopyalanması gerekiyorsa. Her seferinde manuel olarak kopyalamak yerine bu benim için daha uygun oldu. "sshpass", dosyayı Raspberry Pi'den scp aracılığıyla uzak PC'ye kopyalamak için kullanılır. Parola sormadan bir dosyayı kopyalayabilir (parametre olarak iletilir).

Son olarak resimde gösterildiği gibi arsa ile bir pencere açılır.

uzaktan iletişim

Raspberry Pi'nin geliştirme arayüzü SSH'dir. Dosyalar doğrudan hedef üzerinde düzenlenebilir veya scp ile kopyalanabilir.

Robotu kontrol etmek için Pi üzerinde bir web sunucusu çalışıyor ve Websockets aracılığıyla kontrol sağlıyor. Bu arayüz bir sonraki adımda açıklanmıştır.

Raspberry Pi'yi kurun

Kaynak kodun (setup_rpi.txt) "doc" klasöründe Raspberry Pi'nin kurulumunu anlatan bir dosya bulunmaktadır. Çok fazla açıklama yok ama birçok faydalı komut ve bağlantı var.

Adım 4: Kullanıcı Arayüzü

Kullanıcı Arayüzü
Kullanıcı Arayüzü

Kullanıcı arayüzünü barındırmak için hafif Tornado web sunucusunu kullanıyoruz. Robot kontrol yazılımını başlatırken dediğimiz bir Python modülüdür.

Yazılım mimarisi

Kullanıcı arayüzü aşağıdaki dosyalar tarafından oluşturulur:gui.html [Web sayfası kontrollerini ve düzenini açıklama] gui.js [Kontrolleri işlemek ve robotumuza bir websocket bağlantısı açmak için javascript kodunu içerir] gui.css [Şunun stillerini içerir. html kontrolleri. Kontrollerin konumları burada tanımlanmıştır]

websocket iletişimi

Kullanıcı arayüzü en havalı değil, ancak işi yapıyor. Burada Websockets gibi benim için yeni olan teknolojilere odaklandım.

Web sitesi robot web sunucusu ile Websockets aracılığıyla haberleşir. Bu, bağlantı başlatıldığında açık kalacak çift yönlü bir iletişim kanalıdır. Robotun komutlarını Websocket üzerinden Raspberry Pi'ye gönderiyoruz ve bilgileri (hız, konum, kamera akışı) ekrana getirmek için geri alıyoruz.

arayüz düzeni

Kullanıcı arayüzü, komutlar için manuel bir girişe sahiptir. Bu, başlangıçta robota komut göndermek için kullanıldı. Bir onay kutusu, kamera akışını açıp kapatıyor. İki kaydırıcı kamera pan ve tiltini kontrol ediyor. Kullanıcı arayüzünün sağ üst kısmı robotların hareketini kontrol ediyor. Hızı ve hedef mesafeyi kontrol edebilirsiniz. Temel telemetri bilgileri robot çiziminde görüntülenir.

Adım 5: Robot Platformunun Programlanması

Robot Platformunun Programlanması
Robot Platformunun Programlanması
Robot Platformunun Programlanması
Robot Platformunun Programlanması
Robot Platformunun Programlanması
Robot Platformunun Programlanması

Bu kısım projenin ana hedefiydi. DC motorlarla yeni şasiyi tanıtırken birçok yazılımı yeniden düzenledim. Python'u farklı nedenlerle programlama dili olarak kullandım:

  • Raspberry Pi ana dilidir.
  • Birçok yerleşik özellik ve uzantıya sahip üst düzey bir dildir.
  • Nesne yönelimlidir ancak sıralı programlama için de kullanılabilir.
  • Derleme veya alet zinciri gerekmez. Kodu düzenleyin ve çalıştırın.

Ana yazılım mimarisi

Yazılım nesne yönelimlidir, birkaç nesneye bölünmüştür. Benim fikrim, kodu 3 işlevsel bloğa bölmekti:

Sense Düşün Çalıştır

Sense.py

Ana sensör toplama ve işleme. Veriler bir sonraki aşamada kullanılmak üzere bir sözlükte saklanır.

Kontrol.py

Bir çalıştırma alt sınıfı, bazı soyutlamalardan sonra motorları ve servoları kontrol ediyor. Ana Kontrol nesnesi, yüksek seviyeli komutları ve ayrıca motor için kontrol algoritmalarını (PID) yönetiyor.

rpibot.py

Bu ana nesne, Tornado web sunucusunu yönetmek ve algılama ve kontrol sınıflarını ayrı iş parçacıklarında somutlaştırmaktır.

Her modül tek başına veya tüm projenin bir parçası olarak çalıştırılabilir. Sensörlerin doğru bağlandığını ve doğru bilgileri ilettiğini kontrol etmek için yalnızca sensör bilgilerini algılayabilir ve yazdırabilirsiniz.

PID kontrolü

İlk görev, neyi kontrol etmek istediğimizi bulmaktır. Çok karmaşık olan ve pek yardımcı olmayan pozisyonu kontrol etmeye çalışarak başladım.

Son olarak, her bir tekerleğin hızını ve ayrıca robot yönünü kontrol etmek istiyoruz. Bunu yapmak için iki kontrol mantığını basamaklandırmamız gerekiyor.

Karmaşıklığı adım adım artırmak için robotun kontrol edilmesi gerekir:

açık döngü (sabit güçle)

pwm = K

sonra yakın döngü algoritmasını ekleyin

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

ve son olarak yön kontrolünü son adım olarak ekleyin.

Hız kontrolü için bir "PI" kontrolü ve sadece sapma için "P" kullandım. Parametreleri deneyerek manuel olarak ayarladım. Muhtemelen çok daha iyi parametreler burada kullanılabilir. Hedefim sadece düz bir çizgiydi ve neredeyse onu yakaladım. Kullanıcı arayüzü ile bazı değişkenleri yazmak için yazılımda bir arayüz oluşturdum. Kp parametresini 1.0 olarak ayarlamak, kullanıcı arayüzünde aşağıdaki komutu gerektirir:

AYARLA;Kp;1.0

P parametresini, herhangi bir aşmayı önlemek için yeterince düşük ayarlayabilirim. Kalan hata, I parametresi ile düzeltilir (entegre hata)

Her iki kontrolü de nasıl basamaklandıracağımı bulmak benim için zordu. Çözüm basit, ancak daha önce başka birçok yol denedim… Sonunda, tekerleklerin hız hedefini bir veya diğer yöne dönecek şekilde değiştirdim. Hız kontrolü bu karışıklığı gidermeye çalıştığından, hız kontrol çıkışını doğrudan değiştirmek bir hataydı.

Kullanılan kontrol şeması ektedir. Robot kontrolünün sadece sol tarafını gösterir.

Adım 6: Sensör Kalibrasyonları

Sensör Kalibrasyonları
Sensör Kalibrasyonları
Sensör Kalibrasyonları
Sensör Kalibrasyonları
Sensör Kalibrasyonları
Sensör Kalibrasyonları

Dikkate alınması gereken ilk şey, tüm IMU'nun düzgün çalışması gerektiğidir. 3 parça sipariş ettim ve tam çalışan bir sensöre sahip olana kadar onları geri gönderdim. Önceki her sensörde sensörün bazı parçaları düzgün çalışmıyor veya hiç çalışmıyordu. Robota monte etmeden önce temelleri test etmek için bazı örnek komut dosyaları kullandım.

IMU sensör sinyallerinin kullanılmadan önce kalibre edilmesi gerekir. Bazı sensör sinyalleri montaj açısına ve konumuna bağlıdır.

Hızlanma ve dönüş hızı kalibrasyonları

En kolay kalibrasyon, boyuna ivme (A_x) içindir. Dururken yaklaşık 0 m/s² olmalıdır. Sensörü düzgün bir şekilde döndürürseniz yerçekimini ölçebilirsiniz (yaklaşık 9, 8 m/s²). a_x'i kalibre etmek için, onu düzgün bir şekilde monte etmeniz ve ardından hareketsiz durumda 0 m/s² elde etmek için ofseti tanımlamanız yeterlidir. Şimdi A_x kalibre edilmiştir. Dönme hızları için ofsetleri benzer şekilde hareketsiz durumdayken alabilirsiniz.

Pusula için manyetometre kalibrasyonu

Manyetik alan sensörleri için daha karmaşık bir kalibrasyon gereklidir. Manyetik alanı yatay seviyede almak için m_x ve m_y kullanacağız. m_x ve m_y'ye sahip olmak bize pusula yönü hesaplama fırsatı verecektir.

Basit amacımız için sadece sert demir sapmasını kalibre edeceğiz. Bu, manyetik alan bozulmalarına bağlı olduğu için sensör son konumdayken yapılmalıdır.

Robotu z ekseni etrafında döndürürken m_x ve m_y'yi kaydediyoruz. m_x ve m_y'yi bir XY grafiğinde çiziyoruz. Sonuç, resimde gösterildiği gibi bir üç nokta halinde. Üç nokta orijine ortalanmalıdır. Burada, her iki yönde de ofsetleri almak için m_x ve m_y'nin maksimum ve minimum değerlerini ele alıyoruz. Son olarak kalibrasyonu kontrol ediyoruz ve üç noktanın artık ortalandığını görüyoruz.

Yumuşak demir kalibrasyonu, resmi elipsten daireye değiştirdiğimiz anlamına gelir. Bu, her bir senor değerine bir faktör eklenerek yapılabilir.

Artık yeniden kalibre etmek veya en azından sensörlerin hala kalibre edilip edilmediğini kontrol etmek için bir test rutini kodlanabilir.

pusula başlığı

Manyetometre verileri şimdi pusula yönünü hesaplamak için kullanılacaktır. Bunun için m_x ve m_y sinyallerini açıya çevirmemiz gerekiyor. Python, bu amaca sahip olan math.atan2 işlevini doğrudan sağlamaktadır. Tam hesaplama mpu9250_i2c.py dosyasında tanımlanmıştır ("calcHeading(mx, my, mz)").

Adım 7: Alternatif Tasarımlar

Alternatif Tasarımlar
Alternatif Tasarımlar
Alternatif Tasarımlar
Alternatif Tasarımlar
Alternatif Tasarımlar
Alternatif Tasarımlar

Tasarım tamamen açık olduğu için proje çok zaman aldı. Her bileşen için bir miktar prototip uygulaması yaptım ve sistemin sınırlarını deneyimledim.

En karmaşık konu tekerlek kodlayıcıydı. Şu anda kullanılan optik kodlayıcıyı bulmadan önce 3 farklı seçeneği test ettim. Böyle bir projede iptal edilen çözümlerin de çok ilginç olduğunu düşünüyorum. En çok öğrendiğim kısımlarla ilgili.

Pca 9695'e bağlı sürekli dönüş servosu

Bir DC motor için ek bir H köprüsünü önlemek için önce sürekli dönüş servolarıyla başladım. Bunlar, halihazırda mevcut olan pca 9695 servo sürücüsü tarafından tahrik edildi. Tüm tahrik mekaniği ve ilgili elektronikler çok daha basitti. Bu tasarımın iki dezavantajı vardı:

  • Servoların zayıf kontrol aralığı.
  • Eksik kodlayıcı tutma konumu

Servolar %50 pwm ile hareket etmeye başlar ve yaklaşık %55 tam hıza sahiptir. Bu çok zayıf bir kontrol aralığıdır.

Kodlayıcı tutmadan, kullanıma hazır bir kodlayıcı bulmak çok zordu. Şase üzerine monte edilmiş 3 farklı reflektans enkoderini test ettim. Tekerleğin dışına siyah beyaz bölümlerle kendi yapımı bir kodlayıcı tekerleği bantladım. Doğru sinyali almak için çok fazla sinyal işlemeye ihtiyaç duyan QTR-1RC sensörlerini kullandım. Raspberry Pi, bu tür gerçek zamanlı işlemeyi gerçekleştiremedi. Bu yüzden robota gerçek zamanlı kontrolör olarak bir NodeMCU D1 mini eklemeye karar verdim. İşlenmiş sensör verilerini iletmek için seri UART tarafından ahududu Pi'ye bağlandı. NodeMCU aynı zamanda HC-SR04 sensörünü de yönetiyordu. Mekanikler zordu ve çok sağlam değildi, seri hat I2C hattından ve motorlardan ses geliyordu, bu yüzden nihayet şasinin ikinci versiyonunu basit dişli DC motorlarla çalıştırdım. bir H köprüsü. Bu motorlar, optik kodlayıcı yerleştirmek için ikincil bir çıkış miline sahiptir.

Adım 8: Görüntü İşleme

Görüntü işleme
Görüntü işleme
Görüntü işleme
Görüntü işleme
Görüntü işleme
Görüntü işleme
Görüntü işleme
Görüntü işleme

Otonom sürüşü geliştirmek için bazı görüntü işlemeler yapabiliriz.

opencv kütüphanesi bunun için bir referanstır. Python tarafından engel algılamayı hızla uygulamak için kullanılabilir.

Bir görüntü yakalarız ve bazı görüntü işleme görevlerini uygularız:

İlk testler Canny ve Sobel dönüşümleri ile yapılmıştır. Canny iyi bir aday olabilir ama yeterince mantıklı değil. Sobel çok mantıklı (çok fazla nesne algılandı).

Sonunda tüm yatay ve dikey geçişleri karıştırmak için kendi filtremi yaptım (mobilya algıla):

  • Renkli görüntüyü gri seviyeli bir görüntüye dönüştürün
  • Küçük gürültüyü gidermek için görüntüyü bulanıklaştırın
  • Görüntüyü siyah beyaz bir görüntüye eşleyin
  • Artık nesneleri duvar ve mobilya olarak algılamak için yatay ve dikey gradyanları tespit ediyoruz.
  • Yalnızca kalan büyük konturları filtreleriz (resimdeki renkli konturlara bakın)

Artık bu yeni bilgiyi engelleri tespit etmek için kullanabiliriz…

9. Adım: Sonraki Adımlar…

Sonraki adımlar…
Sonraki adımlar…
Sonraki adımlar…
Sonraki adımlar…

Artık sensörler, aktüatörler ve kamera içeren basit bir robot platformumuz var. Amacım otonom hareket etmek ve başka sensör eklemeden istasyona geri dönmek. Bunun için aşağıdaki adımlara ihtiyacım olacak:

  • Sapma ve manyetik yön sinyallerinin sensör birleşimi
  • Kamera görüntü işleme (bunun için yalnızca düşük CPU kullanılabilir)
  • Çarpışma algılama (ultrasonik mesafe ve kamera)
  • Harita oluşturma veya yönlendirme

Şimdi gidin ve kendi zorluklarınızı veya hedeflerinizi yaratın…

Önerilen: