Diaľkové riadenie robota cez PyBrics
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:
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)