2011-02-03 4 views
2

J'utilise les bibliothèques de programmation Aria C++ pour les robots mobiles (http://robots.mobilerobots.com/wiki/ARIA). Je suis nouveau à cette API donc je voulais commencer par une simple classe d'action dérivée d'ArAction. Maintenant, j'ai essayé de développer un petit programme de test (un ArAction) pour contrôler un robot p3dx simulé via MobileSim. Le développement a lieu sous Ubuntu 10.10, en utilisant gcc 4.4.5. Faire (compiler) mon code fonctionne bien, sans erreurs. Je peux également définir la vitesse désirée par exemple dans la méthode fire() de mon ArAction, et la simulation fonctionne également comme souhaité. Mais, malheureusement, je ne peux pas utiliser l'objet ArRobot attaché à l'ArAction que je suis en train de surcharger. Le problème est qu'aucune des fonctions membres de l'objet ArRobot ne semble fonctionner. Par exemple, appeler getVel() ou getCompass() renvoie toujours une valeur nulle. Et quand j'appelle la méthode hasFrontBumpers() le programme se bloque même avec le message d'erreur "Aria: Signal reçu 'SIGSEGV'. Dès que je retire cet appel de méthode et de recompiler l'erreur est également repartie ...Pourquoi est-ce que je reçois un signal SIGSEGV en utilisant l'API Aria robotics?

Voici le code approprié qui conduit à l'accident:

ArActionDesired * forward::fire(ArActionDesired d) 
{ 
    desiredState.reset(); 

    ArRobot *r = getRobot(); 
    if(r == NULL) 
    { 
    printf("ArRobot = NULL\n"); 
    deactivate(); 
    return &desiredState; 
    } 

    printf("ok, ArRobot is not NULL, check for bumpers...\n"); 
    r->hasFrontBumpers(); // <-- this leads to the SIGSEV-based "crash" 

    return &desiredState; 
} 

Toutes les idées que je manque ici - est-ce un problème avec mon codage, ou avec l'environnement de simulation? Merci d'avance pour votre aide!

Cordialement, Matthias

+0

Votre code semble propre – BlackBear

Répondre

1

ok, trouvé le maintenant - pour les dossiers: les libs Aria dans la version 2.7.2 sont basées sur gcc-3 et libstdC++ 5, mais Ubuntu 10.10 (que j'utilise) est livré avec gcc-4 et libstdC++ 6 par défaut. J'ai donc dû installer manuellement les anciennes versions des deux paquets, maintenant mon code fonctionne bien ...

cheers!

+0

Salut, j'ai le même problème. Cependant j'utilise Ros. Pensez-vous qu'il est possible de résoudre le problème en recompilant Aria avec les dernières versions de Gcc et libstdc? – Maverik

0

Appel hasFrontBumpers() pour une p3dx du fire() fonctionne très bien pour moi sur une plate-forme Linux similaire. Si quelque chose ne va pas, ce n'est pas dans cette méthode mais dans l'initialisation du système. Une raison pour le robot non-mobile pourrait être que robot.enableMotors() n'a pas été appelée.

Questions connexes