Keyboard_trigger = Event() возвращает «NameError: имя «Событие» не определено»Python

Программы на Python
Ответить
Anonymous
 Keyboard_trigger = Event() возвращает «NameError: имя «Событие» не определено»

Сообщение Anonymous »

Я пытаюсь написать простую программу «Избегания объектов» для своего робота.
Первоначальная версия работает, но когда я пытаюсь выйти с помощью Ctrl-C, программа останавливается, но робот продолжает двигаться, пока я его физически не выключу.
Я пытаюсь использовать трюк, который использовался в другая программа, которая прослушивает события клавиатуры, а затем останавливает робота, когда он обнаружен.
Код, с которым у меня возникли трудности:

Код: Выделить всё

# Object Avoidance Robot
# Drives in a straight line untill it reaches an obsticle within "X" cm.
# It then stops, backs up a few cm, turns a random amount, and then proceeds.

import easygopigo3 as easy
import time
import random
import signal
import os
import sys

gpg = easy.EasyGoPiGo3()
gpg = easy.EasyGoPiGo3()
servo_1 = gpg.init_servo('SERVO1')
servo_2 = gpg.init_servo('SERVO2')
sleep_time = 0.50  # pause time in seconds

my_distance_portI2C = gpg.init_distance_sensor('I2C')
time.sleep(0.1)

# for triggering the shutdown procedure when a signal is detected
keyboard_trigger = Event()
def signal_handler(signal, frame):
print("Signal detected.  Stopping threads.")
gpg.stop()
keyboard_trigger.set()

print("Running: Test Servos.\n")

# Read the connected robot's serial number
serial_number = gpg.get_id() # read and display the serial number

# For testing only - "invalid" serial number
# serial_number = "invalid"

print("This robot's serial number is\n"+serial_number+"\n")

# Servo constants for each robot

# Each robot is identified by its unique serial number

# Charlene:
if serial_number == "A0F6E45F4E514B4B41202020FF152B11":

# Charlene's servo constants
print("Robot is \"Charlene\"")
center_1 = 86  # Horizontal centering - smaller is further right.
center_2 = 76  # Vertical centering - smaller is further up.

# Charlie:
elif serial_number == "64B61037514E343732202020FF111A05":

# Charlie's servo constants
print("Robot is \"Charlie\"")
center_1 = 86  # Horizontal centering - smaller is further right.
center_2 = 90  # Vertical centering - smaller is further up.

else:
# Unknown serial number
print("I don't know who robot", serial_number, "is,")
print("If we got this far, it's obviously a GoPiGo robot")
print("But I don't know what robot it is, so I'm using")
print("the default centering constants of 90/90.\n")

# Default servo constants
print("Robot is \"Unknown\"")
print("Please record the robot's serial number, name,")
print("and derived centering constants.")
center_1 = 90
center_2 = 90

# Start Test Servos

# Define excursions
right = center_1 - 45
left = center_1 + 45
up = center_2 - 45
down = center_2 + 45

def test_servos():
# Test servos
print("\nStarting test:")
print("Using centering constants "+str(center_1)+"/"+str(center_2), "for this robot")

print("\nCenter Both Servos")
servo_1.rotate_servo(center_1)
servo_2.rotate_servo(center_2)
time.sleep(sleep_time)

print("Test Servo 1 (horizontal motion)")
servo_1.rotate_servo(right)
time.sleep(sleep_time)
servo_1.rotate_servo(left)
time.sleep(sleep_time)
servo_1.rotate_servo(center_1)
time.sleep(sleep_time)

print("Test Servo 2 (vertical motion)")
servo_2.rotate_servo(up)
time.sleep(sleep_time)
servo_2.rotate_servo(down)
time.sleep(sleep_time)

print("Re-Center Both Servos")
servo_1.rotate_servo(center_1)
servo_2.rotate_servo(center_2)
time.sleep(sleep_time)
servo_1.disable_servo()
servo_2.disable_servo()
print("Complete: Test Servos - Exiting.")

def avoid():
while True:
while my_distance_portI2C.read_inches() > 20:
gpg.forward()
gpg.stop()
time.sleep(1)
gpg.backward()
time.sleep(1)
gpg.stop()
test_servos()
gpg.backward()
time.sleep(4)
gpg.stop()
time.sleep(1)
gpg.turn_degrees((random.randint(90, 270)), blocking=True)
time.sleep(1) # slowdown

#------------------------------------
# Main routine entry point is here
#------------------------------------

if __name__ == "__main__":
# registering both types of termination signals
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)

test_servos()  # make sure servos are centered
avoid()
logging.info("Finished!")
sys.exit(0)
while not keyboard_trigger.is_set():
sleep(0.25)

# until some keyboard event is detected
print("\n ==========================\n\n")
print("A \"shutdown\"  command event was received!\n")
gpg.stop()
exit()
Когда я запускаю приведенный выше код object_avoidance.py в VS Code, он завершается с ошибкой:

Код: Выделить всё

pi@Charlene:~/Project_Files/object_avoidance $ /usr/bin/python /home/pi/Project_Files/object_avoidance/Object_Avoidence.py
Traceback (most recent call last):
File "/home/pi/Project_Files/object_avoidance/Object_Avoidence.py", line 22, in 
keyboard_trigger = Event()
NameError: name 'Event' is not defined
pi@Charlene:~/Project_Files/object_avoidance $
Пример работающего кода довольно большой (это веб-робот с дистанционным управлением FPV), я разместил его на MediaFire.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ot-defined
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»