2011-02-03 5 views
2

Я использую библиотеки программирования Aria C++ для мобильных роботов (http://robots.mobilerobots.com/wiki/ARIA). Я новичок в этом API, поэтому я хотел начать с простого класса действий, полученного из ArAction. Теперь я попытался разработать небольшую тестовую программу (ArAction), чтобы управлял имитируемым роботом p3dx через MobileSim. Разработка происходит под Ubuntu 10.10, используя gcc 4.4.5. Выполнение (компиляция) моего кода работает нормально, без ошибок. Я также могу установить желаемую скорость, например, в моем методе FireA (ArAction), и симуляция также работает по желанию.Почему я получаю сигнал SIGSEGV при использовании API роботов Aria?

Но, к сожалению, я не могу использовать объект ArRobot, прикрепленный к ArAction, который я переопределяю. Проблема в том, что ни одна из функций-членов объекта ArRobot не работает. Например, вызов getVel() или getCompass() всегда возвращает нулевое значение. И когда я вызываю метод hasFrontBumpers(), программа даже выходит из строя с сообщением об ошибке «Aria: принятый сигнал« SIGSEGV ». Выход.». Как только я удалить этот вызов метода и перекомпилировать ошибка также ушел снова ...

Вот соответствующий код, который приводит к аварии:

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; 
} 

Любые идеи, что я здесь отсутствует - это проблема с моим кодированием или с имитационной средой? Заранее спасибо за вашу помощь!

С уважением, Matthias

+0

Ваш код выглядит чистым – BlackBear

ответ

1

ОК, нашел это сейчас - для записей: файлы Aria libs в версии 2.7.2 основаны на gcc-3 и libstdC++ 5, но Ubuntu 10.10 (который я использую) поставляется с gcc-4 и libstdC++ 6 по умолчанию. Поэтому мне пришлось вручную установить более старые версии обоих пакетов, теперь мой код работает нормально ...

ура!

+0

Привет, У меня такая же проблема. Однако я использую Рос. Считаете ли вы возможным решить проблему путем повторной компиляции Aria с последними версиями Gcc и libstdc? – Maverik

0

Вызывающие hasFrontBumpers() для p3dx из fire() отлично работает для меня на аналогичной платформе Linux. Если что-то не так, это не в этом методе, а в инициализации системы. Причиной для не движущегося робота может быть то, что robot.enableMotors() не был вызван.