Mündəricat:

Özünü öyrənən xaotik robot: 3 addım
Özünü öyrənən xaotik robot: 3 addım

Video: Özünü öyrənən xaotik robot: 3 addım

Video: Özünü öyrənən xaotik robot: 3 addım
Video: Hören & Verstehen - Prüfungsvorbereitung B2/C1 2024, Iyul
Anonim
Özünü öyrənən Xaotik Robot
Özünü öyrənən Xaotik Robot

AI və robot maşın öyrənmə ilə maraqlanırsınız? Müvəffəqiyyətli bir universitetdə işləməyinizə ehtiyac yoxdur. Bu mənim xaotik robotumun təsviridir. Özünü öyrənmə kodunun necə istifadə ediləcəyini və bir arduino platformasına necə tətbiq ediləcəyini göstərmək üçün çox sadə bir robotdur. Çox ucuz bir platformadır!

Kod robotu inkişaf etdirir ki, robot sürünməyi öyrənsin. Arxa tərəfə çəkilən siçandan geribildirim alır. Kod "genetik" dir. Bu o deməkdir ki, bir sıra fərdlər sınaqdan keçirilir və ən yaxşıları saxlanılır və uşaqları olacaq. Bu o deməkdir ki, kod təkamül yolu ilə inkişaf edir.

Addım 1: Donanım AKA Robotu

Donanım AKA Robot
Donanım AKA Robot
Donanım AKA Robot
Donanım AKA Robot
Donanım AKA Robot
Donanım AKA Robot

Ehtiyacınız var:

- 1 Arduino Vaxtı

- 8 mikroservo

- 1 PS/2 siçan

- 1 səviyyə dəyişdirici

- Sensor qalxanın və ya buna bənzər bir variant, sensor qalxandan bezdim və özüm qaynaq etdim.

-tellər

-Servo üçün 5V xarici enerji təchizatı

- bəzi metal qırıntıları, bir az yapışqan və bir az polad ip. Və lent!

Buna görə də ödəməni yerə qoyun. Servoları ətrafındakı bir halqaya qoyun. Onları hurda metal, yapışqan və iplə bir yerə qoyun. Bu xaos hissəsidir! Dizaynında xaotik olduğundan, onu süründürmək üçün necə hərəkət edəcəyini təyin etmək gözlənilməzdir. Bu səbəbdən özünü öyrənmə kodu getmək üçün bir yoldur!

İpuçları: kifayət qədər ağır metal hissələrdən istifadə edin ki, bu da robotun hərəkətini asanlaşdırır.

Servoları lazım olana bağlayın, mənim vəziyyətimdə D39, 41, 43, 45, 47, 49, 51, 53 -ə bağlıdır.

Servoları xarici 5V enerji təchizatına qoşun. Bunun üçün bir növ qalxan qurun və ya bir sensor qalxanı və ya bənzəri istifadə edin. 5V pinindən servoları qidalandırmayın, bu kifayət deyil, səbəbiylə yanacaq. 5 V -ni bütün servolara paylamaq üçün kiçik bir prototip lövhəsindən istifadə etdim. Bu lövhədə PS/2 siçan saatı və məlumat xətləri üçün səviyyə dəyişdiricisi də var. Lövhə eyni zamanda siçanı 5V ilə təmin edir. Zəmini xarici gücdən Arduinoya lazımi yerə bağlamağı unutmayın! sxemlər bütün bunları necə birləşdirəcəyinizi göstərir.

PS/2 -ni gücə (5V) və toprağa bağlayın. Səviyyə dəyişdiricisi vasitəsilə PS/2 -nin saatını və məlumat xəttini Due -ə qoşun. (vaxtı 3.3V, PS/2 5V gedir). D12 -də saatı və D13 -də məlumatları birləşdirin.

PS/2 protokolunun təfərrüatları üçün bu çox yaxşı bir təlimatdır:

www.instructables.com/id/Optical-Mouse-Od…

İstifadə etdiyim jazzycamel PS/2 kitabxanası:

Addım 2: Kod

Kod
Kod

Əvvəlcə deyim: Mən proqramçı deyiləm. Bəzi hissələr çox genişdir, təcrübəli bir proqramçı, əlbəttə ki, bunu qısalda bilər.

Kod özünü öyrənmədir və bu layihənin əsasını təşkil edir. Bunun əyləncəli tərəfi budur! Bu o deməkdir ki, robot inkişaf edir və getdikcə daha yaxşı olur, bu halda sürünmək daha yaxşı olur. Bunun heyrətləndirici tərəfi odur ki, robot nə yediyiniz vaxta qədər inkişaf edəcək. Bu vəziyyətdə bir PS/2 siçanını sürükləyir və siçan nə qədər uzun sürsə, o qədər yüksək bal toplayır.

Bu həm də robotunuza ölçülüb robota verildiyi müddətcə başqa bir şey etməsini öyrətmək üçün bu kodu istifadə edə biləcəyiniz deməkdir!

Şəkillərdə gördüyünüz kimi, siçan nazik bir kordon üzərində sürüklənir. Əvvəlcə siçan kabelinə sürükləndi. Ancaq kabel bir qədər sərtdir, buna görə robot sürükləmək əvəzinə siçanı silkələməyi öyrəndi. Yüksək nöqtələri sarsıtmaq…

Kod 50 fərddən istifadə edir. Bunun əsasını 50x50 baytlıq bir sıra təşkil edir.

Fərd, bir baytlar dəstidir. Fərdi robotu idarə etmək üçün istifadə edildikdə, bu şəxs "tolken" kodundakı bir funksiyaya göndərilir.

Qaçışın əvvəlində 8 dəyişən var m1, m2, m3, m4, m5, m6, m7 və m8 (hər servo üçün bir). Bu robotda hamısının daimi başlanğıc dəyərləri var. "Tolken" də mś, fərdin dəyərlərindən asılı olaraq bir halda/bir döngədə çevrilir. məsələn "1" dəyəri aşağıdakıları yerinə yetirir: m1 = m1 + m2.

Bir şəxs: 1, 2, 3, 0, 0, 0, 0….. olarsa, mś aşağıdakı şəkildə çevriləcəkdir:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken, 256 fərqli riyazi əməliyyatdan ibarət bir siyahıdır, buna görə də fərdlər dizisinin mümkün olan hər bir dəyəri m dəyərlərinin riyazi bir dəyişikliyini təmsil edir.

Token prosesi 4 dəfə yerinə yetirilir, hər dövrə arasında oxunaraq hər "m" üçün dörd fərqli motor kodu yaradılır. Motor kodları, sonradan servolara göndərilən dəyərlərdir.

İnkişafın hər addımında 4 fərd sürünərək yarışır. Ən yaxşı iki fərd iki körpə üçün valideyn olacaq, körpələr ən pis iki fərdin yerini alacaq. Körpələr doğulduqda, bir valideyndən bir "genetik kod" birləşməsi digər valideyndən bir dilimlə satılır, bu iki yeni fərd yaradır.

Heç bir fərd heç bir performans göstərməsə, fərdlərin mutasiyası baş verəcək və yeniləri meydana gələcək.

Kodu GitHub-da tapa bilərsiniz:

Addım 3: Necə öyrətmək olar?

Bu çətin hissəsidir. Düzgün məşq etmək üçün hər qaçışdan sonra "sıfırlamalısınız". Bu o deməkdir ki, hər dəfə eyni vəziyyətdə qoymalısan.

Robotun başlanğıc vəziyyətində olmasını təmin etmək üçün kodun içərisinə bir neçə yoxlama nöqtəsi qoydum.

Robotu hizalayın və çalışmasına icazə verin.

4 şəxsi sınayır və sonra valideyn olmaq üçün ən yaxşısını seçir. Ən pisləri körpələrlə əvəz etdikdən sonra fərdlərin performansı ilə bağlı bəzi məlumatlar çap olunur. 50x50 aralığını da çap edir. Bunu bir Excel hesabatı və ya bənzərinə kopyalamaq ağıllıdır. (və ya işlənərkən bəzi ehtiyac kodlarını yazın) Müddət sıfırlanarsa (bu müxtəlif səbəblərdən baş verərsə), o zaman təlim işinizi itirməyəcəksiniz. Dizini koda kopyalaya/yapışdıra və tərk etdiyiniz halda təhsilə davam edə bilərsiniz.

Robotum bir neçə saatdan sonra sürünməyi öyrəndi. Sürünmək üçün videonu yükləyin. Düşündüyüm istiqamətə getmədi!

Fərqli mərtəbələri də sınayın! Robotum neylon xalçada ən yaxşı performans göstərdi.

Mümkün təkmilləşdirmələr:

1. PS/2 siçanını oxumaq üçün ayrı bir nanonun olması və ardıcıl olaraq köçürülmüş işlənmiş məsafənin nanoya göndərilməsi daha yaxşı olar. PS/2 siçanımın oxunması bir az titrəyir. Siçanın kodun hissələrini oxumasının/təmizləməsinin səbəbi budur.

2. Robotu başlanğıc vəziyyətinə geri çəkən bir növ test qurğusu məşqi sürətləndirərdi.

3. Düşünürəm ki, bunu məndən bir qədər yavaş öyrətmək ağıllıdır. Yavaş məşqlər "düzgün istiqamətdə" təlim keçdiyini təmin edir. Bir neçə testin ortalama performansı mümkün bir yol ola bilər.

Tövsiyə: