İçindekiler:
Video: Kendi Kendine Öğrenen Kaotik Robot: 3 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
Makine öğrenimi, yapay zeka robotları ile ilgileniyor musunuz? Süslü bir üniversitede çalışmana gerek yok. Bu benim kaotik robotumun bir açıklaması. Kendi kendine öğrenme kodunun nasıl kullanılacağını ve bunun bir arduino platformuna nasıl uygulanacağını göstermek çok basit bir robottur, bu durumda bir Arduino nedeniyle. Çok ucuz bir platform!
Kod robotu geliştirir, böylece robot taramayı öğrenir. Geriye sürüklenen fareden geri bildirim alır. Kod "genetik"tir. Bu, bir dizi bireyin test edildiği ve en iyilerinin tutulduğu ve bebek sahibi olacağı anlamına gelir. Bu, kodun evrimsel bir şekilde geliştiği anlamına gelir.
Adım 1: Donanım AKA Robot
Şunlara ihtiyacınız var:
- 1 Arduino Ödeneği
- 8 mikroservo
- 1 PS/2 fare
- 1 seviye değiştirici
- bir sensör kalkanının veya benzerinin bir çeşidi, sensör kalkanından bıktım ve kendiminkini kaynakladım.
-teller
-servolar için harici 5V güç kaynağı
- biraz hurda metal parçası, biraz tutkal ve biraz çelik iplik. Ve bant!
Öyleyse Due'yi yere koyun. Servoları etrafındaki bir halkaya koyun. Bunları hurda metal, yapıştırıcı ve iplikle bir araya getirin. Bu kaos kısmı! Tasarımında kaotik olduğu için, onu süründürmek için nasıl hareket edeceğini belirlemek tahmin edilemez. Bu yüzden kendi kendine öğrenme kodu gitmenin yoludur!
İpuçları: Oldukça ağır metal parçalar kullanın, robotun hareket etmesini kolaylaştırır.
Servoları vadeye bağlayın, benim durumumda D39, 41, 43, 45, 47, 49, 51, 53'e bağlılar.
Servoları harici 5V güç kaynağına bağlayın. Bunun için bir çeşit kalkan oluşturun veya bir sensör kalkanı veya benzeri kullanın. Aidat 5V pininden servoları beslemeyin, yeterli değil, Due yanacaktır. 5 V'u tüm servolara dağıtmak için küçük bir prototip kartı kullandım. Bu kart aynı zamanda PS/2 fare saati ve veri hatları için seviye değiştiriciyi de barındırır. Kart ayrıca fareyi 5V ile besliyor. Topraklama nedeniyle harici güçten Arduino'ya topraklamayı unutmayın! şemalar hepsini nasıl bağlayacağınızı gösterir.
PS/2'yi güce (5V) ve toprağa bağlayın. PS/2'nin saatini ve veri hattını bir seviye değiştirici aracılığıyla Due'a bağlayın. (nedeni 3,3V, PS/2 5V'a gider). Saati D12'ye ve verileri D13'e bağlayın.
PS/2 protokolüyle ilgili ayrıntılar için bu çok iyi bir talimattır:
www.instructables.com/id/Optical-Mouse-Od…
Jazzycamel'in kullandığım PS/2 kütüphanesi:
2. Adım: Kod
İlk başta şunu söyleyeyim: Ben bir programcı DEĞİLİM. Bazı parçalar çok kapsamlıdır, yetenekli bir programcı elbette kısaltabilir ve saire.
Kod kendi kendine öğrenmedir ve bu projenin özüdür. Bu işin eğlenceli kısmı! Demek ki robot gelişiyor ve gitgide daha iyi oluyor, bu durumda emeklemede daha iyi oluyor. Bununla ilgili şaşırtıcı olan şey, robotun onu geri beslediğiniz şeye göre gelişecek olmasıdır. Bu durumda bir PS/2 fareyi sürükler ve fare ne kadar uzun süre sürüklenirse o kadar yüksek puan alır.
Bu aynı zamanda, ölçüldüğü ve robota geri beslendiği sürece, robotunuzu başka bir şey yapmak için eğitmek için bu kodu kullanabileceğiniz anlamına gelir!
Görsellerde de göreceğiniz üzere mouse ince bir ip üzerinde sürükleniyor. İlk başta fare kablosunda sürüklendi. Ancak kablo biraz sert olduğundan robot fareyi sürüklemek yerine sallamayı öğrendi. Sallayarak yüksek puanlar üretti…
Kod 50 birey kullanır. Bunun çekirdeği 50x50 baytlık bir dizidir.
Bir individ, bir bayt dizisidir. Kişi robotu çalıştırmak için kullanıldığında, bu birey "tolken" adlı koddaki bir işleve gönderilir.
Bir çalışmanın başlangıcında m1, m2, m3, m4, m5, m6, m7 ve m8 (her servo için bir tane) olmak üzere 8 değişken vardır. Bu robotta hepsinin sabit başlangıç değerleri vardır. "Tolken"de mś, bireyin değerlerine bağlı olarak bir case/swich döngüsüne dönüştürülür. örneğin "1" değeri aşağıdakileri yürütür: m1 = m1 + m2.
Bir birey: 1, 2, 3, 0, 0, 0, 0….. ise mś şu şekilde dönüştürülür:
m1 = m1 + m2;
m1 = m1 + m3;
m1 = m1 + m4;
Tolken, 256 farklı matematiksel işlemin bir listesidir, bu nedenle individs dizisinin olası her değeri, m değerlerinin matematiksel değişimini temsil eder.
Tolken işlemi, her tur arasında okuma ile 4 kez yapılır ve her "m" için dört farklı motor kodu üretilir. Motor kodları daha sonra servolara gönderilen değerlerdir.
Evrimin her adımında, 4 birey emeklemede rekabet eder. En iyi iki birey iki bebeğe ebeveyn olacak, bebekler en kötü iki bireyin yerini alacak. Bebekler yapıldığında, bir ebeveynden gelen bir "genetik kod" eki, diğer ebeveynden bir dilim için takas edilir, bu iki yeni birey yaratır.
Hiçbir birey hiç performans göstermezse, bireylerin mutasyonu yenilerini oluşturmak için gerçekleşecektir.
Kodu GitHub'da bulabilirsiniz:
Adım 3: Nasıl Eğitilir?
Bu zor kısım. Düzgün antrenman yapmak için her koşudan sonra "sıfırlamanız" gerekir. Bu, her seferinde aynı konuma koymanız gerektiği anlamına gelir.
Robotun başlangıç konumunda olduğundan emin olmak için kodun içine birkaç kontrol noktası koydum.
Bu yüzden robotu hizalayın ve çalışmasına izin verin.
4 bireyi test eder ve ardından ebeveyn olmak için en iyi 2 kişiyi seçer. En kötüsünü bebeklerle değiştirdikten sonra, bireylerin performansı hakkında bazı veriler yazdırır. Ayrıca 50x50 dizisini yazdırır. Bunu bir excel sayfasına veya benzerine kopyalamak akıllıca olacaktır. (veya işlem sırasında bazı ihtiyaç kodlarını yazın) Vadesi sıfırlanırsa (bu çeşitli nedenlerle gerçekleşir) eğitim çalışmanızı kaybetmezsiniz. Diziyi koda kopyalayabilir/yapıştırabilir ve kaldıysanız eğitime devam edebilirsiniz.
Robotum birkaç saat sonra emeklemeyi öğrendi. Taramasını görmek için videoyu indirin. Düşündüğüm yöne gitmedi!
Ayrıca farklı katları deneyin! Robotum en iyi performansı naylon halı üzerinde gösterdi.
Olası iyileştirmeler:
1. PS/2 fareyi okumak ve seri üzerinden taşınan işlenmiş mesafeyi nano'ya göndermek için ayrı bir nano'ya sahip olmak daha iyi olurdu. PS/2 faremin okuması biraz titriyor. Farenin kodun bölümlerini okumasının/temizlemesinin nedeni budur.
2. Robotu başlangıç pozisyonuna geri çeken bir çeşit test donanımı, eğitimi hızlandıracaktır.
3. Onu benden biraz daha yavaş çalıştırmanın akıllıca olduğunu düşünüyorum. Daha yavaş eğitim, "doğru yönde" eğitildiğini garanti eder. Birkaç test çalışmasının ortalama performansı olası bir yol olabilir.
Önerilen:
Çocuk Dörtlü Kendi Kendine Sürüş, Çizgi Takip ve Engel Algılama Aracına Hacking.: 4 Adım
Çocuk Dörtlü Kendi Kendine Sürüş, Çizgi Takip ve Engel Algılama Aracına Hacking.: Bugünün Eğitilebilir Tablosunda 1000 Watt'lık bir elektrikli çocuk dörtlüsünü (Evet, çok şey biliyorum!) Kendi Kendine Sürüş, Çizgi Takip ve Engelden Kaçınan bir araca dönüştüreceğiz! Demo video:https://youtu.be/bVIsolkEP1kBu proje için aşağıdaki malzemelere ihtiyacımız olacak
Birkaç Basit Bileşen, Kendi Kendine Bir Elektronik Klavye: 6 Adım
Birkaç Basit Bileşen, Kendin Yap Elektronik Klavye: 555 zamanlayıcı 1 Düğme × 81 100nF kapasitörÇeşitli dirençler: 390Ω, 620Ω, 910Ω, 1kΩ×2, 1.1kΩ, 1.3kΩ, 1.5kΩ, 6.2kΩ.1 buzzer22AWG kurulum kablosu1 9V pil konektörü1 devre tahtası1 9V pil
Kendi Kendine Öğrenen Labirent Yengeç Robot PROTOTİP 1 DURUM EKSİK: 11 Adım
Kendi Kendine Öğrenen Labirent Yengeç Robot PROTOTİP 1 DURUM EKSİK: SORUMLULUK REDDİ!!: Merhaba, kötü resimler için özür dilerim, daha sonra daha fazla talimat ve diyagram ekleyeceğim (ve daha spesifik ayrıntılar. Süreci belgelemedim (bunun yerine az önce yaptım). hızlandırılmış video) Ayrıca bu talimat eksik, benim yaptığım gibi
Araba Dönüştürme: Uzaktan Kumandadan Kendi Kendine Kontrole: 4 Adım
Transform-a-Car: Uzaktan Kumandalıdan Kendinden Kontrollüye: Bu, uzaktan kumandası bozuk bir RC arabanın hacklenmesidir. Garaj satışlarında bolca bulabilirsiniz
Kendi Kendine Yürüyen Robot: 7 Adım
Kendi Kendine Yürüyen Robot: Ne yaptım?● Farklı yüzeylerde yürümek (ilerlemek) için eğitilebilen bir robot. Bot, ilerlemek için mücadele eden 4 'dizsiz' bacaklı basit bir yaratığı tasvir ediyor. Bacakların her birini yalnızca 3 olası şekilde yönlendirebileceğini bilir. Şimdi