Робот по линии уже бегает, и теперь нужно заставлять дитенку писать какой-то код, чтобы он:
-- не дёргался
-- бегал быстрее
Для этого нужно как-то объяснить кусочек теории автоматического регулирования (PID controller,
http://en.wikipedia.org/wiki/PID_controller, ПИД регулятор
http://ru.wikipedia.org/wiki/%D0%9F%D0%98%D0%94-%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%82%D0%BE%D1%80). Современные альтернативы алгоритмам ПИД обсуждаются в спецпрессе (например,
http://www.cybosoft.com/newsevents/mfavsother.html -- табличка сравнения пяти методов, выигрывает model-free adaptive, MFA), но они явно не проще (поглядите на архитектуру этого MFA --
http://www.cybosoft.com/newsevents/mfa.html) -- и, похоже, во многих случаях, не лучше. Если уж и учить чему-то третьеклассника на материале робототехники, то для начала именно ПИД:
-- первая задача: отсутствие дерганий при остановке на заданном расстоянии от подвижной стенки (
http://www.robotc.net/blog/2011/12/05/incredible-video-explaining-pid/)
-- вторая задача: невихляющее движение по линии
-- третья задача: двухколёсный робот-сегвей (
http://www.nxtprograms.com/NXT2/segway/steps.html)
На этом, думаю, можно будет остановиться (а MFA учить через некоторое время -- "used as a key component, a multilayer perceptron neural network consists of one input layer, one hidden layer with N neurons, and one output layer with one neuron").
Сеть изобилует попытками объяснить ПИД "не для PhD" -- и по-русски (
http://roboforum.ru/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%D0%B4_%D1%81%D1%82%D0%B0%D1%82%D1%8C%D0%B8_%22%D0%9F%D1%80%D0%BE%D1%81%D1%82%D0%BE_%D0%BE_%D0%9F%D0%98%D0%94-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%B0%D1%85%22,
http://rutracker.org/forum/viewtopic.php?t=2072337 -- тут восхититесь нецифровыми решениями) и по-английски (поищите в Гугле -- там море разливанное).
Главный вопрос: как объяснять ПИД третьекласснику?
ПИД -- это примерно сотня строк кода в самом общем и навороченном варианте из используемых в любительской робототехнике (
http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/), но для учебных целей можно обойтись и двадцатью строками. Поскольку дитенка мой может написать до пятидесяти строк связного кода ненулевой сложности, то я ожидаю, что ему этот код как-то удастся объяснить, но сходу видны проблемы с объяснением параметров и их подбором. Хотя есть варианты:
1. Математику в силу полной неадекватности для третьеклассника не давать, но показывать много графиков -- вдруг поймёт хоть что нибудь? Попытаться объяснить слова "интегральный" и "дифференциальный" -- тоже: а вдруг поймёт, или хотя бы запомнит? Как при этом писать код, не очень понимаю.
2. Ровно наборот: взять готовую библиотечную процедуру PID (таковых множество), заколотить гвоздями, сказать "пользуйся", а параметры настраивать самому. Учить тому, что "с ПИД лучше, чем без ПИД -- убедись сам". На вопрос, "как оно работает" отвечать: "вырастешь -- узнаешь" (если, конечно, такой вопрос будет, что не факт). Код писать не нужно, о ПИД будет главное знание: что он есть, и в чем от него может быть польза.
3. Ничего не говорить про математику, объяснять по программистски: что в переменных программы, что значит каждая строчка коротенького алгоритма, как усложняется пропорциональный алгоритм при учёте очередных особенностей системы. Избегать математических терминов, для "пропорционально" оставить всё как есть, а вот для "интегральный" и "дифференциальный" придумать какие-то более понятные слова ("с накоплением отклонения", "с предсказанием отклонения"). Графиков не рисовать, всё показывать на конкретных роботах и трассах, менять роботов и трассы для того, чтобы обобщить результирующий алгоритм в библиотечный вид. Настройку давать "подбором значений".
Может, кто-то встречал такой курс "ПИД без математики"? Или кто-то может сам придумать, как такое объяснять малым деткам -- так, чтобы детки написали свои двадцать строк кода?