В первой части статьи мы вывели нашего нападающего на орбиту вокруг мяча и теперь робот должен сойти с нее в нужной точке, чтобы ударить по мячу в направлении ворот соперников. Очевидно, что для разных расположений мяча на поле эта точка схода будет различной, т.к. угол удара относительно горизонтальной оси поля - разный.
Вооружившись познаниями в геометрии или онлайн-калькулятором прямоугольных треугольников можно рассчитать углы, при которых робот должен сходить с орбиты в каждой точке поля. Поле удобно представить в виде воображаемой координатной сетки, разбив его на нужное вам количество зон - в зависимости от требуемой точности наведения на ворота. На изображении выше для примера приведена разбивка на 9 зон, имеющих координаты от (1,1) до (3,3).
Для каждой зоны будет две точки схода - для движения вокруг мяча по часовой стрелке и против. Отслеживать точку схода удобно по компасу, сравнивая текущий азимут с требуемым с учетом некоторой заданной погрешности.
Но тут нас поджидает неприятность - дело в том, что цифровой компас Hitechnic - устройство несовершенное, и даже после тщательной калибровки в связи с наличием наводок на поле показания будут распределены по окружности неравномерно, в каком-то направлении "градусы будут чаще", в каком-то реже (см. рис).
К счастью сами направления при этом довольно точные, но вот повернуться от текущего направления например на 90 градусов вправо роботу точно не удастся, он фактически не довернется до нужной точки, если в целевом секторе показания меняются чаще чем 1 градус на фактический градус поворота, или наоборот, перелетит ее, если этот сектор с "разреженными" показаниями.
Как же быть в данной ситуации? Выходом может быть калибровка - робот должен знать направления (азимуты) всех интересующих его углов и хранить их в памяти. При этом сравнение должно производиться не с вычисленными углами, а с этими калиброванными значениями.
Итак, робот вышел в точку схода с орбиты и оказался на линии, соединяющей мяч и центр ворот соперников:
Вооружившись познаниями в геометрии или онлайн-калькулятором прямоугольных треугольников можно рассчитать углы, при которых робот должен сходить с орбиты в каждой точке поля. Поле удобно представить в виде воображаемой координатной сетки, разбив его на нужное вам количество зон - в зависимости от требуемой точности наведения на ворота. На изображении выше для примера приведена разбивка на 9 зон, имеющих координаты от (1,1) до (3,3).
Для каждой зоны будет две точки схода - для движения вокруг мяча по часовой стрелке и против. Отслеживать точку схода удобно по компасу, сравнивая текущий азимут с требуемым с учетом некоторой заданной погрешности.
Но тут нас поджидает неприятность - дело в том, что цифровой компас Hitechnic - устройство несовершенное, и даже после тщательной калибровки в связи с наличием наводок на поле показания будут распределены по окружности неравномерно, в каком-то направлении "градусы будут чаще", в каком-то реже (см. рис).
К счастью сами направления при этом довольно точные, но вот повернуться от текущего направления например на 90 градусов вправо роботу точно не удастся, он фактически не довернется до нужной точки, если в целевом секторе показания меняются чаще чем 1 градус на фактический градус поворота, или наоборот, перелетит ее, если этот сектор с "разреженными" показаниями.
Как же быть в данной ситуации? Выходом может быть калибровка - робот должен знать направления (азимуты) всех интересующих его углов и хранить их в памяти. При этом сравнение должно производиться не с вычисленными углами, а с этими калиброванными значениями.
Итак, робот вышел в точку схода с орбиты и оказался на линии, соединяющей мяч и центр ворот соперников:
Похоже что правильным решением будет развернуться на 90 градусов по энкодерам и поехать на мяч, направляя его в ворота. Но подождите - а всегда ли мы сможем достигнуть этой самой точки схода? Мяч - не статичный реквизит на поле и может быть сдвинут другим роботом. Поэтому двигаясь по орбите робот должен быть готов к тому, что с орбиты нужно будет сойти и в случае, если мяч вдруг оказался совсем в другой точке поля.
Положим точки схода роботу удалось достичь и он, развернувшись, смотрит прямо на мяч. Какие его дальнейшие действия? Как ему узнать, что на "линии его взгляда" - вражеские ворота, а перед ним мяч? На второй вопрос можно получить ответ смотря на показания ИК-поисковика, он должен быть в зоне 5, а вот с первым - опять не все так просто. На разных точках поля направление на центр ворот соперников - различно. Как быть?
С одной стороны можно ехать прямо на мяч и считать что ворота именно за ним, но точка схода могла быть достигнута приблизительно, тогда удар будет неточным. Интересным решением будет использование калиброванных направлений на ворота для каждой зоны на поле, вдобавок к калиброванным азимутам точек схода.
В главе 6 "От джойстика до футбола" онлайн курса Сергея Филиппова "Основы робототехники" автор предлагает интересный способ забить мяч в ворота - сначала робот движется на мяч, а как только до него остается совсем небольшое расстояние - движется на ворота, тем самым направляя и подталкивая мяч в их направлении.
Как долго роботу следует это делать? Ответ на этот вопрос робот может получить из следующих источников:
- ИК-поисковик (мяч не на линии движения робота)
- Компас (движение не в направлении ворот соперников)
- Энкодеры и таймер ("атака"слишком затянулась).
До этого момента мы считали что робот в бескрайнем поле и на его пути нет преград, но очевидно что это не так и робот должен быть способен отрабатывать нештатные ситуации, например такие как застревание. Робот может упереться в борт поля, в другого робота или в ворота. Традиционным решениес по контролю застревания в футболе роботов служит анализ показаний компаса. Если они довольно длительное время не изменяются или изменяются в небольших пределах - робот застрял и следует попытаться отъехать назад или как-то еще выйти из затруднительной ситуации. В прошлом сезоне мы столкнулись с тем, что при длительном прогоне по полю от края до края по прямой робот расценивал это как застревание и глупо пятился назад не доехав до мяча совсем немного. Этой ситуации вероятно можно избежать используя анализ расположения мяча относительно робота, например если мяч перед роботом - следует дольше не реагировать на прямолинейный прогон по полю.
Ну что же, с базовой логикой работы нападающего мы разобрались и подходим к самому интересному - к анализу роботами своего положения на поле, которое необходимо для правильного выбора точек схода и направлений атаки нападающим. Но об этом - в следующей части статьи.