Měření nízké rychlosti z enkodérů

Uživatelský avatar
cube
Příspěvky: 7
Registrován: 20 úno 2023, 16:30
Kontaktovat uživatele:

Re: Měření nízké rychlosti z enkodérů

Příspěvek od cube »

Já zatím došel k tomu že zkusím Kalman filter co bude udržovat odhad rychlosti (a pozice, v podstatě přesně totéž co tenhle příklad z Wikipedie) a podle toho odhadu řídit PWM pro ten motor. Už jsem to nějak začal klohnit, snad se to podaří dotáhnout o víkendu. Dám pak vědět jak to funguje.
Uživatelský avatar
cube
Příspěvky: 7
Registrován: 20 úno 2023, 16:30
Kontaktovat uživatele:

Re: Měření nízké rychlosti z enkodérů

Příspěvek od cube »

Tak se mi ten víkend nějak protáhnul :-)

Docela dost jsem s tím experimentoval, Kalman filter moc dobře nefungoval, měl pomalé reakce.
Nakonec jsem došel k tomuhle:

1. Vzorkuju na pravidelném intervalu (100Hz)
2. Z rozdílů mezi po sobě jdoucími měřeními enkodéru počítám "hrubou" rychlost.
3. Hrubé rychlosti cpu do kruhového bufferu (max 64 položek)
4. Skrz rychlosti v tom bufferu prokládám metodou nejmenších čtverců přímku
5. Dokud root mean squared chyba toho proložení je přes nějakou mez, tak zahazuju nejstarší položku v bufferu a goto 4.

Tenhle postup poskytuje odhad rychlosti a zrychlení, pokud robot jede konstantním zrychlením, tak se to vyhlazuje z posledních 64 měření a má to slušnou přesnost i v malých rychlostech.
Krok 5 způsobuje že jakmile ta historie začne být dramatičtější, tak se velice rychle zahodí a počítá se jen z pár posledních měření, takže to má i slušně rychlou reakci na změnu režimu.
Všechny kroky jsou v O(1), ale v 5. se algoritmus může zacyklit a vymazat až celou historii (O(n)). Ale protože aby něco smazal, tak to tam musel předtím přidat, tak amortizovaná složitost je pořád O(1).

Pokud by to někoho zajímalo, tak tady je kód:
- EncoderObserver.h
- EncoderObserver.cpp
- unit test

V unit testech to reaguje moc pěkně, při krátkém testování na stole to vypadalo taky ok.
Chtěl jsem to trochu důkladněji otestovat na nějakém náročnějším ježdění a se statistikami, ale bohužel mi utekl magický kouř a až mi z číny přivezou nový, tak s ním rovnou dostanu i ty vyšší převodové poměry a tenhle druh triků už nebudu tolik potřebovat.
Uživatelský avatar
JPLABS
Příspěvky: 42
Registrován: 13 čer 2023, 22:45
Kontaktovat uživatele:

Re: Měření nízké rychlosti z enkodérů

Příspěvek od JPLABS »

Předloni jsem zkoušel použít mikrovlnný detektor pohybu pro měření vzdálenosti o kterou se pohnul robot. Původně jsem mikrovlnný detektor pohybu koupil pro zabezpečovací zařízení. Pak jsem zjistil, že to nebyl dobrý nápad, protože mikrovlnný systém detekoval třeba i pohyb listu způsobený vzduchem u kytky v místnosti. Tak jsem mikrovlnný detektor pohybu demontoval a předloni využil na měření vzdálenosti pohybu. Prostě jsem ten detektor umístil místo na na zeď na pohybující se vozík, robota, který pojížděl. Systém umí rozlišení pohybu, vzdálenosti s přesností asi +/- 1 až 2 mm. Jestli to někoho zajímá, napíši více + dám fotky. Max vzdálenost od stěn, překážek je cca 9 metrů.
butan
Příspěvky: 114
Registrován: 02 dub 2019, 07:06

Re: Měření nízké rychlosti z enkodérů

Příspěvek od butan »

Mně by to zajímalo. V cenové relaci kde to asi máte, jsem vždy viděl jen doplerovské detektory, které by uměly změřit třeba rychlost auta. Ale jak měříte vzdálenost na mm? Radary do aut se vyrábějí, ty vzdálenost měří. Ale to stojí vyšší 10^4
Představuji si že máte takovéhle čidlo https://vi.aliexpress.com/item/1005005801049094.htm ?
Uživatelský avatar
JPLABS
Příspěvky: 42
Registrován: 13 čer 2023, 22:45
Kontaktovat uživatele:

Re: Měření nízké rychlosti z enkodérů

Příspěvek od JPLABS »

Nemám nic od alíka, nekupuji u alíka ani v Číně. Najdu ráno ten detektor a vyfotím. Koupil jsem ho před Brexitem v Británii.
Jinak rychlost se spočítá jako dráha dělená časem. Jestliže dojde k pohybu, změně polohy o 1 cm za minutu, mám tedy rychlost 1cm/min. Vzdálenost se měří z časového rozdílu vracejících se impulzů.
Mimochodem, na stejném principu pracuje laserový měřič vzdálenosti Bosch. Mám ho také. Dokonce jsem ho kuchnul, abych zjistil, co je uvnitř. Nedostatek toho laserovýho Bosche je, že má výstup pouze na displej a nemá výstup třeba přes USB. To mne dost namíchlo. Ale měří myslím až do 200 metrů s přesností na 1mm.
Uživatelský avatar
JPLABS
Příspěvky: 42
Registrován: 13 čer 2023, 22:45
Kontaktovat uživatele:

Re: Měření nízké rychlosti z enkodérů

Příspěvek od JPLABS »

jsem to dohledal, výrobcem je anglický Hytronik. Bohužel typ už nevím, ten byl na plastikovém krytu, který jsem sundal, když jsem se do toho detektoru uvnitř připojoval.
WEB stránky výrobce: http://www.hytronik.com/contact-us
butan
Příspěvky: 114
Registrován: 02 dub 2019, 07:06

Re: Měření nízké rychlosti z enkodérů

Příspěvek od butan »

A jak zajistíš, aby to "radarové" měření vzdálenosti probíhalo proti stále stejnému místu, navíc nejlépe ve směru jízdy?
Hytronik znám, kupoval jsem od nich MW moduly pro zapínání světel na chodbě.
Lubor
PS ta absolutní mm přesnost je fikce, rychlost šíření světla i mikrovln závisí na teplotě a vlhkosti vzduchu. Možná rozlišení na mm.
Uživatelský avatar
JPLABS
Příspěvky: 42
Registrován: 13 čer 2023, 22:45
Kontaktovat uživatele:

Re: Měření nízké rychlosti z enkodérů

Příspěvek od JPLABS »

Já to tedy po tom měřidle nepřeměřoval :) ale můžu to někdy vyzkoušet, změřit stejnou vzdálenost pomocí mikrovln a pak pomocí optického Bosche.
K té otázce:
"A jak zajistíš, aby to "radarové" měření vzdálenosti probíhalo proti stále stejnému místu, navíc nejlépe ve směru jízdy?"
Původně jsem pochopil problém jinak, že se robot posunul, čili málo. Jestliže má robot ujíždět čili se posouvat rychle třeba cikcak a vrtět se na všechny strany, pak je to jiný problém. Toto jsem řešil v roce 2018 u firmy. Problém byl následující, měl se zaměřit letící objekt a zjistit jeho vzdálenost. Účel je asi jasný, že :D Řešilo se to kamerou na podstavci, který kamerou natáčel ve 2 osách. Kamera snímal obraz. Počítač vybral objekt, proti kterému se měla měřit vzdálenost a měla se zjistit jeho rychlost. Počítač spočtal úhly natočení a poslal je do druhého podstavce, kde byl laserový dálkoměr. Podsatavec natočil dálkoměr a ten vracel vzdálenost. Ze vzdálenosti a času mezi pootočením podstavce se počítala rychlost a trajektorie letu objektu. V daném případě tedy radar neboli robot byl pevný a objekt se pohyboval. Může to být opačně, radar - robot se může pohybovsat (třeba být v letadle) a zaměřuje se na pevný, nepohybliví cíl na zemi. Postup je stejný.
K řízení a výpočtu se používal 64 bitový systém na VME sběrnici. Toto celé je sice také robot, ale finančně mimo možnosti amatéra. :D
Odpovědět