From 12ce05c52b65b9169de6c33ff78a46903eb58acb Mon Sep 17 00:00:00 2001 From: Ilya_Chis Date: Mon, 16 Dec 2024 16:19:50 +0500 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=80=D0=BE=D0=B1=D0=BE=D1=82=D0=BE=D0=BC?= =?UTF-8?q?=20=D1=81=20=D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E=20=D0=BB?= =?UTF-8?q?=D0=B8=D0=B4=D0=B0=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lidar.py | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 lidar.py diff --git a/lidar.py b/lidar.py new file mode 100644 index 0000000..b4c7ba0 --- /dev/null +++ b/lidar.py @@ -0,0 +1,98 @@ +import RPi.GPIO as GPIO +import serial +import time +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation +import keyboard + +# Настройки GPIO +IN1 = 23 +IN2 = 24 +IN3 = 17 +IN4 = 27 +ENA = 26 +ENB = 19 + +GPIO.setwarnings(False) +GPIO.setmode(GPIO.BCM) +GPIO.setup(IN1, GPIO.OUT) +GPIO.setup(IN2, GPIO.OUT) +GPIO.setup(IN3, GPIO.OUT) +GPIO.setup(IN4, GPIO.OUT) +GPIO.setup(ENA, GPIO.OUT) +GPIO.setup(ENB, GPIO.OUT) + +# Параметры для лидара +lidar_port = '/dev/ttyUSB1' # Убедитесь, что это правильный порт +baud_rate = 115200 + +# Настройка серийного соединения +ser = serial.Serial(lidar_port, baud_rate, timeout=1) + +# Параметры скорости +speed = 10 # Регулируйте скорость по необходимости +GPIO.output(ENA, speed) +GPIO.output(ENB, speed) + +# Функции управления движением +def move_forward(): + GPIO.output(IN1, GPIO.HIGH) + GPIO.output(IN2, GPIO.LOW) + GPIO.output(IN3, GPIO.HIGH) + GPIO.output(IN4, GPIO.LOW) + print("Робот движется вперед") + +def move_backward(): + GPIO.output(IN1, GPIO.LOW) + GPIO.output(IN2, GPIO.HIGH) + GPIO.output(IN3, GPIO.LOW) + GPIO.output(IN4, GPIO.HIGH) + print("Робот движется назад") + +def stop(): + GPIO.output(IN1, GPIO.LOW) + GPIO.output(IN2, GPIO.LOW) + GPIO.output(IN3, GPIO.LOW) + GPIO.output(IN4, GPIO.LOW) + print("Робот остановлен") + +def read_lidar_data(): + try: + line = ser.readline().decode('utf-8', errors='ignore').strip() + if line: + print(f"Считанные данные от лидара: {line}") # Отладка + return line # Вернем считанные данные + else: + print("Нет данных") + return None + except Exception as e: + print(f"Ошибка чтения данных от лидара: {e}") + return None + +# Визуализация карты препятствий +def update_plot(frame): + data = read_lidar_data() # Получаем данные от лидара + if data is not None: + # Логика для визуализации данных + # Вставьте здесь ваш код для построения карты препятствий + pass # Замените на свою логику + +# Основной цикл +def main(): + print("Нажмите 'W' для запуска автономного движения и ' ' (пробел) для остановки.") + while True: + if keyboard.is_pressed('w'): + move_forward() + print("Автономное движение включено") + if keyboard.is_pressed('s'): + move_backward() + if keyboard.is_pressed(' '): + stop() + print("Автономное движение остановлено") + # Добавьте паузу, чтобы избежать высокой загрузки CPU + time.sleep(0.1) + +# Запуск программы +if __name__ == "__main__": + main()