Функции
Функции позволяют разбивать код на логические блоки, делать его читаемым и избегать дублирования. В робототехнике это особенно полезно для повторяющихся действий (поворот, сканирование, движение по линии).
Создание функции
Функция объявляется с помощью ключевого слова def.
def my_function():
print("Это моя функция!")
# Вызов функции
my_function()
Функции с параметрами
Параметры позволяют передавать данные внутрь функции, делая её универсальной.
def drive_distance(distance_mm, speed):
print("Едем", distance_mm, "мм со скоростью", speed)
# drive_base.straight(distance_mm) # Пример реального кода
# Вызов с разными параметрами
drive_distance(500, 200)
drive_distance(100, 50)
Возврат значений (return)
Функция может не только выполнять действия, но и возвращать результат (например, показания датчика или вычисления).
def get_distance_cm():
dist_mm = ultrasonic.distance()
return dist_mm / 10
# Использование результата
current_dist = get_distance_cm()
if current_dist < 10:
drive_base.stop()
Реальный пример: Движение до препятствия
Вместо того чтобы писать цикл while каждый раз, когда нужно подъехать к стене, вынесем это в функцию.
def drive_until_wall(speed, stop_distance):
# Начинаем движение
drive_base.drive(speed, 0)
# Ждем, пока датчик не увидит стену ближе, чем stop_distance
while ultrasonic.distance() > stop_distance:
wait(10)
# Останавливаемся
drive_base.stop()
# Теперь код программы становится очень чистым:
drive_until_wall(200, 100) # Ехать со скоростью 200, пока до стены не останется 100 мм
drive_until_wall(500, 300) # Ехать быстрее, остановиться раньше
Пример: Движение по квадрату
def drive_square(side_length):
for i in range(4):
drive_base.straight(side_length)
drive_base.turn(90)
# Проехать маленький квадрат
drive_square(100)
# Проехать большой квадрат
drive_square(500)
Советы
- Именуйте понятно: Имя функции должно быть глаголом (что делает?), например
scan_area,follow_line. - Одна задача: Функция должна делать что-то одно. Если функция называется
drive_and_scan_and_beep, лучше разбить её на три.