Pavouk Hiwonder

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
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.
Odpovědět
luger
Příspěvky: 247
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 15 pro 2024, 10:24

Díky moc, tak jsem to otestoval a funguje to ! :D
Po startu se zobrazí datum:
IMG_20241215_101105_782.jpg
a po 5 sekundách přejde na info displej:
IMG_20241215_101015_384.jpg
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.

Uživatelský avatar
gilhad
Příspěvky: 842
Registrován: 07 bře 2018, 11:22

Re: Pavouk Hiwonder

Příspěvek od gilhad » 15 pro 2024, 17:00

Stejně jako u toho info displaye bych to rozdělil na tři řádky

Datum prekladu
Dec 15 2024
10:24:00

luger
Příspěvky: 247
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 23 pro 2024, 14:56

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 :lol: ) 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 :lol: (škoda že sem nejde vložit video)

Stejně mě to stále přivádí na myšlenku použít Lidar 360°

luger
Příspěvky: 247
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 27 led 2025, 16:28

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.
pavouk překážky 1.jpg
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;
      }  

luger
Příspěvky: 247
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 09 úno 2025, 11:35

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 ?

Uživatelský avatar
kiRRow
Příspěvky: 1284
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: Pavouk Hiwonder

Příspěvek od kiRRow » 09 úno 2025, 16:28

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

jankop
Příspěvky: 1053
Registrován: 06 zář 2017, 20:04
Bydliště: Brno
Kontaktovat uživatele:

Re: Pavouk Hiwonder

Příspěvek od jankop » 09 úno 2025, 16:53

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.

luger
Příspěvky: 247
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 09 úno 2025, 17:05

díky, ale to je rotace. Já bych potřeboval zjistit změnu ve směru nahoru-dolů. Jako bych měřil výšku.

Uživatelský avatar
kiRRow
Příspěvky: 1284
Registrován: 07 kvě 2019, 07:03
Bydliště: Opava

Re: Pavouk Hiwonder

Příspěvek od kiRRow » 09 úno 2025, 18:23

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

luger
Příspěvky: 247
Registrován: 30 dub 2023, 11:06

Re: Pavouk Hiwonder

Příspěvek od luger » 09 úno 2025, 21:48

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í.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Bing [Bot] a 2 hosti