Stránka 25 z 26
Re: Pavouk Hiwonder
Napsal: 15 pro 2024, 10:24
od luger
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.
Re: Pavouk Hiwonder
Napsal: 15 pro 2024, 17:00
od gilhad
Stejně jako u toho info displaye bych to rozdělil na tři řádky
Datum prekladu
Dec 15 2024
10:24:00
Re: Pavouk Hiwonder
Napsal: 23 pro 2024, 14:56
od luger
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°
Re: Pavouk Hiwonder
Napsal: 27 led 2025, 16:28
od luger
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°.
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 ();
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
//---------------------------------- 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
Napsal: 09 úno 2025, 11:35
od luger
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:
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;
}
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 ?
Re: Pavouk Hiwonder
Napsal: 09 úno 2025, 16:28
od kiRRow
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
Re: Pavouk Hiwonder
Napsal: 09 úno 2025, 16:53
od jankop
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
Napsal: 09 úno 2025, 17:05
od luger
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
Napsal: 09 úno 2025, 18:23
od kiRRow
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í ...
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
Napsal: 09 úno 2025, 21:48
od luger
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í.