"roboter" soll quadrat abfahren
Verfasst: Donnerstag 2. Mai 2019, 21:33
hey,
ich hoffe jmd kann mir bei meinem code weiter helfen weil ich selbst langsam ein bisschen verzweifle weil es einfach nicht laufen will :/
wie im betreff gesagt soll mein kleiner roboter ein quadrat abfahren.
startpunkt (mit motor laufend & gerade strecke): 25cm
dann soll er sich anhand eines sensors um 90grad drehen, nach den 25cm also nach links drehen und dann für 25cm wieder gerade aus.
dann: drehung nach rechts, gerade aus fahren für 50cm (diese anweisung 3 mal hintereinander ausführen damit ein quadrat "abgefahren" entsteht) und danach wieder 25cm (die zweite hälfte von den 50cm "vom anfang"), dann linksdrehung und dann wieder 25cm zur startposition zurück.
also dass es theoretisch so aussehen soll:
__
|__|
||
hier ist mein code und schonmal vielen dank für eure hilfe/ tipps!
#!/usr/bin/env python3
import ev3dev.ev3 as ev3
from time import sleep
wheel = 17.28 #umfang
def straight(line):
degree = line / wheel * 360
motor_left.run_to_rel_pos(position_sp=degree, speed_sp=150, stop_action="hold")
motor_right.run_to_rel_pos(position_sp=degree, speed_sp=150, stop_action="hold")
def turn(sensorAngle):
angleBeforTurn= gy.value()
angleAfterTurn= angleBeforeTurn+sensorAngle
if angleAfterTurn > angleBeforeTurn:
motor_left.run_forever(speed_sp=150)
motor_right.run_forever(speed_sp=-150)
else:
motor_left.run_forever(speed_sp=-150)
motor_right.run_forever(speed_sp=150)
turnAround = True
while turnAround:
angle = gy.value()
if angleBeforeTurn < angleAfterTurn:
if angleAfterTurn < angle:
motor_left.stop(stop_action="hold")
motor_right.stop(stop_action="hold")
turnAround = False
else:
if angle < angleAfterTurn:
motor_left.stop(stop_action="hold")
motor_right.stop(stop_action="hold")
turnAround = False
gy = GyroSensor()
ts = TouchSensor()
gy.mode = "GYRO-ANG"
units = gy.units
motor_left = LargeMotor('outA')
motor_right = LargeMotor('outD')
Sound.beep()
i = 1;
while i<=6:
sleep(1)
if(i==1 or i==2 or i==6):
straight(25)
else:
straight(50)
sleep(1)
if(i==1 or i==6):
turn(-80)
else:
turn(80)
sleep(1)
straight(25)
sleep(2)
Sound.Speak("task end")
ich hoffe jmd kann mir bei meinem code weiter helfen weil ich selbst langsam ein bisschen verzweifle weil es einfach nicht laufen will :/
wie im betreff gesagt soll mein kleiner roboter ein quadrat abfahren.
startpunkt (mit motor laufend & gerade strecke): 25cm
dann soll er sich anhand eines sensors um 90grad drehen, nach den 25cm also nach links drehen und dann für 25cm wieder gerade aus.
dann: drehung nach rechts, gerade aus fahren für 50cm (diese anweisung 3 mal hintereinander ausführen damit ein quadrat "abgefahren" entsteht) und danach wieder 25cm (die zweite hälfte von den 50cm "vom anfang"), dann linksdrehung und dann wieder 25cm zur startposition zurück.
also dass es theoretisch so aussehen soll:
__
|__|
||
hier ist mein code und schonmal vielen dank für eure hilfe/ tipps!
#!/usr/bin/env python3
import ev3dev.ev3 as ev3
from time import sleep
wheel = 17.28 #umfang
def straight(line):
degree = line / wheel * 360
motor_left.run_to_rel_pos(position_sp=degree, speed_sp=150, stop_action="hold")
motor_right.run_to_rel_pos(position_sp=degree, speed_sp=150, stop_action="hold")
def turn(sensorAngle):
angleBeforTurn= gy.value()
angleAfterTurn= angleBeforeTurn+sensorAngle
if angleAfterTurn > angleBeforeTurn:
motor_left.run_forever(speed_sp=150)
motor_right.run_forever(speed_sp=-150)
else:
motor_left.run_forever(speed_sp=-150)
motor_right.run_forever(speed_sp=150)
turnAround = True
while turnAround:
angle = gy.value()
if angleBeforeTurn < angleAfterTurn:
if angleAfterTurn < angle:
motor_left.stop(stop_action="hold")
motor_right.stop(stop_action="hold")
turnAround = False
else:
if angle < angleAfterTurn:
motor_left.stop(stop_action="hold")
motor_right.stop(stop_action="hold")
turnAround = False
gy = GyroSensor()
ts = TouchSensor()
gy.mode = "GYRO-ANG"
units = gy.units
motor_left = LargeMotor('outA')
motor_right = LargeMotor('outD')
Sound.beep()
i = 1;
while i<=6:
sleep(1)
if(i==1 or i==2 or i==6):
straight(25)
else:
straight(50)
sleep(1)
if(i==1 or i==6):
turn(-80)
else:
turn(80)
sleep(1)
straight(25)
sleep(2)
Sound.Speak("task end")