LXF159:Школа LXF: Роботы-спортсмены? Да!
Olkol (обсуждение | вклад) (→Японская борьба) |
Olkol (обсуждение | вклад) (→Японская борьба) |
||
(не показаны 15 промежуточных версий 1 участника) | |||
Строка 20: | Строка 20: | ||
''' | ''' | ||
==Японская борьба== | ==Японская борьба== | ||
− | [[Файл:Robosumo1_opt.png |right|200px |thumb|Код движения робота ]] | + | [[Файл:Robosumo1_opt.png |right|200px |thumb|Рис.4. Код движения робота ]] |
− | [[Файл: Movie_red_opt.png| | + | [[Файл: Movie_red_opt.png|left|200px|thumb|Код для управления красного робота ]] |
+ | [[Файл: Movie_blue_opt.png|left|200px|thumb| Код для управления синего робота ]] | ||
+ | [[Файл:Kasanie_red_opt2.png |right|200px|thumb|Касание]] | ||
+ | [[Файл:Scena_script_opt.png |right|200px |thumb|Код "Для сцены"]] | ||
Начнем с симулятора японской борьбы сумо. Она как-никак подходит к роботам – не правда ли, вид толстячков-сумотори (борцов) сверху напоминает круглый корпус робота? Правила борьбы очень просты: вытолкни другого из круга. Но задача данного плана гораздо сложнее, чем просто езда по линии – нам надо смоделировать некоторые физические явления, а именно столкновение роботов. То есть роботы должны двигаться, сталкиваться и отпихивать друг друга. | Начнем с симулятора японской борьбы сумо. Она как-никак подходит к роботам – не правда ли, вид толстячков-сумотори (борцов) сверху напоминает круглый корпус робота? Правила борьбы очень просты: вытолкни другого из круга. Но задача данного плана гораздо сложнее, чем просто езда по линии – нам надо смоделировать некоторые физические явления, а именно столкновение роботов. То есть роботы должны двигаться, сталкиваться и отпихивать друг друга. | ||
− | [[Файл: Robots_opt.png| | + | [[Файл: Arena_opt.png|right|100px|thumb|Рис. 2. Арена ]] |
+ | [[Файл: Robots_opt.png|right |100px |thumb|Рис. 1. Портреты роботов-соперников: горячий против холодного? ]] | ||
+ | |||
Так как полноценную физику взаимодействия описать достаточно сложно (особенно в Scratch, и особенно для тех, кто не знаком с понятиями момента и упругого соударения и тригонометрическими функциями), мы попытаемся сделать упрощенную модель, которая с некоторым приближением будет имитировать реальную, но обходиться без сложных функций. | Так как полноценную физику взаимодействия описать достаточно сложно (особенно в Scratch, и особенно для тех, кто не знаком с понятиями момента и упругого соударения и тригонометрическими функциями), мы попытаемся сделать упрощенную модель, которая с некоторым приближением будет имитировать реальную, но обходиться без сложных функций. | ||
Представим, что у робота два колеса, и если его специально не повернуть, он может двигаться при столкновении только вперед и назад. Для этого мы используем понятие направления Scratch (то есть угол поворота робота) и движения, происходящего вперед и назад по прямой линии направления. Борьба будет между красным и синим роботом, поэтому создайте два персонажа, как показано на рис. 1. | Представим, что у робота два колеса, и если его специально не повернуть, он может двигаться при столкновении только вперед и назад. Для этого мы используем понятие направления Scratch (то есть угол поворота робота) и движения, происходящего вперед и назад по прямой линии направления. Борьба будет между красным и синим роботом, поэтому создайте два персонажа, как показано на рис. 1. | ||
− | |||
− | |||
− | |||
− | + | Понятие направления мы разбирали в статье LXF156 «Робот на экране. Движение и управление» в рамках понятия Ориентация. | |
+ | Так как наш робот круглый, нужно будет только определить, куда двигался робот соперника, а куда – наш робот, и подвинуть робота в нужном направлении. Код движения робота приблизительно отображен на рис.4. | ||
+ | [[Файл:Init_red_opt.png |left|200px | thumb| Начальное положение красного робота]] | ||
+ | [[Файл:Init_blue_opt.png |left|200px | thumb|Начальное положения синего робота ]] | ||
+ | [[Файл: Full_kasanie_red_opt.png|right|200px | thumb| Сигнал победы синего робота]] | ||
Если наш робот ехал в положительном направлении (больше нуля – направо), а робот соперника двигался в отрицательном (меньше нуля – налево, навстречу нам), то нас отбросит назад. То же произойдет, если мы двигались в отрицательном направлении (налево), а робот соперника, наоборот, направо: нас также отбросит назад (то есть нужно будет двигаться на минус число шагов). | Если наш робот ехал в положительном направлении (больше нуля – направо), а робот соперника двигался в отрицательном (меньше нуля – налево, навстречу нам), то нас отбросит назад. То же произойдет, если мы двигались в отрицательном направлении (налево), а робот соперника, наоборот, направо: нас также отбросит назад (то есть нужно будет двигаться на минус число шагов). | ||
− | [[Файл: | + | [[Файл: Full_kasanie_red_opt.png|left|200px | thumb| Сигнал победы красного робота]] |
Для отслеживания направления мы вводим две переменные – napr1 и napr2, для красного и синего робота соответственно, а изменение направления определяем событием kasanie. | Для отслеживания направления мы вводим две переменные – napr1 и napr2, для красного и синего робота соответственно, а изменение направления определяем событием kasanie. | ||
Строка 40: | Строка 46: | ||
Добавив к роботам код управления, можно перемещать роботов по полю соответственно стрелками курсора и клавишами WASD. | Добавив к роботам код управления, можно перемещать роботов по полю соответственно стрелками курсора и клавишами WASD. | ||
− | + | ||
Далее нужно реализовать код реагирования на касание. Передадим сигнал kasanie, если будет касание противоположного персонажа. Например, для красного робота этот участок кода отображен на рисунке "Касание" ниже и справа. | Далее нужно реализовать код реагирования на касание. Передадим сигнал kasanie, если будет касание противоположного персонажа. Например, для красного робота этот участок кода отображен на рисунке "Касание" ниже и справа. | ||
Теперь уже можно погонять роботов по полю; но наша задача – реализовать настоящую борьбу. Для этого запрограммируем арену. | Теперь уже можно погонять роботов по полю; но наша задача – реализовать настоящую борьбу. Для этого запрограммируем арену. | ||
− | + | ||
Нарисуйте фон для сцены, как показано на рис. 2. | Нарисуйте фон для сцены, как показано на рис. 2. | ||
+ | |||
+ | |||
Как видно, у нас имеется арена желтого цвета и зеленое поле реагирования для определения выталкивания робота. Вы можете оформить арену как вам нравится – главное, не используйте цвет, выбранный для пространства вне арены, чтобы они зрительно не сливались. | Как видно, у нас имеется арена желтого цвета и зеленое поле реагирования для определения выталкивания робота. Вы можете оформить арену как вам нравится – главное, не используйте цвет, выбранный для пространства вне арены, чтобы они зрительно не сливались. | ||
Строка 51: | Строка 59: | ||
Также создадим еще два фона: один с сообщением о выигрыше красного робота, второй – синего (рис. 3). | Также создадим еще два фона: один с сообщением о выигрыше красного робота, второй – синего (рис. 3). | ||
Для красного робота – | Для красного робота – | ||
− | + | ||
− | + | ||
Для отображения нужного фона введем два события – redwin и bluewin. | Для отображения нужного фона введем два события – redwin и bluewin. | ||
Смотри код "Для сцены": | Смотри код "Для сцены": | ||
Теперь нам остается сделать две последние вещи: дописать к коду касания выдачу сигнала, обозначающего выигрыш робота противоположного цвета при касании зеленого поля, а также поставить роботов в начальное положение. Допишем эти два участка кода. | Теперь нам остается сделать две последние вещи: дописать к коду касания выдачу сигнала, обозначающего выигрыш робота противоположного цвета при касании зеленого поля, а также поставить роботов в начальное положение. Допишем эти два участка кода. | ||
− | + | ||
− | + | ||
Вы можете скачать полный код проекта с сайта http://scratch.mit.edu/projects/akdengi/2618677. | Вы можете скачать полный код проекта с сайта http://scratch.mit.edu/projects/akdengi/2618677. | ||
В следующей части мы снабдим наших роботов «разумом» и разберем различные алгоритмы их управления. Если вы сумеете сделать это раньше нас, напишите нам на info@linuxformat.ru, и мы обязательно опубликуем и ваше решение. | | В следующей части мы снабдим наших роботов «разумом» и разберем различные алгоритмы их управления. Если вы сумеете сделать это раньше нас, напишите нам на info@linuxformat.ru, и мы обязательно опубликуем и ваше решение. | | ||
− | |||
− | |||
− | |||
− | |||
− |
Текущая версия на 17:01, 26 сентября 2018
|
|
|
Школа LXF
[править] Роботы-спортсмены? Да!
Обмен опытом и передовые идеи по использованию свободного ПО в образовании
Возможно ли такое? Татьяна Казанцева утверждает, что возможно – для них даже существует своя Олимпиада.
Как узнать, чей робот лучше — устроить конкурс красоты? Поверить на слово его создателям? Верный ответ нам может дать только честная борьба. Робоолимпиады (или Robocup) — уже признанный способ выявить, чей робот имеет лучшую конструкцию и алгоритмы работы и кому благоволит фортуна.
В прошлых выпусках LXF, изучая датчики, мы уже фактически сделали первые шаги в сторону соревнований – езда по линии и выход из лабиринта являются фундаментальными дисциплинами, которые робот должен обязательно пройти.
Участие в таких соревнованиях является не только желательным, но даже обязательным для признания конструкции робота успешной, и позволяет выявить дефекты конструкции.
Давайте поднимем планку и создадим симуляцию более сложных дисциплин, на которых обкатаем алгоритмы, впоследствии применимые к реальному «железу».
[править] Японская борьба
Начнем с симулятора японской борьбы сумо. Она как-никак подходит к роботам – не правда ли, вид толстячков-сумотори (борцов) сверху напоминает круглый корпус робота? Правила борьбы очень просты: вытолкни другого из круга. Но задача данного плана гораздо сложнее, чем просто езда по линии – нам надо смоделировать некоторые физические явления, а именно столкновение роботов. То есть роботы должны двигаться, сталкиваться и отпихивать друг друга.
Так как полноценную физику взаимодействия описать достаточно сложно (особенно в Scratch, и особенно для тех, кто не знаком с понятиями момента и упругого соударения и тригонометрическими функциями), мы попытаемся сделать упрощенную модель, которая с некоторым приближением будет имитировать реальную, но обходиться без сложных функций.
Представим, что у робота два колеса, и если его специально не повернуть, он может двигаться при столкновении только вперед и назад. Для этого мы используем понятие направления Scratch (то есть угол поворота робота) и движения, происходящего вперед и назад по прямой линии направления. Борьба будет между красным и синим роботом, поэтому создайте два персонажа, как показано на рис. 1.
Понятие направления мы разбирали в статье LXF156 «Робот на экране. Движение и управление» в рамках понятия Ориентация.
Так как наш робот круглый, нужно будет только определить, куда двигался робот соперника, а куда – наш робот, и подвинуть робота в нужном направлении. Код движения робота приблизительно отображен на рис.4.
Если наш робот ехал в положительном направлении (больше нуля – направо), а робот соперника двигался в отрицательном (меньше нуля – налево, навстречу нам), то нас отбросит назад. То же произойдет, если мы двигались в отрицательном направлении (налево), а робот соперника, наоборот, направо: нас также отбросит назад (то есть нужно будет двигаться на минус число шагов).
Для отслеживания направления мы вводим две переменные – napr1 и napr2, для красного и синего робота соответственно, а изменение направления определяем событием kasanie.
Коды для красного и синего робота абсолютно одинаковы.
Добавив к роботам код управления, можно перемещать роботов по полю соответственно стрелками курсора и клавишами WASD.
Далее нужно реализовать код реагирования на касание. Передадим сигнал kasanie, если будет касание противоположного персонажа. Например, для красного робота этот участок кода отображен на рисунке "Касание" ниже и справа.
Теперь уже можно погонять роботов по полю; но наша задача – реализовать настоящую борьбу. Для этого запрограммируем арену.
Нарисуйте фон для сцены, как показано на рис. 2.
Как видно, у нас имеется арена желтого цвета и зеленое поле реагирования для определения выталкивания робота. Вы можете оформить арену как вам нравится – главное, не используйте цвет, выбранный для пространства вне арены, чтобы они зрительно не сливались.
Также создадим еще два фона: один с сообщением о выигрыше красного робота, второй – синего (рис. 3). Для красного робота –
Для отображения нужного фона введем два события – redwin и bluewin. Смотри код "Для сцены":
Теперь нам остается сделать две последние вещи: дописать к коду касания выдачу сигнала, обозначающего выигрыш робота противоположного цвета при касании зеленого поля, а также поставить роботов в начальное положение. Допишем эти два участка кода.
Вы можете скачать полный код проекта с сайта http://scratch.mit.edu/projects/akdengi/2618677.
В следующей части мы снабдим наших роботов «разумом» и разберем различные алгоритмы их управления. Если вы сумеете сделать это раньше нас, напишите нам на info@linuxformat.ru, и мы обязательно опубликуем и ваше решение. |