Სარჩევი:

ორი ბორბალი თვითბალანსირებული რობოტი: 7 ნაბიჯი
ორი ბორბალი თვითბალანსირებული რობოტი: 7 ნაბიჯი

ვიდეო: ორი ბორბალი თვითბალანსირებული რობოტი: 7 ნაბიჯი

ვიდეო: ორი ბორბალი თვითბალანსირებული რობოტი: 7 ნაბიჯი
ვიდეო: "2 ბორბალი" ქართული მოკლემეტრაჟიანი ფილმი 2024, ნოემბერი
Anonim
ორი ბორბალი თვითბალანსირებული რობოტი
ორი ბორბალი თვითბალანსირებული რობოტი

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

რა არის თვითბალანსირებული რობოტი?

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

Როგორ მუშაობს?

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

როგორ მუშაობს დახურული მარყუჟის ალგორითმი?

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

ასე რომ, ჩვენ აქ ორი რამ უნდა გავაკეთოთ, პირველ რიგში, ჩვენ უნდა გამოვთვალოთ დახრის კუთხე (როლი), რომელსაც რობოტი განიცდის და შედეგად, ჩვენ უნდა გავაკონტროლოთ ძრავების ბრუნვის მიმართულება.

როგორ გავზომოთ დახრის კუთხე?

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

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

ამასთან, ასეთი სენსორების გამოყენების პრობლემა ის არის, რომ:

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

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

მარაგები

ნაწილები:

  1. Arduino Pro Mini 3.3V 8 8 Mhz ATMEGA328
  2. FT232RL 3.3V 5.5V FTDI USB to TTL სერიული ადაპტერის მოდული
  3. GY-521 მოდული MPU-6050
  4. წყვილი N20 მიკრო სიჩქარის ძრავა 6V - 300rpm
  5. L298N ძრავის მძღოლი
  6. LM2596S DC to DC მამალი კონვერტორი
  7. ბატარეა (მრავალჯერადი დატენვის 9.7V Li-ion ბატარეის პაკეტი)
  8. ბატარეის სამაჯური
  9. ორი პროტოტიპი PCB მიკროსქემის დაფა
  10. მამრობითი და მდედრობითი სათაური აჭერს მხტუნავ მავთულს

ინსტრუმენტები:

  1. Soldering რკინის და solder
  2. ნეილონის ექვსკუთხა შუალედი
  3. ზუსტი ხრახნიანი ნაკრები
  4. 3D პრინტერი

ნაბიჯი 1: მშენებლობა

ვინაიდან მე მქონდა წვდომა 3D პრინტერზე, მე გადავწყვიტე შასის 3D დაბეჭდვა და გამოსაყენებლად გამოვიყენო ყველაფერი ერთმანეთთან დასაკავშირებლად.

რობოტი შედგება 4 ფენისგან

  1. ქვედა ფენა აკავშირებს ძრავებს და აქვს სამონტაჟო წერტილები L298N საავტომობილო დრაივერის მოდულისთვის
  2. მომდევნო ფენაში განთავსებულია დაფის პროტოტიპი Arduino pro mini და სათაურები მასზეა შეკრული
  3. მესამე ფენა აკავშირებს IMU- ს
  4. ზედა ფენა, რომელსაც მე ვუწოდებ "ბამპერის ფენას" აკუმულატორს, მამრის გადამყვანსა და ფულადი გადამრთველს

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

ნაბიჯი 2: გაყვანილობა

გაყვანილობა
გაყვანილობა

მე რამდენიმე ქალი თავსაბურავი გავამაგრე პერფ-დაფაზე Arduino pro მინი სათაურის ქინძისთავებთან შესატყვისად. ამის შემდეგ, მე შევაერთე მამრობითი სათაური დაფაზე, რათა შევიდეს წვდომა I/O- ზე. დანარჩენი კომპონენტები დამონტაჟდა 3D დაბეჭდილ ჩარჩოზე და დაკავშირებულია ჯუმბერის მავთულის გამოყენებით.

ნაბიჯი 3: კონტროლის თეორია

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

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

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

ნაბიჯი 4: MPU 6050 -ის გამოყენება

MPU6050 ბიბლიოთეკა

github.com/jrowberg/i2cdevlib/tree/master/…

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

www.i2cdevlib.com/forums/topic/96-arduino-…

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

ციფრული მოძრაობის პროცესორის გამოყენება

MPU6050 შეიცავს DMP (ციფრული მოძრაობის პროცესორს).

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

Როგორ გამოვიყენოთ ის? იმის გასარკვევად, თუ როგორ გამოიყენოთ DMP, გაიარეთ ესკიზის მაგალითი MPU6050_DMP6, რომელიც მოყვება MPU6050 ბიბლიოთეკას (Arduino IDE- ში: ფაილი-> მაგალითი-> MPU6050-> MPU6050_DMP6). ეს ასევე კარგი შესაძლებლობაა შეამოწმოთ თქვენი სენსორი რეალურად მუშაობს და გაყვანილობა სწორია

ნაბიჯი 5: კოდირება

მე გამოვიყენე Arduino IDE და FTDI ინტერფეისი Arduino pro mini პროგრამირებისთვის.

მაგალითის ესკიზის გამოყენებით (MPU6050_DMP6), რომელსაც გააჩნია MPU6050 ბიბლიოთეკა, როგორც ჩემი ძირითადი კოდი, დავამატე PID () და MotorDriver () ფუნქციები.

დაამატეთ ბიბლიოთეკა

  • MPU6050: MPU6050 სენსორის გამოსაყენებლად ჩვენ უნდა გადმოვწეროთ I2C დეველოპერის ბიბლიოთეკა ჯეფ როუბერგისგან და დავამატოთ Arduino– ს „ბიბლიოთეკების“საქაღალდეში, რომელიც გვხვდება პროგრამის ფაილებში თქვენს კომპიუტერში.
  • მავთული: ჩვენ ასევე გვჭირდება Wire ბიბლიოთეკა, რომელიც საშუალებას მოგვცემს დავუკავშირდეთ I2C მოწყობილობებს.

ფსევდო კოდი

ბიბლიოთეკების ჩართვა:

  • მავთული.ჰ
  • MPU6050
  • I2Cdev.h

ცვლადების, მუდმივებისა და ობიექტების ინიციალიზაცია

Აწყობა ()

  • დააყენეთ pin რეჟიმი ძრავების გასაკონტროლებლად
  • დააყენეთ pin რეჟიმი სტატუსის LED- ისთვის
  • დაიწყეთ MPU6050 და დააყენეთ ოფსეტური მნიშვნელობები

PID ()

გამოთვალეთ PID მნიშვნელობა

MotorDriver (PID პასუხი)

გამოიყენეთ PID მნიშვნელობა ძრავების სიჩქარისა და მიმართულების გასაკონტროლებლად

მარყუჟი ()

  • მიიღეთ მონაცემები DMP– დან
  • დარეკეთ PID () MotorDriver () ფუნქციებზე

ნაბიჯი 6: PID- ის დარეგულირების პროცედურა

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

  1. დააყენეთ I და D ტერმინი 0
  2. რობოტის ხელში დაჭერით, დაარეგულირეთ P ისე, რომ რობოტი მხოლოდ იწყებს რხევას ბალანსის პოზიციის შესახებ
  3. P კომპლექტით, გაზარდე I ისე, რომ რობოტი უფრო სწრაფად აჩქარდეს ბალანსის არარსებობისას. მე და P სწორად ვართ მორგებული, რობოტს უნდა შეეძლოს თვითბალანსირება სულ მცირე რამდენიმე წამის განმავლობაში, გარკვეული რხევით
  4. დაბოლოს, გაზრდა D ამცირებს რხევას

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

ნაბიჯი 7: დასკვნა

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

გაუმჯობესების წინადადებები:

  • უფრო სწრაფი ძრავები უფრო მაღალი ბრუნვით, ანუ DC ძრავებისთვის უფრო მაღალია ძაბვის მაჩვენებელი უფრო მაღალი ბრუნვის
  • მიიღეთ უფრო მძიმე ბატარეა ან უბრალოდ გადაიტანეთ მასა ცოტა უფრო მაღლა
  • შეცვალეთ 3D დაბეჭდილი ბორბლები რეზინის ბორბლებით, რომ მიიღოთ მეტი წევა

გირჩევთ: