1 changed files with 98 additions and 0 deletions
			
			
		@ -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() | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue