Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Робототехника продолжается

На этой неделе случилось не слишком много робототехнических занятий, но они таки начали происходить.

Управление из КуМира (по сравнению с управлением из "кирпича") оказалось глючным и медленным -- датчики надёжно работают с дискретизацией примерно 1Гц, но бывают сбои даже на такой частоте. Так, датчик расстояния лучше бы держать неподвижным минимум 1 секунду перед замером, чтобы он показал правильное значение. Ситуацию можно описать как "программисты над этим работают, скоро выйдет новая версия" -- но сколько продлится это "скоро", мне пока непонятно. Пока же изобретаем задачи и готовимся отплыть на другие языки и другие IDE (опять же: "где лучше? где нас нет!" -- ещё не факт, что после переползания куда бы то ни было будет лучше).

Напомню: в математическом активе у дитятки решение задач по теме расстояние-время-скорость по учебнику Гейдмана 1 полугодия 4 класса. Беглый опрос показывает, что про скорость и расстояние дитятка всё понимает. Но вот дальше происходят большие затруднения, ибо сталкиваются
-- курс программирования (робот -- это не учитель, ему нужно объяснять предельно конкретно и без ошибок)
-- курс математики (каждое движение робота нужно вычислять)
-- физика (вычисления относятся к движению робота в реальном времени в физическом пространстве).

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

В этой задаче три расстояния:
-- замер до стенки в точке старта
-- замер до стенки в точке остановки
-- дистанция между стартом и финишем
Далее можно вычислять скорость (задавая время движения от старта до стопа, а также мощность на моторах).

Голова дитятки немедленно переполняется:
-- три разных расстояния
-- скорости (которых вдруг становится много, и они разные -- все они "например")
-- мощности (и их много, они тоже все вдруг оказываются "например")
-- времена (и их тоже сколько угодно)

Единственный способ справиться -- это перейти к записи зависимостей, уйдя от конкретных примеров с конкретными цифрами. Зависимости же выражаются в Ершоле, и на "алгебру" (уход от цифр к буквам, от примеров к формулам) накладывается "программирование" (объявление переменных, синтаксис выражений, присваивания-которые-не равенства, разница вещественных и целых и т.д.).

В итоге всех мучений становится известно, что робот проходит примерно 3.8см/с на колесе меньшего диаметра, и 4.8см/с на колесе большего диаметра при мощности 10, и что скорость от мощности зависит линейно.

Бонус-трек: отрицательные мощности, скорости, расстояния.

2. Роботу нужно пройти заданное расстояние на заданной мощности.
Решение этой задачи требует вычисления времени, на которое нужно запустить моторы на данной мощности. Идея удельной скорости на единицу мощности очень плохо понимается, но зато потом явная радость: робот при самых разных расстояниях и мощностях бегает самое разное время, точно останавливаясь на заданном расстоянии. Это кажется чудом.

3. Теперь нужно пройти заданное расстояние за заданное время ("поезд идёт по расписанию").
Решение этой задачи требует вычисления мощности. Скорость, конечно, вычисляется мгновенно -- но нам-то нужно не скорость, а мощность! Идея "удельной скорости на единицу времени" оказывается прочно забытой, начинается подбор того, что на что нужно делить или умножать -- но подбор быстро захлёбывается ввиду многочисленности объектов, которые нужно держать в памяти.

Итого: ступенька "время-расстояние-скорость+мощность при движении по прямой" оказалась очень крутой, на ней нужно топтаться относительно долго. Так, в задачах реального времени автоматизмы отладки не работают: если вручную пошагово проходить программу, то запуск моторов происходит со скоростью тыкания пальцем по кнопке, и робот успевает круто развернуться, когда один мотор уже включился, а шаг включения второго мотора ещё не пройден. Дитятко же видит, что робот вдруг сорвался с места, повернулся, и поехал -- он перестаёт тыкать пальцем, и робот радостно уезжает далеко-далеко, ибо пошаговое исполнение не доходит до команд останова мотора. Команды останова мотора обязательны (ибо дитятка ожидает, что "программа кончилась, и всё само остановилось" -- ага, как же!). Конечно, робот как-то был уронен и рассыпан, восстановление конфигурации сожрало ползанятия. Беготня от робота к кнопке запуска и обратно тоже отъедает время.

Всё это нужно объяснять, повторять многократно, ждать затухания условных рефлексов предшествующего периода "нарисованного робота", ибо ситуации с ошибками и непониманиями повторяются снова и снова, да и сами ситуации разнообразны.

Приведённых трёх задач явно маловато для надёжного (тренированного) освоения материала. А ведь в их решении нет ещё ни циклов, ни условных операторов, ни даже задействования датчика угла поворота колеса (для оценки пройденного колесом расстояния -- диаметр-то колеса известен!).

Но даже в таком виде мы прошли с КуМиром/Ершолом в разы и разы дальше, чем удалось пройти в прошлом заходе на RobotC. Та ступенька явно была непроходимой, а сейчас всё кажется вполне одолимым.

В нашей школе вдруг обнаружился кружок лего-с-роботами, но жена (которая когда-то занималась фигурным катанием по программе подготовки к большому спорту) рассказала заповедь: не смешивать занятия тех, кто готовится на юношеские разряды с занятиями тех, кто готовится на взрослые разряды. Наш домашний курс робототехники явно из серии "подготовки на взрослый разряд", так что дитятко на этот кружок пока ходить не будет. А там поглядим, что будет дальше.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 6 comments