Mündəricat:

Robotik qol: Jensen: 4 addım
Robotik qol: Jensen: 4 addım

Video: Robotik qol: Jensen: 4 addım

Video: Robotik qol: Jensen: 4 addım
Video: КОНЕЦ МУЧЕНИЯМ. Трава больше не проблема! 2024, Noyabr
Anonim
Robotik qol: Jensen
Robotik qol: Jensen

Jensen, Arduino platforması üzərində qurulmuş, intuitiv hərəkət planlamasına əsaslanan, 1 kredit müstəqil layihə olaraq, doktor B. Charles Mallochun rəhbərliyi altında hazırlanmış bir robot qoludur. Qolu əllə hərəkət etdirməklə proqramlaşdırılmış bir sıra hərəkətləri təkrarlaya bilər. Bunu yaratmaq üçün ilhamı UMass Amherst M5 istehsal məkanında qurulmuş digər robot silahlarını görməkdən aldım. Bundan əlavə, CAD proqramından istifadə etməyi öyrənmək və inkişaf etmiş bir Arduino layihəsi etmək istədim. Bunu bütün bunları etmək üçün bir fürsət olaraq gördüm.

Addım 1: Orijinal Dizayn və Kapsam

Orijinal dizayn və əhatə dairəsi
Orijinal dizayn və əhatə dairəsi

Bu layihə üçün öyrənmək üçün seçdiyim CAD proqramı OnShape idi və modelləşdirdiyim ilk şey HiTec HS-422 analoq servo idi. Yerli olaraq mənim üçün əlçatan olduğu və uyğun bir qiymət olduğu üçün servo seçdim. Öz hissələrimin dizaynına keçməzdən əvvəl OnShape öyrənmək üçün də yaxşı bir təcrübə oldu. Layihənin bu başlanğıc nöqtəsində, qolun nəyə qadir olmasını istədiyim barədə ümumi təsəvvürə sahib idim. Yaxşı bir hərəkət aralığına və əşyaları götürmək üçün tutucuya sahib olmasını istəyirdim. CAD -da modelləşdirməyə davam edərkən bu ümumi xüsusiyyətlər dizaynı məlumatlandırdı. Bu anda sahib olduğum başqa bir dizayn məhdudiyyəti, 3D printerimdəki çap yatağının ölçüsü idi. Bu səbəbdən yuxarıdakı fotoda gördüyünüz baza nisbətən ibtidai bir kvadratdır.

Layihənin bu mərhələsində qolumu necə idarə etmək istədiyimi də beyin fırtınası ilə izah etdim. Makerspace -də ilham aldığım bir robot qolu idarə etmək üçün bir kukla qolu istifadə etdi. Başqası, qolun istifadəçi tərəfindən müxtəlif mövqelərə köçürüldüyü intuitiv bir yol proqramlaşdırma metodundan istifadə etdi. Qol daha sonra bu mövqelərdən geri dönəcək.

Əsl planım qolun tikintisini bitirmək və sonra hər iki idarəetmə üsulunu həyata keçirmək idi. Bundan sonra bir anda nəzarət etmək üçün bir kompüter tətbiqi etmək istədim. Yəqin ki, deyə biləcəyiniz kimi, layihənin bu tərəfinin əhatə dairəsini azaltmağa başladım. İlk iki idarəetmə üsulu üzərində işləməyə başladığımda, intuitiv yol proqramlaşdırmasının düşündüyümdən daha mürəkkəb olduğunu gördüm. Məhz o zaman bunu diqqət mərkəzində saxlamağa və digər nəzarət üsullarını qeyri -müəyyən müddətə dayandırmağa qərar verdim.

Addım 2: Nəzarət

Nəzarət
Nəzarət

Seçdiyim idarəetmə üsulu belə işləyir: qolunuzu əllərinizlə müxtəlif mövqelərə keçirirsiniz və bu mövqeləri "saxlayırsınız". Hər mövqedə qolun hər bir qolu arasındakı bucaq haqqında məlumatlar var. Vəzifələri qənaət etməyi bitirdikdən sonra bir oynatma düyməsini vurursunuz və qol bu mövqelərin hər birinə ardıcıllıqla qayıdır.

Bu idarəetmə üsulunda, anlamaq üçün çox şey var idi. Hər bir servonun xilas edilmiş bir açıya qayıtması üçün ilk növbədə bu açıları birtəhər "saxlamalı" oldum. Bunun üçün istifadə etdiyim Arduino Uno, hər servonun cari açısını ala bilməsini tələb edirdi. Bu idarəetmə metodundan istifadə edən bir robot qolu hazırlayan dostum Jeremy Paradie, hər bir hobbi servonun daxili potensiometrindən istifadə etməyimə kömək etdi. Bu servonun bucağını kodlaşdırmaq üçün istifadə etdiyi potensialiometrdir. Bir test servo seçdim, daxili potensiometrin orta pininə bir tel lehim etdim və kənardakı teli qidalandırmaq üçün qəfəsdə bir delik açdım.

İndi potensiometrin orta pinindəki gərginliyi oxuyaraq cari açını ala bilərdim. Ancaq iki yeni problem var idi. Birincisi, orta pindən gələn siqnalda gərginlik sıçrayışları şəklində səs -küy var idi. Bu problem sonradan əsl problemə çevrildi. İkincisi, bucaq göndərmək və bucaq almaq üçün dəyərlər aralığı fərqli idi.

Hobbi servo mühərriklərə 0 ilə 180 dərəcə arasında bir açı ilə hərəkət etmələrini söyləmək, bucağa uyğun yüksək vaxtda bir PWM siqnalının göndərilməsini nəzərdə tutur. Bunun əksinə olaraq, servo buynuzu 0 ilə 180 dərəcə arasında hərəkət etdirərkən potensialiometrin orta pimindəki gərginliyi oxumaq üçün Arduinonun analoq giriş pinindən istifadə etmək ayrı bir dəyər aralığını qaytarır. Bu səbəbdən, servonun eyni bucağa qaytarılması üçün lazım olan PWM çıxış dəyərinə qənaət edilmiş giriş dəyərinin çevrilməsi üçün bəzi riyaziyyat lazım idi.

İlk düşüncəm, hər bir bucaq üçün uyğun PWM çıxışı tapmaq üçün sadə bir sıra xəritəsindən istifadə etmək idi. Bu işlədi, amma çox dəqiq deyildi. Layihəmdə, 180 dərəcə bir açı aralığına uyğun PWM yüksək vaxt dəyərlərinin diapazonu analoq giriş dəyərləri aralığından çox böyük idi. Bundan əlavə, bu diapazonların hər ikisi davamlı deyildi və yalnız tam ədədlərdən ibarət idi. Saxlanan giriş dəyərini bir çıxış dəyərinə uyğunlaşdırdığımda dəqiqlik itirildi. Bu anda servolarımı lazım olduqları yerə çatdırmaq üçün bir idarəetmə döngəsinə ehtiyacım olduğunu başa düşdüm.

Girişin orta pin gərginliyi və çıxışı PWM çıxışı olduğu bir PID idarəetmə döngəsi üçün kod yazdım, amma tezliklə yalnız inteqral nəzarətə ehtiyacım olduğunu kəşf etdim. Bu ssenaridə, çıxış və giriş hər ikisi də açıları təmsil edir, buna görə də mütənasib və törəmə nəzarəti əlavə etmək onu aşmağa və ya arzuolunmaz davranışa səbəb olur. İnteqral idarəetməni tənzimlədikdən sonra hələ də iki problem var idi. Birincisi, cari və arzu olunan açı arasındakı ilkin səhv böyük olsaydı, servo çox tez sürətlənərdi. İntegral nəzarət üçün sabitliyi azalda bilərdim, amma bu ümumi hərəkəti çox yavaş etdi. İkincisi, hərəkət əsəbi idi. Bu, analoq giriş siqnalındakı səs -küyün nəticəsi idi. İdarəetmə döngəsi davamlı olaraq bu siqnalı oxuyurdu, buna görə də gərginlik sıçrayışları sarsıntı hərəkətinə səbəb olurdu. (Bu nöqtədə mən də bir sınaq servomdan yuxarıda göstərilən qurğuya keçdim. Proqramdakı hər bir servo üçün bir nəzarət döngəsi obyekti də etdim.)

Çıxışa eksponent olaraq ağırlıqlı hərəkət edən orta (EWMA) filtr qoyaraq həddindən artıq sürətləndirmə problemini həll etdim. Çıxış orta hesabla, hərəkətdəki böyük sıçrayışlar azaldı (səs -küydən gələn sarsıntı da daxil olmaqla). Ancaq giriş siqnalındakı səs -küy hələ də problem idi, buna görə də layihəmin növbəti mərhələsi bunu həll etməyə çalışırdı.

Addım 3: səs -küy

Səs -küy
Səs -küy

Yuxarıdakı Şəkil

Qırmızı rəngdə: orijinal giriş siqnalı

Mavi: işləndikdən sonra giriş siqnalı

Giriş siqnalındakı səs -küyü azaltmağın ilk addımı onun səbəbini anlamaq idi. Siqnalın bir osiloskopda araşdırılması, gərginlik sıçrayışlarının 50 Hz sürətlə baş verdiyini ortaya çıxardı. PWM siqnalının servolara göndərilməsinin də 50Hz sürətində olduğunu bildim, buna görə gərginlik sıçrayışlarının bununla əlaqəli olduğunu təxmin etdim. Güman etdim ki, servoların hərəkəti bir şəkildə potansiometrlərin V+ pinində gərginlik sıçrayışlarına səbəb olur və bu da öz növbəsində orta sancağın oxunmasını pozur.

Səs -küyü azaltmaq üçün ilk cəhdimi burada etdim. Hər servoyu yenidən açdım və potansiometrdəki V+ pinindən gələn bir tel əlavə etdim. Onları oxumaq üçün Arduino Uno -dan daha çox analog girişə ehtiyacım var idi, buna görə də bu anda bir Arduino Mega -ya keçdim. Kodumda bucaq girişini orta pimdəki gərginliyin analoji oxunuşundan orta pindəki gərginliyin V+ pinindəki gərginliyə nisbətinə dəyişdim. Ümidim, sancaqlar üzərində bir gərginlik sıçrayışı olsaydı, nisbətdə ləğv edəcəyi idi.

Hər şeyi bir yerə yığdım və sınadım, amma sıçrayışlar hələ də davam edirdi. Bu nöqtədə etməli olduğum şey, yerimi araşdırmaq idi. Bunun əvəzinə, növbəti fikrim potansiyometrləri tamamilə ayrı bir enerji təchizatına qoymaq idi. V+ tellərini Arduinonun analoq girişlərindən ayırdım və ayrı bir enerji təchizatına bağladım. Sancaqları əvvəlcədən sınamışdım, buna görə də onları hansı gərginliklə gücləndirəcəyimi bilirdim. Hər bir servoda idarəetmə lövhəsi ilə V+ pin arasındakı əlaqəni də kəsdim. Hər şeyi bir araya gətirdim, bucaq giriş kodunu əvvəlki vəziyyətinə qaytardım və sonra sınadım. Gözlənildiyi kimi, giriş pinində artıq gərginlik sıçrayışları olmadı. Ancaq yeni bir problem var idi - potensiometrlərin ayrı bir enerji təchizatına qoyulması servoların daxili idarəetmə döngələrini tamamilə pozmuşdu. V+ pinləri əvvəlki kimi eyni gərginliyi alsalar da, servoların hərəkəti nizamsız və qeyri -sabit idi.

Bunun niyə baş verdiyini başa düşmədim, buna görə nəhayət servolarda yer əlaqəmi sınadım. Yerdə təxminən 0.3 Volt olan bir orta gerilim düşməsi oldu və servolar cərəyan çəkdikdə daha da yüksəldi. Mənə aydın idi ki, bu sancaqlar artıq "torpaq" hesab edilə bilməz və daha yaxşı "istinad" sancaqlar kimi təsvir edilə bilər. Servo üzərindəki idarəetmə lövhələri, potansiyometrenin orta pinindəki gərginliyi həm V+, həm də istinad pinlərindəki gərginliyə nisbətdə ölçmüş olmalıdır. Potensiometrləri ayrı -ayrılıqda gücləndirmək həmin nisbi ölçməni pozdu, çünki indi bütün sancaqlarda baş verən bir gərginlik sıçrayışının yerinə yalnız istinad pinində baş verdi.

Müəllimim, doktor Malloch, bütün bunları düzəltməyimə kömək etdi və digər pinlərə nisbətən orta pindəki gərginliyi ölçməyimi təklif etdi. Bucaq girişinin səs -küyünü azaltmaq üçün üçüncü və son cəhdim üçün etdiyim budur. Hər bir servo açdım, kəsdiyim teli yenidən bağladım və potansiyometrdəki istinad pinindən gələn üçüncü bir tel əlavə etdim. Kodumda bucaq girişini aşağıdakı ifadəyə bərabər etdim: (orta pin - istinad pin) / (V+pin - istinad pin). Test etdim və gərginlik sıçrayışlarının təsirlərini uğurla azaldıb. Bundan əlavə, bu girişə bir EWMA filtri də qoydum. Bu işlənmiş siqnal və orijinal siqnal yuxarıda göstərilmişdir.

Addım 4: Şeyləri Sarın

Şeyləri Sarma
Şeyləri Sarma

Bacardığım qədər səs -küy problemi həll edildikdə, dizaynın son hissələrini düzəltməyə və hazırlamağa başladım. Qol bazadakı servoya çox ağırlıq verdi, buna görə böyük bir rulman istifadə edərək qolun ağırlığını dəstəkləyən yeni bir baza hazırladım. Tutucunu da çap etdim və işləməsi üçün bir az zımpara etdim.

Son nəticədən çox məmnunam. İntuitiv hərəkət planlaşdırması ardıcıl işləyir və hər şey nəzərə alınmaqla hərəkət hamar və dəqiqdir. Başqası bu layihəni etmək istəsəydi, əvvəlcə onu daha sadə bir versiyasını hazırlamağa təşviq edərdim. Fikirləşsək, hobbi servo mühərriklərdən istifadə edərək belə bir şey hazırlamaq çox sadəlövh idi və onu işə salmağın çətinliyi bunu göstərmək üçün gedir. Qolun olduğu kimi işləməsini möcüzə hesab edirəm. Hələ də kompüterlə əlaqə qura bilən, daha mürəkkəb proqramlar işlədə bilən və daha dəqiqliklə hərəkət edə bilən bir robot qolu hazırlamaq istəyirəm, buna görə də növbəti layihəm üçün bunu edəcəyəm. Yüksək keyfiyyətli rəqəmsal robototexnika servolarından istifadə edəcəyəm və inşallah bu layihədə qarşılaşdığım bir çox problemdən qaçmağımı təmin edər.

CAD sənədi:

cad.onshape.com/documents/818ea878dda7ca2f…

Tövsiyə: