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.
Install
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.