首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在使用Aria robotics API时收到SIGSEGV信号?

为什么在使用Aria robotics API时收到SIGSEGV信号?
EN

Stack Overflow用户
提问于 2011-02-04 04:40:09
回答 2查看 1.2K关注 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: Received signal‘SIGSEGV’.Exitting.“。只要我删除这个方法调用并重新编译,错误就会再次消失……

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

代码语言:javascript
复制
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;
}

你知道我在这里遗漏了什么吗--是我的编码有问题,还是模拟环境有问题?提前感谢您的帮助!

温馨的问候,马蒂亚斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-05 08:34:02

好了,现在我找到了--为了记录:版本2.7.2中的Aria库是基于gcc-3和libstdc++ 5的,但是Ubuntu10.10(我正在使用的)默认情况下是随gcc-4和libstdc++ 6一起提供的。所以我不得不手动安装两个包的旧版本,现在我的代码运行得很好……

干杯!

票数 1
EN

Stack Overflow用户

发布于 2011-02-05 01:10:25

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4891471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档