Гурская Наталья Викторовна

могу сделать; могу научить, КАК сделать

------------------------------------------------------------------------------------

 

{jcomments off}Итак, для соревнования 27 февраля в той программе, что уже есть, придется вносить изменения: когда объявлена трасса, по которой нужно проехать в данной попытке, наши юные спортсмены должны САМОСТОЯТЕЛЬНО запрограммировать все повороты робота на перекрестках, которые он будет проезжать.

Поэтому данный материал полезен и тем, которые программу не доделали, и тем, у которых робот уже успешно проехал первую заданную трассу от старта до финиша. Потому что на соревнованиях трасса будет МЕНЯТЬСЯ.

Для начала вспомним структуру нашей программы. Главный блок (Program) выполняем цикл, в котором происходят основные события: робот едет по линии (за это отвечает блок Move), проверяет, не доехал ли он до перекрестка и считает их количество (блоки Krest и AddCount) и поворачивает в нужную сторону (блок Povorot). Выглядит главный блок так:

 

С блоками Move и Krest все разобрались хорошо - робот по линии едет, перекрестки считаются. Для того чтобы правильно выполнить повороты, заглянем сначала внутрь предпоследнего блока - AddCount, которые эти повороты считает. Сначала мы сделали его таким: 

Что делает этот блок? Он выполняет свою главную работу - увеличения значения переменной Count (счетчик поворотов) на 1 и установку переменной OkPov (признак, разрешающий выполнение поворота) в единицу. Но кроме этого, в конце блока стоит звуковой сигнал: робот произносит слово "Detected", что означает "Обнаружен". Это полезно, когда мы только пишем программу и учимся искать перекрестки, но еще не умеем поворачивать. Поэтому после того, как выполнение поворотов запрограммировано, этот звук не очень нужен.

Тем не менее, звуковой блок остался в программе: он выполняет роль задержки. Последний параметр этого блока (со значением 0) задает режим ожидания, пока звук не будет воспроизведен. За это время робот, движущийся с небольшой скоростью, успевает выехать на перекресток, где он должен поворачивать. Те спортсмены, которые выбирали ДРУГОЙ звук для воспроизведения в этом блоке, могли заметить, что робот не доезжает до перекрестка (это если звук короткий) или переезжает и поворачивает позже, чем нужно (если звук длинный). Чтобы избежать влияния длительности звука на поведение робота, можно звуковой блок убрать совсем, или установить последний параметр воспроизведения в 1 (не ждать завершения):

Вот теперь можно поговорить о поворотах. Блок Povorot для каждого значения номера перекрестка Count выполняет нужные для этого перекрестка действия (поворот направо, налево или проезд без поворота). Пусть на первом перекрестке роботу нужно повернуть НАЛЕВО, для этого можно выполнить следующую последовательность действий:

Здесь использовано два блока движений. Первый (направление - прямо) доезжает до центра перекрестка. Изменяемый параметр - угол поворота колес (на рисунке - 100 градусов). Значение его зависит от конструкции робота (насколько вперед вынесены световые датчики) и от того, использовался ли в блоке AddCount звук с задержкой. Может оказаться что у Вашего робота этот параметр равен 0.

Второй блок движения выполняет собственно поворот (на рисунке - налево). Изменяемый параметр тот же - угол поворота колес (на рисунке - 200 градусов). Данное значение параметра для нашего робота обеспечивает поворот практически на прямой угол. Если робот недоворачивает, это значение нужно немного увеличить, если поворачивает слишком сильно - уменьшать. 

В результате КАЖДОГО поворота робот должен оказаться на той линии, по которой он должен продолжить движение, причем эта линия должна находиться МЕЖДУ его световых датчиков. В таком положении он сразу может продолжить движение без выравнивания. Если хотя бы один датчик робота после поворота оказался НАД черной линией, значение параметров нужно изменять.

Отладив первый поворот, дальше намного проще запрограммировать остальные. Пусть на втором повороте робот должен повернуть направо. Нажатием на кнопку с крестиком добавляем вкладку с цифрой 2 (цифру нужно написать самому!), и копируем в нее все блоки с первой вкладки. После этого меняем направление поворота на противоположное, заодно меняем звуковой файл, чтобы робот сказал "Two", что по-английски означает "два":

Осталось разобраться с проездом перекрестка без поворота. Можно оставить соответствующую вкладку (например, третью)  пустой, но это не очень удобно. Нам нужно знать, что робот правильно "сосчитал" перекресток. Поэтому звуковой блок с нужным номером лучше оставить. К тому же, если на перекрестке от линии отходит еще одна (вправо или влево), то робот при определении перекрестка может немного сбиваться с курса (в сторону отходящей линии). Поэтому проезжать вперед не обязательно, но желательно вернуть робота на линию небольшим поворотом в сторону, противоположную отходящей линии (на рисунке - влево):

 

Так же добавляем остальные повороты - 4 , 5 , 6 и дальше до десятого (но обычно поворотов на трассе меньше). Звуковые файлы для этих поворотов вы найдете в папке "Числа" в звуковых файлах LEGO: "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten". (Хорошо тому, кто умеет считать по-английски до десяти!). Вот и трасса для тренировки готова! На финише желательно остановиться, что не составит никакого труда, ведь робот распознает финишную черту как очередной поворот. Поэтому, если мы финишируем после пятого поворота, то программируем финиш как поворот номер шесть:

Чтобы было понятно, что это финиш, робот произносит соответствующее слово (например "Stop" или "Ready", что означает "Готово"). После этого ставим блок прерывания цикла. Поскольку в нашей программе всего один цикл - это главный цикл в блоке Program, то программа завершается и робот останавливается. Если при этом хочется, чтобы он заехал за линию финиша, то можно перед прерыванием цикла поставить блок движения вперед, но это уже предлагается сделать Вам самостоятельно.

Итак, мы научились программировать прохождение заданной траектории на трассе. Если на соревнованиях траектория, предложенная судьей перед попыткой, совпадает с той, нам которой Вы уже тренировались и такая программа на роботе уже есть - радуемся и сразу идем тренироваться. Если же траектория окажется другой - определяем количество перекрестков, какой поворот выполняем на каждом, меняем и отлаживаем программу. Всем успехов на соревнованиях! 

Что непонятно - пишите, пожалуйста! Если все понятно - тоже можно написать :)

{jcomments on}

Как считаются баллы?

  • За 1 место работе дается 1 балл, за 2 - 2 балла, за 3 - 3 балла. Все остальные работы получают 4 балла. Такой столбик у каждого проголосовавшего.

  • Далее по строкам (т. е. за каждую работу) идет суммирование всех баллов. 

  • Места и рейтинг присваиваются от наименьшего результата.

Система опробована неоднократно.