2

我正在使用移动机器人的 Aria C++ 编程库 (http://robots.mobilerobots.com/wiki/ARIA)。我是这个 API 的新手,所以我想从一个从 ArAction 派生的简单动作类开始。现在我尝试开发一个小型测试程序(ArAction),以便通过 MobileSim 控制模拟的 p3dx 机器人。开发在 Ubuntu 10.10 下使用 gcc 4.4.5 进行。制作(编译)我的代码工作正常,没有错误。例如,我还可以在我的 ArAction 的 fire() 方法中设置所需的速度,并且模拟也可以按需要工作。

但是,不幸的是,我不能使用附加到我要覆盖的 ArAction 的 ArRobot 对象。问题是 ArRobot 对象的所有成员函数似乎都不起作用。例如,调用 getVel() 或 getCompass() 总是返回零值。当我调用 hasFrontBumpers() 方法时,程序甚至崩溃并显示错误消息“Aria: Received signal 'SIGSEGV'. Exiting.”。一旦我删除了这个方法调用并重新编译,错误也再次消失了......

以下是导致崩溃的相关代码:

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

我在这里缺少的任何想法-是我的编码问题还是模拟环境有问题?在此先感谢您的帮助!

亲切的问候,马蒂亚斯

4

2 回答 2

1

好的,现在发现了——作为记录:版本 2.7.2 中的 Aria 库基于 gcc-3 和 libstdc++ 5,但 Ubuntu 10.10(我正在使用)默认附带 gcc-4 和 libstdc++ 6 . 所以我不得不手动安装这两个软件包的旧版本,现在我的代码运行良好......

干杯!

于 2011-02-05T00:34:01.740 回答
0

在类似的 Linux 平台上调用hasFrontBumpers()p3dx对我来说效果很好。fire()如果有问题,不是在这个方法中,而是在系统的初始化中。机器人不动的一个原因可能是robot.enableMotors()没有被调用。

于 2011-02-04T17:10:25.283 回答