roboforum.ru

Технический форум по робототехнике.


Player/Stage/Gazebo - общие вопросы и концепция

Обсуждаем рождающиеся мысли и результаты экспериментов.

Player/Stage/Gazebo - общие вопросы и концепция

Сообщение =DeaD= » 18 окт 2008, 17:56

Буду здесь описывать чего удалось выяснить про этот инструментарий моделирования и разработки роботов.

Главная страница проекта - http://playerstage.sourceforge.net/
Вика этого проекта - http://playerstage.sourceforge.net/wiki/Main_Page
Описание проекта в общей википедии - http://en.wikipedia.org/wiki/Player_Project

Условия использования - Проект полностью открытый и бесплатный (в т.ч. для коммерческого использования).

Совместимость - Player/Stage работает почти на всём, кроме Windows (Linux, Solaris, BSD, Mac OS X), порт на винду только в планах.

PS: На русском никакой подробной информации по проекту не нашел.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Player/Stage

Сообщение avr123.nm.ru » 18 окт 2008, 17:59

http://playerstage.sourceforge.net/

The Player Project creates Free Software that enables research in robot and sensor systems. The Player robot server is probably the most widely used robot control interface in the world. Its simulation backends, Stage and Gazebo, are also very widely used.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Player/Stage

Сообщение =DeaD= » 18 окт 2008, 18:01

2 avr123: Скорость с которой вы успеваете засовывать во все темы всеразличные ссылки просто феноменальна. Я не успеваю привести в порядок тему, как вы уже засовываете в неё линки.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Player/Stage

Сообщение =DeaD= » 18 окт 2008, 18:14

Общее устройство программного пакета - инструментарий состоит из 3 основных компонент:
* Player - компонента в которую завёрнута всё взаимодействие с железом робота;
* Stage - 2D-симулятор для роботов на основе растровой карты;
* Gazebo - 3D-симулятор для роботов;

Соответственно мы пишем программу, которая по TCP/IP соединяется с одной из этих компонент и либо мы управляем реальным роботом (Player), либо моделью робота в 2D-симуляторе (Stage), либо моделью робота в 3D-симуляторе (Gazebo).
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Player/Stage

Сообщение =DeaD= » 18 окт 2008, 20:56

Архитектура модуля "Player" - я тут перевёл иллюстрацию.

Добавлено спустя 37 минут 59 секунд:
Одним из ключевых элементов модуля "Player" является "устройство" (Device), - это некий интерфейс для взаимодействия с конкретным типом устройств.
Интерфейс этот близок к файлу по методам - его нужно так же открывать для использования, закрывать после использования, можно настраивать параметры доступа и писать в него и читать из него. Для множества однотипных устройств используется индекс для доступа к соответствующему экземпляру.

ВАЖНО! В этом инструментарии не реализована какая либо защита от одновременного использования одного устройства несколькими клиентскими приложениями. Как утверждают разработчики - это сделано для того чтобы можно было проводить интересные эксперименты по кооперативному управлению :roll:

Добавлено спустя 5 минут 49 секунд:
Всё взаимодействие с устройствами делится на 2 типа - синхронное и асинхронное. Считается что подавляющее большинство информации должно проходить в асинхронном режиме. В асинхронном режиме поток от управляющей программы к роботу называется командами (Command), поток информации от робота к управляющей программе данными (Data). В синхронном режиме запросы которые отправляются к роботу от управляющей программы и на которые мы получаем обратно ответы называются конфигурированием (Configuration). Видимо они специально так обозначили, чтобы люди основной обмен старались не реализовывать в синхронном режиме :) (представляете - я постоянно конфигурирую датчики расстояний :)))

Добавлено спустя 1 минуту 26 секунд:
Соответственно для каждого типа устройств есть объявленный "интерфейс" и есть "драйверы" которые его реализуют. Клиентская программа ничего не должна знать о драйверах и должна пользоваться только объявленным "интерфейсом". Что собственно, очевидно :).
Вложения
8.1-Player-Architecture.jpg
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Player/Stage

Сообщение =DeaD= » 19 окт 2008, 01:11

Пример конфигурационного файла описывающего робота для модуля Player:
Sample.cfg писал(а):# The file configures Player to control a Pioneer 2-DX equipped
# with a gripper and a Sony pan-tilt-zoom camera.
position:0 ( driver "p2os_position" port "/dev/ttyS0")
sonar:0 ( driver "p2os_sonar" port "/dev/ttyS0")
gripper:0 ( driver "p2os_gripper" port "/dev/ttyS0")
ptz:0 ( driver "sonyevid30" )


разберем строку position:0 ( driver "p2os_position" port "/dev/ttyS0"):
  • position - идентификатор интерфейса
  • 0 - индекс устройства под указанным интерфейсом;
  • p2os_position - идентификатор драйвера устройства;
  • port "/dev/ttyS0" - параметр драйвера (параметры всегда идут парами "название параметра" и "значение параметра").

Добавлено спустя 43 минуты 28 секунд:
Re: Общие вопросы и концепция Player/Stage/Gazebo
Типы данных:
  • byte/char - длина 1 байт
  • short - 2 байта*
  • int - 4 байта*
Примечание* - порядок байтов в многобайтовых целых "big-endian", т.е. младший байт хранится в старшем адресе, а старший байт в младшем адресе.

Для обозначения момента времени (timestamp) будет использоваться 2-компоненты типа int, первая из которых будет означать время прошедшее с 00:00:00 1 января 1970 года, а вторая - количество микросекунд с начала последней секунды.

Добавлено спустя 8 минут 23 секунды:
Re: Общие вопросы и концепция Player/Stage/Gazebo
После подключения Player выдаёт в TCP/IP строку из 32 символов с указанием своей версии и режима работы (если получилось меньше 32 символов, то оставшиеся позиции он забивает символом #0). Далее весь обмен идёт в специальным образом оформленных сообщениях.

Сообщение состоит из заголовка и тела сообщения.

Формат заголовока (длиной 32 байта):
  • STX - short - идентификатор начала сообщения, всегда число 0x5878
  • type - short - идентификатор типа сообщения
  • device - short - идентификатор интерфейса устройства
  • index - short - идентификатор экземпляра устройства с этим интерфейсом
  • t_sec - int - Первая часть timestamp которую ставит сервер Player при отправке сообщения
  • t_usec - int - Вторая часть timestamp которую ставит сервер Player при отправке сообщения
  • ts_sec - int - Первая часть timestamp полученной от устройства которую ставит сервер Player при отправке сообщения типа "данные"*
  • ts_usec - int - Первая часть timestamp полученной от устройства которую ставит сервер Player при отправке сообщения типа "данные"*
  • reserved - int - зарезервировано для будущего использования
  • size - int - объем в байтах следующих данных, не включая 32 байта заголовка
Примечание* ts_sec + ts_usec нужно понимать, как момент времени в который сенсоры получили эти данные.

Добавлено спустя 7 минут 29 секунд:
Re: Общие вопросы и концепция Player/Stage/Gazebo
Типы сообщений:
  • 0x0001 - сообщение с данными
  • 0x0002 - сообщение с командой
  • 0x0003 - сообщение с запросом
  • 0x0004 - сообщение с ответом на запрос
  • 0x0005 - сообщение синхронизации
  • 0x0006 - сообщение с информацией об ошибке при попытке выполнить запрос (например, невозможно корректно интерпретировать команду или выполнить);
  • 0x0007 - сообщение с информацией о невозможности отправить устройству запрос (например, переполнена очередь запросов);

Добавлено спустя 2 минуты 54 секунды:
Re: Общие вопросы и концепция Player/Stage/Gazebo
Объявленные интерфейсы (идентификатор, строковой идентификатор, текстовое описание):
0x0001 player The player server itself
0x00FF null Null interface
0x0002 power Power subsystem
0x0003 gripper Simple robotic gripper
0x0004 position Mobile robot base
0x0005 sonar Array of fixed acoustic range-finders
0x0006 laser Single-origin scanning range-finder
0x0007 blobfinder Visual color segmentation system
0x0008 ptz Pan-tilt-zoom camera unit
0x0009 audio Fixed-tone generation and detection
0x000A fiducial Fiducial (e.g., landmark) detector
0x000B comms General-purpose communication system
0x000C speech Speech synthesis/recognition system
0x000D gps Global positioning system
0x000E bumper Tactile bumper array
0x000F truth Ground truth (only available in Stage)
0x0010 idarturret Collection of IDAR sensors
0x0011 idar IDAR (Infrared Data and Ranging) sensor
0x0012 descartes The Descartes mobile robot base
0x0014 dio Digitial I/O
0x0015 aio Analog I/O
0x0016 ir Array of fixed infrared range-finders
0x0017 wifi Wireless Ethernet card
0x0018 waveform Raw digital data (e.g., audio)
0x0019 localize Multi-hypothesis localization system
0x001A mcom Inter-robot stack-based communication
0x001B sound Play pre-recorded sound files
0x001C audiodsp Fixed-tone generation and detection
0x001D audiomixer Control sound levels
0x001E position3d Robot base that moves in 3D
0x001F simulation Interface for controlling simulator
0x0020 service adv Service discovery
0x0021 blinkenlight Blinking lights
0x0022 camera Camera images
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Player/Stage/Gazebo - общие вопросы и концепция

Сообщение =DeaD= » 19 окт 2008, 10:50

Продолжим :)

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

Ко всем устройствам есть уровни доступа - Read (будем с них получать данные), Write (сможем писать в них команды), All (Read+Write), Close (закрываем устройство и не будем больше из него читать), Error (это нам могут вернуть, если не смогли получить доступ какой надо);

Изначально для любой клиентской программы открыто только 1 устройство - 0x0001 - сам сервер "Player".
Это устройство позволяет открывать\закрывать другие устройства, настраивать параметры обмена сервера с клиентом и т.п.

сервер Player работает только в режиме обработки запросов (синхронный режим вопрос-ответ).

Часто в запросах будет упоминаться идентификатор устройства, который состоит из пары параметров "идентификатор интерфейса" + "индекс устройства под этим интерфейсом" (на самом деле там есть еще 3-й служебный параметр но нам он не нужен). Мы его будем обозначать player_device_id_t.

Допустимые запросы к серверу:

1. Get Device List - возвращает список устройств, зарегистрированных в Player'е (количество устройств и их список в виде элементов device_id_t);
2. Get Driver Name - возвращает по идентификатору устройства строку с названием драйвера;
3. Request Device Access - возвращает, какой удалось получить доступ к устройству по запросу (может в том числе вернуть не тот уровень доступа, который просили или даже "error", в этом случае к устройству обращаться не следует - всё равно работает не так, как положено), этот же запрос используют, чтобы закрыть устройство;
4. Request Data - если мы выбрали режим доставки данных клиенту "PULL", тогда пакет информации со всех устройств будет направлен нам только после такого запроса.
5. Change Data Delivery Mode - может быть одно из PUSH\PULL_ALL\NEW - т.е. сервер шлёт данные постоянно или по запросу - все или только новые (по умолчанию PUSH_NEW).
6. Change Data Delivery Frequency - частота высылки данных в режиме PUSH в герцах (по умолчанию 10Гц);
7. Authentication - очень простая и ненадежная функция защиты от несанкционированного доступа. Передаёт ключ по сети открытым текстом.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Player/Stage/Gazebo - общие вопросы и концепция

Сообщение =DeaD= » 19 окт 2008, 20:33

Добавлено спустя 24 минуты 9 секунд:
По ходу оказывается это я из старого мануала всё читаю от 2004 года :) сейчас посмотрю что поменялось за 4 года.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Player/Stage/Gazebo - общие вопросы и концепция

Сообщение =DeaD= » 20 окт 2008, 08:50

Да, в свежей версии много чего приведено в порядок, например aio/dio уже позволяют выдавать значения :) правда не понял пока как точно (в смысле можно ли в одном устройстве вводить и выводить на одни и те же линии или они должны быть явно разделены), документация видимо только автоматом сгенерированная из исходников.

Интерфейсы для перемещения в пространстве position1d, position2d, position3d, в которые уже какой-то функционал от PID встроен.

Для манипулятора есть интерфейс limb, для захвата интерфейс gripper.

Интерфейс системы локализации так и остался вроде - localize.

Для всех дальномерных сенсоров сделали унифицированный интерфейс ranger.

Кстати даже есть интерфейс для маяков, называется fiducial (fiducial mark переводится, как "координатная метка"):)
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов


Вернуться в Идеи

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19