Სარჩევი:

Rpibot - რობოტიკის სწავლის შესახებ: 9 ნაბიჯი
Rpibot - რობოტიკის სწავლის შესახებ: 9 ნაბიჯი

ვიდეო: Rpibot - რობოტიკის სწავლის შესახებ: 9 ნაბიჯი

ვიდეო: Rpibot - რობოტიკის სწავლის შესახებ: 9 ნაბიჯი
ვიდეო: rpibot 2024, ივლისი
Anonim
Rpibot - რობოტიკის სწავლის შესახებ
Rpibot - რობოტიკის სწავლის შესახებ

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

მე მქონდა შემდეგი მოთხოვნები:

  • მარტივი აპარატურა (ყურადღება გამახვილებულია პროგრამულ უზრუნველყოფაზე)
  • იაფი აპარატურა (დაახლოებით 100 €)
  • გაფართოებადი (ზოგიერთი ვარიანტი უკვე აღწერის ნაწილია)
  • მიაწოდეთ ძაბვა ყველა კომპონენტისთვის 5V ერთი წყაროდან (powerbank)

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

ეს არ არის დამწყები გაკვეთილი. თქვენ გჭირდებათ ძირითადი ცოდნა:

  • პროგრამირება (პითონი)
  • ძირითადი ელექტრონიკა (მოდულების ერთმანეთთან დაკავშირება სწორი ძაბვით)
  • ძირითადი კონტროლის თეორია (PID)

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

სრული წყარო და ფაილები ხელმისაწვდომია აქ:

მასალები:

მექანიკა

  • პლაივუდის დაფა 1x (ზომა A4, სისქე 4 მმ)
  • 3x M4 x 80 ხრახნი და კაკალი
  • 2x Gear ძრავები მეორადი გამომავალი ლილვით კოდირებისთვის. Დისკები.
  • 1x უფასო ბორბალი

1x პანელის და დახრის კამერის მონტაჟი (სურვილისამებრ)

ელექტრონიკა

  • 1x Raspberry Pi Zero სათაურით და კამერით
  • 1x PCA 9685 სერვო კონტროლი
  • 2x ოპტიკური კოდირების ბორბალი და წრე
  • 1 x ქალი მხტუნავის მავთულები
  • 1 x USB კვების ბანკი
  • 1x DRV8833 ორმაგი ძრავის მძღოლი
  • 2x Micro servos SG90 კამერისთვის და დახრისთვის (სურვილისამებრ)
  • 1x MPU9250 IMU (სურვილისამებრ)
  • 1x HC-SR04 ულტრაბგერითი მანძილის სენსორი (სურვილისამებრ)
  • 1x პერფორირებული დაფა და შესადუღებელი მავთული, სათაურები,…

ნაბიჯი 1: ააშენეთ შასი

ააშენეთ შასი
ააშენეთ შასი
ააშენეთ შასი
ააშენეთ შასი
ააშენეთ შასი
ააშენეთ შასი

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

  • იაფი მასალები
  • სწრაფი შეკრება და დაშლა
  • გაფართოებადი (მაგ. სივრცე დამატებითი სენსორებისთვის)
  • მსუბუქი მასალები ელექტროენერგიის ენერგიის დაზოგვის მიზნით

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

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

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

ბორბლის თვისებები (პროგრამული უზრუნველყოფის გამოთვლებისთვის)

წრე: 21, 5 სმ პულსი: 20 პულსი/ბრუნვა. რეზოლუცია: 1, 075 სმ (საბოლოოდ 1 პულსი არის დაახლოებით 1 სმ, რაც ადვილია პროგრამული გამოთვლებისთვის)

ნაბიჯი 2: ელექტრონიკა და გაყვანილობა

ელექტრონიკა და გაყვანილობა
ელექტრონიკა და გაყვანილობა
ელექტრონიკა და გაყვანილობა
ელექტრონიკა და გაყვანილობა
ელექტრონიკა და გაყვანილობა
ელექტრონიკა და გაყვანილობა

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

Raspberry Pi Zero არის მთავარი კონტროლერი. ის კითხულობს სენსორებს და აკონტროლებს ძრავებს PWM სიგნალით. იგი დაკავშირებულია დისტანციურ კომპიუტერთან wifi საშუალებით.

DRV8833 არის ორმაგი ძრავის H ხიდი. ის უზრუნველყოფს საკმარის დენს ძრავებისათვის (რასაც Raspberry Pi ვერ გააკეთებს, რადგანაც გამოსავალს შეუძლია მხოლოდ mA- ს მიწოდება).

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

Pca9695 არის სერვო კონტროლის დაფა. ის ურთიერთობს I2C სერიული ავტობუსით. ეს დაფა უზრუნველყოფს PWM სიგნალებს და მიწოდების ძაბვას, რომლებიც აკონტროლებენ სერვისებს კამერის ტაფისა და დახრისთვის.

MPU9265 არის 3 ღერძიანი აჩქარება, 3 ღერძიანი კუთხის ბრუნვის სიჩქარე და 3 ღერძიანი მაგნიტური ნაკადის სენსორი. ჩვენ მას ძირითადად გამოვიყენებთ კომპასის სათაურის მისაღებად.

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

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

ნაბიჯი 3: პროგრამული უზრუნველყოფის ინფრასტრუქტურა

პროგრამული ინფრასტრუქტურა
პროგრამული ინფრასტრუქტურა
პროგრამული ინფრასტრუქტურა
პროგრამული ინფრასტრუქტურა

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

გიტი

ეს არის უფასო და ღია კოდის ვერსიის კონტროლის სისტემა. იგი გამოიყენება მსხვილი პროექტების მართვისთვის, როგორც Linux, მაგრამ ასევე ადვილად შეიძლება გამოყენებულ იქნას მცირე პროექტებისთვის (იხ. Github და Bitbucket).

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

ძირითადი გამოყენებული ბრძანებებია:

git კლონი https://github.com/makerobotics/RPIbot.git [მიიღეთ საწყისი კოდი და git კონფიგურაცია]

git pull წარმოშობის ოსტატი [მიიღეთ უახლესი დისტანციური საცავიდან]

git სტატუსი [მიიღეთ ადგილობრივი საცავის სტატუსი. არის რაიმე ფაილი შეცვლილი?] Git log [მიიღეთ ვალდებულებების სია] git add. [დაამატე ყველა შეცვლილი ფაილი იმ ეტაპზე, რომ განვიხილო შემდეგი ვალდებულება] git commit -m "კომენტარი ჩადენისთვის" [განახორციელეთ ცვლილებები ადგილობრივ საცავში] git push წარმოშობის ოსტატი [ყველა ვალდებულება გადაიტანეთ დისტანციურ საცავში]

ხე

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

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

logger = logging.getLogger (_ სახელი_)

logger.setLevel (log. DEBUG)

გაზომვა და შედგენა

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

მძიმით გამოყოფილი კვალი ფაილი გენერირდება ჩვენი ძირითადი პითონის კოდით და უნდა ჰქონდეს ასეთი სათაურები:

დროის ნიშნული; yawCorr; encoderR; I_L; odoDistance; ax; encoderL; I_R; yaw; eSpeedR; eSpeedL; pwmL; speedL; CycleTimeControl; wz; pwmR; speedR; Iyaw; hdg; m_y; m_x; eyeaw;

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

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

დისტანციური@კომპიუტერი:/python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

ნაკვეთის სკრიპტი ხელმისაწვდომია ინსტრუმენტის საქაღალდეში:

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

მეტი კომფორტისთვის, პითონის სკრიპტს უწოდებენ bash სკრიპტი (plot.sh), რომელიც გამოიყენება Raspberry Pi კვალი ფაილის დისტანციურ კომპიუტერზე კოპირებისათვის და სიგნალის შერჩევით პლოტერის გამოძახებით. Bash script "plot.sh" სთხოვს თუ ფაილი უნდა იყოს კოპირებული. ეს უფრო მოსახერხებელი იყო ჩემთვის ყოველ ჯერზე ხელით გადაწერის ნაცვლად. "sshpass" გამოიყენება ფაილის Raspberry Pi– დან დისტანციურ კომპიუტერზე scp– ის საშუალებით კოპირებისთვის. მას შეუძლია ფაილის კოპირება პაროლის მოთხოვნის გარეშე (ის გადადის როგორც პარამეტრი).

დაბოლოს, ფანჯარა იხსნება ნაკვეთით, როგორც ნაჩვენებია სურათზე.

დისტანციური კომუნიკაცია

Raspberry Pi– ს განვითარების ინტერფეისი არის SSH. ფაილების რედაქტირება შესაძლებელია პირდაპირ სამიზნეზე, ან კოპირება scp– ს მიერ.

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

დააინსტალირეთ Raspberry Pi

არსებობს ფაილი, რომელიც აღწერს Raspberry Pi- ს დაყენებას წყაროს კოდის "doc" საქაღალდეში (setup_rpi.txt). არ არის ბევრი ახსნა, მაგრამ ბევრი სასარგებლო ბრძანება და ბმული.

ნაბიჯი 4: მომხმარებლის ინტერფეისი

მომხმარებლის ინტერფეისი
მომხმარებლის ინტერფეისი

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

პროგრამული არქიტექტურა

მომხმარებლის ინტერფეისი აგებულია შემდეგი ფაილების მიხედვით: gui.html [ვებ გვერდის მართვისა და განლაგების აღწერა] gui.js [შეიცავს javascript კოდს მართვის საშუალებების დასამუშავებლად და ჩვენს რობოტთან ქსელური კავშირის გასახსნელად] gui.css [შეიცავს სტილებს html კონტროლი. კონტროლის პოზიციები განსაზღვრულია აქ]

ქსელური კომუნიკაცია

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

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

ინტერფეისის განლაგება

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

ნაბიჯი 5: რობოტის პლატფორმის დაპროგრამება

რობოტის პლატფორმის დაპროგრამება
რობოტის პლატფორმის დაპროგრამება
რობოტის პლატფორმის დაპროგრამება
რობოტის პლატფორმის დაპროგრამება
რობოტის პლატფორმის დაპროგრამება
რობოტის პლატფორმის დაპროგრამება

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

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

ძირითადი პროგრამული არქიტექტურა

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

აზროვნება იმოქმედე

გრძნობა. Py

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

კონტროლი. Py

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

rpibot.py

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

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

PID კონტროლი

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

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

სირთულის ეტაპობრივად გასაზრდელად, რობოტი უნდა გაკონტროლდეს:

ღია მარყუჟი (მუდმივი სიმძლავრით)

pwm = K

შემდეგ დაამატეთ დახურული მარყუჟის ალგორითმი

pwm = Kp.speedError+Ki. ინტეგრაცია (speedError)

და ბოლოს დაამატეთ მიმართულების კონტროლი, როგორც ბოლო ნაბიჯი.

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

SET; Kp; 1.0

მე შემიძლია P პარამეტრის დაყენება საკმარისად დაბალ დონეზე, რომ თავიდან ავიცილო ნებისმიერი გადამეტება. დარჩენილი შეცდომა გამოსწორებულია I პარამეტრით (ინტეგრირებული შეცდომა)

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

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

ნაბიჯი 6: სენსორის კალიბრაცია

სენსორის კალიბრაცია
სენსორის კალიბრაცია
სენსორის კალიბრაცია
სენსორის კალიბრაცია
სენსორის კალიბრაცია
სენსორის კალიბრაცია

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

მის გამოყენებამდე საჭიროა IMU სენსორის სიგნალების დაკალიბრება. ზოგიერთი სენსორის სიგნალი დამოკიდებულია სამონტაჟო კუთხესა და პოზიციაზე.

აჩქარების და ბრუნვის სიჩქარის კალიბრაცია

უადვილესი კალიბრაცია არის გრძივი აჩქარებისათვის (A_x). გაჩერებულ ადგილას უნდა იყოს დაახლოებით 0 მ/წმ. თუ სენსორს სწორად ატრიალებთ, შეგიძლიათ შეაფასოთ გრავიტაცია (დაახლოებით 9, 8 მ/წმ). A_x- ის დაკალიბრებისთვის, თქვენ უბრალოდ უნდა დააინსტალიროთ ის სწორად და შემდეგ განსაზღვროთ ოფსეტი, რომ მიიღოთ 0 მ/წმ გაჩერებული. ახლა A_x დაკალიბრებულია. თქვენ შეგიძლიათ მიიღოთ ბრუნვის სიჩქარის ანაზღაურება ანალოგიურად გაჩერებულ ადგილას.

მაგნიტომეტრის კალიბრაცია კომპასისთვის

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

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

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

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

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

კომპასის სათაური

მაგნიტომეტრის მონაცემები ახლა გამოყენებული იქნება კომპასის სათაურის გამოსათვლელად. ამისათვის ჩვენ უნდა გადავაქციოთ m_x და m_y სიგნალები კუთხედ. პითონი პირდაპირ უზრუნველყოფს math.atan2 ფუნქციას, რომელსაც აქვს ეს მიზანი. სრული გაანგარიშება განსაზღვრულია mpu9250_i2c.py ფაილში ("calcHeading (mx, my, mz)").

ნაბიჯი 7: ალტერნატიული დიზაინი

ალტერნატიული დიზაინები
ალტერნატიული დიზაინები
ალტერნატიული დიზაინები
ალტერნატიული დიზაინები
ალტერნატიული დიზაინები
ალტერნატიული დიზაინები

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

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

უწყვეტი ბრუნვის servo დაკავშირებულია pca 9695 -თან

DC ძრავის დამატებითი H- ხიდის თავიდან ასაცილებლად, მე პირველად დავიწყე უწყვეტი ბრუნვის სერვისებით. მათ მართავდა უკვე არსებული pca 9695 სერვო დრაივერი. ძრავის ყველა მექანიკა და შესაბამისი ელექტრონიკა ბევრად უფრო მარტივი იყო. ამ დიზაინს ორი ნაკლი ჰქონდა:

  • სერვისების ცუდი კონტროლის დიაპაზონი.
  • დაკარგული კოდირების ადგილსამყოფელი

Servos იწყებენ მოძრაობას 50% pwm და აქვთ სრული სიჩქარე დაახლოებით 55%. ეს არის ძალიან ცუდი კონტროლის დიაპაზონი.

კოდირების დამჭერის გარეშე, ძალიან რთული იყო მზა კოდირების პოვნა. მე შევამოწმე 3 განსხვავებული ამრეკლავი კოდირება, რომლებიც დამონტაჟებული იყო შასაზე. ბორბლის გარე ნაწილზე ჩავწერე თვითნაკეთი კოდირების ბორბალი შავი და თეთრი სექციებით. მე გამოვიყენე QTR-1RC სენსორები, რომელთაც სჭირდებათ ბევრი სიგნალის დამუშავება სწორი სიგნალის მისაღებად. Raspberry Pi– მ ვერ შეძლო ამ სახის რეალურ დროში დამუშავება. ამიტომ გადავწყვიტე რობოტს დავამატო NodeMCU D1 მინი, როგორც რეალურ დროში კონტროლერი. იგი დაუკავშირდა ჟოლოს Pi– ს სერიული UART– ით დამუშავებული სენსორის მონაცემების გადასაცემად. NodeMCU ასევე მართავდა HC-SR04 სენსორს. მექანიკა იყო რთული და არც ისე გამძლე, სერიული ხაზი იღებდა ხმაურს I2C ხაზისა და ძრავებისგან, ასე რომ საბოლოოდ მე ავაშენე შასის მეორე ვერსია მარტივი გადაცემათა კოლოფის მქონე ძრავით H ხიდი. ამ ძრავებს აქვთ მეორადი გამომავალი ლილვი ოპტიკური კოდირების დასაყენებლად.

ნაბიჯი 8: სურათის დამუშავება

სურათის დამუშავება
სურათის დამუშავება
სურათის დამუშავება
სურათის დამუშავება
სურათის დამუშავება
სურათის დამუშავება
სურათის დამუშავება
სურათის დამუშავება

ავტონომიური მართვის გასაუმჯობესებლად, ჩვენ შეგვიძლია გავაკეთოთ სურათის დამუშავება.

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

ჩვენ ვიღებთ სურათს და ვიყენებთ სურათის დამუშავების რამდენიმე ამოცანას:

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

საბოლოოდ მე გავაკეთე ჩემი საკუთარი ფილტრი, რომ ავურიო ყველა ჰორიზონტალური და ვერტიკალური გრადიენტი (ავეჯის გამოვლენა):

  • გარდაქმენით ფერადი სურათი ნაცრისფერ დონეზე
  • დაბინდეთ გამოსახულება მცირე ხმაურის მოსაშორებლად
  • ბარიერი გამოსახულება შავ და თეთრ გამოსახულებაზე
  • ახლა ჩვენ აღმოვაჩინეთ ჰორიზონტალური და ვერტიკალური გრადიენტები საგნების კედლებად და ავეჯად გამოსაჩენად
  • ჩვენ გავფილტროთ მხოლოდ დიდი დარჩენილი კონტურები (იხ. ფერადი კონტურები სურათზე)

ახლა ჩვენ შეგვიძლია გამოვიყენოთ ეს ახალი ინფორმაცია დაბრკოლებების გამოსავლენად…

ნაბიჯი 9: შემდეგი ნაბიჯები…

Შემდეგი ნაბიჯები…
Შემდეგი ნაბიჯები…
Შემდეგი ნაბიჯები…
Შემდეგი ნაბიჯები…

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

  • ყბის და მაგნიტური სიგნალების სენსორული შერწყმა
  • კამერის სურათის დამუშავება (ამისათვის ხელმისაწვდომია მხოლოდ დაბალი CPU)
  • შეჯახების გამოვლენა (ულტრაბგერითი მანძილი და კამერა)
  • რუქის აგება ან ორიენტაცია

ახლა წადით და შექმენით თქვენი საკუთარი გამოწვევები ან მიზნები…

გირჩევთ: