Hľadať kód

Kurz Lekcia 8 z 10: Raspberry Pi Pico Smart Car – Lekcia 8: Servomotor a sledovanie objektov

Táto lekcia je súčasťou: Raspberry Pi Pico 4WD inteligentné autíčko

Kurz Lekcia 8 z 10: Raspberry Pi Pico Smart Car – Lekcia 8: Servomotor a sledovanie objektov

Táto lekcia z kurzu Raspberry Pi Pico Smart Car od Robojax skúma funkčnosť servomotora a to, ako ho použiť na vytvorenie robota sledujúceho objekt alebo „nasleduj svoju ruku“. Projekt presahuje rámec jednoduchého ovládania motora a ukazuje, ako skombinovať servom riadený ultrazvukový senzor s inteligentnou logikou v Pythone a vytvoriť auto, ktoré aktívne vyhľadáva a sleduje objekt vo svojom dosahu. Toto je základný koncept v robotike, ktorý vám umožňuje vytvárať interaktívne projekty, ako je robot sledujúci osobu, inteligentný domáci miláčik, ktorý aportuje, alebo autonómna bezpečnostná kamera sledujúca pohyb. Lekcia tiež pokrýva druhý, jednoduchší projekt: auto, ktoré sa automaticky približuje k objektom v určitej vzdialenostnej zóne, tlačí ich a cúva od nich.

pi_pico_4WD_follow-hand

Hardvér a komponenty

Tento projekt je založený na súprave auta SunFounder Raspberry Pi Pico 4WD. Kľúčové komponenty použité v tejto lekcii sú:

  • Doska Raspberry Pi Pico
  • Podvozok inteligentného auta 4WD s motormi
  • Servomotor (ideálne s kovovými prevodmi pre odolnosť)
  • Ultrazvukový senzor vzdialenosti (HC-SR04)
  • Doska ovládača motora (súčasť súpravy auta)
  • RGB LED (pre vizuálnu spätnú väzbu)
  • Zdroj napájania (batériový blok pre auto)
PICOBOARDWHITEANGLE2_1200x857

Servomotor je jadrom funkčnosti tejto lekcie. Na rozdiel od štandardného jednosmerného motora, ktorý sa otáča nepretržite, je servomotor navrhnutý tak, aby sa otočil do špecifickej uhlovej polohy a udržal ju, zvyčajne medzi 0 a 180 stupňami. Vďaka tomu je ideálny na presné nasmerovanie ultrazvukového senzora. Kvalita serva sa často určuje podľa materiálu prevodov (plast vs. kov) a jeho krútiaceho momentu, ktorý určuje jeho silu a odolnosť.

Ako to funguje

Graf nižšie vysvetľuje, ako kód funguje. 

pi_pico_4WD_follow-hand_flow_chart

Sprievodca zapojením

Zapojenie pre túto lekciu je jednoduché, pretože nadväzuje na vopred zostavenú súpravu auta. Kritickým spojením je servomotor, ktorý musí byť pripojený ku konkrétnemu GPIO pinu na Pico.

Vo videu inštruktor pripája servo na pin číslo 18 na Raspberry Pi Pico. Ultrazvukový senzor je namontovaný na vrchu ramena serva, čo mu umožňuje otáčať sa doľava a doprava a skenovať oblasť. Zvyšok zapojenia pre motory, RGB LED a napájanie sa považuje za vopred pripojený z predchádzajúcich lekcií kurzu.

Podrobný vizuálny sprievodca nájdete v schéme zapojenia nižšie.

Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction

Vysvetlenie kódu

Python kód pre túto lekciu je postavený okolo vlastnej knižnice pico_4wd, ktorá zjednodušuje zložité hardvérové interakcie. Používateľom konfigurovateľné časti sa nachádzajú v hornej časti skriptu a riadia správanie auta.

Tu sú kľúčové premenné, ktoré môžete upraviť na prispôsobenie správania „nasleduj ruku“ vášho robota:

  • car.RADAR_REFERENCE = 25: Toto je maximálna vzdialenosť v centimetroch, ktorú senzor „vidí“. Akýkoľvek objekt za touto vzdialenosťou sa ignoruje. Môžete ju zvýšiť, aby bolo auto citlivejšie, alebo znížiť, aby sa vyžadoval bližší objekt.
  • car.RADAR_MAX_ANGLE = 45 & car.RADAR_MIN_ANGLE = -45: Tieto definujú najľavejší (45) a najpravejší (-45) uhol, ktorý servo skenuje. To vytvára 90-stupňové zorné pole pred autom.
  • car.RADAR_STEP_ANGLE = 10: Toto je prírastok (v stupňoch), ktorý servo používa na pohyb medzi bodmi skenovania. Menší krok (napr. 5) poskytuje jemnejšie rozlíšenie, ale trvá dlhšie dokončiť celé skenovanie. Väčší krok (napr. 15) skenuje rýchlejšie, ale s nižšou presnosťou.
  • MOTOR_FORWARD_POWER = 40: Toto nastavuje výkon motora (0-100) použitý, keď sa auto pohybuje vpred smerom k detekovanému objektu. Upravte to na zmenu rýchlosti prenasledovania auta.
  • MOTOR_TURNING_POWER = 40: Toto nastavuje výkon motora použitý, keď sa auto otáča smerom k objektu. Vyššia hodnota spôsobí, že sa auto bude otáčať agresívnejšie.

Hlavná logika funkcie main() je nepretržitá slučka. Najprv zavolá car.radar_scan(), ktorá vráti reťazec jednotiek a núl predstavujúcich, či bol objekt detekovaný v každom uhle skenovania („1“ znamená, že objekt je v referenčnej vzdialenosti). Kód potom analyzuje tento reťazec, aby našiel najväčšiu skupinu po sebe idúcich jednotiek, čo označuje stred detekovaného objektu. Na základe toho, kde sa tento stred nachádza v poli skenovania, dostane auto príkaz otočiť sa doľava, doprava alebo sa pohybovať vpred, aby sa zarovnalo s objektom a sledovalo ho.

Živá ukážka projektu

Video poskytuje jasnú ukážku projektu v praxi. Inštruktor najprv spustí testovací skript, aby ukázal, ako možno servomotor nastaviť na presné uhly, ako sú 90, 0 a -90 stupňov. To je kľúčové pre pochopenie rozsahu serva a pre správne upevnenie ultrazvukového senzora.

Po upevnení senzora je predstavená funkcia "sledovanie ruky". Keď inštruktor pohybuje rukou pred autom, senzor namontovaný na serve skenuje doľava a doprava. Logika auta spracúva údaje zo senzora a otáča kolesá, aby sa nasmerovalo k detegovanej ruke, čím ju efektívne sleduje po podlahe. Ukážka zdôrazňuje, ako auto dokáže sledovať objekt, keď sa pohybuje, a prispôsobovať svoj smer. Je tiež predstavený druhý projekt, kde je auto naprogramované tak, aby sa priblížilo k objektu a tlačilo ho, ak je detegované vo vzdialenosti 10 až 20 centimetrov, a aby cúvalo, ak je objekt príliš blízko (menej ako 10 centimetrov).

Kľúčové poznatky

Táto lekcia je vynikajúcim úvodom do používania servomotorov na vytváranie interaktívnych robotických správaní. Kombináciou serva so vzdialenostným senzorom môžete postaviť robota so "zmyslom pre zrak", ktorý dokáže aktívne sledovať a reagovať na svoje prostredie. Schopnosť nastaviť parametre, ako sú uhly skenovania, veľkosť kroku a výkon motora, umožňuje jemné doladenie správania robota, čo je kritická zručnosť pre každý robotický projekt.

Kapitoly

  • [00:00] Úvod do servomotora a sledovania objektov
  • [01:48] Vlastnosti a možnosti kurzu
  • [03:08] Pochopenie fungovania servomotora
  • [06:08] Testovanie servomotora s Python kódom
  • [09:59] Vysvetlenie funkcie "sledovanie ruky"
  • [10:49] Ukážka funkcie "sledovanie ruky"
  • [15:37] Projekt: tlačenie objektu a cúvanie
  • [18:40] Ukážka projektu tlačenia objektu
  • [19:25] Záver a ďalšie kroky

Obrázky

pico-4wd_main
pico-4wd_main
PICOBOARDWHITEANGLE2_1200x857
PICOBOARDWHITEANGLE2_1200x857
pi_pico_4WD_follow-hand
pi_pico_4WD_follow-hand
pi_pico_4WD_follow-hand_flow_chart
pi_pico_4WD_follow-hand_flow_chart
Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction
Sunfounder_Pico4DW-08-Follow-hand-ultrasonic_direction
905-Lesson 8/10 Pi Pico 4WD card Python code: follow hand
Jazyk: C++
# Lesson 8/10 Pi Car Pico 4WD: Follow hand
# Download and resource page https://robojax.com/RJT630

import pico_4wd as car

car.RADAR_REFERENCE = 25
car.RADAR_MAX_ANGLE = 45
car.RADAR_MIN_ANGLE = -45
car.RADAR_STEP_ANGLE = 10
MOTOR_FORWARD_POWER = 40
MOTOR_TURNING_POWER = 40

def main():
    while True:
        radar_data = car.radar_scan()
        if isinstance(radar_data, int):
            continue
        radar_data = [str(i) for i in radar_data]
        radar_data = "".join(radar_data)
        paths = radar_data.split("1")
        length_list = []
        for path in paths:
            length_list.append(len(path))
        if max(length_list) == 0:
            car.move("stop") 
        else:
            i = length_list.index(max(length_list))
            pos = radar_data.index(paths[i])
            pos += (len(paths[i]) - 1) / 2
            delta = len(radar_data) / 3
            if pos < delta:
                car.move("right", MOTOR_TURNING_POWER)
            elif pos > 2 * delta:
                car.move("left", MOTOR_TURNING_POWER)
            else:
                #if radar_data[int(len(radar_data)/2-1)] == "0":
                #    car.move("stop")
                #else:
                car.move("forward", MOTOR_FORWARD_POWER)

try:
    main()
finally:
    car.move("stop")
    car.set_light_off()

Zdroje a referencie

Zatiaľ žiadne zdroje.

Súbory📁

Žiadne súbory nie sú k dispozícii.