【问题标题】:Why do I receive a SIGSEGV signal while using the Aria robotics API?为什么我在使用 Aria 机器人 API 时会收到 SIGSEGV 信号?
【发布时间】:2011-02-03 20:40:08
【问题描述】:

我正在为移动机器人使用 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;
}

我在这里遗漏的任何想法 - 是我的编码问题还是模拟环境有问题?提前感谢您的帮助!

亲切的问候,马蒂亚斯

【问题讨论】:

    标签: c++ robotics robot


    【解决方案1】:

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

    干杯!

    【讨论】:

    • 嗨,我也有同样的问题。但是我正在使用罗斯。您认为可以通过使用最新版本的 Gcc 和 libstdc 重新编译 Aria 来解决问题吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 2021-07-18
      相关资源
      最近更新 更多