Aseba is an event-based architecture for distributed control of mobile robots. It targets integrated multi-processors robots or groups of single-microcontroller units, real or simulated. The core of Aseba is a lightweight virtual machine tiny enough to run even on microcontrollers. With Aseba, we program the robot low-level software in a user-friendly scripting language using a cosy integrated development environment.

You can learn more about Aseba in the following papers:

You can also access documentation at aseba's homepage.


asebaros is a bridge between Aseba and ROS. It allows to load Aseba scripts, inspect the network structure, read and write variables, and send and receive events from ROS. It maps the Aseba named events to ROS topics in a dynamic way, when loading source code.


The following commands will fetch and compile the asebaros package. The latter will fetch all required dependencies automatically.

# Fetch ethzasl_aseba stack
git clone --recursive git:// ethzasl_aseba

# Update ROS_PACKAGE_PATH (if necessary)
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:`pwd`/ethzasl_aseba

# Install dependencies
rosdep install asebaros

# Build


Node: asebaros

The bridge with Aseba is called asebaros:

asebaros [options] [additional targets]
  -l, --loop   : makes the switch transmit messages back
                 to the sender, not only forward them
  -p port      : listens to incoming connections on
                 this port
  -h, --help   : shows this help
  ROS_OPTIONS  : see ROS documentation
Additional targets are any valid Dashel targets.

When started with no option, asebaros will listen to incoming Aseba connections and respond to ROS requests. You can specify additional Aseba targets that asebaros will try to connect on startup. Aseba targets follow the Dashel target naming scheme. For example, to connect Aseba to a serial port on a UNIX, setting hardware flow control and a speed of 921.6 kbps, write:

asebaros "ser:device=/dev/ttyUSB0;fc=hard;baud=921600"

Subscribed Topics

~/anonymous_events (asebaros/AsebaAnonymousEvent)
  • Topic on which events without a name are received and forwarded to Aseba. When sending Aseba events through ROS, use a source value of 0.
~/events/NAME (asebaros/AsebaEvent)
  • Topic on which events named NAME are received and forwarded to Aseba. When sending Aseba events through ROS, use a source value of 0.

Published Topics

~/anonymous_events (asebaros/AsebaAnonymousEvent)
  • Topic on which Aseba events without a name are published.
~/events/NAME (asebaros/AsebaEvent)
  • Topic on which Aseba events named NAME are published.


load_script (asebaros/LoadScripts)
  • Loads an Aseba script from an .aesl file. It creates the topics corresponding to the named events in the script, under the namespaces ~/events/NAME where NAME is the name of each topic.
get_node_list (asebaros/GetNodeList)
  • Get the names of the nodes.
get_node_id (asebaros/GetNodeId)
  • Get the identifier of a node given by its name.
get_node_name (asebaros/GetNodeName)
  • Get the name of a node given by its identifier.
get_variable_list (asebaros/GetVariableList)
  • Get the names of the variables of a given node.
set_variable (asebaros/SetVariable)
  • Set the value of a variable of a given node.
get_variable (asebaros/GetVariable)
  • Get the value of a variable of a given node.
get_event_id (asebaros/GetEventId)
  • Get the identifier of an event given by its name.
get_event_name (asebaros/GetEventName)
  • Get the name of an event given by its identifier.

Developing for Aseba

Once the ethzasl_asebaros stack is compiled, you will find aseba/build/studio/asebastudio in this stack. asebastudio is the Integrated Development Environment that you will use to write programs for Aseba nodes. Inside studio, you can find help on the Aseba language from Help -> Language and on asebastudio itself from Help -> Studio.

Wiki: asebaros (last edited 2012-09-28 03:03:32 by StephaneMagnenat)