Atnaujinta: 2021 08 17 d.
Naujas variantas su neuroniniais tinklais. Pagrindinė pl. (18 x 18 cm) proc. 4 brand. „Intel j1900“ (2,4 GHz).
Ką moka robotas:
- Atpažįsta veidą ir seka kamerom.
- Randa nurodytą daiktą ir seka kamerom.
- Stereo, matomo vaizdo gylio (atstumas iki objekto) nustatymas, ieško toliausio ir artimiausio taško, galima nustatyti apytikslį atstumą iki daikto. Naudojama roboto navigacijai. Aplinkos supratimui.
- Seka nurodytą tašką.
- Supranta garsines komandas, komandų dabar nedaug ~50, tai tik bandymas, galima pridėti daug, kiek norima komandų.
- Gali kalbėti, panaudotas atviro kodo „eSpeak“ variklis.
- Neuroniniai tinklai atpažįsta veido kontūrus, 1000 daiktų, gyvūnų ir kt. objektų. Veido atpažinimas dar neturi neuron. t. atpažinimo. Programa rašoma.
Visi roboto interfeisai pagaminti ant montažinių plokščių. Schemos ir programų išeities tekstai (source) – ~1,6 GB.
***
Pagrindinė plokštė su „Atom525“ (18 cm x 18 cm). 2 akumuliatoriai lygiagrečiai sujungti nuo UPS-o (2 x 7 Ah = 14 Ah). ATX maitinimą tiekia keitiklis 12 V -> ATX. 2 USB kameros „Logitech 120“ ir „Logitech 160“ valdomos servų (SSC32 valdiklis). Važiuoklę valdo „eProDas“ valdiklis.
Vaizdo atpažinimas „OpenCV“, garso atpažinimas perdarytas „Julius“, „socket“ ryšio modulius su „julius“. Viskas parašyta „Code::Bloks“ + „MinGW“ aplinkoje.
Ką gali robotas:
- atpažįsta veidą ir seka kamerom, (važiuoklė dar nedarašyta, tik ką pabaigiau mechaniką)
- randa nurodytą daiktą ir seka kamerom, (važiuoklė nedarašyta)
- Stereo, matomo vaizdo gylio (atstumas iki objekto) nustatymas, ieško toliausio ir artimiausio taško, galima nustatyti apytikslų atstumą iki daikto. Naudojama roboto navigacijai. Aplinkos supratimui.
- Seka nurodytą tašką.
- Supranta garsines komandas, komandų dabar nedaug, tai tik bandymas, galima pridėti daug, kiek norima komandų.
- Gali kalbėti, panaudotas atviro kodo „eSpeak“ variklis.
Visos programos neoptimizuotos, daug globalių kintamųjų reiks naikinti, architektūra turbūt keisis daug kartų, čia tik pabandymas.
Reikalinga:
- „MinGW“
- „Dev-Cpp“ (kažkurias bibliotekas naudojau, nepamenu)
- „OpenCV 2.42“ yra jau sukompiliuotas variantas, jei ne, + „CMake 2.8“ ...
- „cvblobslib_OpenCV_v8_3“
- „eSpeak“
- „HTK tools“
- „Code::Bloks“ + „MinGW“
- „wxWidgets 2.8“
Važiuoklė
Apačioj, schemoj, kur atskirai du mikroschemos 7400 elementai, analogiškas variklio valdymo kanalas kaip viršuj, t. y. 2 DC varikliai (vietoj bc548, panaudojau bc639 galingesnis ir 3K varžas gal sumažinti iki 1K). Aš panaudojau variklius su reduktorium nuo „Mazda 626“ stiklo pakelėjų. Papildomai pastačiau po guolį ant išeinančio velenėlio. Galinis ratas baldinis, laisvai sukantis apie savo ašį.
Važiuoklės valdiklio schema:
„eProDas“ aprašymą ir programą HEX faile surasite internete.
Jų tarpusavio sujungimo schemą atstos valdymo programa (PIC USB „Code::Bloks“ aplinkoje), ten visi IN/OUT aprašyti:
Lengvai galima suprasti.
Dar prie „eProDas“ jungiasi kliūčių davikliai su „Atmega8“ (schema netvarkinga, kam reiks, „Proteuse“ susitvarkysite):
4 buferiai PB4-PB7 porte (mikroperjungėjai arba holai), aš panaudojau 4 holus, o ant buferio – magnetai.
PB0–PB3 išėjimai į „eProDas“, nusakantys, kurioj iš 4 pusių kliūtis.
PD4, PD5 kliūties nustatymo kanalas:
PD4, PD5=0 => suveikė paprasti IR davikliai. Mažiausias prioritetas, aprašymas ir šios dalies schema yra www.elektronika.lt. Jie pakabinti ant analoginių įėjimų.
PD4=1, PD5=0 => didžiausias prioritetas, suveikė mech. daviklis.
PD4=0, PD5=1 => kliūtį pamatė TSIOP davikliai.
PD7 – ant šios kojos pakabinti 2 TSOP davikliai. Priekyje TSOP 36 KHz, gale TSOP 38 KHz (kad dažniai priekio ir galo nesimaišytų). Kad dažniai būtų TSOP-ams 36 ir 38 KHz, „Atmega8“ fuses nustatyti į 8 MHz. Arba dar papildomai pažaisti su „Atmega8“ dažnio konstanta ar programoje su užlaikymais ir „nop-ais“. TSOP pastatyti centre, kadangi IR šviesos diodus perjunginėju, nustatau kurioj pusėj kliūtis.
PD0–PD4 – IR šviesos diodai (pastačiau po 4x4)
Paderinamos varžos, daviklio signalo užlaikymo (kad spėtų kompiuteris pamatyti) ir paprastų analoginių daviklių jautrumas.
Kamerų ir manipuliatorių rankinis valdymas
Panaudotas SSC32 valdiklis. P0 kanalas, kameros Y ašis, P7 – X ašis (taip gavosi lituojant valdiklio schemą). Manipuliatoriai dar daromi... Schemą SSC32 surasite internete.
Dar baigiama schema (dar viena plius „Atmega8“) ir programa prie SSC32, servo variklių perkrovom matuoti ant jo 4 įėjimų.
Gal ką sudomins, gal kas panaudos kažką savo projektuose...
Projekto failai
- PIC_USB.zip [~10 MB]
- Robotas.7z [~53 MB]
Nuotraukos
2014 m. sausis. Intelektualaus roboto projektas pasistūmėjo į priekį
Išorinių įrenginių valdymo skydas. Įėjimų-išėjimų aktyvavimui
Valdymo skydo darbo režimai:
Važiuoklės, IR daviklių ir 32 servo variklių valdymas ir vizualizacija (servo variklių valdymas – „Atmega8“, važiuoklė – PIC18F4550+„Atmega8“) | |
Maitinimo įtampų kontrolė, įtampų grafikai, įėjimų-išėjimų valdymas. („ATmega32) | |
Enkoderių vizualizacija – reikšmės, greitis, nuvažiuotas atstumas („Atiny2313“). EEPROME galima išsaugoti 3 enkoderiu reikšmes – atskaitos taškus pvz. išjungiant robotą. | |
Sonaras („Atiny2313“). Mato roboto priekyje kliūtis nuo 40 cm. iki 3–4 m. | |
„STM32F4Discovery“ plokštės įėjimų-išėjimų valdymas ir vizualizacija. Čia vėliau galvoju šia plokšte pakeisiu visas kitas, nedarašytas tik PC softas, „firmwaras“ pilnas. Gerai neišbandytas stabilumas. Pvz. šviesos diodais, esančiais ant plokštės galima mirksėti. |
Visų aukščiau išvardintų valdymo skydo darbo režimų paskirtis – išbandyti išorinių įrenginių veikimą, programavimo galimybes, apsikeitimo greitį, stabilumą, o tik paskui jie liko, kaip roboto rankinis valdymas ir vizualizacija.
1. Važiuoklės, IR daviklių ir 32 servo variklių valdymas ir vizualizacija
Šis darbo režimas jau aprašytas. Buvo klaidų programose, dabar daugelis klaidų ištaisyta.
2. Maitinimo įtampų kontrolė, įtampų grafikai ir „Atmega32“ įėjimų-išėjimų valdymas
3. Enkoderių vizualizacija
Davikliai – optopertraukiklis LTH-209-1 nuo atspindžio (taip vadina „Evitoj“ optoporą) 4 vnt., ant rato po 2 vnt., kad nustatytų kryptį. Pasidariau trafaretą ir ant rato ratlankio juodais matiniais dažais uždažiau 18 juodų juostelių (neuždažyti ir uždažyti tarpai lygūs). Daviklius išdėstyti taip, kad spindulys vieno papultu ant juodo pradžios, o kitas pataikytų į juodo vidurį. Pati schema su programom yra archyve.
4. Sonaras
Kliūtys priekyje žali brūkšniukai. Panaudoti 3 automobiliniai, ultragarsiniai parkavimo davikliai. 2 siųstuvai ir imtuvas. Kad būtų atstumas didesnis vieno siųstuvo nepakako. Mažiausiai problemų būtų jei naudoti „MaxBotix“ daviklius. Bet šiuos jau turėjau. Esama analoginės dalies schema, kuri yra archyve truputi neatitinka, nes derinimo metu tai kondensatorius pridėtas, tai varža kitokia.
Pati „Atiny2313“ programa veikianti be problemų. Su „MaxBotix“ davikliais yra pilna įėjimo stiprintuvų schemų. Sonaras ir enkoderiai ant vieno RS232. Skiriasi tik komandos, kada sonaras išduoda reikšmes, tada enkoderis „tyli“. MAX-o TTL įėjimai lygiagrečiai, išėjimai:
5. „STM32F4Discovery“ įėjimų-išėjimų plokštė
„Firmwaras“, tvarkyklės ir valdymo programos išeities kodai yra archyve. Uždėjus varneles, kaip parodyta paveikslėlyje, galima pvz. uždegti-gęsinti šviesos diodus. Portas A kažkiek parašytas, na pažiūrėjus į programos išeities kodą galima ir patiems baigti rašyti. Galima valdyti visus laisvus išvadus, priskirti, kad būtų įėjimas ar išėjimas; jei įėjimas, tai kokia įėjimo būsena (0,1); jei analoginis įėjimas, kokia ADC reikšmė; jei išėjimas, tai kažką valdyti.
Išvardytos sąsajos gali būti panaudotos atskirai jūsų būsimiems projektams. Manau, medžiaga kažkam padės kurti savo projektus.
Roboto vaizdo atpažinimo funkcijos
1. Roboto valdymo pagrindinis meniu
2. Veido atpažinimas
Kai naudosite savais tikslais, ištrinkite visus mano duomenis, „C:ROBOTASAROSdata“ kataloge veidų paveiksliukus ir failus esančius „C:ROBOTASAROSDuomenysfacedata_tuscias“ kataloge užrašyti ant esančių. Tai padaryti reikia, nes nereikalingi veidų etalonai stabdo režimo darbą.
3. Scenos stereo gylis
Galima išsaugoti ir pažiūrėti 3D.
Tas pats vaizdas pasuktas statmenai. Kad tokį išgauti, reikia labai gerai nukalibruoti kameras.
4. Ieškoti daiktus
Pirmas variantas
Antras variantas
5. Detektuoti judesį judesių kiekį, intensyvumą, reaguoti į judesį tik nurodytuose zonose
Na čia tik keli pagrindiniai pavyzdžiai. Darbo režimų yra žymiai daugiau. Kai kurie darbo režimai 320x240 raiška. Roboto pagrindinė plokštė „Intel 525mw“ su „Atomu“. Pas ką geras kompiuteris, veiks su 640x480 raiška ir didesne. Tik reiks perkompiliuoti.
Kalbos atpažinimas
Padarytas lietuvių kalbos modelis, bet dėl laiko stokos mažai apmokytas, aišku jis gerai supranta tik mano šneką, kitų klauso nepatikimai, bet bandėm – supranta. Reikia tarti žodžius aiškiai, garsiai ir neskubant. Tarp žodžiu ilgesnės pauzės. Mikrofonas paprastas „Acme“. Na ne visi mikrofonai gerai dirba, reikia atrinkti bandymo keliu. Ne su visom garso plokštėm dirba gerai. Aš serverį paleidžiu ant nešiojamojo kompiuterio ir per „Wi-Fi“ robotas jungiasi. Bandžiau paleisti serverį ant roboto, surinkta automatinio stiprinimo schema su BA3308, bet dirba nelabai gerai. Parašiau „socket“ klientą. Gal su radiomikrofonu būtu gerai?
Nustatymuose reikia nuimti visokius „micboost“, automatinius stiprinimus ir pan., na viską (plikas įvedimas, mikrofono garsumas 50–80 %). Kalbos atpažinimo serveris perrašytas savo tikslais „Julius“, kuris paleidžiamas ant kito kompiuterio, parašytas roboto „socket“ klientas kuris prisijungia prie serverio per LAN. Serverio adresas ar vardas nustatomas roboto sisteminiame meniu.
Dabartiniu metu robotas atpažįsta 130 žodžių ir jų kombinacijas. Jei kam reikės serverio išeities kodų – atsiųsiu. Serveris gali būti paleistas ir tame pačiame kompiuteryje, tada reikia adresą nustatymuose rašyti 127.0.0.1 ir leisti serveriui startuoti robotas.bat faile.
Planuoju parašyti 3D scenos atkūrimą (aplinkos plano atkūrimą), pagal enkoderių, sonaro, optinių daviklių ir kamerų duomenis. Tada pvz. „SQL lite“ duomenų bazėje saugot patalpų planus, ar xml yaml failuose.
Jei robotas mato erdvinį vaizdą, girdi, tai išmoks ir daiktus paimti... Vienas manipuliatorius jau padarytas, antram visos detalės yra, reiks galingą 5–6 V stabilizatorių sukonstruot.
Yra problema su kamerų stereo kalibravimu. Yra atskiras darbo režimas kalibruoti su šachmatų lenta, bet po kurio laiko kamerų lygiagretumas pasižeidžia ir vėl visas vargas. Dar kamerų matricų apskaičiavimuose yra klaidų, bet daugmaž skaičiuoja, kažkada reiks darašyti. Mano interneto kameros sukiojasi ant šarnyrų, vos vos nukrypo – viskas, stereo gylis blogas. Po kalibravimo reikia kameras tvirtinti tvirtai.
Visos schemos su išeities kodais pateikiamos archyve. Jei kas neaišku – rašykit, padėsiu.