Почему я получаю сигнал SIGSEGV при использовании API робототехники Aria? - PullRequest
2 голосов
/ 03 февраля 2011

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

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

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

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

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

С уважением, Матиас

Ответы [ 2 ]

1 голос
/ 05 февраля 2011

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

ура!

0 голосов
/ 04 февраля 2011

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

...