Я использую библиотеки программирования 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
Ваш код выглядит чистым – BlackBear