Oda temizleme robotunu programlamak için hangi algoritmayı kullanmalıyım?


25

Bu soru için aşağıdakilerin bilinmediğini varsayın:

  • Odanın büyüklüğü ve şekli
  • Robotun yeri
  • Herhangi bir engelin varlığı

Ayrıca, aşağıdakilerin sabit olduğunu varsayalım:

  • Odanın büyüklüğü ve şekli
  • Tüm (varsa) engellerin sayısı, şekli ve konumu

Ve robotun aşağıdaki özelliklere sahip olduğunu varsayalım:

  • Yalnızca mutlak ünite artışlarla ileriye doğru hareket edebilir ve derece cinsinden dönebilir. Ayrıca hareket eden işlem, tıkanma nedeniyle hareket edemediğinde başarılı olursa veya yanlış olursa geri dönecektir.
  • Oldukça sınırsız bir güç kaynağı (diyelim ki güneşe her zaman tavanı açmadan bakan bir uzay istasyonuna yerleştirilmiş güneş enerjili bir robot)
  • Her hareket ve rotasyon her seferinde mutlak hassasiyetle gerçekleştirilir (güvenilmez veriler hakkında endişelenmeyin)

Son olarak lütfen robot ortamının aşağıdaki özelliklerini göz önünde bulundurun:

  • Tavansız bir uzay istasyonunda olan oda güvenli ama sinir bozucu bir şekilde kuyrukluyıldızlara yakın mesafede olduğundan, toz (ve buz) çevreyi sürekli olarak kirletmektedir.

Bana bu sorunun çok daha basit bir versiyonu soruldu (oda bir dikdörtgen ve hiçbir engel bulunmuyor, en azından bir kere her tarafa geçebilmeyi nasıl garanti edersiniz) ve eğer başaramazsanız, bu konuya nasıl yaklaşacağınızı merak etmeye başladım. şeklini veya engellerin varlığını garanti etmez. Buna Dijkstra'nın algoritmasıyla bakmaya başladım , ancak başkalarının buna nasıl yaklaştığını duyduğuma hayran oldum (ya da buna iyi kabul edilmiş bir cevap varsa? (Roomba nasıl yapıyor?)


+ algoritma ve + teorisi gibi etiketler bunun gibi bir soruya yardımcı olur, fakat henüz ekleyecek itibarım yok
Jason Sperske

kesinlikle Roomba'dan daha iyi bir şey
Octopus

İlginç. Bobsweep'im var ve mükemmel şekilde programlanmış momblogsociety.com/meet-newest-addition-family-bobsweep Herkese öneririm. Selamlar!

1
Bu bir reklam mı? Eğer değilse, robotun nasıl davrandığını ve neden mükemmel olduğunu açıklayan sadece bağlantı yerine bilgi göndermek isteyebilirsiniz.
Shahbaz

Yanıtlar:


18

Bildiğim kadarıyla, bu sorun "çözülmedi".

Resmen, bu bir çevrimiçi kapsama sorunudur. Kapsama, çünkü zemindeki her bir noktayı kapsamalıyız ve çevrimiçi olarak haritaya çevrimdışı erişimimiz yok. En yeni sonuçlarla ilgileniyorsanız , belki de Google aliminde " robotik çevrimiçi kapsama algoritmaları " nı aramanızı öneririm ( çok ve çok iyi sonuçlar vardır). @ Embedded.kyle'nin çok renkli (yeniden) gönderisine ek olarak, bazı ayrıntıları ekleyeceğim (ayrıca hızlıca birkaç basit sonuç bulmaya çalışacağım):

  • Dijkstra'nın size bir yol alacak, ama mutlaka bir kapsama alanı değil. Örneğin, Dijkstra'ya mümkün olan en kısa sürede bir noktayı ziyaret etmek yerine grafikteki her noktayı ziyaret etmeniz gerektiğini nasıl belirtirsiniz ? Tüm çiftleri en kısa yollardan çalıştırabilirsiniz, fakat puanlar neler? Haritan yok.

  • Bunun gibi çevrimiçi algoritmalara genellikle "hata" algoritmaları denir, çünkü bunlar bir alanda dolaşıp, bir şeye çarpıp, sonra biraz dolaşırken bir hataya benzerler.

  • Hiçbir engel ve dikdörtgen bir oda olmadan ve sınırdan başladığınızı varsayarsak bir boustrophedon (öküz yolu) yolu en uygunudur. görüntü tanımını buraya girin

Komik, çiftçilerin bunu sonsuza kadar yaptıkları, değil mi? http://en.wikipedia.org/wiki/Boustrophedon . Bu, engel olmayan ve kabaca dikdörtgen şeklindeki bir alanı bularak engelli odalara genişletilebilir. Howie Choset bu konuda biraz çalıştı .

  • π*d2d
  • Burası çok etkileyici bir alan. Üzgünüm, daha iyi bir özet sunamıyorum!

En büyük sorun haritanız olmaması. Harita olmadan, çevre takip etme ve bir yol boyunca hareket etme gibi basit eylemlerle sınırlıdır (belirtilen spiral gibi). Bu nedenle, temizlik sırasında haritayı oluşturan, haritalanan alanı şekillere ayıran ve ardından kapsamı sağlamak için her şekli kaplayan bazı robotlar vardır. Bkz .: http://mintcleaner.com/


9

Roomba bir şeye çarpana kadar spiral şeklinde başlar, sonra çevre süpürür. Sonra sadece etrafında seker. Ev robotik süpürge temizleyicilerinde fiili standart olan Roomba, “kabul edilen çözüm” diyebilirsin sanırım. Ancak kişisel deneyimimden (ikisine sahibim), kesinlikle iyileştirme için yer var.

Gönderen How Stuff Works :

algoritması

Gönderen röportajda Nancy Dussault Smith, iRobot Pazarlama İletişimi Başkan Yardımcısı ile:

Başladığı zaman, bir spiral deseni göreceksiniz, bir nesneye çarpana kadar daha büyük ve daha büyük bir alanın üzerine dışarı doğru sarılacak. Bir nesneyi bulduğu zaman, bir süre boyunca o nesnenin kenarı boyunca ilerleyecektir ve daha sonra başka bir nesneye çarpmadan gidebileceği en büyük mesafeyi anlamaya çalışarak, çapraz geçişe başlayacaktır. Alanın ne kadar büyük olduğunu görünce, ancak bir duvara çarpmadan çok uzun bir süre boyunca devam ederse, tekrar açılmaya başlar çünkü geniş bir açık alanda olduğunu düşünür ve sürekli olarak bunu hesaplar ve çözer.

Altındaki kir sensörleriyle aynıdır, bu sensörlerden biri tetiklendiğinde, bu alanı kapsayan davranışlarını değiştirir. Daha sonra düz bir yolda başka bir kirli alanın arayışı içinde sönecektir. Bu farklı kalıpların ilerledikçe birbirlerine yığılma şekli, bunun bir odayı örtmenin en etkili yolu olduğunu biliyoruz.

Seçtiğimiz kalıplar ve algoritmanın ilk olarak nasıl geliştirildiği, MIT çalışma hayvanlarından doğan davranış temelli algoritmalardan ve yiyecek için alanları nasıl aradıklarından kaynaklanıyordu. Karıncaların ve arıların nasıl dışarı çıktığını gördüklerinde ve alanları araştırdıklarında, bu tür kapsama ve bunların hepsini bulmak bu araştırmadan gelir. Kesin değil, belli ki, bal arısı olduğumuzu söylemiyorum, ancak adaptif teknolojimizin nasıl geliştirildiğinin temeli olan, doğada bir alanı nasıl araştıracağımızın anlaşılması.

Roombas'ın üzerlerinde LED bulunan uzun pozlama resimleri pratikte nasıl çalıştığını göstermektedir:

görüntü tanımını buraya girin görüntü tanımını buraya girin görüntü tanımını buraya girin


Bu, linkten kopyala-yapıştır içeriği midir?
Josh Vander Hook

@Josh Soruyu cevaplamak için ilgili materyal linkli sitelerden kopyalandı ve link çürümesini önlemek için bloknot içine yerleştirildi.
embedded.kyle

7

Neato organize bir yaklaşım kullanıyor. SLAM ve tamponları kullanarak, önce çevre alan 'mevcut' odayı eşler, ardından mümkün olduğu kadar verimli bir şekilde temizlik için bazı algoritmalar uygular. Hiçbir zaman bir Roomba'ya sahip olmadım, ancak algoritması hakkında okuduklarımdan ötürü asla bir neato'dan geçiş yapmam.

Neato içinde Lazer Mesafe Bulucu sık olduğu cannabilized o SLAM algoritmaları için uygun maliyetli bir sensör olduğu gibi, robotik için.

Göreviniz bana verilseydi , önce sahip olduğum donanıma göre uygun bir SLAM uygulaması bulurdum .

Sonra bir CNC ISLAND Motion planlama algoritması kullanırdım. Benim deneyimlerim, en az miktarda hareketle keyfi bir alanı örtme konusunda çok etkili olma eğilimindedir.


SLAM bu sorun için pek uygun değil çünkü konumlandırmada belirsizlik olmadığı bir simülasyon. Gerçek bir robot için kesinlikle haklısın.
Ian

Bunu özledim (eğer varsa). Aslında, aşağıdakilerin bilinmediğini söylüyor; Robotun yeri.
Çivili3

Konumun bilinmeyen bir şekilde başladığını düşünüyordum ama odanın topolojisi oluşturuldukça biliniyor olabilirdi.
Jason Sperske

Bu, basitleştirmelerin garip sonuçlar doğurduğu tuhaf akademik sorunlardan biridir. Haritanız, başlangıç ​​konumunuz, mükemmel konumlandırma ve koordineli bir dış varlık bulunmadığından, mutlak konum önemsizdir. Keyfi olarak (0,0) 'un başlangıç ​​yeriniz olduğuna karar verin, ardından haritanızı bu noktaya göre oluşturun. Bu gerçek dünyada gerçekten pratik değildir, ancak kapsama algoritmaları ile ilgili bazı pratikler verir.
Ian

Cevabınız sistemler açısından iyi. Ancak, bu sorunun daha iyi bir teori / algoritma sorusu olduğuna inanıyorum.
Josh Vander Hook,

6

Kurmanız gereken ilk şey, robotun amacı - sorunuzdan net değil. Robotunuzun başarması gereken iki ana görev vardır: temizlenebilir alanın şeklini keşfetmek ve sonra temizlemek.

Ancak kir miktarı sabit midir? Kir sürekli ekleniyor mu? Amacınız, zeminde kalan ortalama süreyi mi yoksa ortalama süreyi minimuma indirmek mi? Zemini eşit derecede temiz tutmak amaç mı? Yoksa en kısa sürede temizlemek mi? Hedefinize ulaşmada avantajınızı ölçebilecek ve kullanabileceğiniz kir birikiminde desenler var mı?

Bu soruların cevabı hangi algoritmayı seçtiğiniz konusunda size yardımcı olacaktır. Roomba'nın robotunda, odanın düzenini öğrenmenin bir anlamı olmayabilir, çünkü mobilyalar (bir masanın etrafındaki sandalyeler gibi), insanlar ve diğer engeller çok sık hareket eder. Bununla birlikte, sizin durumunuzda, eksiksiz bir harita oluşturmak için alanı araştırmak daha iyi olabilir (kenarları bulmak için bir çim biçme makinesi deseninin bir kombinasyonu), o zaman bu haritayı uzayda en kısa yolu hesaplamak için kullanın ("kapsama alanı" terimdir), ve bunu yapmanın birkaç yolu vardır; örneğin , ağaç algoritmasını kapsayan ).

Endişelenmeniz gereken bir şey daha, bulunduğunuz alanı nasıl ayrıştırmanız gerektiğidir. Çünkü herhangi bir yöne hareket edebilirsiniz - tamsayı derece miktarları ve tamsayı uzaklık birimleriyle bile - X ve Y konumlarınızın kesirli olması değerler. Sınırsız sayıda veri noktasına yayılmadan o haritadaki engellerin nasıl temsil edileceğine karar vermeniz gerekir.


Sadistik olarak bir röportaj sorusunu kendime daha da zorlaştırdığım için sanırım daha fazla bilgi bulabilirim.
Kazandığın

2

Hala ihtiyacınız olup olmadığından emin değilim, ancak bu konu için google’a gelenler için algoritmanın basit bir sürümünü yaptım.

Temel olarak, temizlenirken alanın haritasını oluşturmaya çalışır ve haritayı en yakın çözülmemiş düğümü (odanın bir kısmı) bulmak için kullanır. Bulamadığı zaman, oda temizlenmiş demektir (veya temizlenmemiş kısımlara robot tarafından erişilemez).

Diğer algoritmalardan daha yavaş olabilir, ancak başlangıç ​​konumu, yönü ve engelleri ne olursa olsun kapsamı garanti edebilir.

https://github.com/dungba88/cleaner_robot

GÜNCELLEME: Burada bir demo yaptım ve onu geri izleyen bir DFS ile karşılaştırdım. Bu yüzden algoritmam O (N ^ 2) olmasına rağmen, hamle ve dönüş sayısı bakımından çok daha fazla optimize edildi.

http://jenova.dungba.org/cleaner/showdown


İlginç, odayı 2B bir ızgaraya böler, hala kodunuzu okuyorum, temizlenmemiş bölgelere ulaşmak için hangi yol bulma yaklaşımını kullanıyorsunuz? Dijkstra?
Jason Sperske

En yakın temizlenmemiş pozisyonu bulmak için BFS kullandım.
Anh Dũng Bùi

-1

Size sorulan daha basit bir soruyu inceleyin - hiçbir engel içermeyen dikdörtgen bir oda, her parçayı temizleyin en az bir kere .

Çözüm, odanın bir köşesini bulmak ve bir köşeyi bulmak büyük bir problem olmayacak. Bu elde edildikten sonra, odanın ortasına bir spiral yol takip edin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.