LXF159:Школа LXF: Роботы-спортсмены? Да!
Olkol (обсуждение | вклад) |
Olkol (обсуждение | вклад) (→Роботы-спортсмены? Да!) |
||
Строка 9: | Строка 9: | ||
''Возможно ли такое? Татьяна Казанцева утверждает, что возможно – для них даже существует своя Олимпиада.'' | ''Возможно ли такое? Татьяна Казанцева утверждает, что возможно – для них даже существует своя Олимпиада.'' | ||
− | + | ||
− | + | [[Файл:KazancevaTatiana_opt.png |left |100px |thumb|'''Наш эксперт'''. Во время, свободное от корпения над написанием методики скрещивания Scratch и Arduino, Татьяна Казанцева оттачивает навыки работы со свободным ПО для использования в школе и дома.]] | |
'''Как узнать, чей робот лучше — устроить конкурс красоты? Поверить на слово его создателям? Верный ответ нам может дать только честная борьба. Робоолимпиады (или Robocup) — уже признанный способ выявить, чей робот имеет лучшую конструкцию и алгоритмы работы и кому благоволит фортуна. | '''Как узнать, чей робот лучше — устроить конкурс красоты? Поверить на слово его создателям? Верный ответ нам может дать только честная борьба. Робоолимпиады (или Robocup) — уже признанный способ выявить, чей робот имеет лучшую конструкцию и алгоритмы работы и кому благоволит фортуна. | ||
Строка 30: | Строка 30: | ||
Так как наш робот круглый, нужно будет только определить, куда двигался робот соперника, а куда – наш робот, и подвинуть робота в нужном направлении. Код приблизительно будет выглядеть следующим образом: | Так как наш робот круглый, нужно будет только определить, куда двигался робот соперника, а куда – наш робот, и подвинуть робота в нужном направлении. Код приблизительно будет выглядеть следующим образом: | ||
+ | [[Файл:Robosumo1_opt.png |right|400px |thumb|]] |
Версия 01:59, 24 сентября 2018
|
|
|
Школа LXF
Роботы-спортсмены? Да!
Обмен опытом и передовые идеи по использованию свободного ПО в образовании
Возможно ли такое? Татьяна Казанцева утверждает, что возможно – для них даже существует своя Олимпиада.
Как узнать, чей робот лучше — устроить конкурс красоты? Поверить на слово его создателям? Верный ответ нам может дать только честная борьба. Робоолимпиады (или Robocup) — уже признанный способ выявить, чей робот имеет лучшую конструкцию и алгоритмы работы и кому благоволит фортуна.
В прошлых выпусках LXF, изучая датчики, мы уже фактически сделали первые шаги в сторону соревнований – езда по линии и выход из лабиринта являются фундаментальными дисциплинами, которые робот должен обязательно пройти.
Участие в таких соревнованиях является не только желательным, но даже обязательным для признания конструкции робота успешной, и позволяет выявить дефекты конструкции.
Давайте поднимем планку и создадим симуляцию более сложных дисциплин, на которых обкатаем алгоритмы, впоследствии применимые к реальному «железу».
Японская борьба
Начнем с симулятора японской борьбы сумо. Она как-никак подходит к роботам – не правда ли, вид толстячков-сумотори (борцов) сверху напоминает круглый корпус робота? Правила борьбы очень просты: вытолкни другого из круга. Но задача данного плана гораздо сложнее, чем просто езда по линии – нам надо смоделировать некоторые физические явления, а именно столкновение роботов. То есть роботы должны двигаться, сталкиваться и отпихивать друг друга.
Так как полноценную физику взаимодействия описать достаточно сложно (особенно в Scratch, и особенно для тех, кто не знаком с понятиями момента и упругого соударения и тригонометрическими функциями), мы попытаемся сделать упрощенную модель, которая с некоторым приближением будет имитировать реальную, но обходиться без сложных функций.
Представим, что у робота два колеса, и если его специально не повернуть, он может двигаться при столкновении только вперед и назад. Для этого мы используем понятие направления Scratch (то есть угол поворота робота) и движения, происходящего вперед и назад по прямой линии направления. Борьба будет между красным и синим роботом, поэтому создайте два персонажа, как показано на рис. 1.
Понятие направления мы разбирали в статье LXF156 «Робот на экране. Движение и управление» в рамках понятия Ориентация.
Так как наш робот круглый, нужно будет только определить, куда двигался робот соперника, а куда – наш робот, и подвинуть робота в нужном направлении. Код приблизительно будет выглядеть следующим образом: