Stránka 1 z 3

Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 09 říj 2015, 13:24
od Dex
Zdravím,

plánuji pro mobilního robota antisrážkový systém z levných ultrazvukových dálkoměrů HC-SR04. Robot bude mít půdorys čtverce o straně cca 30 cm. Na každý vrchol bych chtěl dát dva dálkoměry v pravém úhlu vůči sobě. A optimálně ještě další dálkoměr v polovině každé strany. Celkem je to tedy 8 respektive 12 dálkoměrů.

Pro Arduino existuje šikovná knihovna NewPing. Klasické Arduino jich ale zvládne najednou obsloužit "jen" pět. Jen Arduino Mega jich zvládá patnáct, ale to zabírá dost místa :-)

A teď premýšlím, jak to udělat co nejefektivněji ;) Napadlo mne například použít dvě "klasická" Arduina a každým zpracovávat polovinu dálkoměrů. Také by šlo doplnit každý dálkoměr nějakým malým "broukem" a ty mezi sebou propojit.

Možná jsem ale něco přehlédl. Třeba nějakou desku, kompatibilní s Arduinem, která má tak akorát dostatek pinů pro dálkoměry, ale nic moc navíc.

Nemáte náhodou někdo nějaký nápad? :)

Re: Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 09 říj 2015, 13:38
od jrt
Kde jsou tvé ideje distribuované inteligence? Co třeba ke každému UZ PICAXE-08M2 a pak je všechny spojit s nadřízeným systémem jedním adresovatelným sériákem?
A pozor na to, že HC-SR04 podle mých zkušeností detekují všechno možné, jen ne překážku, protože jejich měniče strašně "šilhají".

Re: Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 09 říj 2015, 14:11
od Dex
Však to tam píšu
Dex píše:Také by šlo doplnit každý dálkoměr nějakým malým "broukem" a ty mezi sebou propojit.
:-)

Já mám s HC-SR04 docela dobré zkušenosti. Na jednoduchou detekci jedu-li do stromu či ne to více než vyhovuje ;-)

Re: Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 09 říj 2015, 19:36
od MartinL
Sice nevím jak je ta knihovna pro arduino napsaná, ale proč by nemělo být schopné jedno arduino obsloužit více než 5 sonarů? Pokud se nepletu, tak stačí jeden pin na odstartování impulsu a druhý na poslouchání echa (mám ještě někde v povědomí, že to u SRF04 dokonce šlo i na jednom pinu - pokud mě už paměť neklame?). Stejně je nutné je "odpalovat" postupně, jinak se z toho moc nezměří, tzn. že času je habaděj.
Jinak jsem zarytým zastáncem distribuce, ale není to příliš, ke každému sonaru, který už uP obsahuje ještě jeden přidávat?

Re: Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 10 říj 2015, 10:17
od Dex
Tak oprava. Podle všeho to vypadá, že je možné připojit až šest dálkoměrů :-) K tomu jak to funguje jsem zatím našel, že "to používá časovač a přerušení" ;)

Je fakt, že na normálním Arduinu prostě dojdou piny. Podívám se na to jednovodičové připojení. Podle všeho by to mohlo fungovat (http://www.instructables.com/id/Hack-an ... /?ALLSTEPS).

Jestli jste to ale někdo zkoušel, tak se pochlubte ;)

Re: Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 10 říj 2015, 11:50
od AlesH
Použil jsem jednovodičové připojení HC-SR04 na obsluhu tří sonarů Arduinem. Funguje to dobře (výsledky jsem mel stejné, jako když jsem předtím měl na stejném robotu použito dvouvodičové připojení každého sonaru). Jednovodičové zapojení tedy bez rozpaků doporučuji.

Díky za toto téma (sám jsem ho chtěl založit jako první "odnož" zásad pro robotiku). Chtěl bych ho ale trochu rozšířit na obecnější diskuzi o "protisrážkovém systému", protože i u RoboTour je to jeden z hlavních problémů, který musí být dobře vyřešen (i při hromadném startu robotů) a naopak je takový systém vhodný třeba i pro Robotický den (např. v kategorii Ketchup House).

Osobně mám problém s tím, jak skutečně spolehlivě a kompletně "pokrýt" celý prostor okolo robota (do všech směrů, kam se může pohnout). Tím myslím i to, že pokud se robot může otočit na místě, tak musí "vidět" překážky i "do boku". Pokud má Ackermanovo řízení, tak by také měl vidět i překážky "těsně vedle sebe", protože o ně může "štrejchout" bokem při zatáčení.

Jak to řešíte?

Já zatím zkoušel sonary a infradálkoměry a oba mají dost úzké pásmo detekce, takže "pokrytí" je mizerné. Zkoušel jste někdo dálkoměry na servu? Jak to fungovalo?

A ještě jeden problém mne napadá. Jak se ovlivňují se sonary dvou různých robotů, které "na sebe koukají"? Testoval jste to někdo? A s jakým výsledkem?

Re: Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 11 říj 2015, 19:42
od Dex
Udělal jsem v rychlosti obrázek, jak si to představuji:
4kolka_UZ.png
4kolka_UZ.png (4.68 KiB) Zobrazeno 8113 x
Pokud jde o to jednovodičové připojení, stačí propojit trigger a echo nebo je potřeba mezi ně něco dát? Jeden člověk mezi ně dává rezistor, ale nepochopil jsem proč.

O natáčení senzorů servem jsem uvažoval, ale odhaduji, že čas nutný k pohybu musí být dost na obtíž. Napadlo mne ale umístit třeba na servo kříž, na každý jeho konec ultrazvuk do jednoho ze směrů a pak tím celým pootočit o 45 stupňů. Zatím jsem to ale nezkoušel.

Infra dálkoměry jsem zkoušel a fungují dobře, ovšem nikoliv venku. Slunce je docela problém. Možná existují ale nějaké, které tím tolik netrpí?

Ovlivňování senzorů dvou robotů navzájem je zajímavá poznámka. Budu to muset zkusit nasimulovat ;)

Jinak jsou také na netu k dohledání pokusy, kdy se jedním sonarem "pípne" a ostatními se poslouchá. Jejich vzájemná poloha je známa, čili už jde jen o to, rozumně to zpracovat :D

Re: Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 11 říj 2015, 21:54
od AlesH
Mnohasonarové schéma je jasné. Přesto jsou podle mne v rozích dost široké sektory, ve kterých by překážka nebyla detekována. Pokud tím směrem nepojedeš, nebude to vadit (ale psal jsi, že principiálně můžeš jet libovolným směrem).

Jednovodičové zapojení jsem použil s rezistorem (cca 1k8). Beru to jako "bezpečnostní opatření". Signál z Arduina se pak musí připojit přímo na trigger.

Před chvílí jsem vyzkoušel vzájemné ovlivňování sonarů ze dvou robotů. Chová se to podle mého očekávání. Nepravidelně to pak detekuje "falešné překážky" které tam vůbec nejsou. Vůbec mne nenapadá, jak by se to mělo rozumně řešit. Brát to jako reálnou překážku? To by se po hromadném startu všichni roboti zastavili a už nikdy by se nerozjeli (pořád by detekovali překážky). Možná, že by se dala využít ta nepravidelnost a mohlo by se to nějak "vyfiltrovat". Víte někdo o vhodném řešení?

Ještě se zeptám, zda je opravdu nutné sonary "spouštět" postupně? Já to teď také tak dělám (pro jistotu), ale podle mých dřívějších testů byly výsledky prakticky stejné i v případě, kdy jsem všechny sonary "spouštěl" naráz (současně) a pak jsem je všechny současně "četl". Abych byl přesnější, tak do dobře fungovalo hlavně venku (na větším prostranství). V menší místnosti je moc odrazů, sonary se vzájemně ovlivňují a výsledky byly horší (přesto mi to ale připadalo dost podobné v obou metodách "spouštění" sonarů). Jaké máte praktické zkušenosti v tomto detailu?

Re: Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 11 říj 2015, 22:24
od Dex
Vím, že to není dokonalé. Taky si pohrávám s myšlenkou dát do středu ultrazvuky do "kruhu". A třeba tím kruhem mírně pootáčet. Taky by šlo doplnit ultrazvuky servy a natočit je vždy do potřebných směrů. Zatím to promýšlím a doufám, že mne napadne něco dokonalého :)

Nefungovala by na "falešné překážky" metoda více měření a spočítání mediánu? Ta knihovna NewPing tuto "funkci" také nabízí. Další věc k vyzkoušení.

S tím postupným spouštěním nevím. Podle mne to není nutné, pokud se např. používají najednou sonary na dvou protilehlých stranách. Otázka ale je, jestli to půjde rozumně napsat tak, aby se stíhala dvě (či více) měření najednou.

Pořád tajně doufám, že tu je někdo, kdo už tyhle (možná slepé) cestičky prošlapal?! ;)

Re: Antisrážkový systém aneb jak obsloužit hodně ultrazvuků

Napsal: 11 říj 2015, 23:57
od micer
Ultrazvuk je pěkná věc, ale rozhodně ne jako jediný princip detekce překážek.
1/ mám tu zkušenost, že se umí zrádně odrážet na hladkých materiálech a "vidět za roh" - viz http://robodoupe.cz/2015/srf05-jak-ho-asi-neznate/ a měřit třeba místo vzdálenosti k překážce výšku stropu.
2/ vidí do materiálů a reaguje na nehomogenity - příklad: před týdnem na Auto-show jezdil robot perfektně (cca 2x2 m ohrádka), ale když se dostal do jednoho konkrétního místa v rohu (plocha cca 10x10 cm), tak se zastavil a začal točit, jako by kolem něj byly všude kolem překážky. Beton hladký, bez prasklin, na pohled vše ideální. Musela tam být v betonu bublina (řada bublin) nebo něco takového, museli jsme posunout ohrádku, v tom místě vždy selhal (i když ... bylo to selhání, nebo dokonalá funkce?)