为什么我在使用 Aria 机器人 API 时会收到 SIGSEGV 信号?

问题描述 投票:0回答: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:收到信号‘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;
}

我在这里缺少什么想法——是我的编码有问题,还是模拟环境有问题?预先感谢您的帮助!

亲切的问候,马蒂亚斯

c++ robotics
2个回答
1
投票

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

干杯!


0
投票
在类似的 Linux 平台上,从

hasFrontBumpers()

 调用 
fire()
 获取 p3dx 对我来说效果很好。如果有问题,问题不在于该方法,而在于系统的初始化。机器人不移动的原因可能是尚未调用 
robot.enableMotors()

© www.soinside.com 2019 - 2024. All rights reserved.