Სარჩევი:

რობოტული მკლავი: ჯენსენი: 4 ნაბიჯი
რობოტული მკლავი: ჯენსენი: 4 ნაბიჯი

ვიდეო: რობოტული მკლავი: ჯენსენი: 4 ნაბიჯი

ვიდეო: რობოტული მკლავი: ჯენსენი: 4 ნაბიჯი
ვიდეო: რუსული ენა დამაბნეველია ხოლმე? 2024, ნოემბერი
Anonim
რობოტული მკლავი: ჯენსენი
რობოტული მკლავი: ჯენსენი

ჯენსენი არის რობოტული ხელი, რომელიც აგებულია არდუინოს პლატფორმაზე, ფოკუსირებულია მოძრაობის ინტუიციურ დაგეგმვაზე, შესრულებულია როგორც 1 საკრედიტო დამოუკიდებელი პროექტი მენტორობით, ჩარლზ ბ. მალოხის დოქტორანტის მიერ. მას შეუძლია გაიმეოროს მთელი რიგი მოძრაობები, რომლებიც დაპროგრამებულია ხელის ხელით გადაადგილებით. მე მივიღე ინსპირაცია მისი შექმნისგან, როდესაც ვნახე სხვა რობოტული იარაღი, რომელიც აშენდა UMass Amherst M5 შემქმნელ სივრცეში. გარდა ამისა, მინდოდა ვისწავლოთ როგორ გამოვიყენო CAD პროგრამული უზრუნველყოფა და მინდოდა შემექმნა მოწინავე Arduino პროექტი. მე დავინახე ეს როგორც შესაძლებლობა ყველა იმ საქმის გასაკეთებლად.

ნაბიჯი 1: ორიგინალური დიზაინი და სფერო

ორიგინალური დიზაინი და სფერო
ორიგინალური დიზაინი და სფერო

CAD პროგრამული უზრუნველყოფა, რომელიც მე შევარჩიე ამ პროექტის შესასწავლად, იყო OnShape და პირველი, რაც მე მოვიყვანე მოდელი იყო HiTec HS-422 ანალოგური სერვო. მე ავირჩიე სერვო, რადგან ის ხელმისაწვდომი იყო ჩემთვის ადგილობრივად და ეს იყო გონივრული ფასი. ეს ასევე კარგი პრაქტიკა იყო OnShape– ის შესასწავლად, სანამ გადავიდოდი საკუთარი ნაწილების დიზაინზე. პროექტის ამ საწყის ეტაპზე მე მქონდა ზოგადი წარმოდგენა იმის შესახებ, რისი უნარიც მქონდა მკლავი. მე მინდოდა, რომ მას ჰქონოდა მოძრაობის ღირსეული დიაპაზონი და დამჭერი ნივთების ასაღებად. ამ ზოგადმა სპეციფიკაციებმა აცნობეს დიზაინს, რადგანაც მე გავაგრძელე მისი მოდელირება CAD– ში. კიდევ ერთი შეზღუდვა, რაც ამ ეტაპზე მქონდა, იყო 3D პრინტერზე დასაბეჭდი საწოლის ზომა. ამიტომ ბაზა, რომელსაც ხედავთ ზემოთ ფოტოში არის შედარებით პრიმიტიული კვადრატი.

პროექტის ამ ეტაპზე მე ასევე ვიაზრებდი როგორ მინდოდა ხელის გაკონტროლება. ერთი რობოტული მკლავი, საიდანაც მე ვიყავი შთაგონებული, თოჯინების მკლავი იყო კონტროლისთვის. მეორემ გამოიყენა ინტუიციური გზის პროგრამირების მეთოდი, რომლის დროსაც მომხმარებელი მკლავი სხვადასხვა პოზიციებზე გადავიდა. ამის შემდეგ მკლავი უკან დააბრუნებს ამ პოზიციებს.

ჩემი თავდაპირველი გეგმა იყო მკლავის მშენებლობის დასრულება და შემდეგ კონტროლის ორივე მეთოდის განხორციელება. მე ასევე მინდოდა შემექმნა კომპიუტერული პროგრამა ამის გასაკონტროლებლად ამის შემდეგ. როგორც თქვენ ალბათ გეტყვით, მე დავასრულე პროექტის ამ ასპექტის მასშტაბის შემცირება. როდესაც დავიწყე მუშაობა კონტროლის პირველ ორ მეთოდზე, მე სწრაფად აღმოვაჩინე, რომ ინტუიციური გზის პროგრამირება უფრო რთული იყო, ვიდრე მეგონა. სწორედ მაშინ გადავწყვიტე, რომ ჩემი ყურადღება გამახვილდეს და სხვა კონტროლის მეთოდები განუსაზღვრელ ვადებში ჩავდო.

ნაბიჯი 2: კონტროლი

კონტროლი
კონტროლი

კონტროლის მეთოდი, რომელიც მე ავირჩიე მუშაობს შემდეგნაირად: თქვენ ხელებს ხელებით მოძრაობთ სხვადასხვა პოზიციებზე და "ინახავთ" ამ პოზიციებს. თითოეულ პოზიციას აქვს ინფორმაცია მკლავის თითოეულ ბმულს შორის არსებული კუთხის შესახებ. მას შემდეგ რაც დაასრულებთ პოზიციების დაზოგვას, თქვენ დააჭირეთ დაკვრის ღილაკს და მკლავი უბრუნდება თითოეულ მათგანს თანამიმდევრობით.

ამ კონტროლის მეთოდში ბევრი რამ იყო გასარკვევი. იმისათვის, რომ თითოეული სერვო დაუბრუნდეს შენახულ კუთხეს, მე უნდა როგორმე "გადავარჩინო" ეს კუთხეები პირველ რიგში. ეს მოითხოვს Arduino Uno- ს, რომელსაც მე ვიყენებდი, რათა შეეძლო მიეღო თითოეული სერვოს მიმდინარე კუთხე. ჩემმა მეგობარმა ჯერემი პარადიმ, რომელმაც შექმნა რობოტული ხელი, რომელიც იყენებს ამ კონტროლის მეთოდს, მიბიძგა, რომ გამომეყენებინა თითოეული ჰობი სერვოის შიდა პოტენომეტრი. ეს არის პოტენომეტრი, რომელსაც სერვო იყენებს თავის კუთხის დასაკოდირებლად. მე ავირჩიე სატესტო სერვო, შევაერთე მავთული შიდა პოტენომეტრის შუა ქინძისთავზე და გავაღე ხვრელი შიგთავსში, რათა მავთულები გარედან გამოეკვება.

ახლა შემიძლია მიმდინარე კუთხის მიღება პოტენციომეტრის შუა პინზე ძაბვის წაკითხვით. თუმცა, იყო ორი ახალი პრობლემა. პირველ რიგში, იყო ხმაური ძაბვის ვარდნის სახით სიგნალზე შუა პინიდან. ეს პრობლემა მოგვიანებით გახდა რეალური პრობლემა. მეორეც, კუთხის გაგზავნისა და კუთხის მიღების მნიშვნელობების დიაპაზონი განსხვავებული იყო.

ჰობი სერვო ძრავებისთვის 0 -დან 180 გრადუსამდე გადაადგილება გულისხმობს მას PWM სიგნალის გაგზავნას მაღალი დროით, რომელიც შეესაბამება კუთხეს. ამის საპირისპიროდ, Arduino– ს ანალოგური შეყვანის pin– ის გამოყენებით, რომ წაიკითხოთ ძაბვა პოტენციომეტრის შუა პინზე, ხოლო სერვო რქის გადაადგილება 0 – დან 180 გრადუსამდე, აბრუნებს მნიშვნელობების ცალკეულ დიაპაზონს. ამრიგად, გარკვეული მათემატიკა იყო საჭირო შენახული შეყვანის მნიშვნელობის შესაბამის PWM გამომავალ მნიშვნელობად გადასათვლელად, რომელიც საჭიროა სერვო იმავე კუთხის დასაბრუნებლად.

ჩემი პირველი აზრი იყო მარტივი დიაპაზონის რუქის გამოყენება თითოეული შენახული კუთხისთვის შესაბამისი გამომავალი PWM- ის მოსაძებნად. ეს მუშაობდა, მაგრამ ეს არ იყო ძალიან ზუსტი. ჩემი პროექტის შემთხვევაში, PWM მაღალი დროის მნიშვნელობების დიაპაზონი, რომელიც შეესაბამება 180 გრადუსიანი კუთხის დიაპაზონს, ბევრად აღემატებოდა ანალოგური შეყვანის მნიშვნელობების დიაპაზონს. გარდა ამისა, ორივე ეს დიაპაზონი არ იყო უწყვეტი და შედგებოდა მხოლოდ მთელი რიცხვებისგან. ამიტომ, როდესაც შენახული შეყვანის მნიშვნელობა გამოვიყვანე გამომავალ მნიშვნელობამდე, სიზუსტე დაიკარგა. სწორედ ამ მომენტში მივხვდი, რომ მე მჭირდებოდა საკონტროლო მარყუჟი, რათა ჩემი სერვისები იქ მიმეყვანა, სადაც ისინი უნდა ყოფილიყვნენ.

მე დავწერე კოდი PID კონტროლის მარყუჟისთვის, რომელშიც შეყვანა იყო შუა ძაბვის ძაბვა და გამომავალი იყო PWM გამომავალი, მაგრამ სწრაფად აღმოვაჩინე, რომ მე მხოლოდ ინტეგრალური კონტროლი მჭირდებოდა. ამ სცენარში, გამომავალი და შემავალი ორივე კუთხე იყო, ამიტომ პროპორციული და წარმოებული კონტროლის დამატება მას გადააჭარბებდა ან არასასურველ ქცევას ახდენდა. ინტეგრალური კონტროლის რეგულირების შემდეგ, ჯერ კიდევ იყო ორი პრობლემა. პირველ რიგში, თუ საწყისი და შეცდომა მიმდინარე და სასურველ კუთხეს შორის დიდი იყო, სერვო ძალიან სწრაფად აჩქარდებოდა. შემიძლია შევამცირო მუდმივი ინტეგრალური კონტროლისთვის, მაგრამ ამან მთლიანი მოძრაობა ძალიან ნელი გახადა. მეორეც, მოძრაობა შემაძრწუნებელი იყო. ეს იყო ანალოგური შეყვანის სიგნალის ხმაურის შედეგი. საკონტროლო მარყუჟი განუწყვეტლივ კითხულობდა ამ სიგნალს, ამიტომ ძაბვის ვარდნებმა გამოიწვია შემაძრწუნებელი მოძრაობა. (ამ მომენტში მე ასევე გადავედი ჩემი ერთი სატესტო სერვოდან ზემოთ გამოსახულ ასამბლეაზე. მე ასევე შევქმენი საკონტროლო მარყუჟის ობიექტი პროგრამული უზრუნველყოფის თითოეული სერვოსთვის.)

გადაჭარბებული აჩქარების პრობლემა გადავწყვიტე გამომავალზე ექსპონენციალურად შეწონილი მოძრავი საშუალო (EWMA) ფილტრის დაყენებით. საშუალო გამომუშავებით, მოძრაობის დიდი ვარდნები შემცირდა (მათ შორის ხმაურისგან გამოწვეული ჩხუბიც). თუმცა, შეყვანის სიგნალზე ხმაური მაინც პრობლემა იყო, ამიტომ ჩემი პროექტის შემდეგი ეტაპი ცდილობდა ამის გადაჭრას.

ნაბიჯი 3: ხმაური

ხმაური
ხმაური

სურათზე ზემოთ

წითელი: ორიგინალური შეყვანის სიგნალი

ლურჯში: შეყვანის სიგნალი დამუშავების შემდეგ

შეყვანის სიგნალზე ხმაურის შემცირების პირველი ნაბიჯი იყო მისი მიზეზის გაგება. ოსცილოსკოპზე სიგნალის გამოკვლევამ აჩვენა, რომ ძაბვის ვარდნა ხდებოდა 50 ჰც სიხშირით. მე შემთხვევით ვიცოდი, რომ PWM სიგნალი, რომელიც გაიგზავნა სერვოებში, ასევე იყო 50 ჰც -ის სიხშირეზე, ამიტომ ვხვდებოდი, რომ ძაბვის ვარდნას რაიმე კავშირი ჰქონდა ამასთან. მე გამოვთქვი ჰიპოთეზა, რომ სერვოების მოძრაობა რატომღაც იწვევს ძაბვის ვარდნას პოტენომეტრების V+ პინზე, რაც თავის მხრივ აფერხებს კითხვას შუა პინზე.

აქ არის ჩემი პირველი მცდელობა ხმაურის შემცირებისა. ისევ გავხსენი თითოეული სერვო და დავამატე მავთული, რომელიც მოდის V+ პინიდან პოტენციომეტრზე. მე მჭირდებოდა უფრო მეტი ანალოგური შეყვანა მათ წასაკითხად ვიდრე Arduino Uno– ს, ამიტომ მეც გადავედი Arduino Mega– ზე ამ ეტაპზე. ჩემს კოდში შევიცვალე კუთხის შეყვანა ძაბვის ანალოგური კითხვა შუა პინზე და შეფარდება შუა ძაბვას შორის ძაბვას V+ პინზე. ჩემი იმედი იყო, რომ თუ ქინძისთავებზე ძაბვის ვარდნა იქნებოდა, ის გაუქმდებოდა თანაფარდობით.

ყველაფერი დავაბრუნე და გამოვცადე, მაგრამ წვეთები მაინც ხდებოდა. ის, რაც ამ დროს უნდა გამეკეთებინა, იყო ჩემი საფუძვლის გამოკვლევა. სამაგიეროდ, ჩემი შემდეგი იდეა იყო პოტენომეტრების ცალკე დენის წყაროს დაყენება. მე გავთიშე V+ მავთულები არდუინოს ანალოგური შეყვანისგან და დავამაგრე ცალკე დენის წყაროსთან. მე ადრე ვამოწმებდი ქინძისთავებს, ასე რომ ვიცოდი რა ძაბვაზე უნდა გამოეყენებინა ისინი. მე ასევე გავთიშე კავშირი საკონტროლო დაფასა და V+ პინს შორის თითოეულ სერვოში. ყველაფერი ისევ ერთად დავაყენე, გადავაბრუნე კუთხის შეყვანის კოდი, როგორიც იყო ადრე და შემდეგ გამოვცადე. როგორც მოსალოდნელი იყო, აღარ იყო ძაბვის ვარდნა შეყვანის პინზე. თუმცა, იყო ახალი პრობლემა - ცალკეულ ელექტრომომარაგებაზე პოტენომეტრების დაყენებამ მთლიანად გააფუჭა სერვოების შიდა კონტროლის მარყუჟები. მიუხედავად იმისა, რომ V+ ქინძისთავები იღებდნენ იმავე ძაბვას, როგორც ადრე, სერვოების მოძრაობა არეული და არასტაბილური იყო.

მე არ მესმოდა, რატომ ხდებოდა ეს, ამიტომ საბოლოოდ გამოვიკვლიე ჩემი სახმელეთო კავშირი სერვოებში. იყო საშუალო ძაბვის ვარდნა დაახლოებით 0.3 ვოლტი მიწაზე და ის კიდევ უფრო გაიზარდა, როდესაც სერვოებმა დენი ამოიღეს. მაშინ ჩემთვის ცხადი იყო, რომ ის ქინძისთავები აღარ შეიძლება ჩაითვალოს "დაფქულ" და უკეთესად შეიძლება შეფასდეს როგორც "საცნობარო" ქინძისთავები. სერვოს მართვის დაფები უნდა გაზომავდეს ძაბვას პოტენციომეტრის შუა პინზე V+ და საცნობარო ქინძისთავებთან შედარებით. პოტენომეტრების გაძლიერებამ ცალკე შეარყია ეს ფარდობითი გაზომვა, რადგან ახლა იმის ნაცვლად, რომ ძაბვის ვარდნა მოხდეს ყველა ქინძისთავზე, ეს მოხდა მხოლოდ საცნობარო პინზე.

ჩემი მენტორი, დოქტორი მალოკი, დამეხმარა ამ ყველაფრის გამოსწორებაში და შემომთავაზა მე ასევე გავზომო ძაბვა შუა პინზე სხვა ქინძისთავებთან შედარებით. ეს არის ის, რაც მე გავაკეთე მესამე და ბოლო მცდელობისას, შემემცირებინა ხმაურის კუთხე. გავხსენი თითოეული სერვერი, ხელახლა დავამაგრე მავთული, რომელიც დავჭერი და დავამატე მესამე მავთული, რომელიც მიდიოდა საცნობარო პინიდან პოტენციომეტრზე. ჩემს კოდში მე გავაკეთე კუთხის შეყვანა შემდეგი გამოთქმის ექვივალენტში: (შუა პინი - საცნობარო პინი) / (V+პინი - საცნობარო პინი). მე გამოვცადე და მან წარმატებით შეამცირა ძაბვის ვარდნის ეფექტი. გარდა ამისა, მე ასევე შევიტანე EWMA ფილტრი ამ შეყვანაზე. ეს დამუშავებული სიგნალი და ორიგინალური სიგნალი გამოსახულია ზემოთ.

ნაბიჯი 4: ნივთების შეფუთვა

საგნების შეფუთვა
საგნების შეფუთვა

ხმაურის პრობლემა ჩემი შესაძლებლობების მაქსიმალურად გადაჭრით, მე დავიწყე დიზაინის საბოლოო ნაწილების დაფიქსირება და დამზადება. მკლავი ძალიან დიდ წონას აყენებდა სერვოზე ბაზაზე, ამიტომ გავაკეთე ახალი ბაზა, რომელიც მხარს უჭერს მკლავის წონას დიდი ტარების გამოყენებით. მე ასევე დავბეჭდე გრიპერი და გავაკეთე ცოტა ქვიშა მასზე მუშაობისთვის.

ძალიან კმაყოფილი ვარ საბოლოო შედეგით. მოძრაობის ინტუიციური დაგეგმვა მუშაობს თანმიმდევრულად და მოძრაობა არის გლუვი და ზუსტი, ყველაფრის გათვალისწინებით. თუ ვინმეს სურდა ამ პროექტის განხორციელება, მე პირველ რიგში მკაცრად მოვუწოდებდი მას შეექმნათ მისი უფრო მარტივი ვერსია. ხედვის თვალსაზრისით, მსგავსი რამის გაკეთება ჰობი სერვო ძრავების გამოყენებით ძალიან გულუბრყვილო იყო და ის სირთულე, რაც მე მქონდა მის მუშაობაში, ამის საჩვენებლად მიდის. მე სასწაულად მივიჩნევ, რომ მკლავი ისევე მუშაობს, როგორც ის. მე მაინც მინდა გავაკეთო რობოტული ხელი, რომელსაც შეუძლია კომპიუტერთან დაკავშირება, უფრო რთული პროგრამების გაშვება და უფრო დიდი სიზუსტით გადაადგილება, ასე რომ ჩემი შემდეგი პროექტისთვის ამას გავაკეთებ. მე გამოვიყენებ მაღალი ხარისხის ციფრული რობოტების სერვისებს და ვიმედოვნებ, რომ ეს საშუალებას მომცემს თავიდან ავიცილო ბევრი პრობლემა, რაც ამ პროექტში შემხვდა.

CAD დოკუმენტი:

cad.onshape.com/documents/818ea878dda7ca2f…

გირჩევთ: