API REST de Pypot

L'API REST a été mise à jour dans la version 4.0.0. Cette page présente la documentation de l'API v4.0.0.

L'API Pypot est organisée autour de REST. Notre API dispose d'URLs prévisibles orientées ressources, renvoie des réponses codées en JSON et utilise des codes de réponse HTTP standard.

Les erreurs

Pypot utilise des codes de réponse HTTP conventionnels pour indiquer le succès ou l'échec d'une requête API. En général: les codes de la plage 2xx indiquent le succès. Les codes de la plage 4xx indiquent une erreur qui a échoué compte tenu des informations fournies (par exemple, un paramètre requis a été omis, une charge a échoué, etc.). Les codes de la gamme 5xx indiquent une erreur avec les serveurs de Poppy (c'est rare).

Code Signification
200 - OK Tout a fonctionné comme prévu.
202 - Accepted La demande a été acceptée pour traitement, mais le traitement n'est pas terminé.
204 - No Content Le serveur a répondu à la demande mais il ne renvoie rien.
404 - Not Found La ressource demandée n'existe pas.
500, 502, 503, 504 - Server Errors Quelque chose s'est mal passé du côté de Poppy. (C'est rare)

Points de terminaison

🔌 Divers

📕 Sommaire

GET /
GET /robot.json
GET /ip.json

Obtenir tous les points de terminaison

GET /

Description

Fournit tous les points de terminaison de l'API REST au format HTML.

Commande cURL

curl http://poppy.local:8080/

Valeur de retour

All url paths availables:

Get method url:
/robot.json
/ip.json
/motors/list.json
/motors/aliases/list.json
/motors/<alias>/list.json
/motors/<motor_name>/registers/list.json
/motors/<motor_name>/registers/<register_name>/value.json
/motors/registers/<register_name>/list.json
/sensors/list.json<br>/sensors/<sensor_name>/registers/list.json
/sensors/<sensor_name>/registers/<register_name>/value.json
/sensors/camera/frame.png
/sensors/code/<code_name>.json
/records/list.json
/records/<move_name>/value.json
/primitives/list.json
/primitives/running/list.json
/primitives/<primitive_name>/start.json
/primitives/<primitive_name>/stop.json
/primitives/<primitive_name>/pause.json
/primitives/<primitive_name>/resume.json
/primitives/<primitive_name>/properties/list.json
/primitives/<primitive_name>/properties/<prop>/value.json
/primitives/<primitive_name>/methods/list.json
/ik/<chain_name>/value.json
/ik/<chain_name>/rpy.json

Post method url:
/motors/<motor_name>/registers/<register_name>/value.json
/motors/<motor_name>/goto.json
/motors/goto.json
/sensors/<sensor_name>/registers/<register_name>/value.json
/records/<move_name>/record.json
/records/<move_name>/save.json
/records/<move_name>/play.json
/records/<move_name>/stop.json
/records/<move_name>/delete.json
/primitives/<primitive_name>/properties/<prop>/value.json
/primitives/<primitive_name>/methods/<method_name>/args.json
/ik/<chain_name>/goto.json

Obtenir toutes les valeurs du robot

GET /robot.json

Description

Obtenez toutes les valeurs du robot, telles que les valeurs d'attributs des moteurs ou les méthodes de comportement.

Commande cURL

curl http://poppy.local:8080/robot.json

Valeur de retour

Sur un Poppy Torso:

{
    "motors":
    [
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": 0.0,
            "compliant": true,
            "angle_limit":
            [
                -79.96,
                80.04
            ],
            "id": 33,
            "name": "abs_z",
            "model": "MX-28",
            "present_position": 49.27,
            "goal_position": 52.18,
            "present_speed": 0.0,
            "moving_speed": 0.0,
            "present_load": 0.0,
            "torque_limit": 100.0,
            "lower_limit": -79.96,
            "upper_limit": 80.04,
            "present_voltage": 11.3,
            "present_temperature": 35.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": -0.0,
            "compliant": true,
            "angle_limit":
            [
                46.02,
                -22.99
            ],
            "id": 34,
            "name": "bust_y",
            "model": "MX-28",
            "present_position": 69.58,
            "goal_position": 69.58,
            "present_speed": -0.0,
            "moving_speed": -0.0,
            "present_load": -0.0,
            "torque_limit": 100.0,
            "lower_limit": 46.02,
            "upper_limit": -22.99,
            "present_voltage": 11.0,
            "present_temperature": 33.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": 0.0,
            "compliant": true,
            "angle_limit":
            [
                39.96,
                -40.04
            ],
            "id": 35,
            "name": "bust_x",
            "model": "MX-28",
            "present_position": -5.23,
            "goal_position": -5.23,
            "present_speed": -0.0,
            "moving_speed": -0.0,
            "present_load": -0.0,
            "torque_limit": 100.0,
            "lower_limit": 39.96,
            "upper_limit": -40.04,
            "present_voltage": 11.200000000000001,
            "present_temperature": 32.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "compliance_margin",
                "compliance_slope"
            ],
            "goal_speed": -0.0,
            "compliant": true,
            "angle_limit":
            [
                -99.85,
                100.15
            ],
            "id": 36,
            "name": "head_z",
            "model": "AX-12",
            "present_position": -150.0,
            "goal_position": -150.0,
            "present_speed": 0.0,
            "moving_speed": 0.0,
            "present_load": 0.0,
            "torque_limit": 100.0,
            "lower_limit": -99.85,
            "upper_limit": 100.15,
            "present_voltage": 11.4,
            "present_temperature": 32.0,
            "compliance_margin":
            [
                1,
                1
            ],
            "compliance_slope":
            [
                32,
                32
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "compliance_margin",
                "compliance_slope"
            ],
            "goal_speed": 0.0,
            "compliant": true,
            "angle_limit":
            [
                20.03,
                -28.060000000000002
            ],
            "id": 37,
            "name": "head_y",
            "model": "AX-12",
            "present_position": -11.06,
            "goal_position": -11.06,
            "present_speed": -0.0,
            "moving_speed": -0.0,
            "present_load": -0.0,
            "torque_limit": 100.0,
            "lower_limit": 20.03,
            "upper_limit": -28.060000000000002,
            "present_voltage": 11.4,
            "present_temperature": 32.0,
            "compliance_margin":
            [
                1,
                1
            ],
            "compliance_slope":
            [
                32,
                32
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": -0.0,
            "compliant": true,
            "angle_limit":
            [
                -209.95999999999998,
                65.03
            ],
            "id": 41,
            "name": "l_shoulder_y",
            "model": "MX-28",
            "present_position": -75.27,
            "goal_position": -74.66,
            "present_speed": 0.0,
            "moving_speed": 0.0,
            "present_load": 0.0,
            "torque_limit": 100.0,
            "lower_limit": -209.95999999999998,
            "upper_limit": 65.03,
            "present_voltage": 11.100000000000001,
            "present_temperature": 30.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": -0.0,
            "compliant": true,
            "angle_limit":
            [
                195.01,
                -20.019999999999996
            ],
            "id": 42,
            "name": "l_shoulder_x",
            "model": "MX-28",
            "present_position": 4.510000000000005,
            "goal_position": 4.150000000000006,
            "present_speed": -0.0,
            "moving_speed": -0.0,
            "present_load": -0.0,
            "torque_limit": 100.0,
            "lower_limit": 195.01,
            "upper_limit": -20.019999999999996,
            "present_voltage": 11.3,
            "present_temperature": 30.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": 0.0,
            "compliant": true,
            "angle_limit":
            [
                89.98,
                -89.98
            ],
            "id": 43,
            "name": "l_arm_z",
            "model": "MX-28",
            "present_position": -24.48,
            "goal_position": -24.75,
            "present_speed": -0.0,
            "moving_speed": -0.0,
            "present_load": -0.0,
            "torque_limit": 100.0,
            "lower_limit": 89.98,
            "upper_limit": -89.98,
            "present_voltage": 11.200000000000001,
            "present_temperature": 31.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": 0.0,
            "compliant": true,
            "angle_limit":
            [
                -50.0,
                90.04
            ],
            "id": 44,
            "name": "l_elbow_y",
            "model": "MX-28",
            "present_position": 5.299999999999997,
            "goal_position": 5.209999999999994,
            "present_speed": 0.0,
            "moving_speed": 0.0,
            "present_load": 0.0,
            "torque_limit": 100.0,
            "lower_limit": -50.0,
            "upper_limit": 90.04,
            "present_voltage": 11.3,
            "present_temperature": 30.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": 0.0,
            "compliant": true,
            "angle_limit":
            [
                65.03,
                -210.04000000000002
            ],
            "id": 51,
            "name": "r_shoulder_y",
            "model": "MX-28",
            "present_position": -64.9,
            "goal_position": -72.46000000000001,
            "present_speed": -0.0,
            "moving_speed": -0.0,
            "present_load": -0.0,
            "torque_limit": 100.0,
            "lower_limit": 65.03,
            "upper_limit": -210.04000000000002,
            "present_voltage": 11.600000000000001,
            "present_temperature": 32.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": -0.0,
            "compliant": true,
            "angle_limit":
            [
                20.019999999999996,
                -195.01
            ],
            "id": 52,
            "name": "r_shoulder_x",
            "model": "MX-28",
            "present_position": 1.5600000000000023,
            "goal_position": 2.530000000000001,
            "present_speed": -0.0,
            "moving_speed": -0.0,
            "present_load": -0.0,
            "torque_limit": 100.0,
            "lower_limit": 20.019999999999996,
            "upper_limit": -195.01,
            "present_voltage": 11.200000000000001,
            "present_temperature": 30.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": 0.0,
            "compliant": true,
            "angle_limit":
            [
                89.98,
                -89.98
            ],
            "id": 53,
            "name": "r_arm_z",
            "model": "MX-28",
            "present_position": -31.34,
            "goal_position": -30.9,
            "present_speed": -0.0,
            "moving_speed": -0.0,
            "present_load": -0.0,
            "torque_limit": 100.0,
            "lower_limit": 89.98,
            "upper_limit": -89.98,
            "present_voltage": 11.100000000000001,
            "present_temperature": 30.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        },
        {
            "registers":
            [
                "registers",
                "goal_speed",
                "compliant",
                "safe_compliant",
                "angle_limit",
                "id",
                "name",
                "model",
                "present_position",
                "goal_position",
                "present_speed",
                "moving_speed",
                "present_load",
                "torque_limit",
                "lower_limit",
                "upper_limit",
                "present_voltage",
                "present_temperature",
                "pid"
            ],
            "goal_speed": -0.0,
            "compliant": true,
            "angle_limit":
            [
                89.96,
                -57.03
            ],
            "id": 54,
            "name": "r_elbow_y",
            "model": "MX-28",
            "present_position": 4.769999999999996,
            "goal_position": 10.840000000000003,
            "present_speed": -0.0,
            "moving_speed": -0.0,
            "present_load": -0.0,
            "torque_limit": 100.0,
            "lower_limit": 89.96,
            "upper_limit": -57.03,
            "present_voltage": 11.100000000000001,
            "present_temperature": 31.0,
            "pid":
            [
                4.0,
                0.0,
                0.0
            ]
        }
    ],
    "primitives":
    [
        {
            "primitive": "limit_torque",
            "running": false,
            "properties":
            [],
            "methods":
            [
                "start",
                "stop",
                "pause",
                "resume"
            ]
        },
        {
            "primitive": "temperature_monitoring",
            "running": true,
            "properties":
            [],
            "methods":
            [
                "start",
                "stop",
                "pause",
                "resume"
            ]
        },
        {
            "primitive": "dance_beat_motion",
            "running": false,
            "properties":
            [],
            "methods":
            [
                "start",
                "stop",
                "pause",
                "resume"
            ]
        },
        {
            "primitive": "init_position",
            "running": false,
            "properties":
            [],
            "methods":
            [
                "start",
                "stop",
                "pause",
                "resume"
            ]
        },
        {
            "primitive": "upper_body_idle_motion",
            "running": false,
            "properties":
            [],
            "methods":
            [
                "start",
                "stop",
                "pause",
                "resume"
            ]
        },
        {
            "primitive": "head_idle_motion",
            "running": false,
            "properties":
            [],
            "methods":
            [
                "start",
                "stop",
                "pause",
                "resume"
            ]
        },
        {
            "primitive": "arms_turn_compliant",
            "running": false,
            "properties":
            [],
            "methods":
            [
                "start",
                "stop",
                "pause",
                "resume"
            ]
        },
        {
            "primitive": "arms_copy_motion",
            "running": false,
            "properties":
            [],
            "methods":
            [
                "start",
                "stop",
                "pause",
                "resume"
            ]
        }
    ]
}

Obtenir l'ip du robot

GET /ip.json

Description

Permet de récupérer l'adresse IP du robot.

Commande cURL

curl http://poppy.local:8080/ip.json

Valeur de retour

{
    "ip": "10.2.11.54"
}

⚙ Moteurs

📕 Sommaire

GET /motors/list.json
GET /motors/aliases/list.json
GET /motors/<alias>/list.json
GET /motors/<motor_name>/registers/list.json
GET /motors/<motor_name>/registers/<register_name>/value.json
POST /motors/<motor_name>/registers/<register_name>/value.json + new_value
GET /motors/registers/<register_name>/list.json

Obtenir la liste des moteurs

GET /motors/list.json

Description

Donne la liste de tous les moteurs du robot Poppy.

Commande cURL

curl http://poppy.local:8080/motors/list.json

Valeur de retour

Sur un Poppy Torso :

{
    "motors":
    [
        "abs_z",
        "bust_y",
        "bust_x",
        "head_z",
        "head_y",
        "l_shoulder_y",
        "l_shoulder_x",
        "l_arm_z",
        "l_elbow_y",
        "r_shoulder_y",
        "r_shoulder_x",
        "r_arm_z",
        "r_elbow_y"
    ]
}

Obtenir la liste des alias moteur

GET /motors/aliases/list.json

Description

Les alias définissent un groupe de moteurs. Cette requête vous donnera tous les noms d'alias définis.

Commande cURL

curl http://poppy.local:8080/motors/aliases/list.json

Valeur de retour

Sur un Poppy Torso :

{
    "aliases":
    [
        "head",
        "r_arm",
        "torso",
        "l_arm",
        "arms"
    ]
}

Obtenir la liste des moteurs d'un alias

GET /motors/<alias>/list.json

Description

Donne tous les noms de moteurs faisant partie de l'alias donné dans l'url.

Exemple d'une commande cURL

curl http://poppy.local:8080/motors/head/list.json

Valeur de retour

Sur un Poppy Torso :

{
    "head":
    [
        "head_z",
        "head_y"
    ]
}

Obtenir la liste des registres d'un moteur

GET /motors/<motor_name>/registers/list.json

Description

Donne la liste de tous les registres d'un moteur.

Exemple d'une commande cURL

curl http://poppy.local:8080/motors/head_z/registers/list.json

Valeur de retour

Sur un Poppy Torso :

{
    "registers":
    [
        "registers",
        "goal_speed",
        "compliant",
        "safe_compliant",
        "angle_limit",
        "id",
        "name",
        "model",
        "present_position",
        "goal_position",
        "present_speed",
        "moving_speed",
        "present_load",
        "torque_limit",
        "lower_limit",
        "upper_limit",
        "present_voltage",
        "present_temperature",
        "compliance_margin",
        "compliance_slope"
    ]
}

Obtenir la valeur d'un registre d'un moteur

GET /motors/<motor_name>/registers/<register_name>/value.json

Description

Donne la valeur d'un registre d'un moteur. Le nom du moteur et le nom du registre sont indiqués dans l'url.

Exemple d'une commande cURL

curl http://poppy.local:8080/motors/head_z/registers/present_temperature/value.json

Valeur de retour

{
    "present_temperature": 37.0
}

Définir la valeur d'un registre d'un moteur

POST /motors/<motor_name>/registers/<register_name>/value.json + new_value

Description

Modifie la valeur d'un registre d'un moteur. Le nom du moteur et le nom du registre sont indiqués dans l'url. La nouvelle valeur est donnée dans le corps de la requête.

Exemple d'une commande cURL

curl -X POST \
     -H 'Content-Type: application/json' \
     -d 'true' \
     http://poppy.local:8080/motors/head_z/registers/compliant/value.json

Valeur de retour

{
    "compliant": true
}

Obtenir les valeurs d'un registre pour tous les moteurs

GET /motors/registers/<register_name>/list.json

Description

Cette requête donne la valeur d'un registre pour tous les moteurs du robot.

Exemple d'une commande cURL

curl http://poppy.local:8080/motors/registers/angle_limit/list.json

Valeur de retour

Sur un Poppy Torso :

{
    "angle_limit":
    {
        "abs_z":
        [
            -79.96,
            80.04
        ],
        "bust_y":
        [
            46.02,
            -22.99
        ],
        "bust_x":
        [
            39.96,
            -40.04
        ],
        "head_z":
        [
            -99.85,
            100.15
        ],
        "head_y":
        [
            20.03,
            -28.060000000000002
        ],
        "l_shoulder_y":
        [
            -209.95999999999998,
            65.03
        ],
        "l_shoulder_x":
        [
            195.01,
            -20.019999999999996
        ],
        "l_arm_z":
        [
            89.98,
            -89.98
        ],
        "l_elbow_y":
        [
            -50.0,
            90.04
        ],
        "r_shoulder_y":
        [
            65.03,
            -210.04000000000002
        ],
        "r_shoulder_x":
        [
            20.019999999999996,
            -195.01
        ],
        "r_arm_z":
        [
            89.98,
            -89.98
        ],
        "r_elbow_y":
        [
            89.96,
            -57.03
        ]
    }
}

Déplacer un moteur

POST /motors/<motor_name>/goto.json + position + duration + wait

Description

Définit la position des motors, en duration secondes et si wait vaut vrai, il ne renverra sa réponse qu'une fois le déplacement terminé.

La position doit être donnée sous forme de valeur flottante (elle correspond à la valeur de l'angle à atteindre). La durée doit être donnée sous forme de flottant, en secondes. Et wait doit valoir true, True ou 1 si vous voulez attendre, n'importe quelle autre valeur si vous ne voulez pas attendre. wait est défini sur false par défaut.

Exemple d'une commande cURL

curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{"position":10,"duration":"3","wait":"true"}' \
     http://localhost\:8080/motors/bust_y/goto.json

Valeur de retour

{
    "motors":
    {
        "bust_y": 10.0
    },
    "duration": 3.0,
    "waiting": true
}

Déplacer plusieurs moteurs

POST /motors/goto.json + motors + positions + duration + wait

Description

Définit la position des motors, en duration secondes et si wait vaut vrai, il ne renverra sa réponse qu'une fois le déplacement terminé.

Les moteurs doivent être indiqués sous forme de liste de noms de moteurs. La position doit être donnée sous forme de liste de valeurs flottantes (elle correspond aux valeurs d'angle à atteindre pour chaque moteur). La durée doit être donnée sous forme de flottant, en secondes. Et wait devrait être soit true, True ou 1 si vous voulez attendre, n'importe quelle autre valeur si vous ne voulez pas attendre. wait est défini sur false par défaut.

Exemple d'une commande cURL

curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{"motors":["bust_y", "head_y"], "positions":[0,10],"duration":"3","wait":"true"}' \
     http://localhost\:8080/motors/goto.json

Valeur de retour

{
    "motors":
    {
        "bust_y": 0.0,
        "head_y": 10.0
    },
    "duration": 3.0,
    "waiting": true
}

📷 Capteurs

📕 Sommaire

GET /sensors/list.json
GET /sensors/<sensor_name>/registers/list.json
GET /sensors/<sensor_name>/registers/<register_name>/value.json
POST /sensors/<sensor_name>/registers/<register_name>/value.json + new_value
GET /sensors/camera/frame.png
GET /sensors/code/<code_name>.json

Obtenir la liste des capteurs

GET /sensors/list.json

Description

Donne la liste de tous les capteurs du robot Poppy.

Commande cURL

curl http://poppy.local:8080/sensors/list.json

Valeur de retour

{
    "sensors":
    [
        "camera",
        "marker_detector"
    ]
}

Obtenir la liste des registres d'un capteur

GET /sensors/<sensor_name>/registers/list.json

Description

Donne la liste des noms des registres d'un capteur.

Exemple d'une commande cURL

curl http://poppy.local:8080/sensors/camera/registers/list.json

Valeur de retour

{
    "registers":
    [
        "frame",
        "resolution",
        "fps",
        "index"
    ]
}

Obtenir la valeur d'un registre de capteur

GET /sensors/<sensor_name>/registers/<register_name>/value.json

Description

Donne la valeur d'un registre d'un capteur.

Exemple d'une commande cURL

curl http://poppy.local:8080/sensors/camera/registers/resolution/value.json

Valeur de retour

{
    "resolution":
    [
        640,
        480
    ]
}

Définir de la valeur d'un registre d'un capteur

POST /sensors/<sensor_name>/registers/<register_name>/value.json + new_value

Description

Modifie la valeur d'un registre d'un capteur. Le nom du capteur et le nom du registre sont indiqués dans l'url. La nouvelle valeur est donnée dans le corps de la requête.

⚠ Cette requête n'a pas pu être testée car nos robots Poppy n'ont que des capteurs dont les registres sont en lecture seule ⚠

Exemple d'une commande cURL

curl -X POST \
     -H 'Content-Type: application/json' \
     -d '30' \
     http://poppy.local:8080/sensors/camera/registers/fps/value.json

Valeur de retour

Cette requête retourne l'erreur suivante:

{
    "error": "Either sensor 'camera' or register 'fps' does not exist. Or you want to change a read-only register value",
    "tip": "You can find the list of sensors with /sensors/list.json and their registers with /sensors/<sensor_name>/registers/list.json",
    "details" : "can't set attribute"
}

Obtenir l'image de la caméra.

GET /sensors/camera/frame.png

Description

Récupère une image grâce à la caméra embarquée du robot

Exemple d'une commande cURL

curl http://poppy.local:8080/sensors/camera/frame.png -o camera.png

Valeur de retour

Une image camera.png


Obtenir les QR codes détectés par la caméra

GET /sensors/code/<code_name>.json

Description

Utilise la primitive marker_detector pour analyser l'image de la caméra et détecter les QR codes. Les noms des QR codes peuvent être tertis, caribou, lapin, rabbit. Vous pouvez également donner list dans le champ code_name pour obtenir la liste des QR codes détectés.

Exemple 1 d'une commande cURL

curl http://poppy.local:8080/sensors/code/tetris.json

Valeur de retour

{
    "found": true
}

Exemple 2 d'une commande cURL

curl http://poppy.local:8080/sensors/code/list.json

Valeur de retour

{
    "codes": ["caribou", "lapin", "rabbit"]
}

🦾 Enregistrements

📕 Sommaire

GET /records/list.json
POST /records/<move_name>/record.json
POST /records/<move_name>/save.json
POST /records/<move_name>/play.json
POST /records/<move_name>/stop.json

Obtenir les enregistrements disponibles

GET /records/list.json

Description

Donne la liste de tous les déplacements enregistrés par l'utilisateur.

Commande cURL

curl http://poppy.local:8080/records/list.json

Valeur de retour

{
    "moves":
    [
        "wave_hand",
        "raise_left_arm",
        "my_dance"
    ]
}

Obtenir toutes les positions d'un enregistrement

GET records/<move_name>/value.json

Description

Donne toutes les positions d'un enregistrement avec le temps auquel elles ont été atteintes.

La réponse fournira toutes les positions pour chaque moteur enregistré, toutes les 0,2 seconde dans le champ "move_name". Il donne également le nombre de positions enregistrées dans le champ "longueur".

Exemple d'une commande cURL

curl http://poppy.local:8080/records/my_move/value.json

Valeur de retour

{
    "my_move":
    {
        "3.4332275390625e-05":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.02030038833618164":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.04038596153259277":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.060483694076538086":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.08058643341064453":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.10069108009338379":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.12079858779907227":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.1409299373626709":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.16099071502685547":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.1810588836669922":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.20113611221313477":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.22122740745544434":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.24132609367370605":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.261415958404541":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.22,
                -0.0
            ]
        },
        "0.2814903259277344":
        {
            "head_z":
            [
                -150.0,
                0.0
            ],
            "l_arm_z":
            [
                -0.31,
                -0.0
            ]
        }
    },
    "length": 15
}

Enregistrer un mouvement

POST /records/<move_name>/record.json + motors

Description

Si vos moteurs sont mous, vous pourrez déplacer les moteurs de votre robot et enregistrer certains mouvements. Cette requête démarre un enregistrement.

Les noms des moteurs dans le corps sont facultatifs. Si votre corps est vide, il enregistrera par défaut le mouvement avec tous les moteurs du robot. Les moteurs doivent être donnés de l'une des deux façons suivantes : {"motors": ["head_z", "l_arm_z"]} ou {"motors": "head_z,l_arm_z"]}.

⚠ Si un mouvement du même nom a déjà été défini, il sera écrasé !

Exemple d'une commande cURL

curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{"motors":["head_z","l_arm_z"]}' \
     http://localhost:8080/records/my_move/record.json

Valeur de retour

{
    "my_move": "recording"
}

Enregistrer un mouvement

POST /records/<move_name>/save.json

Description

Arrête l'enregistrement en cours et le sauvegarde. Cette requête n'a pas besoin d'information supplémentaire dans son corps de requête.

Exemple d'une commande cURL

curl -X POST \
     -H 'Content-Type: application/json' \
     http://localhost:8080/records/my_move/save.json

Valeur de retour

{
    "my_move": "saved"
}

Jouer un coup enregistré

POST /records/<move_name>/play.json + speed

Description

Rejoue un mouvement enregistré.

Le paramètre de vitesse est une valeur flottante. Il peut être négatif pour jouer le coup à l'envers. Il doit être donné de la façon suivante : {"speed":-1.0} ou {"speed":0.5}.

1.0 est la vitesse à donner pour rejouer le coup à la même vitesse qu'il a été enregistré.

Exemple d'une commande cURL

curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{"speed": -1.0}' \
     http://localhost:8080/records/my_move/play.json

Valeur de retour

{
    "my_move": "started replay"
}

Arrêter la relecture d'un coup enregistré

POST /records/<move_name>/stop.json

Description

Arrête la relecture d'un coup enregistré.

Cette demande n'a pas besoin de données dans son corps.

Exemple d'une commande cURL

curl -X POST \
     -H 'Content-Type: application/json' \
     http://localhost:8080/records/my_move/stop.json

Valeur de retour

{
    "my_move": "stopped"
}

🤖 Primitives

📕 Sommaire

GET /primitives/list.json
GET /primitives/running/list.json
GET /primitives/<primitive_name>/start.json
GET /primitives/<primitive_name>/stop.json
GET /primitives/<primitive_name>/pause.json
GET /primitives/<primitive_name>/resume.json
GET /primitives/<primitive_name>/properties/list.json
GET /primitives/<primitive_name>/properties/<prop>/value.json
POST /primitives/<primitive_name>/properties/<prop>/value.json + new_value
GET /primitives/<primitive_name>/methods/list.json
POST /primitives/<primitive_name>/methods/<method_name>/args.json

Obtenir la liste de toutes les primitives

GET /primitives/list.json

Description

Les primitives sont des comportements prédéfinis de nos robots Poppy. Vous pouvez ajouter votre propre primitive si vous l'écrivez dans les fichiers source. Un tutoriel (FR :fr:) est disponible pour l'Ergo-Jr ici. Vous pouvez ajouter votre comportement dans /home/poppy/dev/<creature_name>/software/<creature_name>/primitives si vous êtes sur Raspberry.

Commande cURL

curl http://poppy.local:8080/primitives/list.json

Valeur de retour

{
    "primitives":
    [
        "limit_torque",
        "temperature_monitoring",
        "dance_beat_motion",
        "init_position",
        "upper_body_idle_motion",
        "head_idle_motion",
        "arms_turn_compliant",
        "arms_copy_motion",
        "_mymove_recorder",
        "_mymove_player"
    ]
}

Obtenir la liste de toutes les primitives en cours d'exécution

GET /primitives/running/list.json

Description

Même requête que ci-dessus mais elle ne donne que les primitives en cours d'exécution.

Commande cURL

curl http://poppy.local:8080/primitives/running/list.json

Valeur de retour

{
    "primitives":
    [
        "temperature_monitoring"
    ]
}

Exécuter une primitive

GET /primitives/<primitive_name>/start.json

Description

Exécute une primitive existante.

Toutes les primitives existantes peuvent être obtenues avec GET /primitives/list.json (décrite ci-dessus.

Exemple d'une commande cURL

curl http://poppy.local:8080/primitives/init_position/start.json

Valeur de retour

{
    "init_position": "started"
}

Arrêter une primitive

GET /primitives/<primitive_name>/stop.json

Description

Arrête une primitive en cours d'exécution.

Exemple d'une commande cURL

curl http://poppy.local:8080/primitives/init_position/stop.json

Valeur de retour

{
    "init_position": "stopped"
}

Mettre une primitive en pause

GET /primitives/<primitive_name>/pause.json

Description

Suspend une primitive en cours d'exécution.

Exemple d'une commande cURL

curl http://poppy.local:8080/primitives/init_position/pause.json

Valeur de retour

{
    "init_position": "paused"
}

Reprendre la lecture d'une primitive

GET /primitives/<primitive_name>/resume.json

Description

Reprend la lecture d'une primitive précédemment mise en pause.

Exemple d'une commande cURL

curl http://poppy.local:8080/primitives/init_position/resume.json

Valeur de retour

{
    "init_position": "resumed"
}

Obtenir la liste de toutes les propriétés d'une primitive

GET /primitives/<primitive_name>/properties/list.json

Description

Donne la liste des noms de propriétés d'une primitive.

Commande cURL

curl http://poppy.local:8080/init_position/properties/list.json

Valeur de retour

Malheureusement, mes primitives n'ont aucune propriété.

{
    "property": []
}

Obtenir la valeur d'une propriété d'une primitive

GET /primitives/<primitive_name>/properties/<prop>/value.json

Description

Cette requête donnerait la valeur d'une propriété d'un primitive.

⚠ Cette requête get n'a pas pu être testée car nos primitives n'ont aucune propriété ⚠

Commande cURL

curl http://poppy.local:8080/primitives/init_position/properties/<prop>/value.json

Valeur de retour

Malheureusement, mes primitives n'ont aucune propriété.


Définir la valeur d'une propriété d'une primitive

POST /primitives/<primitive_name>/properties/<prop>/value.json + new_value

Description

Cette requête modifierait la valeur d'une propriété d'une primitive.

⚠ Cette requête post n'a pas pu être testée car nos primitives n'ont aucune propriété ⚠

Commande cURL

curl -X POST \
     -H 'Content-Type: application/json' \
     -d 'new_value' \
     http://poppy.local:8080/primitives/init_position/properties/<prop>/value.json

Valeur de retour

Malheureusement, mes primitives n'ont aucune propriété.


Obtenir la liste de toutes les méthodes d'une primitive

GET /primitives/<primitive_name>/methods/list.json

Description

Donne la liste des noms des méthodes d'une primitive.

Commande cURL

curl http://poppy.local:8080/primitives/init_position/methods/list.json

Valeur de retour

{
    "methods":
    [
        "start",
        "stop",
        "pause",
        "resume"
    ]
}

Appeler une méthode d'une primitive avec des arguments

POST /primitives/<primitive_name>/methods/<method_name>/args.json

Description

Appelle une méthode d'une primitive avec des arguments optionnels. Malheureusement, nos primitives actuelles n'ont pas de méthodes acceptant des arguments optionnels.

Exemple d'une commande cURL (non testée)

En supposant que la méthode start de la primitive init_position puisse prendre des arguments optionnels, comme une vitesse (ce n'est actuellement pas le cas).

curl -X POST \
     -H 'Content-Type: application/json' \
     -d '1.0' \
     http://poppy.local:8080/primitives/init_position/methods/speed/args.json

Valeur de retour

L'exemple précédent renverra une erreur, car la méthode start ne peut pas prendre d'arguments optionnels.

Mais si c'était le cas, cela donnerait une réponse comme :

{"init_position:start": 1.0}

Avec 1.0 étant la valeur de retour de la méthode start. Actuellement, la méthode start ne renvoie rien.

🇽 🇾 🇿 Cinématique Inverse (IK)

📕 Summary

GET /ik/<chain_name>/value.json
POST /ik/<chain_name>/goto.json + xyz, duration, wait, [rotation] 
GET /ik/<chain_name>/rpy.json + r, p, y

Obtenir les coordonnées cartésiennes des bras

GET /ik/<chain_name>/value.json

Description

Donne les coordonnées x, y et z de la chaîne de votre choix.

  • Poppy Ergo Jr a 1 chaîne : chain,
  • Poppy Torso a 2 chaines : l_arm_chain et r_arm_chain,
  • Poppy Humanoid n'a pas encore de chaîne IK.

Les unités sont en mètres pour x, y, z.

La rotation (rot) est donnée pour le débogage car l'orientation IK n'est pas totalement opérationnelle. Donner des valeurs x,y,z à la requête IK-goto fonctionne bien, mais lorsqu'une orientation est donnée en complément, la position atteinte peut être très éloignée des coordonnées cartésiennes données.

Exemple d'une commande cURL (Ergo Jr)

curl http://poppy.local:8080/ik/chain>/value.json

Valeur de retour

{
    "xyz": "-0.0067,-0.1744,0.1508",
    "rot": "-0.0012,-0.0296,0.9996"
}

Déplacement de la chaîne IK vers une position cartésienne

POST /ik/<chain_name>/goto.json

Description

Déplace la chaîne cinématique inverse aux coordonnées x, y et z.

  • Poppy Ergo Jr a 1 chaîne : chain,
  • Poppy Torso a 2 chaines : l_arm_chain et r_arm_chain,
  • Poppy Humanoid n'a pas encore de chaîne IK. Les unités sont en mètres pour x, y, z.

Vous pouvez donner une rotation ou un tuple roll/pitch/yaw (roulis/tangage/lacet) pour ajouter une orientation à la position cible. Attention, l'orientation IK n'est pas totalement opérationnelle. Donner des valeurs x,y,z à la requête IK-goto fonctionne bien, mais lorsqu'une orientation est donnée en complément, la position atteinte peut être très éloignée des coordonnées cartésiennes données.

Exemple d'une commande cURL (Ergo Jr)

curl -X POST \
     -H 'Content-Type: application/json' \
     -d '{"xyz": "-0.0091,-0.1744,0.1484","rot": "-0.0018,-0.0471,0.9989","duration":"3","wait":"true"}' \
     http://poppy.local:8080/ik/chain/goto.json

Valeur de retour

La réponse est la position atteinte par le bras

{
    "xyz": "-0.003,-0.1744,0.1475",
    "rot": "-0.001,-0.0593,0.9982"
}

Obtenir la matrice de rotation à partir des valeurs RPY

GET /ik/<chain_name>/rpy.json

Description

Convertit un tuple rpy en une matrice de rotation.

Les chaînes IK disponibles sont :

  • Poppy Ergo Jr a 1 chaîne : chain,
  • Poppy Torso a 2 chaines : l_arm_chain et r_arm_chain,
  • Poppy Humanoid n'a pas encore de chaîne IK.

Les arguments requis sont :

  • "r" : roll/roulis (rad)
  • "p" : pitch/tangage (rad)
  • "y" : yaw/lacet (rad)

Vous pouvez utiliser ce site pour visualiser les valeurs de roulis, de tangage et de lacet : Euler Angles Gimbal Visualization. Ce site web vous permet de calculer la matrice de rotation à partir des valeurs rpy données en degrés.

les unités rpy sont en radians. Dans la plupart des exemples, vous trouverez ces valeurs en degrés. Une future mise à jour peut permettre l'utilisation de rpy avec des degrés.

Exemple d'une commande cURL (Ergo Jr)

curl -X GET \
     -H 'Content-Type: application/json' \
     -d '{"r":"90", "p":"0", "y":"0"}' \
     http://localhost:8080/ik/chain/rpy.json

Valeur de retour

Donne la matrice de rotation à partir des valeurs rpy.

{
    "rpy": [[ 1.0, 0.0,  0.0 ],
            [ 0.0, 0.0, -1.0 ],
            [ 0.0, 1.0,  0.0 ]]
}

results matching ""

    No results matching ""