Satura rādītājs:

Volisa autonomais robots - 4. daļa - pievienojiet IR attāluma un pastiprinātāja sensorus: 6 soļi
Volisa autonomais robots - 4. daļa - pievienojiet IR attāluma un pastiprinātāja sensorus: 6 soļi

Video: Volisa autonomais robots - 4. daļa - pievienojiet IR attāluma un pastiprinātāja sensorus: 6 soļi

Video: Volisa autonomais robots - 4. daļa - pievienojiet IR attāluma un pastiprinātāja sensorus: 6 soļi
Video: Семь роботов изменят сельское хозяйство ▶ СМОТРИТЕ СЕЙЧАС! 2024, Jūlijs
Anonim
Image
Image
Pievienot atbalsta shēmu (MCP3008)
Pievienot atbalsta shēmu (MCP3008)

Labdien, šodien mēs sākam nākamo Wallace spēju uzlabošanas posmu. Konkrētāk, mēs cenšamies uzlabot tā spēju atklāt un izvairīties no šķēršļiem, izmantojot infrasarkanos attāluma sensorus, kā arī izmantot Roboclaw motora kontroliera spēju pārraudzīt strāvu un pārvērst to par virtuālu (programmatūras) sensoru. Visbeidzot, mēs apskatīsim, kā pārvietoties bez SLAM (vienlaicīga atrašanās vieta un kartēšana) (pagaidām), jo robotam vēl nav IMU (inerces mērvienība) vai ToF (lidojuma laika) sensoru.

Izmantojot navigāciju, sākotnēji tie būs tikai divi galvenie mērķi:

  1. izvairīties no šķēršļiem
  2. atpazīt, kad tas kaut kur ir iestrēdzis, un neveic nekādu progresu. ("progress" nozīmē, vai tas virzījās uz priekšu nozīmīgā attālumā)
  3. iespējamais trešais mērķis varētu būt tas, ka tā mēģina taisni pielīdzināties sienai.

Šis projekts sākās ar robotu komplektu un pamata kustību iegūšanu, izmantojot tastatūru un ssh savienojumu.

Otrajā posmā bija jāpievieno pietiekama atbalsta shēma, lai sagatavotos daudzu sensoru pievienošanai.

Iepriekšējā Instructable mēs pievienojām vairākus HCSR04 akustiskos sensorus, un robots tagad var izvairīties no šķēršļiem, pārvietojoties pa dzīvokli.

Lai gan tas labi darbojas virtuvē un gaitenī ar labām, cietām plakanām virsmām, tas ir pilnīgi akls, tuvojoties ēdamistabai. Tas nevar "redzēt" galda un krēsla kājas.

Viens uzlabojums var būt tipisku motora strāvu izsekošana, un, ja vērtības lec, tad robotam noteikti ir jābūt kaut ko trāpījušam. Tas ir labs "plāns B" vai pat C. Bet tas īsti nepalīdz tai orientēties ēdamistabas zonā.

(Atjauninājums: patiesībā pagaidām strāvas uzraudzība ir plāns A, kad brauc atpakaļgaitā, jo uz laiku esmu noņēmis un sensorus no aizmugures).

Šīs sadaļas video ir šķēršļu novēršanas sensoru pēdējais posms.

Videoklipā redzami seši priekšējie HCSR04 akustiskie sensori un divi Sharp IR sensori. Infrasarkanie sensori videoklipā daudz netika izmantoti. Viņu stiprā puse galvenokārt ir tad, kad robots atrodas ēdamistabas zonā, kas vērsta pret galdu un krēsla kājām.

Papildus sensoriem strāvas monitors sāka darboties īpaši atpakaļgaitas laikā, ja tas kaut ko sasit.

Visbeidzot, tā izmanto pēdējo 100 gājienu vēsturi un dažas pamata analīzes, lai atbildētu uz vienu jautājumu:

"Vai pēdējā laikā ir bijis īsts progress uz priekšu (vai tas ir iestrēdzis kādā atkārtotā dejā)?"

Tātad videoklipā, kad redzat atkārtotu virzienu uz priekšu un atpakaļ, tas pagriežas, tas nozīmē, ka tas atpazina virzienu uz priekšu un atpakaļ, tādējādi mēģinot kaut ko citu.

Šīs programmatūras versijas vienīgais ieprogrammētais mērķis bija nemitīgi virzīties uz priekšu un izvairīties no šķēršļiem.

1. darbība: pievienojiet atbalsta shēmu (MCP3008)

Pievienot atbalsta shēmu (MCP3008)
Pievienot atbalsta shēmu (MCP3008)
Pievienot atbalsta shēmu (MCP3008)
Pievienot atbalsta shēmu (MCP3008)
Pievienot atbalsta shēmu (MCP3008)
Pievienot atbalsta shēmu (MCP3008)

Pirms mēs varam pievienot IR sensorus, mums būs nepieciešama saskarnes shēma starp tiem un Raspberry Pi.

Mēs pievienosim MCP3008 analogo ciparu pārveidotāju. Ir daudz tiešsaistes resursu, kā savienot šo mikroshēmu ar Raspberry Pi, tāpēc es šeit daudz neiedziļināšos.

Būtībā mums ir izvēle. Ja IR sensoru versija darbojas ar 3 V spriegumu, var darboties arī MCP3008, un pēc tam mēs varam tieši izveidot savienojumu ar Raspberry.

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

Tomēr manā gadījumā es pārsvarā strādāju ar 5 V spriegumu, tāpēc tas nozīmē divvirzienu līmeņa pārslēdzēju.

[5V IR sensors]-[MCP3008]-[5V-3V divvirzienu kopne]-[Raspberry Pi]

Piezīme. No IR sensora tiek izvadīts tikai viens signāls. Tas iet tieši uz vienu no MCP3008 ievades analogā signāla līnijām. No MCP3008 ir 4 datu līnijas, kas mums jāpievieno (izmantojot divvirzienu kopni) ar Raspberry Pi.

Pašlaik mūsu robots darbosies, izmantojot tikai divus IR sensorus, bet mēs varētu viegli pievienot vairāk. MCP3008 astoņi analogās ievades kanāli.

2. darbība: uzstādiet IR sensorus

Uzstādiet IR sensorus
Uzstādiet IR sensorus
Uzstādiet IR sensorus
Uzstādiet IR sensorus
Uzstādiet IR sensorus
Uzstādiet IR sensorus
Uzstādiet IR sensorus
Uzstādiet IR sensorus

Sharp ražo vairākus dažādus IR sensorus, un tiem ir atšķirīgs diapazons un pārklājuma zona. Es nejauši pasūtīju GP2Y0A60SZLF modeli. Jūsu izvēlētais modelis ietekmēs sensora izvietojumu un orientāciju. Diemžēl es īsti neizpētīju, kurus sensorus iegūt. Tas bija drīzāk lēmums "kurus no tiem piedāvāt par saprātīgu laiku un cenu no cienījama avota".

(Atjauninājums: tomēr tam var nebūt nozīmes, jo šķiet, ka šos sensorus mulsina iekšējais apgaismojums. Es joprojām pētu šo problēmu)

Ir vismaz trīs veidi, kā šos sensorus uzstādīt uz robota.

  1. Novietojiet tos fiksētā stāvoklī, priekšpusē, nedaudz vērsti viens pret otru.
  2. Novietojiet tos uz servo priekšpusē, nedaudz pavērsieties viens pret otru.
  3. Novietojiet tos fiksētā stāvoklī, priekšpusē, bet kreisākajos un labākajos vistālākajos stūros, kas ir leņķī viens pret otru.

Salīdzinot 1. izvēli ar 3. izvēli, es domāju, ka #3 aptvers vairāk sadursmes zonas. Ja paskatās uz attēliem, 3. izvēli var izdarīt ne tikai tā, lai sensoru lauki pārklājas, bet arī tie var aptvert robota centru un ārpus tā.

Izmantojot 1. izvēli, jo tālāk sensori ir novietoti viens no otra, jo lielāks ir aklais punkts centrā.

Mēs varētu darīt #2, (es pievienoju dažus attēlus ar servo kā iespēju) un likt viņiem veikt slaucīšanu, un acīmredzot tas var aptvert lielāko daļu teritorijas. Tomēr es vēlos pēc iespējas ilgāk atlikt servo izmantošanu vismaz divu iemeslu dēļ:

  • Mēs izmantosim vienu no PWM sakaru kanāliem Raspberry Pi. (To ir iespējams uzlabot, bet tomēr …)
  • Pašreizējā vilkme ar servo var būt ievērojama
  • Tas papildina aparatūru un programmatūru

Es vēlētos atstāt servo iespēju vēlāk, pievienojot svarīgākus sensorus, piemēram, lidojuma laiku (ToF) vai varbūt kameru.

2. iespējai ir vēl viena iespējamā priekšrocība, kas nav pieejama ar pārējām divām iespējām. Šie IR sensori var sajaukt atkarībā no apgaismojuma. Var gadīties, ka robots iegūst nolasījumu objektam, kas ir tuvu, ja patiesībā nav tuvumā esoša objekta. Ar 3. izvēli, tā kā to lauki var pārklāties, abi sensori var reģistrēt vienu un to pašu objektu (no dažādiem leņķiem).

Tāpēc mēs izvēlēsimies izvietojumu #3.

3. solis: laiks pārbaudīt

Image
Image

Kad esam izveidojuši visus savienojumus starp Raspberry Pi, MCP3008 ADC un Sharp IR sensoriem, ir pienācis laiks pārbaudīt. Vienkāršs tests, lai pārliecinātos, ka sistēma darbojas ar jaunajiem sensoriem.

Tāpat kā iepriekšējos Instructables, es pēc iespējas izmantoju bibliotēku wiringPi C. Atvieglo lietas. Pārskatot wiringPi vietni, nav tik skaidrs, ka MCP3004/3008 ir tiešs atbalsts.

Pat bez tā jūs varētu vienkārši izmantot SPI paplašinājumu. Bet nevajag. Rūpīgi apskatot Gordona git krātuvi wiringPi, jūs atradīsit sarakstu ar atbalstītajām mikroshēmām, no kurām viena ir paredzēta MCP3004/3008.

Es nolēmu pievienot kodu kā failu, jo nevarēju to pareizi parādīt šajā lapā.

4. solis: virtuālais sensors - AmpSensor

Jo vairāk dažādos veidos var likt robotam saņemt informāciju par ārpasauli, jo labāk.

Robotam pašlaik ir astoņi HCSR04 akustiskie hidrolokatori (tie nav šīs instrukcijas uzmanības centrā), un tagad tam ir divi Sharp IR attāluma sensori. Kā minēts iepriekš, mēs varam izmantot kaut ko citu: Roboklava motoru strāvu noteikšanas funkciju.

Mēs varam apkopot šo vaicājuma zvanu motora kontrolierim C ++ klasē un nosaukt to par AmpSensor.

Pievienojot programmatūrai dažas "gudrības", mēs varam kontrolēt un pielāgot tipisko strāvas vilkšanu taisnas kustības laikā (uz priekšu, atpakaļ), kā arī rotācijas kustības (pa kreisi, pa labi). Kad mēs zinām šos amplitūdu diapazonus, mēs varam izvēlēties kritisko vērtību, lai, ja AmpSensor no motora kontrollera saņemtu strāvas rādījumu, kas pārsniedz šo vērtību, mēs zinām, ka motori, iespējams, ir apstājušies, un tas parasti norāda, ka robots ir sasists kaut ko.

Ja programmatūrai pievienojam zināmu elastību (komandrindas argumenti un / vai tastatūras ievade darbības laikā), tad mēs varam palielināt / samazināt "kritisko ampēru" slieksni, eksperimentējot, vienkārši ļaujot robotam pārvietoties un ietriekties objektos, gan taisni, gan rotējot.

Tā kā mūsu programmatūras navigācijas daļa zina kustības virzienu, mēs varam izmantot visu šo informāciju, lai, iespējams, apturētu kustību un mēģinātu kādu laiku mainīt kustību, pirms izmēģināt kaut ko citu.

5. darbība: navigācija

Pašlaik robotam ir ierobežotas atsauksmes. Tam ir daži tuvu attāluma sensori, lai izvairītos no šķēršļiem, un tam ir rezerves tehnika, lai uzraudzītu strāvas vilkšanu, ja attāluma sensori nokavē šķērsli.

Tam nav motoru ar kodētājiem, un tam nav IMU (inerciālās mērvienības), tāpēc ir grūtāk zināt, vai tas tiešām kustas vai rotē un cik daudz.

Lai gan ar robotā esošajiem sensoriem var iegūt zināmu attāluma norādi, to redzes lauks ir plašs, un ir neparedzamība. Akustiskais hidrolokators var neatspoguļoties pareizi; infrasarkano staru var sajaukt ar citu apgaismojumu vai pat vairākām atstarojošām virsmām. Es neesmu pārliecināts, ka ir vērts pūlēties, lai faktiski mēģinātu izsekot attāluma izmaiņām kā tehnikai, lai zinātu, vai robots pārvietojas un cik daudz un kādā virzienā.

Es ar nolūku izvēlējos neizmantot mikrokontrolleri, piemēram, Arduino, jo a) man nepatīk, ka tā ir psuedo-C ++ vide, b) un ka pārāk liela attīstība nodilst lasīšanas un rakstīšanas atmiņai (?) Un ka es attīstīšanai būtu nepieciešams saimniekdators (?). Vai varbūt man vienkārši gadās kā Raspberry Pi.

Tomēr Pi, kas darbojas ar Raspbian, nav operētājsistēma reāllaikā, tāpēc starp šo sensoru nestabilitāti un OS nelasīšanu precīzi katru reizi man šķita, ka šo sensoru mērķis ir labāk piemērots šķēršļu novēršanai, nevis faktiskais attāluma mērījums.

Šī pieeja šķita sarežģīta un ar ne tik lielu labumu, kad šim nolūkam (vēlāk) varam izmantot labākus ToF (lidojuma laika) sensorus (SLAM).

Viena pieeja, ko mēs varam izmantot, ir izsekot tam, kādas kustības komandas ir izdotas pēdējo X sekunžu laikā.

Piemēram, sakiet, ka robots ir iestrēdzis pret stūri pa diagonāli. Viens sensoru komplekts norāda, ka tas ir pārāk tuvu vienai sienai, tāpēc tas griežas, bet pēc tam otrs sensoru komplekts paziņo, ka tas ir pārāk tuvu otrai sienai. Tas galu galā tikai atkārto modeli no vienas puses uz otru.

Iepriekš minētais piemērs ir tikai viens ļoti vienkāršs gadījums. Pievienojot dažas gudrības, var vienkārši pacelt atkārtoto modeli jaunā līmenī, bet robots paliek iestrēdzis stūrī.

Piemērs, tā vietā, lai pagrieztu uz priekšu un atpakaļ vietā, tas griežas vienā virzienā, veic īslaicīgu atpakaļgaitu (kas pēc tam notīra kritiskā attāluma norādes), un pat tad, ja tas griežas otrā virzienā, tas tomēr iet uz priekšu ar zināmu leņķi atpakaļ stūrī, atkārtojot sarežģītāku patter būtībā vienu un to pašu.

Tas nozīmē, ka mēs patiešām varētu izmantot komandu vēsturi un apskatīt, kā šo informāciju izmantot un izmantot.

Es varu iedomāties divus ļoti vienkāršus (elementārus) kustības vēstures izmantošanas veidus.

  • vai pēdējais X gājienu skaits atbilst Y modelim. Vienkāršs piemērs varētu būt (un tas notika) "PĀRVADĪT, ATPAKALĪT, PĀRTRAUKT, ATPAKAĻ, …..". Tātad ir šī atbilstības funkcija, kas atgriež vai nu TRUE (modelis atrasts), vai FALSE (nav atrasts). Ja TRUE, programmas navigācijas daļā izmēģiniet citas kustību secības.
  • vai attiecībā uz pēdējo X gājienu skaitu ir vispārēja vai neto kustība uz priekšu. Kā varētu noteikt, kas ir īsta kustība uz priekšu? Nu.. viens vienkāršs salīdzinājums ir tāds, ka pēdējiem X gājieniem "FORWARD" notiek vairāk nekā "REVERSE". Bet tam nav jābūt vienīgajam. Kā būtu ar šo: "PAREIZI, PAREIZI, KREISI, PAREIZI". Tādā gadījumā robotam ir jāveic labie pagriezieni, lai izkļūtu no stūra, vai tāpēc, ka tas tuvojās sienai leņķī, to varētu uzskatīt par īstu progresu uz priekšu. No otras puses, “LEFT, RIGHT, LEFT, RIGHT…” varētu nebūt uzskatāms par īstu progresu uz priekšu. Tādējādi, ja "RIGHT" notiek vairāk nekā "LEFT" vai "LEFT" notiek vairāk nekā "RIGHT", tas varētu būt reāls progress.

Šīs pamācības sākumā es minēju, ka iespējamais trešais mērķis varētu būt kvadrāta palielināšana vai pielīdzināšana pie sienas. Tomēr tam mums ir vajadzīgs vairāk nekā "vai mēs esam tuvu kādam objektam". Piemēram, ja mēs varam iegūt divus uz priekšu vērstus akustiskos sensorus (kas nav šī raksta uzmanības centrā), lai sniegtu samērā labas un stabilas atbildes attiecībā uz attālumu, acīmredzot, ja viens ziņo par daudz atšķirīgāku vērtību nekā otrs, robots ir pietuvojies sienai leņķī un varētu mēģināt veikt manevrus, lai noskaidrotu, vai šīs vērtības tuvojas viena otrai (vērstas pret sienu).

6. darbība: pēdējās domas, nākamais posms…

Ceru, ka šī pamācība sniedza dažas idejas.

Papildu sensoru pievienošana rada dažas priekšrocības un izaicinājumus.

Iepriekš minētajā gadījumā visi akustiskie sensori labi strādāja kopā, un ar programmatūru tas bija diezgan vienkāršs.

Kad IR sensori tika ieviesti maisījumā, tas kļuva nedaudz grūtāks. Iemesls tam ir tas, ka daži to redzes lauki pārklājās ar akustisko sensoru redzes laukiem. IR sensori šķita nedaudz jutīgi un neparedzami, mainoties apkārtējās gaismas apstākļiem, bet, protams, apgaismojums neietekmē akustiskos sensorus.

Tāpēc izaicinājums bija tas, ko darīt, ja akustiskais sensors mums saka, ka nav šķēršļu, bet IR sensors ir.

Pagaidām pēc izmēģinājumiem un kļūdām lietas nonāca šajā prioritātē:

  1. pastiprinātājs
  2. IR sensori
  3. akustiskā sensācija

Un tas, ko es darīju, bija tikai samazināt IR sensoru jutību, lai tie atklātu tikai ļoti tuvus objektus (piemēram, nenovēršamas krēsla kājas)

Līdz šim nav bijusi nepieciešamība veikt vairāku pavedienu vai pārtraukuma vadītu programmatūru, lai gan es reizēm sastopos ar kontroles zaudēšanu starp Raspberry Pi un Roboclaw motora kontrolieri (sērijas sakaru zudums).

Tieši šeit parasti tiktu izmantota E-Stop ķēde (skat. Iepriekšējos norādījumus). Tomēr, tā kā es nevēlos (vēl) saskarties ar Roboclaw atiestatīšanu izstrādes laikā un robots neiet tik ātri, un es esmu klāt, lai to uzraudzītu un izslēgtu, pievienoja E-Stop.

Galu galā, visticamāk, būs nepieciešama vairāku pavedienu izmantošana.

Nākamie soļi…

Paldies, ka esat tik tālu.

Es ieguvu dažus VL53L1X IR lāzera ToF (lidojuma laika) sensorus, tāpēc, visticamāk, tā ir nākamā Instructable tēma kopā ar servo.

Ieteicams: