Poppy on CATIA Systems

Hello everyone!

I’m student at Arts et Metiers Paris, France and now, I’m doing my internship at Dassault Systèmes. I’m working with CATIA Systems, a CATIA workbrench where we can design products since the user requirements until the final product. In this way, an important stage is the simulation and validation, so we use modeling languages like Modelica to simulate multiphysics systems.

I’m undertaking a project between Dassault Systèmes and my school, and the objective is to be able to simulate Poppy dynamics in CATIA Systems, but also, to control it using CATIA. There are already some projects like this one (NAO an its avatar a swiss knife in engineering education) where we use an FMI (Functional Mockup Interface) to communicate CATIA with the real robot. So the first step is to communicate both of them in order to get the robot variables, and send commands to each motor.

I’m still a beginner controlling the robot, so your help and your ideas are welcome. I will keep you abreast with my advancements.


Pypot has several ways to permit external connections:

For example, @joelortiz managed to control a Poppy Humanoid using Matlab.

Hello everyone,

At Arts et Metiers we just received the ODROID card, and I was wondering if anyone knows how to install Pypot on it. I found this . However, when it refers to a memory card is it a microSD or would it be possible to use a USB instead ?

1 Like

Depending where you bought your Odroid, you may have with it this eMMc module http://www.hardkernel.com/main/products/prdt_info.php?g_code=G138749987644 If it has a red sticker on it, it means Ubuntu is already installed. You can directly plug the module on the Odroid, power the Odroid, connect it to the network and connect through ssh. Then use poppy-install or pip or install from git.

If you don’t have the eMMC… you can probably replace it by a USB, but I don’t know how.

The Odroid board come with Ubuntu pre-install, so you don’t have to install your os with a sd card.
Btw, you have the other parts of a Poppy creature or just the Odroid ? If you don’t, keep in mind that you can install pypot on your computer (Windows, OS X or GNU/Linux) and run poppy humanoid on V-REP simulator.

Thanks for all your responses, I already could run Ubuntu on the ODROID card. In parallel, I’m working in the comunication between Pypot and C++, using the API REST. Has anyone worked with that? I am trying some requests but I don’t receive what is expected, here you have an exemple:

I receive the motor names, but there is no root for the JSON message.

Here is my code in python:

import json
import time

"""##Connect to real robot
from poppy.creatures import PoppyHumanoid

poppy = PoppyHumanoid()

##Connect to virtual robot in VREP
import pypot.vrep
from pypot.vrep import from_vrep
from poppy.creatures import PoppyHumanoid
poppy = PoppyHumanoid(simulator='vrep')

print("Connection to virtual robot successful")

##Create the ZMQServer
HOST = ''
PORT = 1140

from pypot.server.zmqserver import ZMQRobotServer
server = ZMQRobotServer(poppy,HOST,PORT)
print("Connected to client on"+HOST+","+str(PORT))

##Create a thread to run the REQ/RESP loop
from threading import Thread
Thread(target=lambda: server.run()).start()

And the code in the C++:

#include "ZMQwithJSON.h"

std::string HOST ("");
std::string PORT ("1140");

zmq::context_t context (1);
zmq::socket_t client (context, ZMQ_REQ);

void main()
    int answer;

void request()
    Json::Value req(Json::objectValue);

    Json::FastWriter fastWriter;
    std::string serialized = fastWriter.write(req);
    zmq::message_t message (serialized.length());
    std::memcpy ((void *) message.data(), serialized.c_str(), serialized.length());
    std::vector<char> inMsg;
    zmq::message_t reply;
    client.recv (&reply);
    std::string msg_str(static_cast<char*>(reply.data()), reply.size());
    Json::Reader reader;
    Json::Value resp(Json::objectValue);
    reader.parse(msg_str, resp);


void init()
    std::string finalpoint;
    finalpoint = "tcp://"+HOST+":"+PORT;
    client.connect (finalpoint.c_str());
    //client.connect ("tcp://localhost:5554");

    //std::cout << "Connecting to ZMQserver on " << finalpoint << std::endl;
    //client.connect (finalpoint.c_str());

Thanks for your help

I was following the tutorial, I was trying to create a robot with two motors:

my_config = {}
my_config['controllers'] = {}
my_config['controllers']['my_controler'] = {
    'port': 'COM10',
    'sync_read': False,
    'attached_motors': ['left_arm'],
    'protocol': 1,

my_config['motorgroups'] = {
    'left_arm': ['upperarm', 'arm']

my_config['motors'] = {}
my_config['motors']['upperarm'] = {
    'id': 1,
    'type': 'AX-12',
    'orientation': 'direct',
    'offset': 20.0,
    'angle_limit': (-45.0, 6.0),

my_config['motors']['arm'] = {
    'id': 2,
    'type': 'MX-28',
    'orientation': 'direct',
    'offset': 0.0,
    'angle_limit': (-90.0, 90.0),

import pypot.robot

robot = pypot.robot.from_config(my_config)

for m in myrobot.leftarm:

When I run the code, I get the following error:

Traceback (most recent call last):
  File "E:\users\JAO2\Projet\Robot Poppy\Programming\Python\motor_config.py", line 33, in <module>
    robot = pypot.robot.from_config(my_config)
  File "C:\Python27\lib\site-packages\pypot\robot\config.py", line 58, in from_config
    check_motor_limits(config, dxl_io, motor_names)
  File "C:\Python27\lib\site-packages\pypot\robot\config.py", line 152, in check_motor_limits
  File "C:\Python27\lib\site-packages\pypot\dynamixel\io\io.py", line 51, in set_angle_limit
    raise ValueError('can not change the angle limit of a motor in wheel mode')
ValueError: can not change the angle limit of a motor in wheel mode

Why are the motors in wheel mode? How can I modify it in the configuration? Thanks

I already installed Python in the ODROID card, as described here . However when I try to import pypot.dynamixel I have this:

What do you recommend me to do? I found that PoppyHumanoid is not installed as well.

It looks like your poppy is not connected to the internet and thus can not update.

See the “curl: could not resolve…”