- Kinakailangan ang Hardware:
- Kinakailangan sa Programming:
- Pag-set up ng Pagproseso sa Raspberry Pi:
- Diagram ng Circuit:
- Programa sa pagsubaybay sa Raspberry Pi Ball:
- Paggawa ng Raspberry Pi Ball Tracking Robot:
Ang larangan ng Robotics, Artipisyal na Katalinuhan at Pag-aaral ng Makina ay mabilis na umuusbong na siguradong mababago ang lifestyle ng sangkatauhan sa malapit na hinaharap. Ang mga robot ay naisip na maunawaan at nakikipag-ugnay sa totoong mundo sa pamamagitan ng mga sensor at pagproseso ng pag-aaral ng machine. Ang pagkilala sa imahe ay isa sa mga tanyag na paraan kung saan ang mga robot ay naisip na maunawaan ang mga bagay sa pamamagitan ng pagtingin sa totoong mundo sa pamamagitan ng isang camera tulad ng ginagawa namin. Sa proyektong ito, hayaan ang paggamit ng lakas ng Raspberry Pi upang bumuo ng isang Robot na maaaring subaybayan ang bola at sundin ito tulad ng mga robot na naglalaro ng football.
Ang OpenCV ay isang tanyag at bukas na tool ng mapagkukunan na ginagamit para sa pagproseso ng Imahe, ngunit sa tutorial na ito upang mapanatili ang mga bagay na simple ginagamit namin ang Processing IDE. Dahil ang pagpoproseso para sa ARM ay pinakawalan din ang library ng GPIO para sa pagproseso hindi na namin kailangang lumipat sa pagitan ng sawa at pagproseso upang gumana sa Raspberry Pi. Parang cool diba? Kaya't magsimula tayo.
Kinakailangan ang Hardware:
- Raspberry Pi
- Camera module na may ribbon cable
- Robot Chassis
- Gear motor na may gulong
- L293D motor driver
- Power bank o anumang iba pang mapagkukunang portable power
Kinakailangan sa Programming:
- Subaybayan o iba pang pagpapakita para sa Raspberry pi
- Key board o mouse para sa Pi
- Pinoproseso ang ARM software
Tandaan: Ito ay sapilitan na magkaroon ng isang display na konektado sa Pi sa pamamagitan ng mga wires habang nagprograma dahil doon lamang makikita ang video ng camera
Pag-set up ng Pagproseso sa Raspberry Pi:
Tulad ng sinabi kanina ay gagamitin namin ang kapaligiran sa pagproseso upang Program ang aming Raspberry Pi at hindi ang default na paraan ng paggamit ng sawa. Kaya, sundin ang mga hakbang sa ibaba:
Hakbang 1: - Ikonekta ang iyong Raspberry Pi sa iyong monitor, keyboard at mouse at i-on ito.
Hakbang 2: - Tiyaking nakakonekta ka Pi sa isang aktibong koneksyon sa internet dahil malapit na kaming mag-download ng ilang mga bagay.
Hakbang 3: - Mag - click sa Pagproseso ng ARM, upang i-download ang pagproseso ng IDE para sa Raspberry Pi. Ang pag-download ay nasa anyo ng isang ZIP file.
Hakbang 4: - Kapag nai-download, i-extract ang mga file sa iyong ZIP folder sa ginustong direktoryo. Kinuha ko lang ito sa aking desktop.
Hakbang 5: - Ngayon, buksan ang nakuhang folder at mag-click sa file na pinangalanang pagproseso. Dapat itong buksan ang isang window tulad ng ipinakita sa ibaba.
Hakbang 6: - Ito ang kapaligiran kung saan mai-type namin ang aming mga code. Para sa mga taong pamilyar sa Arduino, huwag magulat YES ang IDE ay mukhang katulad sa Arduino at ganoon din ang programa.
Hakbang 7: - Kailangan namin ng dalawang silid-aklatan upang gumana ang aming sumusunod na programa, upang mai-install pagkatapos ay mag-click lamang sa Sketch -> I-import ang Library -> Magdagdag ng Library . Ang sumusunod na dialog box ay magbubukas.
Hakbang 8: - Gamitin ang tuktok na kaliwang kahon ng teksto upang maghanap para sa Raspberry Pi at pindutin ang enter, maghanap ka ng resulta sa paghahanap ay dapat magmukhang ganito.
Hakbang 9: - Maghanap para sa mga aklatan na pinangalanang "GL Video" at "Hardware I / O" at mag-click sa pag-install upang mai-install ang mga ito. Tiyaking na-install mo ang parehong mga aklatan.
Hakbang 10: - Batay sa iyong internet ang pag-install ay tatagal ng ilang minuto. Kapag tapos na handa na kami para sa pagproseso ng software.
Diagram ng Circuit:
Ang circuit Diagram ng Project ng Pagsubaybay sa Raspberry Pi Ball na ito ay ipinapakita sa ibaba.
Tulad ng nakikita mo sa circuit ay nagsasangkot ng isang PI camera, module ng Motor Driver at isang pares ng mga motor na konektado sa Raspberry pi. Ang kumpletong circuit ay pinalakas ng isang mobile Power bank (kinakatawan ng baterya ng AAA sa circuit sa itaas).
Dahil ang mga detalye ng mga pin ay hindi nabanggit sa Raspberry Pi, kailangan naming i-verify ang mga pin gamit ang larawan sa ibaba
Upang himukin ang mga Motors, kailangan namin ng apat na mga pin (A, B, A, B). Ang apat na mga pin na ito ay konektado mula sa GPIO14,4,17 at 18 ayon sa pagkakabanggit. Ang kulay kahel at puting kawad na magkakasama ang bumubuo ng koneksyon para sa isang motor. Kaya't mayroon kaming dalawang gayong mga pares para sa dalawang motor.
Ang mga motor ay konektado sa module ng L293D Motor Driver tulad ng ipinakita sa larawan at ang module ng driver ay pinalakas ng isang power bank. Tiyaking ang lupa ng power bank ay konektado sa lupa ng Raspberry Pi, pagkatapos lamang gagana ang iyong koneksyon.
Tapos na tapos na tayo sa aming koneksyon sa Hardware, bumalik tayo sa ating kapaligiran sa pagproseso at simulan ang programa upang turuan ang aming robot kung paano subaybayan ang isang bola.
Programa sa pagsubaybay sa Raspberry Pi Ball:
Ang kumpletong programa sa Pagproseso ng proyektong ito ay ibinibigay sa dulo ng pahinang ito, na direktang ginagamit mo. Sa ibaba pa lamang, ipinaliwanag ko ang pagtatrabaho ng code upang magamit mo ito para sa iba pang mga katulad na proyekto.
Ang konsepto ng programa ay napaka-simple. Bagaman ang hangarin ng proyekto ay upang subaybayan ang isang bola, talagang hindi namin ito gagawin. Kilalanin lamang namin ang bola gamit ang kulay nito. Tulad ng alam nating lahat na ang mga video ay walang iba kundi ang tuluy-tuloy na mga frame ng mga larawan. Kaya kinukuha namin ang bawat larawan at hinati ito sa mga pixel. Pagkatapos ihinahambing namin ang bawat kulay ng pixel sa kulay ng bola; kung ang isang tugma ay natagpuan maaari naming sabihin na natagpuan namin ang bola. Sa impormasyong ito maaari din nating makilala ang posisyon ng bola (kulay ng pixel) sa screen. Kung ang posisyon ay malayo sa kaliwa inililipat namin ang robot sa kanan, kung ang posisyon ay malayo sa kanan ay inililipat natin ang robot sa kaliwa upang ang posisyon ng pixel ay laging mananatili sa gitna ng screen. Maaari kang manuod ng video ng Computer Vision ng Daniel shiffman upang makakuha ng isang malinaw na larawan.
Tulad ng dati nagsisimula kami sa pamamagitan ng pag- import ng dalawang mga aklatan na nai-download namin. Maaari itong magawa ng mga sumusunod na dalawang linya. Ginagamit ang library ng Hardware I / O upang ma-access ang mga GPIO pin ng PI nang direkta mula sa kapaligiran sa pagproseso, ginagamit ang glvideo library upang ma-access ang module ng camera ng Raspberry Pi.
iproseso ang pagproseso.io. *; i-import ang gohai.glvideo. *;
Sa loob ng pag- andar ng pag- setup pinasimulan namin ang mga output pin upang makontrol ang motor at makuha din ang video mula sa pi camera at sukatin ito sa isang window ng laki na 320 * 240.
walang bisa ang pag-setup () {laki (320, 240, P2D); video = bagong GLCapture (ito); video.start (); trackColor = kulay (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
Ang walang bisa na pagguhit ay tulad ng walang katapusang loop ang code sa loob ng loop na ito ay isasagawa hangga't ang programa ay natapos na. Kung magagamit ang isang mapagkukunan ng camera binabasa namin ang video na lumalabas dito
walang bisa draw () {background (0); kung (video.available ()) {video.read (); }}
Pagkatapos ay nagsisimula kaming hatiin ang frame ng video sa mga pixel. Ang bawat pixel ay may halaga na pula, berde at asul. Ang mga halagang ito ay nakaimbak sa variable r1, g1 at b1
para sa (int x = 0; x <video.width; x ++) {para sa (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Ano ang kasalukuyang kulay ng kulay kasalukuyangColor = video.pixels; float r1 = pula (currentColor); float g1 = berde (currentColor); float b1 = asul (kasalukuyangColor);
Upang makita ang kulay ng bola sa una, kailangan naming mag-click sa kulay. Kapag na-click ang kulay ng bola ay maiimbak sa variable na tinatawag na trackColour .
void mousePressed () {// I-save ang kulay kung saan ang mouse ay na-click sa trackColor variable int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Kapag mayroon kaming kulay ng track at ang kasalukuyang kulay kailangan naming ihambing ang mga ito. Ang paghahambing na ito ay gumagamit ng dist function. Sinusuri nito kung gaano kalapit ang kasalukuyang kulay sa kulay ng track.
float d = dist (r1, g1, b1, r2, g2, b2);
Ang halaga ng dist ay magiging zero para sa isang eksaktong tugma. Kaya, kung ang halaga ng dist ay mas mababa sa isang tinukoy na halaga (Tala ng mundo) pagkatapos ay ipinapalagay namin na natagpuan namin ang kulay ng track. Pagkatapos makuha namin ang lokasyon ng pixel na iyon at iimbak ito sa variable na pinakamalapit na X at malapit sa Y upang mahanap ang lokasyon ng bola
kung (d <worldRecord) {worldRecord = d; pinakamalapitX = x; pinakamalapitY = y; }
Gumuhit din kami ng isang ellipse sa paligid ng nahanap na kulay upang ipahiwatig na ang kulay ay natagpuan. Ang halaga ng posisyon ay naka-print din sa console, makakatulong ito ng malaki habang ang pag-debug.
kung (worldRecord <10) {// Gumuhit ng isang bilog sa sinusubaybayan na pagpuno ng pixel (trackColor); strokeWeight (4.0); stroke (0); ellipse (pinakamalapitX, pinakamalapitY, 16, 16); println (pinakamalapitX, pinakamalapitY);
Sa wakas maaari naming ihambing ang posisyon ng pinakamalapit na X at pinakamalapit na Y at ayusin ang mga motor sa isang paraan na ang kulay ay makakakuha sa gitna ng screen. Ang code sa ibaba ay ginagamit upang buksan ang robot nang tama dahil ang posisyon ng X ng kulay ay natagpuan na nasa kaliwang bahagi ng screen (<140)
kung (pinakamalapitX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); antala (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Lumiko sa Kanan"); }
Katulad nito maaari nating suriin ang posisyon ng X at Y upang makontrol ang mga motor sa kinakailangang direksyon. Tulad ng dati maaari kang mag-refer sa ilalim ng pahina para sa kumpletong programa.
Paggawa ng Raspberry Pi Ball Tracking Robot:
Kapag handa ka na sa hardware at programa oras na upang magsaya. Bago namin subukan ang aming bot sa lupa, dapat naming tiyakin na ang lahat ay gumagana nang maayos. Ikonekta ang iyong Pi upang subaybayan at ilunsad ang code ng pagproseso. Dapat mong makita ang feed ng video sa isang maliit na window. Ngayon, dalhin ang bola sa loob ng frame at mag-click sa bola upang turuan ang robot na dapat itong subaybayan ang partikular na kulay na ito. Ngayon ilipat ang bola sa paligid ng screen at dapat mong mapansin ang mga gulong na umiikot.
Kung ang lahat ay gumagana tulad ng inaasahan, bitawan ang bot sa lupa at magsimulang maglaro kasama nito. Tiyaking ang silid ay pantay na naiilawan para sa pinakamahusay na mga resulta. Ang kumpletong pagtatrabaho ng proyekto ay ipinapakita sa video sa ibaba. Inaasahan kong naintindihan mo ang proyekto at nasiyahan sa pagbuo ng katulad na bagay. Kung mayroon kang anumang mga problema huwag mag-atubiling i-post ang mga ito sa seksyon ng komento sa ibaba o tulong.