Пример #1
0
class Wheels(MoveSteering):

    def __init__(self, left_motor_port, right_motor_port, desc=None, motor_class=LargeMotor):
        super().__init__(left_motor_port, right_motor_port, desc, motor_class)
        self.diff = MoveDifferential(left_motor_port, right_motor_port, EV3EducationSetTire, 110, desc, motor_class)

    def get_rotations(self):
        return (self.diff.left_motor.rotations + self.diff.right_motor.rotations) / 2.0

    def distance_remaining(self, total_distance, initial_rotations):
        return total_distance - ((self.get_rotations() - initial_rotations) * self.diff.circumference_mm)

    @staticmethod
    def __speed(speed):
        return speed if isinstance(speed, SpeedValue) else SpeedPercent(speed)

    def on_for_rotations(self, steering, speed, rotations, brake=True, block=True):
        super().on_for_rotations(steering, self.__speed(speed), rotations, brake, block)

    def on_for_degrees(self, steering, speed, degrees, brake=True, block=True):
        super().on_for_degrees(steering, self.__speed(speed), degrees, brake, block)

    def on_for_seconds(self, steering, speed, seconds, brake=True, block=True):
        super().on_for_seconds(steering, self.__speed(speed), seconds, brake, block)

    def on(self, steering, speed):
        super().on(steering, self.__speed(speed))

    def get_speed_steering(self, steering, speed):
        return super().get_speed_steering(steering, self.__speed(speed))

    def on_for_distance(self, speed, distance_mm, brake=True, block=True):
        self.diff.on_for_distance(self.__speed(speed), distance_mm, brake, block)

    def on_arc_right(self, speed, radius_mm, distance_mm, brake=True, block=True):
        self.diff.on_arc_right(self.__speed(speed), radius_mm, distance_mm, brake, block)

    def on_arc_left(self, speed, radius_mm, distance_mm, brake=True, block=True):
        self.diff.on_arc_left(self.__speed(speed), radius_mm, distance_mm, brake, block)

    def turn_right(self, speed, degrees, brake=True, block=True):
        self.diff.turn_right(self.__speed(speed), degrees, brake, block)

    def turn_left(self, speed, degrees, brake=True, block=True):
        self.diff.turn_left(self.__speed(speed), degrees, brake, block)

    def turn(self, speed, degrees, brake=True, block=True):
        (self.turn_left if degrees < 0 else self.turn_right)(speed, degrees, brake, block)
    def test_MoveDifferential(self):
        tank_drive = MoveDifferential(OUTPUT_A, OUTPUT_D, EV3EducationSetTire,
                                      15 * STUD_MM)

        tank_drive.turn_right(20, 90 - 34)
        self.assertEqual(tank_drive.is_running, False)

        tank_drive.odometry_start()

        tank_drive.on_to_coordinates(30, -50, 300)
        self.assertEqual(tank_drive.is_running, False)

        tank_drive.on_for_distance(30, 300)
        self.assertEqual(tank_drive.is_running, False)

        tank_drive.on_arc_right(30, 200, 600, block=True)
        self.assertEqual(tank_drive.is_running, False)
Пример #3
0
#!/usr/bin/env python3
from ev3dev2.motor import LargeMotor, OUTPUT_B, OUTPUT_C, MoveDifferential
from ev3dev2.motor import SpeedDPS, SpeedRPM, SpeedRPS
from ev3dev2.wheel import EV3Tire 
from time import sleep 
from ev3dev2.motor import MediumMotor, OUTPUT_A
medium_motorA = MediumMotor(OUTPUT_A)
large_motorB = LargeMotor(OUTPUT_B)
large_motorC = LargeMotor(OUTPUT_C)
STUD_MM = 8
mdiff = MoveDifferential(OUTPUT_B, OUTPUT_C, EV3Tire, 16 * STUD_MM)
mdiff.on_for_distance(speed = 50, distance_mm = 690)
sleep(5)
mdiff.turn_left(speed = 50, degrees = 80)
mdiff.on_arc_right(SpeedRPM(60), 150, 65)
mdiff.on_for_distance(speed = 50, distance_mm = -145)
sleep(5)
medium_motorA.on_for_degrees(speed = 10, degrees = -110)
mdiff.on_arc_left(SpeedRPM(60), 150,67)
sleep(10)
mdiff.on_for_distance(10,50)
#sleep while picking up the first green piece
#medium_motorA.on_for_degrees(speed = 10, degrees = -110)
sleep(5)
#mdiff.turn_left(speed = 35, degrees = 10)
sleep(2)
medium_motorA.on_for_degrees(speed = 10, degrees = 110)
sleep(2)
mdiff.on_arc_right(SpeedRPM(60), 5200, 400)
sleep(5)
medium_motorA.on_for_degrees(speed = 10, degrees = -110)
Пример #4
0
sleep(2)
mdiff.on_for_distance(speed = 50, distance_mm = -50)
sleep(2)
#moving the arm up after disengaging with both samples
medium_motorA.on_for_degrees(speed = 10, degrees = 110)
sleep(2)
mdiff.turn_left(speed = 50, degrees = 50)
mdiff.on_for_distance(speed = 50, distance_mm = 250)
mdiff.turn_right(speed = 50, degrees = 65)
mdiff.on_for_distance(speed = 50, distance_mm = 900)
mdiff.turn_left(speed = 50, degrees = 40)
sleep(2)
#moving the arm down for sample 4
medium_motorA.on_for_degrees(speed = 10, degrees = -110)  
sleep(2)
mdiff.on_arc_right(SpeedRPM(50), 100, 175)
sleep(2)
mdiff.on_for_distance(speed = 50, distance_mm = 300)
#moving the arm up with sample #4 
medium_motorA.on_for_degrees(speed = 10, degrees = 110)
sleep(2)
#getting sample 3
def sample3():
    mdiff.on_for_distance(speed = 50,distance_mm = 350)
    sleep(2)
    #putting arm down
    medium_motorA.on_for_degrees(speed = 10, degrees = -110)
    mdiff.on_arc_right(SpeedRPM(50), 70, 90)
    #putting arm back up
    medium_motorA.on_for_degrees(speed = 10, degrees = 110)
sample3()
Пример #5
0
# go forward until nearest object is within 25 cm
on()
wait_until_distance(35)
on(speed=15)
wait_until_distance(20)

# hard turn to get off wall
wheels.turn_left(SpeedPercent(15), 45)
# arc to the left to orient towards push object
wheels.on_arc_left(SpeedPercent(30), 300, 230, brake=False)
# move forward 430 mm
forward_distance()

# reverse at an arc
wheels.on_arc_right(SpeedPercent(-50), 200, 225, brake=False)
# reverse for 145 mm
wheels.on_for_distance(SpeedPercent(-30), 155)
# reverse at an arc, orient touch sensor towards wall
wheels.on_arc_left(SpeedPercent(-50), 175, 115, brake=False)

# move back at 50% speed until touch sensor is pressed
on(speed=-50)
while not touch.is_pressed:
    pass

# rotate right 90 degrees
wheels.turn_right(SpeedPercent(35), 90)
# move forward 110 mm
forward_distance(110)
Пример #6
0
#!/usr/bin/env python3
from ev3dev2.motor import LargeMotor, OUTPUT_B, OUTPUT_C, MoveDifferential
from ev3dev2.motor import SpeedDPS, SpeedRPM, SpeedRPS
from ev3dev2.wheel import EV3Tire
from time import sleep
from ev3dev2.motor import MediumMotor, OUTPUT_A
medium_motorA = MediumMotor(OUTPUT_A)
large_motorB = LargeMotor(OUTPUT_B)
large_motorC = LargeMotor(OUTPUT_C)
STUD_MM = 8
mdiff = MoveDifferential(OUTPUT_B, OUTPUT_C, EV3Tire, 16 * STUD_MM)
mdiff.on_for_distance(speed=50, distance_mm=690)
sleep(5)
mdiff.turn_left(speed=50, degrees=70)
mdiff.on_arc_right(SpeedRPM(60), 150, 65)
mdiff.on_for_distance(speed=50, distance_mm=-145)
sleep(5)
medium_motorA.on_for_degrees(speed=10, degrees=-110)
mdiff.on_arc_left(SpeedRPM(60), 135, 67)
sleep(10)
mdiff.on_for_distance(10, 50)
#sleep while picking up the first green piece
#medium_motorA.on_for_degrees(speed = 10, degrees = -110)
sleep(5)
#mdiff.turn_left(speed = 35, degrees = 10)
sleep(2)
medium_motorA.on_for_degrees(speed=10, degrees=110)
sleep(2)
medium_motorA.on_for_degrees(speed=10, degrees=-110)
sleep(5)
mdiff.on_arc_left(SpeedRPM(50), 1200, 400)
Пример #7
0
STUD_MM = 8

# test with a robot that:
# - uses the standard wheels known as EV3Tire
# - wheels are 16 studs apart
mdiff = MoveDifferential(OUTPUT_B, OUTPUT_C, EV3Tire, 16 * STUD_MM)

# Rotate 90 degrees clockwise
mdiff.turn_right(SpeedRPM(40), 90)

# Drive forward 500 mm
mdiff.on_for_distance(SpeedRPM(40), 500)

# Drive in arc to the right along an imaginary circle of radius 150 mm.
# Drive for 700 mm around this imaginary circle.
mdiff.on_arc_right(SpeedRPM(80), 150, 700)

# Enable odometry
mdiff.odometry_start()

# Use odometry to drive to specific coordinates
mdiff.on_to_coordinates(SpeedRPM(40), 300, 300)

# Use odometry to go back to where we started
mdiff.on_to_coordinates(SpeedRPM(40), 0, 0)

# Use odometry to rotate in place to 90 degrees
mdiff.turn_to_angle(SpeedRPM(40), 90)

# Disable odometry
mdiff.odometry_stop()