我使用的是用于移动机器人的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.“。只要我删除这个方法调用并重新编译,错误就会再次消失……
以下是导致崩溃的相关代码:
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;
}你知道我在这里遗漏了什么吗--是我的编码有问题,还是模拟环境有问题?提前感谢您的帮助!
温馨的问候,马蒂亚斯
发布于 2011-02-05 08:34:02
好了,现在我找到了--为了记录:版本2.7.2中的Aria库是基于gcc-3和libstdc++ 5的,但是Ubuntu10.10(我正在使用的)默认情况下是随gcc-4和libstdc++ 6一起提供的。所以我不得不手动安装两个包的旧版本,现在我的代码运行得很好……
干杯!
发布于 2011-02-05 01:10:25
在类似的Linux平台上,从fire()调用hasFrontBumpers()来获取p3dx对我来说很好。如果有什么问题,不是在这个方法中,而是在系统的初始化中。机器人不能移动的一个原因可能是robot.enableMotors()没有被调用。
https://stackoverflow.com/questions/4891471
复制相似问题