私は移動ロボット用のAriaC++プログラミングライブラリ(http://robots.mobilerobots.com/wiki/ARIA)を使用しています。私はこのAPIを初めて使用するため、ArActionから派生した単純なアクションクラスから始めたいと思いました。ここで、MobileSimを介してシミュレートされたp3dxロボットを制御するために、小さなテストプログラム(ArAction)を開発しようとしました。開発は、gcc4.4.5を使用してUbuntu10.10で行われます。コードの作成(コンパイル)はエラーなしで正常に機能します。たとえば、ArActionのfire()メソッドで希望の速度を設定することもでき、シミュレーションも希望どおりに機能しています。
ただし、残念ながら、オーバーライドしているArActionにアタッチされたArRobotオブジェクトを使用することはできません。問題は、ArRobotオブジェクトのメンバー関数がどれも機能していないように見えることです。たとえば、getVel()またはgetCompass()を呼び出すと、常にゼロ値が返されます。また、hasFrontBumpers()メソッドを呼び出すと、「Aria:Receivedsignal'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;
}
私がここで見逃しているアイデアはありますか?それは私のコーディングの問題ですか、それともシミュレーション環境の問題ですか?よろしくお願いします!
よろしく、マティアス