Робот-курьер Урок 6.1 Все курсыДля учителяПройти в программе Ученик Arduino Uno + шилд моторов L298P
Тема 6 · Урок 6.1

Робот-курьер: план и программа

Итоговая задача, часть 1: выбираешь уровень, планируешь маршрут и собираешь программу из проверенных частей.

2 × 45 мин1–2 ученика на роботаПроект

Результат урока

Выбран уровень итоговой задачи, записан и проверен план маршрута. Программа проходит весь маршрут хотя бы в пробном заезде, работающие версии сохранены.

Ты научишься

  • Выбрать уровень итоговой задачи по своим выполненным заданиям ●, ★ и ★★.
  • Разбить задачу на участки и записать план маршрута до написания кода.
  • Собрать программу из функций прошлых уроков и проверять её по частям.
  • Сохранять рабочую версию после каждой проверенной части.

Нужно знать

  • 2.1 Моторы: едем и останавливаемся
  • 2.2 Повороты и развороты
  • 3.1 Датчики линии и первое следование
  • 3.2 П-регулятор: плавно и быстро
  • 4.1 Находим и считаем перекрёстки
  • 4.2 Повороты на перекрёстке и маршрут
  • 5.1 Ультразвук: видим груз
  • 5.2 Захват: берём и ставим

Понадобится

Ультразвуковой датчик расстоянияЗахват с сервоприводомДатчик линии (аналоговый, Trema) × 2

Твоя задача

Ты — инженер службы доставки. Такие роботы-курьеры уже ездят по тротуарам и складам: сами находят дорогу, забирают груз и привозят его по адресу. Твой робот должен сам выехать со старта, перевезти два груза на новые места и остановиться в финише. Во время заезда ему никто не помогает: всё решает твоя программа.

Новых команд здесь нет. Всё нужное ты уже делал: ездил и поворачивал, держался линии с П-регулятором, находил перекрёстки, видел груз ультразвуком и работал захватом. Сейчас нужно собрать эти умения в одну программу. В уроке 6.2 — зачётные заезды.

Разминка · вспомни
  1. Чем setup() отличается от loop() и где должен выполняться маршрут, чтобы после финиша робот стоял?
  2. Как программа понимает, что под роботом перекрёсток?
  3. Что делать, если ультразвук не получил эхо?
1
Занятие 1 · 45 мин
Уровень и план
1

Выбери уровень

6 мин

Что должен делать робот. Теперь роботу нужно доставить два груза и закончить поездку на финише. Нового датчика не добавляем: объединяем уже проверенные возможности — движение, поиск линии и перекрёстков, подъезд по ультразвуку и захват.

Что используем и как это работает. План — последовательность действий с условиями завершения. Для каждого участка запиши, какие показания нужны, какое действие выполняют моторы или захват и по какому признаку переходить дальше. Функции позволяют назвать эти действия и проверить их по отдельности; вызов функции передаёт управление её командам и затем возвращает его в маршрут.

Как связать измерение с действием. Перед сборкой маршрута проверь каждую функцию своим коротким опытом. Пустая функция в заготовке не выполняет действие, даже если программа успешно собирается. После последнего участка нужна явная остановка; повторение маршрута в loop без решения автора запустило бы доставку заново.

Задача есть в трёх уровнях. Правила и критерии оценки у них общие, а поля разные. Уровень выбирают по тому, какие задания уроков ты уже выполнил: задания ★ готовили к среднему полю, ★★ — к продвинутому.

Уровень итоговой задачиКакие задания уроков нужны
Начальный
S-образная линия, два перекрёстка, порядок действий известен заранее.
● Основное 1.12.12.23.13.24.14.25.15.2
Средний
Сеть дорог, четыре перекрёстка, проезд прямо и повторные встречи с перекрёстками.
● Основное 1.12.12.23.13.24.14.25.15.2
★ Средний уровень 1.12.12.23.13.24.14.25.15.2
Продвинутый
Шесть перекрёстков, крутые S-дуги, маршрут по карточке составляешь сам.
● Основное 1.12.12.23.13.24.14.25.15.2
★ Средний уровень 1.12.12.23.13.24.14.25.15.2
★★ Продвинутый уровень 1.12.12.23.13.24.14.25.15.2
  1. Открой бортовой журнал и посмотри, какие задания ●, ★ и ★★ у тебя получились.
  2. Выбери уровень сам и отметь его ниже. Если сомневаешься, начни с начального: после зачёта можно попробовать следующий.
Должно получиться

Уровень выбран и записан в журнал.

Задача есть в трёх уровнях. Правила и критерии оценки у них общие, а поля разные. Поле выбирают по тому, какие задания уроков ты уже выполнил.

Уровень итоговой задачиКакие задания уроков нужны
Начальный
S-образная линия, два перекрёстка, порядок действий известен заранее.
● Основное 1.12.12.23.13.24.14.25.15.2
Средний
Сеть дорог, четыре перекрёстка, проезд прямо и повторные встречи с перекрёстками.
● Основное 1.12.12.23.13.24.14.25.15.2
★ Средний уровень 1.12.12.23.13.24.14.25.15.2
Продвинутый
Шесть перекрёстков, крутые S-дуги, маршрут по карточке составляешь сам.
● Основное 1.12.12.23.13.24.14.25.15.2
★ Средний уровень 1.12.12.23.13.24.14.25.15.2
★★ Продвинутый уровень 1.12.12.23.13.24.14.25.15.2
  1. Открой бортовой журнал. Выпиши, какие задания ★ у тебя получились и в каких уроках.
  2. Сравни со списком, который нужен для среднего поля. Чего не хватает?
  3. Выбери поле сам. Если выбираешь среднее, но какого-то задания ★ нет, запиши, как и когда ты его доделаешь.
Должно получиться

Поле выбрано, в журнале — список выполненных заданий ★ и план для недостающих.

Задача есть в трёх уровнях. Правила и критерии оценки у них общие, а поля разные.

Уровень итоговой задачиКакие задания уроков нужны
Начальный
S-образная линия, два перекрёстка, порядок действий известен заранее.
● Основное 1.12.12.23.13.24.14.25.15.2
Средний
Сеть дорог, четыре перекрёстка, проезд прямо и повторные встречи с перекрёстками.
● Основное 1.12.12.23.13.24.14.25.15.2
★ Средний уровень 1.12.12.23.13.24.14.25.15.2
Продвинутый
Шесть перекрёстков, крутые S-дуги, маршрут по карточке составляешь сам.
● Основное 1.12.12.23.13.24.14.25.15.2
★ Средний уровень 1.12.12.23.13.24.14.25.15.2
★★ Продвинутый уровень 1.12.12.23.13.24.14.25.15.2
  1. Выпиши из журнала задания ★★, которые у тебя получились, и числа надёжности из уроков: ошибку поворота, сколько раз робот прошёл крутую дугу, точность остановки у груза, надёжность доставки из урока 5.2.
  2. Для продвинутого поля назови два самых слабых умения по этим числам.
  3. Выбери поле сам и обоснуй выбор числами. Запиши, что ты сделаешь со слабыми умениями до зачёта.
Должно получиться

Поле выбрано и обосновано числами из журнала, два слабых умения и план по ним записаны.

2

Разберись в задании своего уровня

8 мин
Начальное поле: старт справа вверху, S-образная линия с двумя перекрёстками, у ответвлений грузы и места доставки, финиш слева внизу
Начальное поле.
  1. Выехать из зоны старта влево и найти линию.
  2. По линии пройти левую дугу и доехать до первого перекрёстка.
  3. Перевезти груз 1 с верхнего конца ответвления на нижний — в место 1.
  4. Доехать до второго перекрёстка и перевезти груз 2 с нижнего конца на верхний — в место 2.
  5. Пройти правую дугу, выехать с конца линии в зону финиша и остановиться.

У старта и финиша есть короткие участки без линии: там робот едет прямо по твоим командам.

Среднее поле: сеть дорог с четырьмя перекрёстками А, Б, В, Г, старт слева, финиш справа внизу, два груза и два места доставки
Среднее поле. Перекрёстки отмечены буквами А, Б, В, Г.

Груз 1 → место 1, груз 2 → место 2, затем финиш. Маршрут задан по перекрёсткам:

УчастокЧерез перекрёстки
Старт → груз 1А → В → Б
Груз 1 → место 1Б → В
Место 1 → груз 2В → Г
Груз 2 → место 2Г
Место 2 → финишГ

Куда поворачивать на каждом перекрёстке — налево, направо или прямо, — определяешь ты. Через некоторые перекрёстки робот проезжает несколько раз. Ветки, которых нет в маршруте, не используются.

Продвинутое поле: шесть перекрёстков А–Е, крутая S-образная связка справа, позиции 1–6 на концах линий, старт слева внизу, финиш вверху
Продвинутое поле. Перекрёстки А–Е, конечные позиции 1–6. На схеме — расстановка для карточки 1.

Банки стоят в позициях 1 и 5. Перед планированием вытяни карточку из стопки: на ней написано, в каком порядке и куда их перевезти.

КарточкаПервая доставкаВторая доставка
11 → 45 → 3
21 → 35 → 4
35 → 31 → 4
45 → 41 → 3

Готового маршрута нет: путь по перекрёсткам ты выбираешь сам, до запуска. Правильных путей несколько. Справа на поле — крутая S-образная связка.

Проверь, что твой робот проходит S-образную связку с грузом.

  1. Покажи пальцем на схеме: старт, оба груза, оба места доставки, финиш.
  2. Прочитай критерии оценки в конце урока. За что дают больше всего баллов?
Должно получиться

Ты можешь пересказать задание своего уровня своими словами.

3

Проверь умения по отдельности

10 мин
Безопасность

После загрузки старой программы робот может сразу поехать. Загружай программы при выключенном питании моторов, первый запуск — на подставке.

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

  1. Оба колеса крутятся вперёд и назад; моторы стоят, когда выключены (урок 2.1).
  2. Робот поворачивает на 90° и разворачивается на 180° (урок 2.2).
  3. Робот едет по линии с П-регулятором и проходит дуги своего поля (урок 3.2).
  4. Робот находит перекрёсток и поворачивает с него на нужную линию (уроки 4.1, 4.2).
  5. Ультразвук видит груз на нужном расстоянии (урок 5.1).
  6. Захват берёт, держит и отпускает груз (урок 5.2).
Должно получиться

Все умения проверены. То, что не работает, ты сначала чинишь по разделу «Если не получилось» своего урока.

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

УмениеУрокПрошло из 3
Колёса вперёд, назад и стоп2.1
Поворот 90° и разворот 180°2.2
Линия и дуги своего поля3.2
Перекрёсток и поворот с него4.1, 4.2
Остановка перед грузом5.1
Захват берёт и отпускает5.2
Должно получиться

Таблица заполнена. Умения, которые прошли меньше трёх раз из трёх, ты чинишь первыми.

Проверь умения по своим числам: для каждого запиши, какой результат ты считаешь надёжным, и проверь пять раз.

УмениеМой критерийПрошло из 5
Прямо: увод на 1 мне больше … см
Поворот 90°ошибка не больше …°
Крутая дуга своего полябез схода
Перекрёсток и поворот с негона новую линию
Остановка у груза… ± 1 см
Захватгруз не выпадает при развороте

Умения, которые не прошли пять раз из пяти, отметь — с них начнёшь работу.

Должно получиться

Критерии записаны числами, у каждого умения — результат из пяти проб.

4

Составь план маршрута

16 мин

Хороший инженер сначала планирует, потом пишет код. Самое сложное — повороты на обратном пути: «налево» и «направо» считаются от носа робота, а не от тебя.

УчастокЧто делает роботКакая функция
Старт → линияЕдет прямо до линииdriveStraight()
…
  1. Заполни таблицу плана в бортовом журнале. Одна строка — один участок.
  2. Для каждого перекрёстка запиши: откуда приехал, куда повернул, что делаешь дальше.
  3. Проведи выключенного робота по плану руками. Куда смотрит его нос после каждого разворота?
  4. Запиши, где скорее всего будет ошибка и как ты это проверишь.

В плане семь участков: выезд, линия до перекрёстка 1, груз 1, место 1, перекрёсток 2, груз 2 и место 2, финиш.

В плане есть повороты налево, направо и проезд прямо. Каждая встреча с перекрёстком записана отдельной строкой — даже если это тот же перекрёсток. Программа не видит букв: она знает только, какое по счёту решение сейчас выполняет.

План составлен по своей карточке. Для каждой доставки ты выбрал путь по буквам перекрёстков и можешь объяснить, почему именно его. Маршрут записан так, чтобы для другой карточки менялись только решения на перекрёстках.

Подсказка: Робот развернулся — а что теперь «налево»?

Встань и повернись так же, как робот. Твоя левая рука показывает его «налево».

Должно получиться

План записан. Напарник прошёл по нему с выключенным роботом и не нашёл ошибок.

2
Занятие 2 · 45 мин
Программа по частям
5

Подготовь заготовку

6 мин

Программу собираем из функций. Функция — действие с понятным именем, например turnLeft(). Когда маршрут записан вызовами функций, его легко сверить с планом.

Заготовка с функциямиL61_Courier.ino.ino
// Робот-курьер: моя программа итоговой задачи.// Это заготовка, а не решение. Наполни функции своим проверенным кодом// из прошлых уроков и проверяй каждую отдельно, прежде чем собирать маршрут. // --- Моторы (урок 2.1) ---const int LEFT_DIR_PIN = 7;const int LEFT_SPEED_PIN = 6;const int RIGHT_DIR_PIN = 4;const int RIGHT_SPEED_PIN = 5;const int FORWARD = HIGH; // --- Датчики линии (уроки 3.1 и 3.2) ---const int LEFT_SENSOR_PIN = A4;const int RIGHT_SENSOR_PIN = A5;// Перенеси сюда свои измерения белого и чёрного и коэффициент П-регулятора. // --- Ультразвук (урок 5.1) и захват (урок 5.2) ---// Перенеси сюда контакты и настройки из своих проверенных скетчей. void stopMotors() {  // Остановить оба мотора (урок 2.1).} void driveStraight() {  // Проехать прямо проверенное время (урок 2.1), например въезд в зону финиша.} void turnLeft() {  // Повернуть налево на 90° (урок 2.2) или с перекрёстка до линии (урок 4.2).} void turnRight() {  // Повернуть направо.} void turnAround() {  // Развернуться на 180° (урок 2.2).} void followLineToCrossing() {  // Ехать по линии с П-регулятором до перекрёстка (уроки 3.2, 4.1).  // После перекрёстка сначала съедь с широкой чёрной области.} void approachCan() {  // Ехать по линии и остановиться перед грузом по ультразвуку (урок 5.1).} void pickUp() {  // Остановить моторы и закрыть захват (урок 5.2).} void putDown() {  // Открыть захват и отпустить груз (урок 5.2).} void setup() {  // Подготовь выводы, датчики и захват. Убедись, что моторы стоят.   // Здесь — твой маршрут: вызывай функции в порядке своего плана.   stopMotors();} void loop() {  // Задание выполняется один раз в setup(). После финиша робот стоит.}
  1. Открой заготовку и сохрани её под своим именем.
  2. Перенеси в функции свой проверенный код из прошлых уроков.
Как это устроено: Зачем делить программу на функции

Если поворот работает неправильно, исправлять нужно одно место — саму функцию, а не каждый поворот на маршруте. А маршрут в setup() читается почти как план из журнала.

Программу собираем из функций. Когда маршрут записан вызовами функций, его легко сверить с планом.

Заготовка: маршрут по плануL61_Courier_Plan.ino.ino
// Робот-курьер, средний уровень: маршрут по плану из журнала.// Функций здесь нет: перенеси свои проверенные функции из уроков 2.1–5.2 в раздел ниже.// Маршрут в setup() разбит на участки плана. В каждый участок впиши вызовы функций. // --- Контакты, измерения и настройки из своих скетчей --- // --- Мои функции (перенеси и проверь каждую отдельно) ---// Нужны: остановка моторов, прямой проезд, линия до перекрёстка, проезд перекрёстка// прямо, поворот налево и направо на перекрёстке, разворот на линии, подъезд к грузу,// взять груз, поставить груз. void setup() {  // Подготовь выводы, датчики и захват. Моторы стоят.   // Участок 1. Старт → линия:   // Участок 2. Линия → груз 1:   // Участок 3. Груз 1 → место 1:   // Участок 4. Место 1 → груз 2:   // Участок 5. Груз 2 → место 2:   // Участок 6. Место 2 → финиш, стоп:} void loop() {  // Задание выполняется один раз в setup(). После финиша робот стоит.}
  1. Открой заготовку и сохрани её под своим именем. Готовых функций в ней нет.
  2. Перенеси свои проверенные функции из уроков 2.1–5.2. Проверь по списку в заготовке, что ни одной не забыл.
  3. Перед каждой строкой плана в журнале запиши, какая функция её выполняет. Если для строки нет функции — напиши её и проверь отдельно.
Должно получиться

Все нужные функции перенесены и проверены, у каждой строки плана есть своя функция.

Требование 1. Программа собрана из твоих проверенных программ уроков 4.2–5.2, а не из заготовки:

  • действия — функции: линия до перекрёстка, решения на перекрёстке, подъезд к грузу, взять, поставить, разворот;
  • маршрут — данные, отдельные от действий: для другой карточки меняются только строки маршрута, функции не трогаются;
  • у каждой функции, которая чего-то ждёт, есть защита от бесконечного ожидания.

Своей программы из урока 5.2 нет — возьми у преподавателя решение урока 5.2 как основу; маршрут и защиты пишешь сам.

  1. Запиши в журнал список функций своей программы: что делает каждая и в каком уроке проверена.
  2. Отметь функции без защиты от бесконечного ожидания и добавь защиту.
Должно получиться

Список функций с уроком проверки, маршрут отделён от действий, защиты добавлены.

Продвинутый уровень · Маршрут массивом

Запиши решения на перекрёстках массивом, например char route[] = {'L', 'S', 'R'};, и выполняй их по очереди в цикле, как в уроке 4.2. Тогда для новой карточки достаточно поменять одну строку.

6

Часть 1: от старта до первого груза

12 мин
  1. В setup() вызови функции первого участка: выезд, линия, перекрёсток, поворот, подъезд к грузу.
  2. Проверь на поле только эту часть.
  3. Работает — сохрани копию: «рабочая версия 1».
Должно получиться

Робот выезжает со старта, доезжает по линии до груза 1 и останавливается перед ним.

Если не получилось
Что видишьЧто проверить
Робот не находит линию после стартаСмотрит ли нос робота вдоль линии? Хватает ли длины выезда?
Робот останавливается на дугеДуга — не перекрёсток. Проверь условие поиска перекрёстка.
Робот проезжает перекрёстокСкорость велика или условие перекрёстка не срабатывает.
После поворота робот теряет линиюПроверь, что поворот заканчивается, когда датчик нашёл новую линию.
  1. Запиши в журнал вызовы функций первого участка по плану: выезд, линия, перекрёстки, повороты, подъезд к грузу. Потом перенеси их в setup().
  2. Проверь на поле только эту часть три раза. Робот должен каждый раз остановиться перед грузом 1.
  3. Работает — сохрани копию: «рабочая версия 1».
Подсказка: Где искать ошибку

Сравни, что сделал робот, со строкой плана. На какой строке разошлось? Проверь эту одну функцию отдельно.

Должно получиться

Робот три раза подряд выезжает со старта и останавливается перед грузом 1.

Приёмка части 1. Робот от старта до груза 1: три раза из трёх, в том числе когда его поставили в зоне старта на 2 см левее или правее и чуть повёрнутым.

  1. Запиши маршрут первой части в данные программы и проверь.
  2. Каждую неудачу запиши: какая функция не сработала и почему.
  3. Работает — сохрани «рабочую версию 1».
ЗапускКак стоял на стартеРезультатЧто сорвалось
1Ровно
22 см левее
32 см правее, повёрнут
Должно получиться

Три запуска из трёх с разной постановкой на старте, неудачи разобраны.

7

Часть 2: первая доставка

12 мин
  1. Допиши: захват, разворот, путь к месту 1, отпускание, возвращение к дороге.
  2. Проверь только эту часть: поставь робота перед грузом 1 и запусти.
  3. Работает — сохрани «рабочую версию 2».
Подсказка: Когда закрывать захват?

Сначала останови моторы, потом закрывай захват. Подъезд заканчивай по измерению ультразвука. Если эха нет, это не значит «груз совсем рядом».

Подсказка: Груз уезжает вместе с роботом

Отъезжай только после того, как захват полностью открылся.

Должно получиться

Груз 1 стоит в месте 1, захват открыт, робот на дороге и смотрит туда, куда нужно дальше.

  1. Запиши в журнал вызовы функций первой доставки: захват, разворот, путь к месту 1, отпускание, возвращение к дороге. Потом допиши их в программу.
  2. Проверь только эту часть три раза: ставь робота перед грузом 1 и запускай.
  3. Работает — сохрани «рабочую версию 2».
Подсказка: Порядок с захватом

Вспомни правило урока 5.2: остановиться — закрыть; открыть — подождать — отъехать.

Должно получиться

Три раза подряд груз 1 стоит в месте 1, робот на дороге и смотрит туда, куда нужно дальше.

Приёмка части 2. Первая доставка три раза из трёх, в том числе когда груз сдвинут на 1 см в сторону от линии.

  1. Допиши в данные маршрута первую доставку и проверь её отдельно: ставь робота перед грузом 1.
  2. Как робот узнаёт место отпускания? Запиши, чем это место определяется в твоей программе и насколько точно.
  3. Работает — сохрани «рабочую версию 2».
Должно получиться

Три доставки из трёх, включая сдвинутый груз; способ найти место отпускания и его точность записаны.

8

Часть 3: вторая доставка и финиш

15 мин
  1. Допиши вторую доставку и путь к финишу. Груз 2 стоит в другом месте, поэтому повороты будут другими — сверься с планом.
  2. В конце — прямой въезд в финиш и остановка. После финиша робот должен стоять.
  3. Запусти весь маршрут от старта. Сохрани «рабочую версию 3».
Подсказка: Как понять, что пора въезжать в финиш

Чёрной метки финиша на поле нет. Используй последний ориентир — конец дуги или последний перекрёсток — и проверенное время прямого движения. Два «белых» показания ещё не значат, что линия кончилась: она может быть между датчиками.

Должно получиться

Робот проходит весь маршрут хотя бы в одной пробе. Все рабочие версии сохранены.

Проверь себя
  1. Допиши вторую доставку и путь к финишу по плану. Груз 2 стоит в другом месте, поэтому повороты будут другими. Каждую встречу с перекрёстком — отдельной строкой.
  2. В конце — прямой въезд в финиш и остановка. После финиша робот должен стоять.
  3. Запусти весь маршрут от старта. Если сорвалось — запусти с места срыва только оставшуюся часть. Сохрани «рабочую версию 3».
Подсказка: Как понять, что пора въезжать в финиш

Чёрной метки финиша на поле нет. Используй последний перекрёсток и проверенное время прямого движения.

Должно получиться

Робот проходит весь маршрут хотя бы в одной пробе. Все рабочие версии сохранены.

Проверь себя
  1. Допиши вторую доставку и путь к финишу. После финиша робот стоит.
  2. Запусти весь маршрут от старта. Сохрани «рабочую версию 3».
  3. Проверь отделение маршрута от действий: вытяни другую карточку, составь для неё маршрут и поменяй только данные маршрута. Робот проходит новый маршрут хотя бы один раз.
  4. Запиши, какие части маршрута ненадёжны и что ты проверишь в уроке 6.2.
Должно получиться

Маршрут своей карточки пройден целиком, маршрут второй карточки пройден после замены только данных. Список ненадёжных частей записан.

Проверь себя

Критерии оценки

Зачётные заезды пройдут в уроке 6.2 по этим критериям.

Как оценивается заезд

Максимум 100Зачёт от 70
КритерийБаллыМакс.
Прямой выезд со старта
5 — Сам выехал вперёд из зоны старта.
10 — Доехал до линии и продолжил задание без подталкивания.
10
Движение по линии
10 — Терял линию, но сам возвращался на неё и продолжал маршрут.
20 — Прошёл все участки линии и дуги по датчикам, не теряя линию.
20
Выбор дороги на перекрёстках
5 — За каждое из четырёх решений на перекрёстках, которые совпали с планом.
20
Груз 1: обнаружение
5 — Остановился перед грузом по ультразвуку.
5
Груз 1: захват
5 — Взял груз захватом и увёз, а не вытолкнул.
5
Груз 1: доставка
5 — Груз стоит и частично находится в нужной зоне.
10 — Груз стоит целиком в нужной зоне, захват отпущен.
10
Груз 2: обнаружение
5 — Остановился перед грузом по ультразвуку.
5
Груз 2: захват
5 — Взял груз захватом и увёз, а не вытолкнул.
5
Груз 2: доставка
5 — Груз стоит и частично находится в нужной зоне.
10 — Груз стоит целиком в нужной зоне, захват отпущен.
10
Прямой въезд и остановка
5 — После линии сам въехал вперёд в зону финиша.
10 — Остановился внутри зоны и стоит с выключенными моторами не меньше 3 секунд.
10

Обязательные условия зачёта

  • Команда объясняет свою программу: показывает прямое движение, расчёт П-регулятора, остановку по ультразвуку, управление захватом и строку, которая завершает поездку.
  • Изгибы пройдены по показаниям датчиков линии с П-регулятором.
  • Подъезд к грузу заканчивается по измерению ультразвука, а не только по времени.
  • После старта робота никто не трогает и не отправляет ему команд.

Правила

  • Скорость не оценивается: нет бонуса за быстрый заезд.
  • Отрицательных штрафов нет. Невыполненное действие просто не получает баллов.
  • Груз в чужой зоне или доставленная не по порядку — 0 за её доставку.
  • После помощи руками автономный заезд окончен. Продолжать можно для тренировки, но баллы не добавляются.
  • Каждая попытка оценивается отдельно. Лучшие части разных попыток не складываются.
  • Аварийная остановка ради безопасности не штрафуется.

Проверь себя

Выберите ответы для подготовки. Они не сохраняются и не оцениваются на сайте. Пройдите проверку знаний в программе курса или обсудите ответы с преподавателем.

● Основное

1.Робот ехал на восток и развернулся на 180°. Теперь ему нужно повернуть на север. Куда он поворачивает?
2.Робот нашёл перекрёсток и повернул. Почему перед поиском следующего перекрёстка нужно сначала съехать с чёрной области?
3.Поворот налево оформлен функцией turnLeft() и вызывается четыре раза. Поворот работает неправильно. Сколько мест нужно исправить?
4.Зачем собирать программу по частям и сохранять копию после каждой работающей части?
5.На среднем поле робот проезжает перекрёсток В несколько раз. Как программа понимает, что делать на нём в этот раз?

★ Средний уровень

1.На среднем поле одни и те же перекрёстки встречаются несколько раз. Что поможет не перепутать решения?
2.У строки плана «проехать перекрёсток Б прямо» нет своей функции. Что сделать до сборки маршрута?
3.Часть 1 сработала один раз из трёх. Можно ли переходить к части 2?
4.Весь маршрут сорвался в части 3. Как быстрее проверить исправление?
5.Почему маршрут записывают в setup(), а не в loop()?

★★ Продвинутый уровень

1.Карточка маршрута: налево, направо, прямо. Какая запись верна?
2.Для новой карточки пришлось менять функцию turnLeftAtCrossing(). Что это говорит о программе?
3.Функция подъезда ждёт груз, а груз забыли поставить. Что должно уберечь робота?
4.Часть 1 проходит, если робот стоит на старте ровно, и срывается, если он на 2 см левее. Где слабое место?
5.Маршрут по карточке из четырёх решений обрывается раньше. Почему?
char route[] = {'L', 'S', 'R', 'L'};for (int i = 0; i < 3; i++) {  followLineToCrossing();  decide(route[i]);}

Отвечай на вопросы своего уровня. Нужно верных ответов: Начальный — 4 из 5; Средний — 4 из 5; Продвинутый — 4 из 5. Ответы проверит преподаватель или программа курса.

Итог

У тебя есть план и программа, которая проходит маршрут. В уроке 6.2 ты сделаешь её надёжной и проведёшь зачётные заезды.

Как подтвердить результат

Результат опыта связывает условия, версию программы, наблюдение и вывод. Сравнение попыток с одним изменением помогает проверить причину, включая неудачные попытки. Отметка относится к уже выполненной практике; повтор ради отметки не нужен. Расхождение с прогнозом задаёт следующую проверяемую гипотезу. Модель, измерения настоящего робота и объяснение — разные виды доказательств.

Словарь урока

функцияИменованный блок команд, который можно вызывать много раз: например, turnLeft().
план маршрутаТаблица участков пути: что делает робот и какая функция за это отвечает.
рабочая версияКопия программы, в которой всё написанное уже проверено на поле.