Как уже говорилось в статье про архитектуру URBI — комания Gostai предоставляет целый набор программных продуктов: Urbi SDK, urbiConsole, Gostai Lab и Gostai Studio.
Gostai Studio — это IDE для создания графических программ, определяющих поведение роботов или других сложных систем. Программа, включающая в себя все функции Gostai Console. Это высокоуровневая интегрированная среда разработки для Urbi. Её формализм основывается на иерархических конечных автоматах (HFSM — Hierarchical Finite State Machines). Интуитивный визуальный редактор, визуальное отслеживание выполнения кода в реальном времени.
Запустим Gostai Studio.
Он сразу же предлагает пройтись по руководству, но для этого нужно ещё устанавливать Webots, поэтому посмотрим примеры, которые идут в комплекте со студией.
Самый простой пример Пинг-понг:
File — Open — Examples… — Generic — PingPong.ubg
открыв его увидим два узла, связанные между собой:
зелёным треугольником выделяется узел с которого начинается выполнение программы — для этого достаточно щёлкнуть на узле правой кнопкой мышки и выбрать из выпадающего меню
«Set as start node».
Выделяется узел щелчком левой кнопки мышки, при этом узел отмечается зелёными сегментами, а выделенная стрелка подсвечивается зелёным.
При выделении объекта в боковом окошке Script появляется код узла или связи.
Как видим у правого узла код:
sleep(2s); echo("pong");
у обеих связей код:
workEnded?
а у левого узла код:
sleep(2s); echo("ping");
Думаю, стало понятно, как ведёт себя программа.
На каждом узле происходит 2-секундная задержка, затем вывод сообщения в консоль и завершение работы, по которому связь переводит управление к противополложному узлу.
Нажав на кнопку Play (зелёный треугольник) — программа запустится на исполнение и мы увидим, как узлы по мере выполнения программы поочереди подсвечиваются оранжевым
,а в консоли увидим:
#[0000614907] *** Start `PingPong'. #[0000615922] *** ping #[0000616938] *** pong #[0000617955] *** ping #[0000618966] *** pong #[0000619987] *** ping #[0000621004] *** pong #[0000621092] *** Stop `PingPong'.
Чтобы завершить программу достаточно нажать на кнопку Stop (с красным квадратом).
Теперь уже немного разобравшись в том, как работают эти поведенческие графы можно попробовать внести своё небольшое изменение.
Добавим дополнительный узел.
Для этого нужно щёлкнуть правой кнопкой мышки на свободном месте рабочей области и в выпадающем меню выбрать «Create a node»
Напишем в него простой код:
var a = 2+3; echo(a);
Затем удалим старые связи (нужно просто выделить связь и нажать клавишу delete). А затем протянем новые.
Это делается так же просто — при наведении указателя мышки на узел на нём появляется коричневая стрелка, теперь нужно на неё нажать и удерживая нажатой левую кнопку мышки протащить к нужному узлу и там отпустить.
Связи настроены, причём в них уже по-умолчанию прописан код:
workEnded?
Остаётся запустить граф на выполнение:
Красота 🙂
Рассмотрим другой пример посложнее:
File — Open — Examples… — Generic — randomTry.ubg
исполнение начинается с нижнего узла с кодом:
Global.removeSlot("successNb"); Global.removeSlot("failuresNb"); var Global.successNb = 0; var Global.failuresNb = 0;
здесь заводятся пара глобальных переменных.
Смотрим следующий узел, который отвечает за случайный выбор
// Generic random // // Wait and either succeeds or fails. // // Copyright (C) Gostai S.A.S., 2007. sleep(500ms); if (time() % 2 >= 1) { workSucceeded!; } else { workFailed!; };
обратите внимание, что узлам можно подгружать произвольные картинки (делается это через пункт меню Set image…, выпадающее при щелчке на объекте правой кнопкой мышки) (формата .jpg, .png или .svg)
От этого генератора случайности отходят две стрелки — нижняя с кодом:
workFailed?
а верхняя, естественно, с кодом:
workSucceeded?
Промежуточные узлы просто инкрементируют соответствующую переменную:
Global.failuresNb++;
или
Global.successNb++; ,а самый верхний узел выводит эту статистику: echo("Here are your statistics:"); echo("failures nb = " + failuresNb + " - success nb = " + successNb); //Some time to read the statistics sleep(1s);
после чего возвращается на узел с вопросительным знаком.
Запустив программу увидим:
Работает 🙂
Посмотрев другие примеры можно увидеть, что в узлах можно создавать внутренние узлы («Create a sub-node»), что позволяет создавать сложные программные структуры.
Как видим программа довольно наглядная и интересная.
Главный её недостаток — это то, что она работает в пробном режиме (до конца следующего месяца). После чего нужно покупать лицензию у компании Gostai или ограничиваться 5-минутной работой.
видео Gostai Studio — быстрый старт (Quickstart):
Ссылки
http://www.gostai.com/products/studio/gostai_studio/
Автор: Vladimir (noonv), 2010-2011
Эксклюзивно для robocraft.ru
копирование на другие ресурсы и публикация
без разрешения автора запрещены.
По теме
URBI
URBI — введение в программирование UObject
URBI — введение в urbiScript — часть 1