Talaan ng mga Nilalaman:

Wallace Autonomous Robot - Bahagi 4 - Magdagdag ng IR Distansya at "Amp" Sensors: 6 Hakbang
Wallace Autonomous Robot - Bahagi 4 - Magdagdag ng IR Distansya at "Amp" Sensors: 6 Hakbang

Video: Wallace Autonomous Robot - Bahagi 4 - Magdagdag ng IR Distansya at "Amp" Sensors: 6 Hakbang

Video: Wallace Autonomous Robot - Bahagi 4 - Magdagdag ng IR Distansya at
Video: 🔴 RDD webinar: how to raise awareness among healthcare providers? 2024, Hulyo
Anonim
Image
Image
Magdagdag ng Pagsuporta sa Circuitry (MCP3008)
Magdagdag ng Pagsuporta sa Circuitry (MCP3008)

Kumusta, ngayon sinisimulan namin ang susunod na yugto ng pagpapabuti ng mga kakayahan ng Wallace. Partikular, sinusubukan naming mapabuti ang kakayahang makita at maiwasan ang mga hadlang gamit ang infrared distansya sensor, at samantalahin din ang kakayahan ng Roboclaw motor-Controller na subaybayan ang kasalukuyan at gawing isang "sensor" na virtual (software). Sa wakas, titingnan natin kung paano mag-navigate nang walang SLAM (sabay na lokasyon at pagmamapa) (sa ngayon), dahil ang robot ay wala pang isang IMU (yunit ng pagsukat ng pagkawalang-kilos) o mga sensor ng ToF (oras ng paglipad).

Sa pamamagitan ng pag-navigate, sa una ito ay magiging dalawang pangunahing layunin lamang:

  1. iwasan ang mga hadlang
  2. kilalanin kung ito ay natigil sa isang lugar at hindi gumagawa ng anumang pag-unlad. (Ang ibig sabihin ng "pag-unlad" ay sumulong ito sa anumang makabuluhang distansya)
  3. isang posibleng ika-3 layunin ay maaaring para sa ito upang subukang ihanay ang sarili nang diretso sa isang pader.

Ang proyektong ito ay nagsimula sa isang robot kit at pagkuha ng mga pangunahing paggalaw upang gumana gamit ang isang koneksyon sa keyboard at ssh.

Ang pangalawang yugto ay upang magdagdag ng sapat na sumusuporta sa circuitry upang maghanda para sa pagdaragdag ng maraming mga sensor.

Sa nakaraang Instructable, nagdagdag kami ng maraming mga HCSR04 acoustic sensor at maiiwasan na ng robot ang mga hadlang habang gumagalaw ito sa paligid ng apartment.

Habang ito ay mahusay na gumagana sa kusina at pasilyo na may mahusay, solidong patag na ibabaw, ito ay ganap na bulag kapag papalapit sa silid-kainan. Hindi nito "makikita" ang mesa at mga binti ng upuan.

Ang isang pagpapabuti ay maaaring upang subaybayan ang mga tipikal na motor-alon, at kung tumalon ang mga halaga, dapat na ang robot ay may na-hit na bagay. Ito ay isang magandang "plano B" o kahit na C. Ngunit hindi talaga makakatulong ito na mag-navigate sa paligid ng lugar ng kainan.

(Update: sa totoo lang, sa ngayon, ang kasalukuyang pagsubaybay ay plano A kapag binabaligtad habang pansamantala kong tinanggal at mga sensor mula sa likuran).

Ang video para sa seksyong ito ay bumubuo sa huling yugto ng mga sensor ng pag-iwas sa hadlang.

Ang nakikita mo sa video ay anim na front HCSR04 acoustic sensor, at dalawang Sharp IR sensor. Ang mga IR sensor ay hindi gaanong na-play sa video. Ang kanilang forte 'ay halos kapag ang robot ay matatagpuan sa lugar ng kainan na nakaharap sa mesa at mga upuan sa upuan.

Bilang karagdagan sa mga sensor, ang kasalukuyang-monitor ay nagpatugtog lalo na sa panahon ng pag-reverse, kung sakaling ma-bumps ito sa isang bagay.

Panghuli, ginagamit nito ang kasaysayan ng huling 100 galaw, at ilang pangunahing pagsusuri upang sagutin ang isang tanong:

"Nagkaroon ba kamakailan ng tunay na pag-unlad sa unahan (o ito ay natigil sa ilang paulit-ulit na sayaw)?"

Kaya sa video kapag nakakita ka ng paulit-ulit na paulit-ulit, pagkatapos ay lumiliko ito, nangangahulugang kinikilala nito ang pattern ng forward-reverse, kaya sumubok ng iba pa.

Ang naka-program na layunin lamang sa bersyon na ito ng software ay upang subukang gumawa ng tuluy-tuloy na pagsulong, at subukang iwasan ang mga hadlang.

Hakbang 1: Magdagdag ng Pagsuporta sa Circuitry (MCP3008)

Magdagdag ng Pagsuporta sa Circuitry (MCP3008)
Magdagdag ng Pagsuporta sa Circuitry (MCP3008)
Magdagdag ng Pagsuporta sa Circuitry (MCP3008)
Magdagdag ng Pagsuporta sa Circuitry (MCP3008)
Magdagdag ng Pagsuporta sa Circuitry (MCP3008)
Magdagdag ng Pagsuporta sa Circuitry (MCP3008)

Bago namin maidagdag ang mga IR sensor, kakailanganin namin ang circuitry ng interface sa pagitan nila at ng Raspberry Pi.

Magdaragdag kami ng isang MCP3008 analog-to-digital converter. Maraming mga mapagkukunan sa online kung paano ikonekta ang chip na ito sa Raspberry Pi, kaya't hindi ako gaanong pupunta dito.

Mahalaga, mayroon kaming pagpipilian. Kung ang bersyon ng IR sensors ay nagpapatakbo sa 3V, sa gayon maaari ding ang MCP3008, at maaari naming direktang kumonekta sa Raspberry.

[3V IR sensor] - [MCP3008] - [Raspberrry Pi]

Sa aking kaso, gayunpaman, tumatakbo ako halos 5V, kaya nangangahulugan iyon ng isang bi-directional level shifter.

[5V IR sensor] - [MCP3008] - [5V-to-3V bi-directional bus] - [Raspberry Pi]

Tandaan: Mayroon lamang isang output output mula sa IR sensor. Direkta itong pupunta sa isa sa mga linya ng input analog signal ng MCP3008. Mula sa MCP3008, mayroong 4 na mga linya ng data na kailangan namin upang kumonekta (sa pamamagitan ng bi-directional bus) sa Raspberry Pi.

Sa ngayon, tatakbo ang aming robot gamit lamang ang dalawang IR sensor, ngunit madali kaming makakapagdagdag ng higit pa. Ang MCP3008 walong mga analog na input channel.

Hakbang 2: Mount IR Sensors

Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors
Mount IR Sensors

Biglang gumagawa ng iba't ibang mga IR sensor, at mayroon silang iba't ibang mga saklaw at saklaw na lugar. Nagkataon na nag-order ako ng modelo ng GP2Y0A60SZLF. Ang modelong iyong pinili ay makakaapekto sa paglalagay at oryentasyon ng sensor. Sa kasamaang palad para sa akin, hindi ko talaga sinaliksik ang eksaktong mga sensor na kukuha. Ito ay higit pa sa isang "alin ang maaari kong makuha sa isang makatwirang oras at presyo mula sa isang kagalang-galang na mapagkukunan, sa mga inaalok nilang" desisyon.

(Update: Gayunpaman, maaaring hindi iyon mahalaga, dahil ang mga sensor na ito ay tila nalilito sa pamamagitan ng panloob na pag-iilaw sa paligid. Sinisiyasat ko pa rin ang isyung iyon)

Mayroong hindi bababa sa tatlong mga paraan upang mai-mount ang mga sensor sa robot.

  1. Ilagay ang mga ito sa isang nakapirming posisyon, sa harap, nakaharap nang bahagyang malayo sa bawat isa.
  2. Ilagay ang mga ito sa isang servo, sa harap, nakaharap nang kaunti sa bawat isa.
  3. Ilagay ang mga ito sa isang nakapirming posisyon, sa harap, ngunit sa pinaka-kaliwa at kanang dulong na sulok, angulo patungo sa bawat isa.

Sa paghahambing ng pagpipilian # 1 sa pagpipilian # 3, sa palagay ko ang # 3 ay sasakupin ang higit pa sa lugar ng banggaan. Kung titingnan mo ang mga imahe, ang pagpipilian # 3 ay maaaring gawin hindi lamang upang ang mga patlang ng sensor ay magkakapatong, ngunit maaari din nilang masakop ang gitna at lampas sa labas ng lapad ng robot.

Sa pagpipiliang # 1, mas magkakalayo ang mga sensor ay anggulo mula sa bawat isa, higit na isang bulag na lugar sa gitna.

Maaari naming gawin ang # 2, (Nagdagdag ako ng ilang mga imahe na may servo bilang isang posibilidad) at ipagawa sa kanila ang isang walis, at malinaw naman na ito ay maaaring masakop ang pinakamaraming lugar. Gayunpaman, nais kong antalahin ang paggamit ng isang servo hangga't maaari, sa hindi bababa sa dalawang kadahilanan:

  • Gagamitin namin ang isa sa mga channel ng komunikasyon ng PWM sa Raspberry Pi. (Posibleng mapagbuti ito ngunit…)
  • Ang kasalukuyang gumuhit sa servo ay maaaring maging makabuluhan
  • Dagdag pa ito sa hardware at software

Nais kong iwanan ang pagpipilian ng servo para sa ibang pagkakataon kapag nagdaragdag ng mas mahahalagang sensor, tulad ng Time-of-Flight (ToF), o marahil isang kamera.

Mayroong isa pang posibleng kalamangan sa pagpipiliang # 2 na hindi magagamit sa iba pang dalawang mga pagpipilian. Ang mga IR sensor ay maaaring malito, depende sa pag-iilaw. Maaaring ang robot ay nakakakuha ng pagbabasa ng isang bagay na malapit nang malapit kung sa katunayan ay walang malapit na bagay. Sa pagpipilian # 3, dahil ang kanilang mga patlang ay maaaring mag-overlap, ang parehong mga sensor ay maaaring magrehistro ng parehong bagay (mula sa iba't ibang mga anggulo).

Kaya pupunta kami sa pagpipilian ng pagkakalagay # 3.

Hakbang 3: Oras upang Subukan

Image
Image

Matapos naming magawa ang lahat ng mga koneksyon sa pagitan ng Raspberry Pi, ng MCP3008 ADC, at ng mga Sharp IR sensor, oras na upang subukan. Isang simpleng pagsubok lamang upang matiyak na gumagana ang system sa mga bagong sensor.

Tulad ng sa mga nakaraang Instructable, ginagamit ko ang mga wiringPi C library hangga't maaari. Ginagawang madali ang mga bagay. Isang bagay na hindi masyadong halata mula sa pagsusuri sa website ng mga wiringPi, ay mayroong direktang suporta para sa MCP3004 / 3008.

Kahit na wala iyon, maaari mo lamang gamitin ang extension ng SPI. Ngunit hindi na kailangan. Kung titingnan mo nang mabuti ang repositoryang git ng Gordon para sa mga wiringPi, mahahanap mo ang isang listahan ng mga suportadong chips, kung alin sa mga ito ay para sa MCP3004 / 3008.

Napagpasyahan kong ilakip ang code bilang isang file dahil hindi ko makuha ito upang maipakita nang tama sa pahinang ito.

Hakbang 4: Isang Virtual Sensor - AmpSensor

Ang mas maraming magkakaibang paraan na maaari mong matanggap ang robot ng impormasyon tungkol sa labas ng mundo, mas mabuti.

Ang robot ay kasalukuyang mayroong walong HCSR04 acoustic sonar sensor (hindi sila ang pokus ng Instructable na ito), at mayroon na itong dalawang Sharp IR distansya sensor. Tulad ng nakasaad nang mas maaga, maaari nating samantalahin ang iba pa: ang tampok na sensing ng mga motor-alon ng Roboclaw.

Maaari naming balutin ang tawag na query sa motor-controller sa isang klase ng C ++ at tawagan itong isang AmpSensor.

Sa pamamagitan ng pagdaragdag ng ilang mga "talino" sa software, maaari naming subaybayan at ayusin ang karaniwang kasalukuyang-pagguhit habang tuwid na paggalaw (pasulong, paatras), at pati na rin ang paggalaw ng pag-ikot (kaliwa, kanan). Kapag alam natin ang mga saklaw ng mga amp na iyon, maaari kaming pumili ng isang kritikal na halaga, upang kung ang AmpSensor ay nakakakuha ng isang kasalukuyang pagbabasa mula sa motor-controller na lumampas sa halagang ito, alam namin na ang mga motor ay maaaring tumigil, at karaniwang ipinapahiwatig na ang robot ay nabangga sa isang bagay.

Kung nagdagdag kami ng ilang kakayahang umangkop sa software (mga command-line args, at / o pag-input ng keyboard sa panahon ng pagpapatakbo), maaari nating madagdagan / bawasan ang "kritikal na mga amp" na threshold habang nag-eeksperimento tayo sa pamamagitan lamang ng pagpapaalam sa robot na lumipat at maibulto ang mga bagay, parehong deretso, o habang umiikot.

Dahil alam ng aming nabigasyon na bahagi ng software ang direksyon ng paggalaw, maaari naming magamit ang lahat ng impormasyong iyon upang marahil, itigil ang paggalaw, at subukang baligtarin ang paggalaw sa ilang maikling panahon bago subukan ang iba pa.

Hakbang 5: Pag-navigate

Ang robot sa kasalukuyan ay limitado sa feedback sa totoong mundo. Mayroon itong ilang mga malalapit na sensor para sa pag-iwas sa balakid, at mayroon itong diskarteng fall-back ng pagsubaybay sa kasalukuyang-draw kung ang mga sensor ng distansya ay makaligtaan ng isang balakid.

Wala itong mga motor na may mga encoder, at wala itong isang IMU (inertial-pagsukat-yunit), kaya't ginagawang mas mahirap malaman kung talagang gumagalaw o umiikot ito, at kung magkano.

Habang ang isang ay maaaring makakuha ng isang uri ng indikasyon ng distansya sa mga sensor na kasalukuyang nasa robot, ang kanilang larangan ng pagtingin ay malawak, at mayroong hindi mahuhulaan. Ang acoustic sonar ay maaaring hindi sumasalamin nang tama; ang infrared ay maaaring malito ng iba pang pag-iilaw, o kahit na maraming mga sumasalamin na ibabaw. Hindi ako sigurado sulit sa kaguluhan upang talagang subukang subaybayan ang pagbabago sa distansya bilang isang pamamaraan upang malaman kung ang robot ay gumagalaw at kung magkano at saang direksyon.

Sinadya kong piliing HUWAG gumamit ng isang micro-controller tulad ng isang Arduino sapagkat a) Ayoko ng psuedo-C ++ na kapaligiran, b) at ang sobrang pag-unlad na iyon ay mawawalan ng read-write memory (?), At na ay mangangailangan ng isang host computer upang bumuo ng (?). O baka mangyari lang ako tulad ng Raspberry Pi.

Ang Pi na tumatakbo sa Raspbian, gayunpaman, ay hindi isang real-time OS, kaya sa pagitan ng mga kawalang-kakayahan ng mga sensor na ito, at ang OS na hindi nagbabasa nang eksakto sa bawat oras, naramdaman kong ang layunin ng mga sensor na ito ay mas angkop para sa pag-iwas sa balakid at hindi tunay na distansya-pagsukat.

Ang diskarte na iyon ay tila kumplikado at walang labis na pakinabang, kapag maaari naming magamit ang mas mahusay na mga sensor ng ToF (time-of-flight) (sa paglaon) para sa hangaring iyon (SLAM).

Ang isang diskarte na maaari naming magamit ay upang mapanatili ang ilang uri ng subaybayan kung ano ang naibigay na mga utos ng kilusan sa loob ng huling X segundo o mga utos.

Bilang isang halimbawa, sabihin na ang robot ay natigil nakaharap sa isang sulok na dayagonal. Sinasabi sa isang hanay ng mga sensor na napakalapit nito sa isang pader, kaya't ang mga pivot, ngunit sinabi sa iba pang hanay ng mga sensor na napakalapit sa kabilang dingding. Nagtatapos lamang ito sa pag-uulit ng isang panig-sa-gilid na pattern.

Ang halimbawa sa itaas ay isang simpleng kaso lamang. Ang pagdaragdag ng ilang mga smart ay maaaring itaas lamang ang paulit-ulit na pattern sa isang bagong antas, ngunit ang robot ay nananatiling natigil sa sulok.

Halimbawa, sa halip na paikot-ikot sa lugar, umiikot ito sa isang paraan, umuurong pabalik-balik (na kung saan ay nalilinis ang mga kritikal na pahiwatig na distansya), at kahit na umiikot ito sa ibang direksyon, nagpapatuloy pa rin ito sa ilang anggulo pabalik sa sulok, inuulit ang isang mas kumplikadong patter ng mahalagang parehong bagay.

Nangangahulugan iyon na maaari talaga kaming gumamit ng isang kasaysayan ng mga utos, at tingnan kung paano samantalahin at gamitin ang impormasyong iyon.

Maaari akong mag-isip ng dalawang napaka pangunahing (panimula) na paraan ng paggamit ng kasaysayan ng kilusan.

  • para sa huling X na bilang ng mga galaw, tumutugma ba sila sa Y patttern. Ang isang simpleng halimbawa ay maaaring (at nangyari ito) "FORWARD, REVERSE, FORWARD, REVERSE,…..". Kaya't mayroong pag-andar sa pagtutugma na ito na nagbabalik alinman sa TUNAY (nahanap na pattern) o FALSE (hindi nahanap). Kung TOTOO, sa bahagi ng nabigasyon ng programa, subukan ang iba pang mga pagkakasunud-sunod ng paggalaw.
  • para sa huling X na bilang ng mga gumagalaw, mayroong isang pangkalahatang o net na paggalaw ng pasulong. Paano matutukoy ng isa kung ano ang tunay na paggalaw sa unahan? Kaya.. ang isang madaling paghahambing ay para sa huling paglipat ng X, ang "FORWARD" ay nangyayari nang higit sa "REVERSE". Ngunit hindi iyon dapat maging isa lamang. Kumusta naman ito: "TAMA, TAMA, KALIWA, KANAN". Sa kasong iyon, ang robot ay kinakailangang lumiko sa kanan upang makalabas sa isang sulok o dahil lumapit ito sa dingding sa isang anggulo, na maaaring maituring na tunay na pagsulong. Sa kabilang banda, ang "KALIWA, KANAN, KALIWA, KANAN …" ay maaaring hindi maituring na tunay na pagsulong. Kaya, kung ang "TAMA" ay nangyayari nang higit sa "KALIWA", o "KALIWANG naganap higit sa" TAMA ", kung gayon iyon ay maaaring maging tunay na pag-unlad.

Sa pagsisimula ng Instructable na ito, nabanggit ko na ang isang posibleng ika-3 layunin ay maaaring maging parisukat o nakahanay sa isang pader. Gayunpaman, para doon, kailangan namin ng higit pa sa "malapit ba kami sa ilang bagay". Halimbawa, kung makakakuha tayo ng dalawang nakaharap sa harap na mga tunog ng tunog (hindi ang pokus ng artikulong ito) upang magbigay ng makatuwirang mabuti, matatag na mga tugon patungkol sa distansya, malinaw naman kung ang isang nag-uulat ng ibang pagkakaiba-iba ng halaga kaysa sa isa pa, ang robot ay lumapit sa dingding sa isang anggulo, at maaaring subukan ang ilang pagmamaniobra upang makita kung ang mga halagang iyon ay lumalapit sa bawat isa (nakaharap sa pader nang maayos).

Hakbang 6: Pangwakas na Mga Saloobin, Susunod na Yugto …

Inaasahan na ang Instructable na ito ay nagbigay ng ilang mga ideya.

Ang pagdaragdag ng higit pang mga sensor ay nagpapakilala ng ilang mga kalamangan, at hamon.

Sa kaso sa itaas, lahat ng mga acoustic sensor ay gumana nang maayos at sa halip ay diretso sa software.

Kapag ang mga IR sensor ay ipinakilala sa halo, naging mas mahirap. Ang dahilan ay ang ilan sa kanilang mga larangan ng pagtingin na nag-o-overlap sa mga ng acoustic sensor. Ang mga IR sensor ay tila medyo sensitibo at hindi mahuhulaan sa pagbabago ng mga kondisyon ng ilaw sa paligid, samantalang syempre ang mga acoustic sensor ay hindi apektado ng pag-iilaw.

At sa gayon ang hamon ay kung ano ang gagawin kung ang isang acoustic sensor ay nagsasabi sa amin na walang balakid, ngunit ang IR sensor ay.

Sa ngayon, pagkatapos ng trial-and-error, natapos ang mga bagay sa priyoridad na ito:

  1. amp-sensing
  2. IR-sensing
  3. acoustic-sensing

At ang ginawa ko ay ibababa lamang ang pagkasensitibo ng mga IR sensor, sa gayon ay makakakita lamang sila ng napakalapit na mga bagay (tulad ng napipintong mga paa ng upuan)

Sa ngayon, hindi na kailangang gumawa ng anumang multi-threading o interrupt-driven na software, bagaman paminsan-minsan ay nakakaranas ako ng pagkawala ng kontrol sa pagitan ng Raspberry Pi at ng Roboclaw motor-controller (pagkawala ng mga serial na komunikasyon).

Dito normal na magagamit ang E-Stop circuit (tingnan ang dating Mga Instructable). Gayunpaman, dahil hindi ko nais (pa) kailangang harapin ang pagkakaroon upang i-reset ang Roboclaw sa panahon ng pag-unlad, at ang robot ay hindi ganoon kabilis, at naroroon ako upang subaybayan ito at isara ito, hindi ko pa konektado ang E-Stop.

Sa paglaon, malamang na kinakailangan ang multi-threading.

Mga Susunod na Hakbang …

Salamat sa ginawa mo hanggang dito.

Nakuha ko ang ilang mga sensor ng VL53L1X IR laser ToF (time-of-flight), kaya't malamang na iyon ang paksa ng susunod na Maaaring turuan, kasama ang isang servo.

Inirerekumendang: