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
Votre code semble propre – BlackBear