我正在使用移动机器人的 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;
}
我在这里缺少的任何想法-是我的编码问题还是模拟环境有问题?在此先感谢您的帮助!
亲切的问候,马蒂亚斯