<< Вернуться на главную

КВАДРОБОЛ

Начинаем очередной конкурс программистов.

Недавно в нашем городе прошел фестиваль "РОБОТЕХ". Там было много чего интересного, и в частности были широко представлены летающие дроны разнообразных конструкций.

Вот мы тоже решили приобщиться к квадрокоптерному спорту и предлагаем конкурсантам сыграть в придуманную нами игру "КВАДРОБОЛ".

Игра проходит в кубическом помещении размером 200х 200х200 метров. Суть игры заключается в том, чтобы управляя 4-мя квадрокоптерами одновременно, максимально точно пересечь центр помещения снизу вверх. За каждое пересечение условной зоны в центре помещения даются очки. При пересечении Снизу вверх очки положительные а при обратном отрицательные. Зона начисления очков представляет собой квадрат со сторонами 40х40м, расположенный горизонтально.

Чем точнее к центру помещения вы пересечете зону, тем больше очков вам начислят. Если квадрокоптер не попал в зону зачисления, то очки не начисляются вообще. Центр помещения имеет координаты 0х0х0. Соответственно размеры игрового куба от -100 до +100 по всем осям. По условиям конкурса считается, что квадрокоптеры самостоятельно держат ориентацию и никогда не поворачиваются относительно осей. Высота представлена осью “Z”, глубина осью “Y” а перемещение вправо-влево это ось “X”. При столкновении квадрокоптеров со стенами помещения или друг другом происходит их падение на пол. После падения можно снова управлять аппаратом.

Управление производится путем выдачи управляющих напряжений одновременно на все органы управления по осям X,Y,Z. Уровень управляющих напряжений от 0 до 255. Напряжение 128 соответствует среднему положению органа управления.

Организаторами конкурса написана полная модель игры в которой учтены все факторы полета (включая контроль на столкновения и ветровые возмущения). Текущие координаты всех квадролетов известны, конкурсантам остается только продумать и реализовать такой алгоритм управления, который принесет максимальное количество очков за ограниченное количество ходов.

Игрушку с ручным управлением для ознакомления можно скачать тут.

В игрушке все квадрокоптеры управляются одновременно стрелками (по Х и Y ) и по высоте кавишами "Q" и "A".
Каждое нажатие клавиши увеличивает или уменьшает положение соответствующего органа управления на "1". В дальнейшем орган управления остается в текущем положении. Поиграв в эту игрушку вы сразу поймете, что без автоматики управлять квадрокоптерами очень трудно, а управлять вручную несколькими и вовсе невозможно.

Игровое поле показано как на чертеже в 3-х проекциях. Нижний левый - вид сверху, верхний левый - спереди, верхний правый - сбоку.

Если квадрокоптер отрывается от земли, то начинают прорисовываться оси (желтые линии). В нижнем правом углу печатаются очки и текущий номер хода. Красными линиями в центре показана зона начисления очков, в которую нужно попадать.

Задача конкурса - за 3000 ходов обеспечить максимальное количество очков.

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

В конкурсе поддержано несколько оболочек и языков программирования. В зависимости от того какая оболочка вам более комфортна вы можете выбрать то что вам ближе. А почему именно такой выбор? Да просто потому, что именно эти оболочки официально куплены нами в СЮТ. А значит, на очном этапе вы можете выбрать любую из этих оболочек. Если у вас другие версии, то вы можете адаптировать проект под вашу оболочку. Это легко делается, потому что основные функции вынесены в DLL. Но учтите, что на очном этапе мы можем обеспечить вам только указанные версии! Впрочем вы можете прийти и со своим ноутбуком, если вас не устраивают наши средства. Игра написана так, что от производительности компьютера она совершенно не зависит.

Для участия в конкурсе качаете готовую затравку
Версия для LAZARUSа.
Версия для DELPHI 7.
Версия для С++BUILDER 9.

Качаете подходящий вам проект, распаковываете его, и смотрите. Там есть подпрограмма пользователя (HOD), которая вызывается 3000 раз по мере выполнения программы. Вот в идеале вы можете править только ее. Желательно в другие места затравок не лазить, а то может проект рассыпасться! Хотя если очень хочется, и вы понимаете что там делается..... Например, можно добавить дополнительные глобальные переменные (они вам наверняка понадобятся).

Для управления существует только одна подпрограмма, которая называется "M_UPR"
PROCEDURE M_UPR(N:INTEGER,DX,DY,DZ:SINGLE);
ей передается номер квадрокоптера (от 1 до 4), и три положения рулей управления (DX,DY,DZ). У рулей среднее положение равно 128. В этом положении квадрокоптер пытается висеть на месте. Значение положение меньше 128 вызывает отрицательное нарастание скорости а значение больше 128 - положительное.
ВНИМАНИЕ! Если вы ошиблись в номере квадрокоптера или положении его урганов управления, то ничего страшного не произойдет, но устойчивость аппарата не гарантируется !

Подпрограммы "M_BEGIN", "M_HOD" являются служебными, и трогать их категорически не рекомендуется!.

А вот например с подпрограммой "M_OTRIS" при желании можно поэкспериментировать. Там ей передается параметр, от значения которого зависит как она станет рисовать. Сейчас реализован только вид "1" (3-и проекции). однако может к очному этапу появится еще. Если у вас очень медренный компютер, то можно вызывать отрисовку например раз в 10 ходов.

Ну а для того, чтобы вы могли как-то анализировать ситуацию предусмотрены информационные подпрограммы и функции
PROCEDURE M_GET(N:INTEGER;VAR X,Y,Z:SINGLE); - Получить координаты "N"-го квадрокоптера
PROCEDURE M_GET_SKOR(N:INTEGER;VAR DX,DY,DZ:SINGLE); - получить скорости квадрокоптера "N"
FUNCTION M_GET_HOD:INTEGER; - Получить номер текущего хода
FUNCTION M_GET_SCORE:SINGLE; - Получить текущие очки (хотя их и так отображает)

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

Месяц всем на ознакомление с задачей, наработки своих методик и подпрограмм, тестирование. А в новогодние каникулы (а конкретно 09.01.2016, в 12:00 в кабинете 2-24 СЮТ) состоится очный этап.
Не забудьте перед тем как сесть за праздничный стол, заглянуть на сайт и поинтересоваться конкретно временем и датой. Вдруг что-то поменяется :-)

ВНИМАНИЕ!

Желающим принять участие в конкурсе очень желательно зарегистрироваться. Чтобы заранее "застолбить" место на очном этапе.
РЕГИСТРАЦИЯ

Учтите, если вы зарегистрировались, то сразу в таблице себя не увидите. Мы постараемся внести информацию в течении 2-х дней.

На сегодня зарегистрировались:

Фамилия и имя Школа Класс Предпочитаемая оболочка
Пермяков Антон 91 10 Lazarus
Мякишев Станислав 103 10 Lazarus
Сивирин Владислав 102 10 Lazarus
Водопьянов Александр СибГАУ 10 Lazarus
Аркатов Владимир 95 10 Lazarus
Юханов Влад 102 10 Lazarus
Артюхов Данила 102 10 Lazarus

PS.
А наработки программ можно будет попробовать и для управления реальными аппаратами. И тогда может получиться как в этом ролике.
Cкачать

По всем вопросам обращайтесь к администрации "Звездного Мира" через систему

Вопрос-ответ.

или по почте