{
  "format": "rubrick-lesson",
  "formatVersion": 1,
  "exportedAt": "2026-11-06T20:21:13.897Z",
  "source": {
    "lessonId": "00000000-0000-4000-8001-6d6f64b8eb33",
    "courseId": "00000000-0000-4000-8000-f42087059b37",
    "courseTitle": "Робот видит",
    "ordering": 5,
    "updatedAt": "2026-09-27T10:47:15.604957+00:00"
  },
  "lessonTask": null,
  "lessonTaskSchemaVersion": null,
  "lesson": {
    "schemaVersion": 3,
    "id": "vision-05-fetch",
    "courseId": "vision",
    "order": 5,
    "title": "Найди и привези",
    "summary": "Проект: робот находит предмет, подъезжает и возвращается на старт",
    "duration": 45,
    "mode": "blocks",
    "attachments": [],
    "sections": [
      {
        "kind": "intro",
        "body": "Проект: робот находит предмет, подъезжает и возвращается на старт\n\n### Чему научишься\n- Организовать поиск по кругу\n- Записать видео поездки\n- Вернуться близко к старту\n\n### Новое\n- Поиск — это цикл: повернулся, посмотрел, повторил\n- Чтобы вернуться, надо помнить, сколько проехал\n- Робот, который не нашёл, тоже должен закончить программу достойно",
        "attachments": [],
        "steps": []
      },
      {
        "kind": "task",
        "body": "Собери робота, который найдёт предмет где-то в комнате, подъедет к нему, снимет это на видео и вернётся туда, откуда начал.\n\n### Результат\n- Робот сам нашёл предмет\n- Есть видеозапись поездки\n- Робот вернулся близко к старту\n- Если предмет не найден — программа завершилась осмысленно",
        "attachments": [],
        "steps": [
          {
            "id": "s1",
            "title": "Поиск",
            "body": "Крутись по чуть-чуть, пока предмет не окажется в кадре.",
            "attachments": []
          },
          {
            "id": "s2",
            "title": "Запись",
            "body": "Включи запись видео перед поездкой и выключи после.",
            "attachments": []
          },
          {
            "id": "s3",
            "title": "Подъезд",
            "body": "Подъедь к предмету на 20 см.",
            "attachments": []
          },
          {
            "id": "s4",
            "title": "Возврат",
            "body": "Развернись и вернись примерно на то же расстояние.",
            "attachments": []
          }
        ],
        "hints": [
          "Робот не возвращается на место? Он вернётся ровно на столько, на сколько ты ему сказал — а подъезжал он на неизвестное заранее расстояние. Подумай, как это узнать."
        ]
      },
      {
        "kind": "assembly",
        "body": "### Понадобится\n- Настоящий робот\n- Узнаваемый предмет\n- Комната со свободным местом\n\nБазовая платформа. Отметь старт на полу — по нему будешь проверять возврат.",
        "attachments": [],
        "steps": []
      },
      {
        "kind": "connection",
        "body": "",
        "attachments": [],
        "steps": []
      },
      {
        "kind": "example",
        "body": "### Что должно получиться\n- Нужен настоящий робот",
        "attachments": [],
        "steps": [],
        "program": {
          "mode": "blocks",
          "python": "robot.configure_drive(wheel_diameter_mm=43.2, track_width_mm=120, left_motor=1, right_motor=2)\nпредмет = \"мяч\"\n\nнашёл = False\nfor попытка in range(12):        # двенадцать раз по 30° — полный круг\n    if robot.see(предмет):\n        нашёл = True\n        break\n    robot.turn_right(30)\n    robot.wait(0.3)\n\nif not нашёл:\n    robot.face(\"sad\")\n    robot.say(\"Не нашёл\")\nelse:\n    robot.record_start()\n    расстояние = robot.see_distance(предмет) or 60\n    robot.turn_to(предмет)\n    robot.approach(предмет, cm=20)\n    robot.face(\"happy\")\n    robot.record_stop()\n\n    # Обратно: проехали примерно «расстояние минус 20 см».\n    robot.turn_left(180)\n    robot.forward_cm(max(расстояние - 20, 0))\n\nrobot.stop()\n"
        }
      },
      {
        "kind": "next",
        "body": "",
        "attachments": [],
        "steps": []
      }
    ],
    "category": "Проект",
    "colour": "#FFF200"
  }
}