brainopia / robocup-client

Code for a robocup team in simulation 3d league

This URL has Read+Write access

brainopia (author)
Sat May 16 08:28:09 -0700 2009
commit  c04724c4eb3efcef6dde51f668eb4bd3606e761f
tree    89e7f83aa9b3db314ea888cc661f66a45a85501c
parent  260216612e41e71e33037191098eaf646182b95a
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). При задании наблюдателей с одинаковым именем для одного сустава последний заданный запишется поверх первого.