Robot behaviors can be enriched with an emotional component. It cannot rival affective mind architectures, but will provide a wide variety of reliable and less repetitive behaviors. Some emotional systems are based on dimensional theories of emotion, in which affective states are not only represented as discrete labels (like fear or anger), but as points or areas in a space equipped with a coordinate system. Emotions which can be directly represented in this space are called primary (basic). Some theories also introduce secondary emotions which are a mixture of two or more basic ones. The most popular theory in this group is PAD, proposed by Mehrabian and Russell, whose name is an abbreviation of three orthogonal coordinate axes: Pleasure, Arousal, Dominance.

The Wasabi emotional system was proposed by Becker-Asano. It is based on PAD theory, but is extended with new components such as internal dynamics in emotion-mood-boredom coordinates, implementation of secondary emotions (hope, relief and confirmed fears) and a direct way of interaction with software engine (assessment of events directly influences emotion coordinate). In every simulation step, following the calculation of internal dynamics, the state of the robot is mapped into PAD space. After each iteration, we check if any of the primary emotions have occurred - it is possible when current position in PAD space is close enough to points/areas corresponding to one of the emotions.

The implementation of a dynamic PAD-based model of emotion is centered around the assumption that our emotional state is similar to the response of a dynamic object. Experience suggests that our emotions expire with time, so this dynamic object should be stable. Inputs of emotional system are called attractors. According to aforementioned intuitions, the module implements emotional system as an inertial first, second or third order element with programmable time constants and gain. All input vectors are linearly transformed to three dimensional PAD space. Output of the module is the robot's mood defined as the integral of all emotional impulses over time.

Christian Becker-Asano received his doctor's degree (Dr. rer. nat.) from the University of Bielefeld in 2008, for his work on affect simulation for agents with believable interactivity (WASABI architecture), which he applied to the articulated communicator Max.

You can find more information here:
C. Becker-Asano homepage: LINK
Book: LINK


The UWASABI module is utilising [W]ASABI [A]ffect [S]imulation [A]rchitecture for [B]elievable [I]nteractivity, Version 1.0. The project (WASABIEngine-master) was added to the Visual Studio Solution without any changes (for latest version see LINK). WASABI is compiled with some QT Project headers (included in the package) as a static library (WASABIEngine.lib) and it is linked in the UWASABI project. No additional dynamic libraries are needed.

How to run

  1. Get familiar with WASABI engine principles,
    • download WASABIGui package LINK
    • follow WASABI manual LINK
  2. Copy "emots" folder in to the uobjects folder.
  3. Copy "UWasabi.dll" in to the uobjects folder.
  4. Run example scripts and GostaiLab GUI.


Module functions"path/","robotName") - create UWASABI instance 
          path - path to the wasabi configuration files,
          robotName - filename with the robot (attendee) configuration
UWasabi.simFreq - set simulation frequency <1..100>, default 25,
UWasabi.Start() - start WASABI engine loop,
UWasabi.Stop() - stop WASABI engine loop,
UWasabi.Reset() - reset WASABI dynamics,
UWasabi.Impulse(value) - set emotion impulse with value <-100..100>,
UWasabi.ImpulseD(value, dominance) - set emotion impulse with value <-100..100> with dominance value,
UWasabi.P - get pleasure value <-100..100>,
UWasabi.A - get arousal value <-100..100>,
UWasabi.D - get or set dominance value at range <-100..100>,
UWasabi.X - get emotion value <-100..100>,
UWasabi.Y - get mood value <-100..100>,
UWasabi.Z - get boredom value <-100..0>,
UWasabi.emotion - get emotion name with the highest probability,
UWasabi.emotionProb - probability of that emotion,
UWasabi.emots - vector of all emotions names,
UWasabi.emotsProbs - vector of all emotions probabilities,
UWasabi.emotsProbsStr - get string with emotions with non-zero probability,
UWasabi.ActivateHope() - activate hope emotion (see WASABI docu.)
UWasabi.ActivateRelief() - activate relief emotion (see WASABI docu.)
UWasabi.ActivateFearsConf() - activate fears-confirmed emotion (see WASABI docu.).

Urbiscript example

var Global.Wasabi ="emots/","robotName"); 
t: every (1000ms) { 
  echo("PAD:"+Wasabi.P+" "+Wasabi.A+" "+Wasabi.D); 
  echo("Emots list: "+Wasabi.emots); 
  echo("Emots probs: "+Wasabi.emotsProbs); 
  echo("EMOTION: "+Wasabi.emotion + " | " + Wasabi.emotionProb); 





EMYS and FLASH are Open Source and distributed according to the GPL v2.0 © Rev. 1.0, 04.04.2018

FLASH Documentation