EN FR
EN FR


Section: New Software and Platforms

Poppy project

Introduction

  • Participants: Matthieu Lapeyre, Pierre Rouanet, Nicolas Rabault, Theo Segonds, Jonathan Grizou and Pierre-Yves Oudeyer

  • Contact: Pierre-Yves Oudeyer

  • URL: https://www.poppy-project.org/

The Poppy Project develops open-sources 3D printed robots platforms based on robust, flexible, easy-to-use and reproduce hardware and software. In particular, the use of 3D printing and rapid prototyping technologies is a central aspect of this project, and makes it easy and fast not only to reproduce the platform, but also to explore morphological variants. Poppy targets three domains of use: science, education and art.

Poppy Ergo Jr (hardware)

Poppy Ergo Jr is a new open hardware robot developped by the Poppy Project to explore the use of robots in classroom for learning robotic and computer science. It is a 6-Dofs arm designed to be both expressiv and low-cost. This is achieved by the use of FDM 3D printing, low cost Robotis XL-320 actuators. In addition we have added a Pi camera so the robot can detect object, faces or QR codes.

The Ergo Jr is controlled by the pypot software running on a Raspberry pi 2. The communication between the Raspberry pi and the actuators is made possible by the Pixl board we have designed.

Figure 1. The new open hardware Poppy Ergo Jr, 6-DoFs arm robot for education
IMG/ergo-jr.jpg

The sources are availables on the following web platforms:

The Poppy Ergo Jr has several 3D printed tools to extend its capabilities. There are currently the lampshade, the gripper and a pen holder.

Figure 2. The Ergo Jr has 3 tools, a pen holder, a lampshade and a gripper
IMG/ergo-tools.jpg

Pixl (Electronics)

Pixl is a tiny board used to create low cost robots based on raspbery pi and XL320 motors. This board have bean created by the Poppy project team. Pixl have 2 main features, the power part, and the communication part :

  • The power part allow the user to plug an 7V AC/DC converter directly into the Pixl. This power will be distributed to all XL320 motors and will be converted to 5V for the raspberry pi.

  • The communication part convert full duplex to half duplex and vice versa. The half duplex part switch between RX and TX automatically. Another connector allow the user to connect his XL320 network.

Poppy Com

Functional Description

Poppy-com is a low level library who manage the new poppy system communication protocol. This work in progress library, writen in C/C++, is completely open-source and available on github. Atctually poppy-com work with Atmel ATMEGA series microcontroler and a test version can be run on X86 architectures. His main objectiv is to give access to the user at the lowest level of code. Each poppy system module run this code to be detected into the robt network and to comunicate with others modules. Users can write theire owns code and write it in any module. With this new level the user can create basic behavior directly into a poppy system module.

  • Bootloader : The bootloader have to manage robot network discovery, auto-addressing, module specific firmware update validation, and user code update.

  • User : The user side have a small part of code dedicated to the module management like motor management routines, sensors synchronizations, numerical treatment of signals... The empty memory of each modules can be used by the user and he can add his own code to manage his robot.

This library will be compatible with the Arduino univers, that allow non expert people to use it anyway. To simplify the robot functionality developpement and function execution localization we want to try to create a way to write a code for all a robot modules on only one code. Each function of this code could be redirected in a specific module, the execution can be completely distributed.

Poppy System

Functional Description

In the Poppy project we are working on the Poppy System which is a new modular and open-source robotic architecture. It is designed to help people create and build custom robots. It permits, in a similar approach as Lego, building robots or smart objects using standardized elements.

Poppy System is an unified system where each essential robotic components (actuators, sensors, ...) is an independant module, connected with other through standardized interfaces:

  • Unified mechanical interfaces which simplifies the assembly process and the design of 3D printable parts.

  • Unified communication between elements using the same connector and bus for each module.

  • Unified software makes it easy to program each module independantly.

The current Poppy robots (Humanoid, Torso, Ergo) will be updated using this novel architecture.

Our ambition is to create an ecosystem around this system so communities can develop custom modules, following the Poppy System standards, which can be compatible with all other Poppy robots.

Pypot

Scientific Description

Pypot is a framework developed to make it easy and fast to control custom robots based on dynamixel motors. This framework provides different levels of abstraction corresponding to different types of use. More precisely, you can use pypot to:

  • directly control robotis motors through a USB2serial device,

  • define the structure of your particular robot and control it through high-level commands,

  • define primitives and easily combine them to create complex behavior.

Pypot is part of the Poppy project. It is the core library used by the different Poppy robots. This abstraction layer allows to seamlessly switch from one of the Poppy robot to another. It also provides a common set of tools, such as forward and inverse kinematics, simple computer vision, recording and replaying moves, or easy access to the autonomous exploration library Explauto.

To extend pypot application domains and connection to outside world, it also provides an HTTP REST API. On top of providing an easy way to connect to smart sensors or connected devices, it is notably used to connect to Snap! a variant of the well-known Scratch visual programming language.

Figure 3. Example of using pypot to program a robot to reproduce a drawn shape
IMG/snap.jpg

Functional Description

Pypot has been entirely written in Python to allow for fast development, easy deployment and quick scripting by non-necessary expert developers. It can also benefits from the scientific and machine learning libraries existing in Python. The serial communication is handled through the standard library and thus allows for rather high performance (10ms sensorimotor loop). It is crossed-platform and has been tested on Linux, Windows and Mac OS.

Pypot is also compatible with the V-REP simulator. This allows the transparent switch from a real robot to its simulated equivalent without having to modify the code.

Finally, it has been developed to permit an easy and fast extension to other types of motors and sensors.

It works with Python 2.7 or Python 3.3 or later. It has also been adapted to the Raspberry-Pi board.

Connection with the visual programming language Snap!

Pypot has been connected to Snap!, a variant of the famous Scratch visual language, developed for teaching computer science to children. It is based on blocks that can be dragged-and-drop, and assembled to write scripts.

Thanks to the Snap! HTTP block, a connection can be made to pypot allowing users to directly control robots through their visual interfaces. A set of dedicated Snap! blocks have been designed, such as *set motor position* or *get motor temperature*.

Figure 4. Using Snap! to program a robot by demonstration and create complex choreographies
IMG/snap-demonstration.jpg

Snap! is also used as a tool for programming the robot by demonstration. Thanks to *record* and *play* blocks, users can easily trigger kinesthetic recording of the robots (or only subpart such as one arm). They can then be played or "mixed" - either played in sequence or in parallel - with other recordings to compose complex choreographies. The moves are encoded as a model of mixture of gaussians (GMM) which allows the definition of clean mathematical operators for combining them.

This tool has been developed and used in collaboration with artists who investigate the concept of robotic moves.

Figure 5. Artistic project exploring the concept of robotic move.
IMG/snap-artist.jpg

Dissemination and contribution

The pypot source file are released under the GPLv3 license and can be accessed on Github. They have been downloaded about 50k times (source Python Package Index) and forked about 50 times (source Github).

18 contributors have participated to its development.

Pypot are also largely based on jupyter notebooks to provide examples, tutorials or scientific experiments.

Inverse kinematics library

Functional Description

IKPy is a Python Inverse Kinematics library, designed to be simple to use and extend. It provides Forward and Inverse kinematics functionalities, bundled with helper tools such as 3D plotting of the kinematics chains. Being written entirely in Python, IKPy is lightweight and is based on numpy and scipy for fast optimization. IKPy is compatible with many robots, by automatically parsing URDF files. It also supports other (such as DH-parameters) and custom representations. Moreover, it provides a framework to easily implement new Inverse Kinematics strategies. Originally developed for the Poppy project, it can also be used as a standalone library. IKPy is open-source, and can be found at: https://github.com/Phylliade/ikpy