Framework for autonomous exploration algorithms in sensorimotor spaces

exploration learning algorithm sensorimotor robots robotics
pip install explorers==1.2.0


explorers - an exploration library for sensorimotor enviroments

The explorers library implements a framework for scientific research of exploration algorithms in sensorimotor spaces, in particular robotics. It allows to express motor and goal babbling algorithms, as well as reuse algorithms.

The explorers python package implements the exploration strategies, and is designed to work with the environments and learners packages.

This code was designed and written to conduct scientific experiments. It is probably not fit for any other purpose, and certainly not for production environments. In particular, its maintenance and development depend on the direction of future research. That being said, do not hesitate to submit issues or contact me by mail for questions and comments.


pip install explorers

This will install the following dependencies: numpy, scicfg, learners and environments. The bokeh plotting library is required for running some of the provided examples scripts, and must be installed separately (pip install bokeh).

Design Overview

An motor signal is a dictionary of named channels with scalar values:

m_signal = {'joint1': 0.5, 'joint2': 1.0}

An sensory signal is dictionaries, with keys as name of sensory channels, and scalar values as activation strength of each channel.

s_signal = {'x': 34.2, 'y': 25.1}

An environment receives and execute motor signals. For instance, in a robot, the environment includes everything beyond the sensorimotor signal interface, including the body of the robot.

class Environment(object):

    def execute(self, m_signal):
        return s_signal

An exploration algorithm decides which motor signals to send to the environment, and receives sensory signals.

class Explorer(object):

    def explore(self):
        """Produce an motor signal"""
        exploration = {'m_signal': m_signal}
        # we can add metadata to this dictionary, such as uuid, timestamp, etc.
        return exploration

    def receive(self, exploration, feedback):
        """Update the internal model and state of the explorer"""
        m_signal = exploration['m_signal']
        s_signal = feedback['s_signal']
        # ...

Time is ordering all that together.

for t in time:
    exploration = explorer.explore()
    feedback = environment.execute(exploration['m_signal'])
    explorer.receive(exploration, feedback)

Open Science License

This software is placed under the Open Science License, which includes all provisions of the LGPL, with the additional condition that if you publish scientific results using this code, you have to publish the corresponding modifications of the code.

If you publicly release any scientific claims or data that were supported or generated by the Program or a modification thereof, in whole or in part, you will release any modifications you made to the Program. This License will be in effect for the modified program.