Архив рубрики «Роботы»

SnippetBot – .Net-версия бота Алисдара Оуэнса

06.04.2010

SnippetBot – робот Алисдара Оуэнса (Alisdar Owens).

Этот бот состоит из множества полезных участков кода. Он не очень хороший воин (хотя неплохо справляется 1-на-1), а больше полезен для обучения программированию ботов.

Часть кода взято из Nicator и Chrisbot.

Соглашения о коде данного бота:

  • Все углы – в радианах.
  • Хранение абсолютных величин положения противников, а не относительных.
  • Очень мало кода в событиях.

(далее…)

Создание робота для Robocode в .NET

29.03.2010

В данной статье приводится пример создания простого робота для Robocode в .Net на языке C#.

Для разработки использовалась Visual Studio 2008. Если работать в Visual Studio 2010, то в свойствах проекта нужно будет изменить версию фреймворка .Net с 4 на 3.5.

Сначала нужно создать новый проект из шаблона «библиотека классов» (Class Library).

После этого нужно добавить ссылку на библиотеку Robocode .Net, которая, если во время установки использовать путь по умолчанию, находится в папке C:\robocode\libs. Файл называется robocode.dll.

Дальше желательно удалить пустой класс в новом проекте Class1.cs и добавить новый класс MyRobot.cs.

Ниже приведен код простого бота, который можно добавить в новый класс.

// Оригинальный код от FNL, источник:
// http://robowiki.net/wiki/Robocode/.NET/Create_a_.NET_robot_with_Visual_Studio

// Доступ к стандартной системе .Net
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// Доступ к общей API Робокода
using Robocode;

// По соглашению, пространство имен должно называться инициалами разработчика,
// но в нашем случае используем имя всего проекта по трансляции ботов на .Net
namespace RobocodeBotsDotNet
{
    // Имя робота - MyRobot, тип робота - Robot
    class MyRobot : Robot
    {
	    // Главный метод робота, содержащий его логику
	    public override void Run()
        {
            // -- Инициализация робота --

            // Повернуть робота вертикально вверх, а
            // пушку повернуть на 90 градусов
            TurnLeft(Heading - 90);
            TurnGunRight(90);

            // Бесконечный цикл нужен для того, чтобы робот
            // выполнял свою программу до самого конца раунда
            while (true)
            {
                // -- Эти команды повторяются бесконечно --

                // Проехать 5000 пикселов вперед
                Ahead(5000);

                // Повернуть робота на 90 градусов
                TurnRight(90);

                // Наш робот будет двигаться вдоль границ поля
                // боя, повторяя две инструкции выше.
            }
        }

        // Обработчик события робота, когда робот
        // видит другого робота
        public override void OnScannedRobot(ScannedRobotEvent e)
        {
            // Сделать выстрел с мощностью пули = 1
            Fire(1);
        }
    }
}

Соглашения по именованию роботов.

В Робокоде используется соглашение по именованию роботов, согласно которому каждый робот должен принадлежать уникальному пространству имен, как инициалы или никнейм.

В таком случае возможны следующие ситуации:

  • В битве могут участвовать роботы с одинаковыми именами, только если они определены в разных пространствах имен.
  • В одном пространстве имен может быть несколько имен, и будет хорошо, если другие участники боев будут знать, кому принадлежат эти роботы.
  • Во время создания новой битвы будет легко выбрать именно вашего робота.
  • Для сохранения данных, робокоду нужно пространство имен. Использование глобальных пространств имен не допускается.

Таким образом, имена роботов обычно записывают следующим образом:

<ваши инициалы>.<имя робота>_<версия робота>

Полное имя робота, которого мы создали выше, может выглядеть следующим образом: 

RobocodeBotsDotNet.MyRobot_1.0

Запуск скомпилированного робота в Робокоде.

В настройках робокода нужно указать путь, по которому могут находиться библиотеки роботов. Для этого в меню Options -> Preferences -> Development Options нажмите кнопу Add и выберите тот путь, куда попадают скомпилированные библиотеки проекта. Это может быть папка \bin\debug или \bin\release, которая находится в папке всего проекта.

Таким образом, если в Visual Studio изменить бота и скомпилировать, то при перезапуске битвы на поле боя будет находиться уже новая версия бота.

Robocode .NET

23.03.2010

Вышла новая версия битвы роботов Robocode, которая поддерживает роботов, написанных на платформе .Net (единственно, пока нет поддержки mono).

Сделать первые шаги в создании робота поможет вступительная статья:

«Как сделать робота в Visual Studio на платформе .Net на языке c#».

Для разработки более совершенного робота лучше всего учиться у опытных разработчиков – некоторые из них выкладывают своих ботов в открытом доступе:

Планирование перемещений робота с помощью OOPSMP

15.08.2009

Lydia Kavraki roboticsПланирование передвижений – важнейший элемент в любом роботе. Существует много подходов, описанных в большом количестве книг. Исследовательская группа Лидии Каварки в Rice Univercity ведет разработку Объектно-Оринтированной Системы Программирования для Планирования Передвижений (OOPSMP).OOPSMP можно использовать как для обучения, так и для проведения исследований. Эта библиотека объектно ориентирована, ее можно легко расширять. Для работы с ней не обязательно углубляться в детали низкоуровнего программирования: интерфейс высокого уровня позволяет описать решаемую задачу в XML, выбрать некоторый алгоритм и дать системе выполнить всю работу.Профессор Кавраки хорошо известна в среде робототехников и планировщиков за ее работу над вероятностными картами дорог (Probabalistic Roadmaps – RPMs). Каварки представилу концепцию RPMs в 1996 году. В кратце, система работает следующим образом (источник – Wikipedia)

Идея, лежащая в основе RPM, заключается в следующем. Из пространства всех возможных позиций, в которых может находится робот, выбираются случайным образом позиции, и если они ранее не были учтены, локальный планировщик прокладывает между ними путь. На первой итерации добавляются начальная и конечная точки, потом работает алгоритм построения графа перемещений, после чего алгоритм поиска в графе выбирает кратчайший путь.

OOPSMP может оказаться полезной всем, кто решает задачу планирования перемещения. Она бесплатна для некоммерческих прилложений.