brainopia / robocup-client

Code for a robocup team in simulation 3d league

This URL has Read+Write access

brainopia (author)
Tue May 05 01:47:04 -0700 2009
commit  2691d1b21dd84b09461aa2cd6b62e0a055c3e18a
tree    447f3d7815865e11341d129ed3b08c6c32ba5c8f
parent  6feb816d5424635c0bb7118ec5d53632e11ec27c
name age message
file .gitignore Wed Dec 03 00:03:23 -0800 2008 Ignore .DS_Store [brainopia]
file README.rdoc Loading commit data...
directory benchmark/
directory lib/
directory script/
directory spec/
README.rdoc

Для ознакомления с управлением роботом советую использовать script/console – данный скрипт позволяет в интерактивном режиме обмениваться информацией с сервером робокапа.

Робот представлен модулем Player. Чтобы посмотреть доступные методы данного модуля, напишите в консоли Player.m.

Метод m позволяет получить список всех методов (без учета стандартных) для любого объекта.

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

Для того, чтобы перезагрузить самого робота можно использовать Client.reconnect.

Чтобы посмотреть список созданных поз для робота, наберите Player.pose.m. Чтобы вызвать конкретную позу, к примеру hi - напишите Player.pose.hi.

Все позы определены в формате yaml и находятся в папке lib/player/pose/.

Структура суставов робота:

  • голова: h1, h2
  • левая рука: la1, la2, la3, la4
  • правая рука: ra1, ra2, ra3, ra4
  • левая нога: ll1, ll2, ll3, ll4, ll5, ll6
  • правая нога: rl1, rl2, rl3, rl4, rl5, rl6

Для получения информации о состоянии сустава робота вызовите соответствующий метод у модуля Player. Например, Player.h1 – вернет информацию об угле первого сустава головы. Также можно задать угол сустава, например, Player.h1 = 1.

Чтобы следить за состоянием определенного сустава используйте callbacks. throw :done - сигнализирует, что callback закончил свою работу. Пример, в котором будет отображаться информация об изменении h1, пока величина угла не достигнет 10 градусов.

  Player.add_callback(:h1) do |old_value, new_value|
    puts "Угол соединения h1 изменился от #{old_value} к #{new_value}."
    throw :done if new_value.abs > 10
  end

Когда нужно предусмотреть ситуацию с двумя конфликтующими коллбэками (к примеру, при управлении движением сустава), могут пригодиться наблюдатели (observers - по сути, именованные callbacks). При задании наблюдателей с одинаковым именем для одного сустава последний заданный запишется поверх первого.