Po startu se zobrazí datum: a po 5 sekundách přejde na info displej: Ještě se tam pokusím vrazit aktuální čas ale zatím nevím jak to rozdělit aby se to na ten displej vlezlo.
Pavouk Hiwonder
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Re: Pavouk Hiwonder
Díky moc, tak jsem to otestoval a funguje to !
Po startu se zobrazí datum: a po 5 sekundách přejde na info displej: Ještě se tam pokusím vrazit aktuální čas ale zatím nevím jak to rozdělit aby se to na ten displej vlezlo.
Po startu se zobrazí datum: a po 5 sekundách přejde na info displej: Ještě se tam pokusím vrazit aktuální čas ale zatím nevím jak to rozdělit aby se to na ten displej vlezlo.
Re: Pavouk Hiwonder
Stejně jako u toho info displaye bych to rozdělil na tři řádky
Datum prekladu
Dec 15 2024
10:24:00
Datum prekladu
Dec 15 2024
10:24:00
Re: Pavouk Hiwonder
Prozatím stačí rozlišení na dny. Uvidíme časem, kdyžtak to doplním o přesný čas.
Dnes jsem nechal asi tak půl hodiny proběhnout pavoučka. Běhal si jen tak po bytě a vypozoroval jsem že se občas sekne v nějakém prostoru menším jak 0,5 x 0,5 m (samotný pavouček má stejné rozměry
) a provádí pořád stejné operace - pohyby- stále dokola. Po několika proběhnutí "koleček" sem a tam se přece jen trochu posune mimo a "rozběhne" se do prostoru...
Tato opakovací smyčka netrvá dlouho - je tam ještě podmínka náhody která ho po několika "pokusech" někam posune a nebo při osvětlení baterkou udělá nějakou otočku apod.. se chová jako by měl vlastní "rozum" a dělá si co chce . Na 5 min odejdu a pavoučka najdu na opačné straně bytu jak si otevírá dveře
(škoda že sem nejde vložit video)
Stejně mě to stále přivádí na myšlenku použít Lidar 360°
Dnes jsem nechal asi tak půl hodiny proběhnout pavoučka. Běhal si jen tak po bytě a vypozoroval jsem že se občas sekne v nějakém prostoru menším jak 0,5 x 0,5 m (samotný pavouček má stejné rozměry
Tato opakovací smyčka netrvá dlouho - je tam ještě podmínka náhody která ho po několika "pokusech" někam posune a nebo při osvětlení baterkou udělá nějakou otočku apod.. se chová jako by měl vlastní "rozum" a dělá si co chce . Na 5 min odejdu a pavoučka najdu na opačné straně bytu jak si otevírá dveře
Stejně mě to stále přivádí na myšlenku použít Lidar 360°
Re: Pavouk Hiwonder
Vracím se k problému narážení dlouhých nožiček pavoučka do překážek které nejsou přímo před ultrazvukovým sensorem. Ten má na vzdálenost 50 cm rozsah asi 12-15 cm (kužel s vrcholovým úhlem cca 15°. Z obrázku je jasné že "rozpětí" nožiček je mnohem větší - cca 40 cm.
Ke sledování "slepých míst" jsem zvolil kmitání serva s ultrazvukovým sensorem v rozsahu asi 20°.
Vzhledem ke komplikovanému ovládání BUS serv nožiček je program trochu krkolomný. Možná někoho z vás napadne elegantnější algoritmus.
Kód: Vybrat vše
//******************************************** KMITANI SERVA ************************************************************************************************************
void zmerit_vzdalenost() { //čtení vzdálenosti ultrazvuku "vpred = vzdálenost naměřená ultrazvukem"
sonarServo.write (70,50,true); // vzdálenost mírně vlevo 70° 50 - rychlost otáčení
delay (10);
ultrazvuk ();
vzdalenost = vpred;
sonarServo.write (110,50,true); // vzdálenost mírně vpravo 110°
delay (10);
ultrazvuk ();
if (vpred <= vzdalenost ) { vzdalenost = vpred; }
sonarServo.write (90,50,true); // vzdálenost přímo vpřed 90°
delay (10);
ultrazvuk ();
if (vpred <= vzdalenost ) { vzdalenost = vpred; }
OLED ();Kód: Vybrat vše
//---------------------------------- POHYB PODLE VZDALENOSTI ---------------------------------------------------------------------------------------
zmerit_vzdalenost(); // kmitání serva sonaru
sonarServo.stop (); // ukončit kmitání serva
//ultrazvuk ();
//vzdalenost = vpred;
if (vzdalenost <= 30) {
Controller.stopActionGroup();
Controller.runActionGroup(GO_BACK, 2); // dva kroky zpět
delay (2500);
sonar1 ();
//goto konec;
}
if ((vzdalenost >= 80 ) and (xxxB == 1)) { // vzd. větší než 100 a běží pomalu
Controller.stopActionGroup(); // stop
xxxAA = 0; // pomocná proměnná
}
if ((vzdalenost >= 80 ) and (xxxAA == 0)){ // vzd. větší než 100 a stojí
Controller.runActionGroup(RYCHLE_DLOUHY_KROK, 0); // stále běžet rychle
xxxA = 1; // běží rychle
xxxB = 0;
}
if ((vzdalenost < 80) and (xxxA == 1)){ // vzd. menší než 100 a běží rychle
Controller.stopActionGroup(); // stop
xxxBB = 0; //
}
if ((vzdalenost < 80) and (xxxBB == 0)){ // vzd. menší než 100 a stojí
Controller.runActionGroup(POMALU_POKUS, 0); // stále běžet pomalu
xxxB = 1;
xxxA = 0;
} Re: Pavouk Hiwonder
Pavoučka bych chtěl obohatit o další funkci- podmínku.
Ke kontrole náklonu v osách XY pomocí gyroskopu mi to funguje. Při větším náklonu se pavouček zastaví a čeká až se zase dostane cca do vodorovna. Chtěl bych tuto podmínku rozšířit o kontrolu - zastavit pavoučka když ho relativně rychle ručně zvednu od podlahy.
Používám knihovnu MPU6050 a program:
Na výstupu jsou hodnoty X a Y v pohodě, úhlově sedí. s osou Z si nevím rady.
Pokud pavouček stojí vodorovně je hodnota Z - 88 (nevím proč zrovna 88, asi neleží úplně vodorovně)
Při změně polohy pavoučka v osách X a Y se změní i hodnota Z -> např. : X=5 Y= 10 Z= 75
Takže se neměří akcelerace
Co vlastně měří osu Z a jak ?
Ke kontrole náklonu v osách XY pomocí gyroskopu mi to funguje. Při větším náklonu se pavouček zastaví a čeká až se zase dostane cca do vodorovna. Chtěl bych tuto podmínku rozšířit o kontrolu - zastavit pavoučka když ho relativně rychle ručně zvednu od podlahy.
Používám knihovnu MPU6050 a program:
Kód: Vybrat vše
//************************************* GYROSKOP *************************************************************************************************
void gyroskop() {
// zjistí všechny hodnoty z akcelerometru accelgyro.getMotion (&ax, &ay, &az); accelgyro.getAcceleration(&ax, &ay, &az);
//accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
counter = 0;
while (counter < 100) // provede měření
{
accelgyro.getAcceleration(&ax, &ay, &az);
ax_p = ax_p + ax;
ay_p = ay_p + ay;
az_p = az_p + az;
counter++;
}
x = ax_p/counter; //zjistíme průmerné hodnoty
y = ay_p/counter;
z = az_p/counter;
angle_x = abs(atan2(x, sqrt(pow(y,2) + pow(z,2)))/(pi/180));
angle_y = abs(atan2(y, sqrt(pow(x,2) + pow(z,2)))/(pi/180)); //angle_z = atan2(az, sqrt(square(ax) + square(ay)))/(pi/180);
angle_z = abs(atan2(z, sqrt(pow(x,2) + pow(y,2)))/(pi/180));
//counter = 0;
ax_p = 0;
ay_p = 0;
az_p = 0;
}Pokud pavouček stojí vodorovně je hodnota Z - 88 (nevím proč zrovna 88, asi neleží úplně vodorovně)
Při změně polohy pavoučka v osách X a Y se změní i hodnota Z -> např. : X=5 Y= 10 Z= 75
Takže se neměří akcelerace
Co vlastně měří osu Z a jak ?
Re: Pavouk Hiwonder
to -88 je gravitační zrychlení ... ber ho ve svých výpočtech jako nulu 
když ho položíš rovně na záda, měl bys dostat 88
průměrnou chybu měření v podstatě znáš, takže až zjistíš průměrnou hodnotu Z, tak k ní připočti chybu
když ho položíš rovně na záda, měl bys dostat 88
průměrnou chybu měření v podstatě znáš, takže až zjistíš průměrnou hodnotu Z, tak k ní připočti chybu
Re: Pavouk Hiwonder
S tím tíhovým zrychlením je to pravda. Ty totiž nečteš gyroskop, ale čteš akcelerometr. Náklony se s ním dají detekovat ovšem právě dík tíhovému zrychlení velmi dobře. Náklon jde spočítat právě z podílu tíhového zrychlení na všech osách. V principu, když robota položíš na bok, měl bys dostat těch -88 na další ose a když ho položíš na hlavu tak bys měl mít -88 na té poslední ose. Vzpomínám si, že jsem snad naměřil dokonce opravdu těch 9,8m/s2.
Re: Pavouk Hiwonder
díky, ale to je rotace. Já bych potřeboval zjistit změnu ve směru nahoru-dolů. Jako bych měřil výšku.
Re: Pavouk Hiwonder
normálně ti pavouk dává gravitační zrychlení -88, když ho začneš zvedat, tak ta hodnota půjde k nule - pokud ho zvedneš rychleji než gravitační zrychlení půjde i do plusu ... naopak když bude padat, tak to půjde hluboko pod -88
nejjednodušší metoda jak odstranit známou chybu je počítat s ní ...
nejjednodušší metoda jak odstranit známou chybu je počítat s ní ...
Kód: Vybrat vše
int zChyba = 88;
x = ax_p/counter; //zjistíme průmerné hodnoty
y = ay_p/counter;
z = az_p/counter;
z = z + zChyba; //počítáme s chybou
Re: Pavouk Hiwonder
Už to docela funguje.
Podmínka funguje asi takto:
Pavouček si běží a když ho najednou zvednu tak se schoulí a čeká.
Jakmile ho budu pokládat na zem, zjistí že se pohybuje dolů. Chvilku počká (asi 2 sek.) a pak pokračuje v běhání.
Teď se pokouším vyladit hodnoty zrychlení aby nereagoval na rychlé pohyby při běhání, ale jen na zvedání a pokládání.
Podmínka funguje asi takto:
Pavouček si běží a když ho najednou zvednu tak se schoulí a čeká.
Jakmile ho budu pokládat na zem, zjistí že se pohybuje dolů. Chvilku počká (asi 2 sek.) a pak pokračuje v běhání.
Teď se pokouším vyladit hodnoty zrychlení aby nereagoval na rychlé pohyby při běhání, ale jen na zvedání a pokládání.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host