Задача 13. Сумо (NXT-G)
Программирование робота для игры в сумо - простая задача. Тем не менее, она достаточно объемна, поскольку робот, скорее всего, использует несколько датчиков для профессиональной игры. Чтобы показать программирование робота-сумоиста, оговорим заранее его конструкцию. Пусть робот использует датчик освещенности, чтобы контролировать выезд за границу игрового поля. В фронтальной части конструкции поместим под бампером датчик касания, чтобы робот удостоверился в присутствии противника.
Цель игры в данном случае - вывести соперника за границу поля - черную линию.
Предложенная программа - одна из многих простых стратегий. Она предполагает, что датчик освещенности установлен ближе к заднему бамперу робота. Тогда, если его начнут выталкивать за круг, он сможет зафиксировать черную линию прежде, чем коснется ее колесами. В этом случае есть шанс исправить положение, сделав резкий разворот на месте и "напав" на соперника сбоку. Признаком этой ситуации примем отличное от нуля число оборотов двигателей при вращении назад (пока робота толкают до края поля, ему с высокой долей вероятности провернут колеса/гусеницы в обратном направлении).
Еще один вариант стратегии предполагает изначально воздействовать на соперника сбоку, не пытаясь победить только мощностью двигателей. В этом случае после первого столкновения робот должен отъехать назад и обогнуть соперника сбоку. Но тут возникает сложность, которая заключается в поведении робота-соперника. Он не будет стоять на месте во время разворота и появляется опасность "потерять его из вида". Добавим в конструкцию робота датчик расстояния и напишем программу поиска соперника.
В эту программу также можно добавить проверку пересечения линии конца поля (робот вытолкнул или его вытолкнули). Вариант алгоритма управления, как видно из двух предложенных программ, сильно зависит от конструкции робота. Рассмотренные алгоритмы могут быть доработаны на Ваше усмотрение.
Поделиться с друзьями: