How replacing callbacks with core.async can make even robots get emotional

One of the issues with callback based programming is the need to coordinate mutable state among multiple callback handlers. Clojure's core.async provides a way to write code in a more sequential style that helps make the interaction between multiple events clearer. This talk will briefly describe Communicating Sequential Processes (the theoretical foundation on which core.async and other languages such as go and occam are based) before giving an overview of core.async itself.

A lot of the attention on core.async has focussed on its use for web front-ends with clojurescript. This talk will present an application running on the JVM that demonstrates how a 3rd-party framework can be adapted to work with a core.async application in order to control a NAO humanoid robot.

Watch talk on Skillsmatter:

Computer Science

Communicating Sequential Processs:




Main page:

Tim Baldridge's talks on youtube


Latitude robot study:

Rethink Robotics Baxter:

Emotions & Emotional Models

Emotions Revealed: Understanding Faces and Feelings by Paul Ekman

Maslow's hierarchy of needs:

Emotional agents

Toward a comprehensive theory of emotion for biological and artificial agents Michael Sellers, Biologically Inspired Cognitive Architectures (2013) 4, 3– 26

Sellers, M. (2008). Otello: A next-generation reputation system for humans and NPCs. In Proceedings of the fourth artificial intelligence and interactive digital entertainment international conference.

Demo code

Core model: