Hobi veya projeye dayalı robot yapımı son dönemde hayli popüler. Bu yazımızda bir robotun nesnelere çarpmadan hareket etmesine yardımcı olmak için bir sensör ve onu ışığa doğru yönlendirmek için başka bir sensör kullanan basit bir programı açıklamaya çalışacağız.
Engellerden kaçınmak
Kendi mobil robotunuzu yaptıktan, Raspberry Pi veya Arduino ile kontrol panosunu programladıktan, serbest bıraktıktan sonra duvara çarpmasını veya alt kata düşmesini izledikten sonra, bazı sensör geri bildirimlerinin faydalı olacağını fark edeceksiniz. Herhangi bir elektronik aksam içermeyen en basit yöntem, uzun aktüatörlü mikro anahtarlardan faydalanan basit “çarpma” sensörlerini kullanır. (AVM3435613) Datasheet
Bunlar, robotun geri çekilmesine neden olan motorlara giden gücü tersine çeviren bir geçiş rölesini çalıştırabilir. Bu, çarpmayı engelleyen bir devre değil, ancak basit ve ucuz.
Daha da ucuz bir alternatif, bir nesneye çarptığında bir devreyi büken ve kapatan bıyık adı verilen teldir. Aşağıdaki minimalist robot resmine bakarak nasıl çalıştığını görebilirsiniz (Şekil 1). Her bir “bıyık” bir çift yaylı telden oluşur ve uzun olan bükülüp sabit tele dokunduğunda çalışır. Temas halinde iken o taraftaki motor ters çevrilir. Bununla birlikte, temas kesildiğinde ileri hareket hemen devam ettirilirse, robot engele çarpmaya devam edecektir. Ayarlanabilir bir gecikme devresi temas kaybolduktan sonra ters hareketi sağlayarak bunu engeller.
Bu robotun üzerindeki bıyıklar, yolunu kapatan nesneleri algılamakla kalmaz, aynı zamanda masanın kenarından düşmesini veya bir merdivenden aşağı yuvarlanmasını da engeller. Uzun bıyık, ucu yere temas edecek şekilde yerleştirilmiştir, ancak bir deliğe veya bir uçurumun kenarına denk geldiğinde, bu ucun boşa düşmesi durumunda, uzun bıyığın sabit tarafı ile temas sağlanır ve boşluğa doğru olan hareket kesilir, geri çekilme işlemi başlar. Devre şemasındaki bu 8 pinli çip bir LM2903 ikili analog karşılaştırıcıdır.(121-8466) Bu bir mikrodenetleyici değildir. Bu robotu, yalnızca bir avuç temel elektronik bileşenle kesin “zeka” belirtileri gösteren bir şey yapmanın ne kadar kolay olduğunu göstermek için ekledik. Ancak, mobilyalarla temas etmesi gerekmeyen, nereye gittiğini “görebilen” bir robot istiyorsanız, o zaman biraz daha karmaşık sensörlere ihtiyaç vardır.
Basit Tek Mesafe Bulucudan Kaçınma
Engellerin temassız tespiti için en ucuz seçenek, sonar (sonik-radar) prensibine dayalı ultrasonik telemetredir. Adından da anlaşılacağı gibi, cihaz birkaç metreye kadar hassas mesafeleri ölçmek için tasarlanmıştır, bu yüzden sadece yakınlığı algılamak için kullanmak biraz abartılı görünebilir. İlk aşamadan sonra harita oluşturma ve navigasyonu denemeyi düşünüyorsanız, yatırım yapmaya değer. Birçok hobi robotu, ön tarafında öne bakan tek bir sabit telemetre ile birlikte verilir. Güvenilir FORTHdsPIC robotuna bir SRF08 telemetre modülü taktık ve basit engellerden kaçınmak için programladık:
Herhangi bir nesne algılanmıyorsa veya 20 cm’den fazla öndeyse, ileriye doğru sür.
Algılanan bir nesne 20 cm’den daha yakınsa, sola dön.
Engellerden kaçınma için program listesi
Bu bölümdeki kod, bir çift 2 baytlık dizi için RAM’deki alanı ayırır. Birincisi, ECHO, bir I2C veri yolu aracılığıyla SRF08 telemetreden 16 bitlik aralık verilerini alır. CMD, cihaza aktarım için SRF08 komut kodlarını/kayıt adreslerini içerir. İlk kelime tanımı SETUP, maksimum menzili yaklaşık 2m’ye ve maksimum alıcı analog kazancını 227’ye ayarlayarak telemetreye başlatma komutları gönderir. Cihaz, iletilen ultrasonik değişen darbe uzaklaştıkça alıcı kazancını otomatik olarak bu maksimum değere yükseltir. Başka bir deyişle, artan hedef mesafesi ile dönüş sinyal gücündeki azalmayı telafi eder. Son olarak, SVOSET robotun iki sürekli dönüşlü servo motoru için iki servo kanalı sağlar.
PING, SRF08’e bir ultrasonik değişen darbe gönderme komutu veren ve parametre yığınında kalan aralık değeriyle çıkan kelimedir. I2C veriyolu aracılığıyla gönderilen gönderme darbe komut kodu (81) ayrıca cihaza aralık verilerini santimetreye çevirmesini söyler. Program daha sonra, darbenin öngörülen maksimum 2m aralığında bir hedeften dönmesi için geçen süre olan 18ms için bir BEKLE durumuna girer. Tabii ki, yakındaki nesnelerden gelen sinyaller bundan daha kısa sürede ulaşır ve bu nedenle, okunmayı bekleyen menzil verileriyle zaman kaybetme potansiyeli vardır. SRF08 veri sayfası, işlemcinin telemetreyi yoklayabileceği ve hazır olur olmaz verileri alabileceği bir yöntem sunar. Yine de bir sorun var: teknik, Ana cihazın (işlemci), adreslenen cihazın mevcut olduğunu ve çalıştığını doğrulamak için Slave’in (mesafe ölçer) onay bitini kullanmadığını varsayar. FORTHdsPIC I2C veri yolu sürücüsü, Slave’den bir ‘olumsuz onay’ alındığında iletişimi kesiyor ve bir hata mesajı yazdırıyor. Elbette yine bir zaman kaybı mevcut, ancak bizce kabul edilebilir seviyede. Çünkü uzun vadede çalışan bir hata tespit sistemi çok daha faydalıdır.
SÜRÜŞ ve SWERVE, tekerlekleri sırasıyla engelsiz ve engel tespitli koşullar için harekete geçiren tek satırlık sözcük tanımlarıdır. CSERVO iki parametre alır: dönüş hızı/yönü ve kanal numarası. Hız/yön aralığı, 0 stop olmak üzere -90 ile +90 arasındadır. İlerlemek için iki motorun zıt yönlerde dönecek şekilde ayarlandığına dikkat edin; bunun nedeni, kasanın karşı taraflarına monte edilme biçimleridir. Bir nesne algılandığında, sol taraftaki motor aniden tersine dönerek sola dönüşü sağlar.
MAIN, telemetreye PING göndererek, 20 cm’den daha az bir şey olup olmadığını kontrol ederek ve ardından uygun eylemi gerçekleştirerek sonsuza kadar dönen temel koddur.
PING, SRF08’e bir ultrasonik değişen darbe gönderme komutu veren ve parametre yığınında kalan aralık değeriyle çıkan kelimedir. I2C veriyolu aracılığıyla gönderilen gönderme darbe komut kodu (81) ayrıca cihaza aralık verilerini santimetreye çevirmesini söyler. Program daha sonra, darbenin öngörülen maksimum 2m aralığında bir hedeften dönmesi için geçen süre olan 18ms için bir BEKLE durumuna girer. Tabii ki, yakındaki nesnelerden gelen sinyaller bundan daha kısa sürede ulaşır ve bu nedenle, okunmayı bekleyen menzil verileriyle zaman kaybetme potansiyeli vardır. SRF08 veri sayfası, işlemcinin telemetreyi yoklayabileceği ve hazır olur olmaz verileri alabileceği bir yöntem sunar. Yine de bir sorun var: teknik, Ana cihazın (işlemci), adreslenen cihazın mevcut olduğunu ve çalıştığını doğrulamak için Slave’in (mesafe ölçer) onay bitini kullanmadığını varsayar. FORTHdsPIC I2C veri yolu sürücüsü, Slave’den bir ‘olumsuz onay’ alındığında iletişimi kesiyor ve bir hata mesajı yazdırıyor. Elbette yine bir zaman kaybı mevcut, ancak bizce kabul edilebilir seviyede. Çünkü uzun vadede çalışan bir hata tespit sistemi çok daha faydalıdır.
SÜRÜŞ ve SWERVE, tekerlekleri sırasıyla engelsiz ve engel tespitli koşullar için harekete geçiren tek satırlık sözcük tanımlarıdır. CSERVO iki parametre alır: dönüş hızı/yönü ve kanal numarası. Hız/yön aralığı, 0 stop olmak üzere -90 ile +90 arasındadır. İlerlemek için iki motorun zıt yönlerde dönecek şekilde ayarlandığına dikkat edin; bunun nedeni, kasanın karşı taraflarına monte edilme biçimleridir. Bir nesne algılandığında, sol taraftaki motor aniden tersine dönerek sola dönüşü sağlar.
MAIN, telemetreye PING göndererek, 20 cm’den daha az bir şey olup olmadığını kontrol ederek ve ardından uygun eylemi gerçekleştirerek sonsuza kadar dönen temel koddur.
Çalışıyor mu?
Evet ve hayır. Robotun boyutlarına göre çok daha geniş olmayan bir engel tespit edilebilir ve hem uzun hem de kısa mesafeden başarıyla kaçınılabilir. Ancak nesne robotun yolu boyunca uzun, düz bir duvarsa, yaklaşma açısının onun ‘tespit edilebilirliği’ üzerinde önemli bir etkisi vardır (Şekil 2). Açı sığ ise o zaman telemetre alıcısına geri dönmesi gereken yansıyan sinyal, bunun yerine yanlış yöne gider. Bunun etkisi, duvar sonarını robot için görünmez kılmaktır.
Sorunu bu robotla göstermek kolaydır: onu duvara doğru dik bir yörüngeye koyduğunuzda, duvarınızdan farklı renkteki süpürgelikler mükemmel sonar reflektörleri oluşturur. 20cm algılama mesafesinde robot sola sapar ancak kritik açıya ulaştığında dönmeyi bırakır. Bu noktadan itibaren duvara çarpana kadar dümdüz ilerleyecektir.
Bazı yumuşak yüzeyli mobilyalar çeşitli sebeplerden ötürü sonar tarafından görülmeyebilir; üzerlerine gelen sinyali tamamiyle emdikleri ve hiçbir şey yansıtmadıkları için. Dolayısıyla, ‘Çalışıyor mu?’ sorusuna yanıt olarak, yanıt şudur: Evet, yalnızca robotun nispeten küçük, sert nesnelere çarpmasını önlemek istiyorsanız. Hayır, sert veya çok yumuşak malzemelerden yapılmış uzun ‘duvarlar’ ile karşılaşırsa. Duvarlarla başa çıkmak için daha fazla sensör gerekiyor.
Sonraki Adım
Sonuç olarak, sonra bir robotun tam anlamıyla çalışabilmesi için “görünmez duvar” sorununu aşmak gerekir. Bunu aşmanın en basit yolu, birden çok mesafe ölçer kullanmaktır. İkinci yol ise çok daha ilginç: Bir sonar tarıyıcı kullanarak bu tarayıcıyı servo motorlara bağlamak! Bu da ilerideki bir yazımızın konusu olsun.