iRobot Create で Player (Player/Stage) を使用しています。ロボットからオドメトリ データを取得するためのインターフェイスは非常に単純です。playerc_client_read を呼び出すと、playerc_position2d プロキシを適切にサブスクライブしていれば、プロキシのメンバー px、py、pa に x および y の移動距離 (メートル単位); および回転 (ラジアン単位)。
シングル スレッド アプリケーションでこれを行うことに問題はありません。すべてのオドメトリ データは、必要な場所に完全に配置されています。
ただし、ロボット コントローラーを独自のスレッド (pthreads を使用) に移動しようとすると、いくつかの問題が発生します。問題は、px だけが更新されているように見えることです。py と pa は常に 0 のままです。
ロボットスレッドの要点は次のとおりです
//declare everything (including the playerc_client_t* object and playerc_position2d_t* object)
//connect to server (in pull mode or push mode, it doesn't seem to matter)
//subscribe to position2d proxy
while(!should_quit) {
playerc_client_read(client)
double xPosition = position2d->px;
double yPosition = position2d->py;
double radians = position2d->pa;
//do some stuff
sleep(10 milliseconds)
}
cleanup and unsubscribe
そして案の定、ロボットがどのように動いても、yPosition とラジアンは 0 のままですが、xPosition のみが設定されます。
オンラインで他に何も見つかりませんでした。これは既知のバグですか? 他の誰かがこの問題を抱えていますか? なぜこれが起こっているのかについて誰かが洞察を提供できますか? ありがとうございました。
完全な開示: 私は大学院生で、これはクラス プロジェクト用です。