Gostai's Urbi (Fig. 1) is a robotics framework designed to make robot development easier. Gostai also provides development tools and support
I recently talked with Jean-Christophe Baillie, Gostai CEO, about Urbi.
Wong: What is Urbi?
Baillie: Urbi is complete open source software platform to control robots, a kind of Operating System for robotics. It includes a C++ distributed components architecture called UObject, and an orchestration script language called urbiscript. The urbiscript language is innovative because it integrates new ways to handle parallel and event-based programming, which are two essential issues in robot programming. Recently, Urbi is also integrating ROS support to be able to integrate ROS nodes inside an Urbi project, and benefit from the best of both worlds.
Wong: What kind of robots can it control?
We believe that Urbi is also suitable to control not only robots but also complex systems in general, involving multiple components highly interacting, like video games, simulations or factory/process management.
Wong: Can you tell us about urbiscript and its relationship to the Gostai C++ support.
Baillie: urbiscript is an orchestration language, which means that its role it to coordinate various components, organize their interactions, the data they exchange, etc. All this in realtime, with a dynamic approach (you can reconfigure everything at runtime), and with advanced parallel and event-based control capabilities. This last part really distinguishes Urbi from other script languages like python for example, where you have to handle parallelism or events in a more traditional way. And it saves a lot of time.
The way C++ and urbiscript talk together is via UObject, which is a C++ library capable to transparently bind any C++ object to urbiscript. With UObject, you take your favorite C++ class and it will appear as a native class of urbiscript, except that it is in fact C++ behind the scene. You can then connect this C++ class to other C++ classes using the orchestration capabilities of urbiscript.
Wong: What makes Urbi unique?
Baillie: The parallel orchestration approach that comes with urbiscript is quite unique. We are also the only one to provide with Gostai Studio (Fig. 4) a graphical programming suite that handles hierarchical finite state machines (most other graphical approaches offered are flow charts). On a more technical side, the way UObject is bound to urbiscript provide very interesting asynchronous possibilities on the side of C++, which kind of enhances C++ itself with abstractions inherited from urbiscript. This makes UObject a little bit more than a traditional component architecture.
Finally, I know it is not very convincing because almost everyone claims it for itself, but our users really support the fact that Urbi is amazingly simple to master, intuitive and well designed. You will have to make your own opinion on this, but we consider it a big difference with other competing alternatives. It just works, and we like it when we we can keep it simple.
Wong: How does Urbit fit within a distribute and remote control environment?
Baillie: A nice feature that comes with UObject is that you can plug your C++ class into urbiscript in two ways: first in plugin mode, where the C++ class is physically bound to the Urbi engine that integrates the urbiscript interpreter. Everything is tightly connected then, shared memory, etc. The second way is to connect it in remote mode, where your C++ class becomes an executable program that will connect itself to the Urbi engine over the network. From within urbiscript, there is no difference, in both cases you will see that your C++ class appears inside urbiscript and you will get a transparent access to all its methods/variables. But behind the scene you have either direct memory access, or TCP/IP relaying. This means that you can very easily distribute a project simply by selecting certain UObject to run in remote mode, some of them on remote machines, some of them locally on the robot.
Wong: Urbi has gone open source. Why did Gotsai take this step?
Baillie: I think it is the right move in 2010. You see how Android and other open source initiatives gain a tremendous momentum and add value to their underlying companies by creating a community, and I believe this is a model that has a future. We can have more community, more users, more feedback and ultimately perhaps more customers for our GostaiNet cloud based technologies, or Gostai Studio programming IDE. This commercial activity increase will allow us to reinvest more money into Urbi and the community will benefit back from it. This is a virtuous circle.
Wong: What is Gostai RTC?
Baillie: Gostai RTC is the first commercial implementation of the RTC robotics standard. It is based on Urbi underneath, and you can benefit from the urbiscript orchestration layer together with RTC. Of course, you can also simply just use RTC without Urbi, and benefit from Gostai's support. Gostai RTC is a product for the industry, so we sell it together with support and maintenance contracts.
Wong: What is the difference between the full RTC implementation and the one supported by the open source version?
Baillie: You mean openRTM? This open source version of RTC is based on CORBA and, to my opinion, is much more complex to master. Also, the big difference is that we offer support, which matters the most for our industrial clients.
Wong: What operating platforms do the various versions support?
Baillie: GostaiRTC is working on all platforms where you can run Urbi, which means a lot! We have support for almost all flavors of Linux, Windows or MacOSX, plus a few more exotic platforms and processors. GostaiRTC provides also support for the realtime operating system Xenomai, which we don't offer with Urbi at the moment.
Wong: What needs to be done to support a new, custom robot?
Baillie: Basically, you will develop drivers for your robots by creating appropriate UObjects in C++ to bridge the robot API with urbiscript. The procedure is described here: Urbiforge
For example, you might create a 'headYaw' C++ object, with a 'val' attribute, and use callbacks on read/write on 'val' to trigger the appropriate robot API messages to actually move the robot head. All this is heavily documented and relatively easy to do. Of course, you also have existing examples that you could use as a starting point to adapt on your robot, and most common bus interfaces (CAN or i2c) are already supported.
Wong: What is Gostai Studio?
Baillie: Gostai Studio Suite is a set of two graphical programming tools: Gostai Studio and Gostai Lab. Gostai Studio is an editor for hierarchical finite state machines (HFSM), which is a very common way to represent a robot behavior as a series of states connected by transitions, which are associated to conditions. For example, you can be in a 'search the ball' state, and move to the 'follow the ball' state through a transition that is attached to the 'see the ball' condition. Gostai Studio includes a debugger, and since it is based on urbiscript underneath, it is able to do some very sophisticated things, like pause the execution, trace the current state in realtime, and of course run many things in parallel. It's really a unique implementation of the classical HFSM approach, which is standing apart.
Gostai Lab is a user interface (UI) generator. You can create a UI by drag&dropping widgets on a blank sheet, each widget being associated to a variable in urbiscript that you want to monitor. You can create a widget for a camera, another for a numerical value, seen as a slider, another one could be a button that you associate to some urbiscript code to execute, etc. At the end, you can design a complete application in a completely graphical way. It saves a lot of time, and since it is based on a client/server approach, you can have many instances running in parallel and monitoring different aspects of your robot or algorithms.
Wong: Where can developers get Urbi?
Baillie: The community site is on www.urbiforge.org, where you can get Urbi for free, plus many modules, components, help on the forum, etc. You can also go to www.gostai.com to get a trial version of Gostai Studio, which is a product that we sell.
Wong: What kind of services does Gotsai provide?
Baillie: We provide support, of course, but also training sessions (2 days), and we can also help partners in their development or integration efforts with customized development services.