Სარჩევი:

Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps
Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps

ვიდეო: Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps

ვიდეო: Jetson Nano Quadruped Robot Object Detection Tutorial: 4 Steps
ვიდეო: Jetson Nano Quadruped Robot | Object Detection & Teleoperation 2024, ნოემბერი
Anonim
Image
Image

Nvidia Jetson Nano არის დეველოპერის ნაკრები, რომელიც შედგება SoM (System on Module) და საცნობარო გადამზიდავი დაფისგან. ის უპირველეს ყოვლისა მიზნად ისახავს ჩამონტაჟებული სისტემების შექმნას, რომლებიც საჭიროებენ მაღალ გადამამუშავებელ ძალას მანქანათმცოდნეობის, მანქანათვალიერების და ვიდეო დამუშავების პროგრამებისთვის. თქვენ შეგიძლიათ ნახოთ დეტალური მიმოხილვა ამის შესახებ ჩემს YouTube არხზე.

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

თუმცა მე თვითონ მქონდა რამდენიმე პრობლემა Jetbot– თან, როგორც პროექტი:

1) ეს არ იყო საკმარისი EPIC ჩემთვის. Jetson Nano არის ძალიან საინტერესო დაფა, რომელსაც აქვს დიდი დამუშავების უნარი და აკეთებს უბრალო ბორბლიანი რობოტს, რომელიც უბრალოდ ძალიან დამთრგუნველ საქმეს ჰგავდა.

2) ტექნიკის არჩევანი. Jetbot მოითხოვს ტექნიკას, რომელიც ძვირია/შეიძლება შეიცვალოს სხვა ალტერნატივებით - მაგალითად, ისინი იყენებენ ჯოისტიკს ტელეოპერაციისთვის. გასართობად ჟღერს, მაგრამ მართლა მჭირდება ჯოისტიკი რობოტის გასაკონტროლებლად?

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

ნაბიჯი 1: მოამზადეთ თქვენი აპარატურა

მოამზადეთ თქვენი აპარატურა
მოამზადეთ თქვენი აპარატურა

ამ პროექტისათვის მე გამოვიყენე ზურის ოთხფეხა რობოტის ადრეული პროტოტიპი, რომელიც დამზადებულია Zoobotics– ის მიერ. ის დიდი ხანი იწვა ჩვენი კომპანიის ლაბორატორიაში. მე აღჭურვილია ლაზერულად მოჭრილი ხის მთაზე ჯეტსონ ნანოსთვის და კამერის დასაყენებლად. მათი დიზაინი არის საკუთრების უფლება, ასე რომ, თუ თქვენი Jetson Nano რობოტისთვის გსურთ შექმნათ მსგავსი რამ, შეგიძლიათ გადახედოთ Meped პროექტს, რომელიც მსგავსია ოთხკუთხედის ღია კოდის დიზაინით. სინამდვილეში, ვინაიდან ჩვენს ლაბორატორიაში არავის ქონდა წყაროს კოდი ზურის მიკროკონტროლერისთვის (არდუინო მეგა), მე გამოვიყენე მეპედის კოდი ფეხების/ტერფების ოფსეტური მცირე ცვლილებებით.

მე გამოვიყენე ჩვეულებრივი USB Raspberry Pi თავსებადი ვებ – კამერა და Wifi USB დონგლი.

მთავარი ის არის, რომ ვინაიდან ჩვენ ვიყენებთ Pyserial– ს მიკროკონტროლერსა და Jetson Nano– ს შორის სერიული კომუნიკაციისთვის, თქვენს სისტემას არსებითად შეუძლია გამოიყენოს ნებისმიერი ტიპის მიკროკონტროლერი, რამდენადაც ის შეიძლება Jetson Nano– სთან იყოს დაკავშირებული USB სერიული კაბელით. თუ თქვენი რობოტი იყენებს DC ძრავებს და საავტომობილო დრაივერს (მაგალითად, L298P– ზე დაფუძნებული), შესაძლებელია ძრავის დრაივერის პირდაპირ დაკავშირება Jetson Nano GPIO– სთან. სამწუხაროდ, სერვისების გასაკონტროლებლად შეგიძლიათ გამოიყენოთ მხოლოდ სხვა მიკროკონტროლერი ან გამოყოფილი I2C სერვო დრაივერი, რადგან ჯეტსონ ნანოს არ გააჩნია აპარატურა GPIO PWM.

მოკლედ რომ ვთქვათ, შეგიძლიათ გამოიყენოთ რობოტის ტიპი ნებისმიერი მიკროკონტროლით, რომელიც შეიძლება დაუკავშირდეს Jetson Nano– ს USB მონაცემთა კაბელის გამოყენებით. მე ავტვირთე Arduino Mega– ს კოდი github საცავში ამ გაკვეთილისთვის და ის ნაწილი, რომელიც ეხება Jetson Nano– ს Arduino– სთან დაკავშირებას, აქ არის:

if (Serial.available ()) {switch (Serial.read ()) {

{

საქმე '1':

წინ ();

შესვენება;

საქმე '2':

უკან ();

შესვენება;

საქმე '3':

turn_right ();

შესვენება;

საქმე '4':

turn_left ();

შესვენება;

ჩვენ ვამოწმებთ, არის თუ არა მონაცემები ხელმისაწვდომი, და თუ არის, გადავიტანოთ გადართვის საქმის კონტროლის სტრუქტურაში. მიაქციეთ ყურადღება, რომ სერიალის მონაცემები მოდის სიმბოლოების სახით, შენიშნეთ ერთი ციტატა 1, 2, 3, 4 რიცხვების გარშემო.

ნაბიჯი 2: დააინსტალირეთ საჭირო პაკეტები

ჩვენთვის საბედნიეროდ, ნაგულისხმევი Jetson Nano სისტემის გამოსახულებას გააჩნია ბევრი დაინსტალირებული პერსონალი (როგორიცაა OpenCV, TensorRT და ა.შ.), ამიტომ ჩვენ გვჭირდება მხოლოდ რამდენიმე სხვა პაკეტის დაყენება, რათა კოდმა იმუშაოს და SSH ჩართოს.

დავიწყოთ SSH– ის ჩართვით იმ შემთხვევაში, თუ გსურთ დანარჩენი სამუშაოს დისტანციურად შესრულება.

sudo apt განახლება

sudo apt install installsh-server

SSH სერვერი ავტომატურად დაიწყება.

თქვენს Ubuntu მანქანასთან LAN– ით დასაკავშირებლად საჭიროა მხოლოდ შემდეგი ბრძანების შეყვანა:

ssh მომხმარებლის სახელი@ip_address

თუ თქვენ გაქვთ Windows მანქანა, თქვენ დაგჭირდებათ SSH კლიენტის დაყენება, მაგალითად Putty.

დავიწყოთ სურათების მანიპულირებისთვის Python Package Manager (pip) და Pillow– ის დაყენებით.

sudo apt დააინსტალირეთ python3-pip python3-pil

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

sudo apt დააინსტალირეთ python3-smbus python-pyserial

git კლონი

cd jetbot

sudo apt-get დააინსტალირეთ cmake

sudo python3 setup.py ინსტალაცია

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

git კლონი

cd

sudo pip3 install -r მოთხოვნები -opencv

ჩამოტვირთეთ წინასწარი SSD მოდელი (ერთი კადრის დეტექტორი) ამ ბმულიდან და განათავსეთ იგი jetspider_demos საქაღალდეში.

ახლა ჩვენ კარგად ვართ წასული!

ნაბიჯი 3: გაუშვით კოდი

გაუშვით კოდი
გაუშვით კოდი

მე გავაკეთე ორი დემო Jetspider– ისთვის, პირველი არის მარტივი ტელეოპერაცია, ძალიან ჰგავს იმას, რაც ადრე გავაკეთე Banana Pi როვერზე და მეორე იყენებს TensorRT ობიექტების გამოვლენისთვის და აგზავნის მოძრაობის ბრძანებებს სერიული კავშირისთვის მიკროკონტროლერთან რა

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

ობიექტის შემდგომი ძირითადი სკრიპტი არის object_following.py jetspider_object_following, ტელეოპერაციისთვის spider_teleop.py jetspider_teleoperation– ში.

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

app.run (მასპინძელი = '0.0.0.0', ძაფიანი = ჭეშმარიტი)

როგორც კი ჩვენ ვხსნით 0.0.0.0 (localhost) მისამართს ჩვენს ბრაუზერში ან Jetson Nano მისამართს ქსელში (შეგიძლიათ შეამოწმოთ ifconfig ბრძანებით), ეს ფუნქცია შესრულდება

def ინდექსი ():

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

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

Def gen (): ფუნქციაში ჩვენ განვახორციელებთ გენერატორის ფუნქციას უსასრულო მარყუჟში, რომელიც იღებს სურათს, აგზავნის მას def execute (img): ფუნქციისთვის, რის შედეგადაც ვიღებთ სურათს, რომელიც უნდა გავგზავნოთ ვებ გვერდზე ამის შემდეგ.

def execute (img): ფუნქცია არის იქ, სადაც ხდება მთელი მაგია, იღებს სურათს, ზომავს მას OpenCV– ით და გადასცემს მას Jetbot ObjectDetector კლასის მაგალითზე „მოდელი“. ის ბრუნდება დააბრუნებს აღმოჩენების სიას და ჩვენ ვიყენებთ OpenCV- ს მათ გარშემო ლურჯი ოთხკუთხედების დასახატად და ანოტაციების დასაწერად ობიექტის აღმოჩენილი კლასით. ამის შემდეგ ჩვენ ვამოწმებთ, არის თუ არა ჩვენი ინტერესის ობიექტი გამოვლენილი შესატყვისი_დადგენები = [d for d in detections [0] თუ d ['label'] == 53]

თქვენ შეგიძლიათ შეცვალოთ ეს რიცხვი (53) სხვა რიცხვზე CoCo მონაცემთა ნაკრებიდან, თუ გსურთ თქვენი რობოტი დაიცვას სხვა ობიექტები, 53 არის ვაშლი. მთელი სია არის categories.py ფაილში.

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

ნაბიჯი 4: საბოლოო აზრები

დასკვნითი ფიქრები
დასკვნითი ფიქრები

ეს არის ObjectFollowing დემოს არსი, თუ გსურთ მეტი იცოდეთ Flask webserver ვიდეო ნაკადის შესახებ, შეგიძლიათ გადახედოთ მიგელ გრინბერგის ამ დიდ სამეურვეოს.

თქვენ ასევე შეგიძლიათ ნახოთ Nvidia Jetbot ობიექტის გამოვლენის რვეული აქ.

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

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

გირჩევთ: