многопоточность с python ev3, метод объединения не работает

#python #multithreading #ev3

Вопрос:

Я запускаю код, все работает хорошо, но метод объединения не работает.

Мне приходится ждать, пока все нити закончат поворачиваться на 90 градусов

Я попытался использовать метод соединения с другим кодом, не связанным с роботом ev3, и он работает, но я не понимаю, почему он не работает с ev3.

Ошибка: AttributeError: объект «Поток» не имеет атрибута «присоединиться»

 #!/usr/bin/env pybricks-micropython
from pybricks.hubs import EV3Brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,
                                 InfraredSensor, UltrasonicSensor, GyroSensor)
from pybricks.parameters import Port, Stop, Direction, Button, Color
from pybricks.tools import wait, StopWatch, DataLog
from pybricks.robotics import DriveBase
from pybricks.media.ev3dev import SoundFile, ImageFile
import threading

# This program requires LEGO EV3 MicroPython v2.0 or higher.
# Click "Open user guide" on the EV3 extension tab for more information.


# Create your objects here.
ev3 = EV3Brick()


left_motor = Motor(Port.B)
right_motor = Motor(Port.C)


robot = DriveBase(left_motor, right_motor, wheel_diameter=55.5, axle_track=104)

obstacle_sensor  = UltrasonicSensor(Port.S4)

obstacle_sensor_gyro = GyroSensor(Port.S3)
################################

def check_for_75_angle():
    while True:
        angle = obstacle_sensor_gyro.angle()
        print(angle)
        if angle > 75:
            robot.drive(0, 15)
            break
            


def check_for_90_angle():
    while True:
        angle = obstacle_sensor_gyro.angle()
        if angle == 90:
            break
            

def turn():
    robot.drive(0,80)
    


def main():
    t1 = threading.Thread(target=check_for_75_angle)
    t2 = threading.Thread(target=check_for_90_angle)
    t3 = threading.Thread(target=turn)

    t1.start()
    t2.start()
    t3.start()

    t1.join()
    t2.join()
    t3.join()




while True:
    cm = obstacle_sensor.distance() * 0.1

    if cm < 20:
        obstacle_sensor_gyro.reset_angle(0)

        main()
        print("Finished: 90 angle")

    else:
        robot.drive(20, 0)
    ```
 

Комментарии:

1. Не очевидно, к какой строке относится ошибка, поэтому, пожалуйста, отредактируйте полный текст сообщения об ошибке, включая обратную ссылку на ваш вопрос, в виде текста

2. Мне жаль, но я не могу добавить ошибку прямо сейчас. но это в строке «t1.join».