Ilya_Chis
1 month ago
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