Diaľkové riadenie robota cez PyBrics

Zo stránky Robotický krúžok
Verzia z 16:32, 21. jún 2024, ktorú vytvoril Palo (diskusia | príspevky)
(rozdiel) ← Staršia verzia | Aktuálna úprava (rozdiel) | Novšia verzia → (rozdiel)
Skočit na navigaci Skočit na vyhledávání

Ovládač má dva motory - jeden s pákou na nastavovanie rýchlosti, druhý s volantom na riadenie smeru. Okrem toho má tri tlačidlá na aktivovanie pohybu vpred, vzad a klaksón. Do druhého robota sa okrem týchto udajov prenáša aj to, či je stlačená ľavá a pravá šípka, ale druhý robot túto informáciu zatiaľ nevyužíva.


Ovládač obsahuje tento program:

Riadeny robot.jpg

Ovladac.jpg

ovladac.py

from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
from pybricks.robotics import DriveBase
from pybricks.tools import wait, StopWatch

hub = PrimeHub(broadcast_channel=1)

print("ahoj")

hub.light.on(Color.GREEN)
wait(100)
hub.light.on(Color.RED)
wait(50)

print("joha")

hub.light.on(Color.GREEN)
wait(100)
hub.light.on(Color.RED)
wait(50)

print("cau")

hub.light.on(Color.GREEN)
wait(100)
hub.light.on(Color.RED)
wait(50)

print("uac")

mB = Motor(Port.B)
mD = Motor(Port.D)
TA = ForceSensor(Port.A)
TC = ForceSensor(Port.C)
TE = ForceSensor(Port.E)


while True:
  pressed = hub.buttons.pressed()
  #print("L:" + str(Button.LEFT in pressed) + ", R: " + str(Button.RIGHT in pressed) + ", mb: " + str(mB.angle() % 360) + ",md: " + str(mD.angle() % 360) + ",TA: " + str(TA.pressed()) + ", TC: " + str(TC.pressed()) + ", TE: " + str(TE.pressed()))
  data = (Button.LEFT in pressed, Button.RIGHT in pressed, (mB.angle() % 360), (mD.angle() % 360), TA.pressed(), TC.pressed(), TE.pressed())
  hub.ble.broadcast(data)
  wait(20)

riadený robot obsahuje program:

auto.py

from pybricks.hubs import PrimeHub
from pybricks.pupdevices import Motor, ColorSensor, UltrasonicSensor, ForceSensor
from pybricks.parameters import Button, Color, Direction, Port, Side, Stop
from pybricks.robotics import DriveBase
from pybricks.tools import wait, StopWatch

hub = PrimeHub(observe_channels=[1])

right_motor = Motor(Port.A, Direction.COUNTERCLOCKWISE)
left_motor = Motor(Port.E)
hub.speaker.volume(100)

drive_base = DriveBase(left_motor, right_motor, wheel_diameter=56, axle_track=192)

while True:
    # Receive broadcast from the other hub.

    data = hub.ble.observe(1)    
    if data is None:
        # No data has been received in the last 1 second.
        hub.light.on(Color.RED)
    else:
        
        # Data was received and is less that one second old.
        hub.light.on(Color.GREEN)
        bl, br, mba, mda, tap, tcp, tep = data 

        if tep:
            hub.speaker.beep(1800, 80)
        if (mba > 270):
            mba = 270
        if (mba < 90):
            mba = 90        

        if (mda > 180):
            mda = 180
        if (mda < 10):
            drive_base.stop()
        else:
            if not tap:
                if not tcp:
                    mda = 0
                    drive_base.stop()
                else:
                    mda = -mda
            drive_base.drive(mda, (180 - mba) / 2)
          
        #print("L:" + str(bl) + ", R: " + str(br) + ", mb: " + str(mba) + ",md: " + str(mda) + ",TA: " + str(tap) + ", TC: " + str(tcp) + ", TE: " + str(tep))
        wait(50)