Mujoco C++ : Lister tous les corps

Cet exemple simple montre comment charger un modèle MuJoCo depuis un fichier XML et lister tous les corps du modèle avec leurs identifiants.

list_bodies.cpp
#include <mujoco/mujoco.h>
#include <cstdio>

int main(int argc, char** argv) {
    // Vérifier les arguments
    if (argc < 2) {
        printf("Utilisation : %s modele.xml\n", argv[0]);
        return 1;
    }

    // Charger le modèle
    char error[1000] = "Impossible de charger le modèle binaire";
    mjModel* m = mj_loadXML(argv[1], nullptr, error, 1000);
    if (!m) {
        printf("%s\n", error);
        return 1;
    }

    // Créer les données
    mjData* d = mj_makeData(m);

    // Boucler sur tous les corps
    printf("Corps dans le modèle :\n");
    for (int i = 0; i < m->nbody; i++) {
        const char* name = mj_id2name(m, mjOBJ_BODY, i);
        if (name)
            printf("  id %d : %s\n", i, name);
        else
            printf("  id %d : (sans nom)\n", i);
    }

    // Libérer les structures MuJoCo
    mj_deleteData(d);
    mj_deleteModel(m);

    return 0;
}

Comment compiler

build.sh
g++ -o list_bodies list_bodies.cpp -lmujoco -I/opt/mujoco/include -L/opt/mujoco/lib -Wl,-rpath,/opt/mujoco/lib

Exemple d’utilisation

run_example.sh
./list_bodies ~/mujoco_menagerie/franka_fr3/fr3.xml
Corps dans le modèle :
  id 0: world
  id 1: base
  id 2: fr3_link0
  id 3: fr3_link1
  id 4: fr3_link2
  id 5: fr3_link3
  id 6: fr3_link4
  id 7: fr3_link5
  id 8: fr3_link6
  id 9: fr3_link7

Consultez les articles similaires par catégorie : Mujoco, Robotics, C++