2

位置トラックとして光学式マウスを使用するロボットがあります。基本的に、ロボットが動くと、マウスを使用してX方向とY方向の変化を追跡できます。マウスは、移動している方向(つまり、負のXまたは正のX)も追跡します。これらの値は、別々のXレジスタとYレジスタに合計されます。

これで、ロボットは所定の位置で回転し、前進するだけです。そのため、ロボットの動きは理想的には直線であり(ただし、マウスのトラッキングは、方向を変えると偏差を拾う可能性があります)、特定の角度で行われます。ロボットの特定の動きのセットは次のようになります
。A:45度回転、3インチ移動
B:90度回転、10インチ移動
C:-110度回転、5インチ移動
D:10度回転、1インチ移動
しかしマウスXおよびマウスYレジスタが、各方向に移動した実際の距離を示すたびに。

さて、AからDへの移動セットのみを繰り返したい場合、すでに収集した情報を使用してこれを行うにはどうすればよいですか。基本的に、すでにフィードしているすべての角度と距離を合計できることはわかっていますが、各移動順序に大きなエラーがあった場合、これは不正確であることがわかります。マウスからの生の情報をどのように使用できますか?友人から、マウスの値を連続的に正弦波と正弦波で計算して最終的なベクトルを計算できるというアイデアがありましたが、これがどのように機能するかはよくわかりません。

問題は、マウスが相対的な読み取り値しか表示しないため、回転または後方に移動すると、情報が消去される可能性があることです。そうですね、私が疑問に思っているのは、アルゴリズムを実装して、変更を継続的に追跡し、元々そこに到達するためにジグザグに移動した場合に最短経路を提供できるようにする方法です。

4

3 に答える 3

3

私はあなたがする必要がある基本的なアルゴリズムはこれだと思います:

currentX = currentY = 0;
heading = 0; // radians
while (true)
{
    deltas = SampleMouseDeltas();
    heading += deltas.Heading;
    currentX += Math.Cos(heading) * deltas.Distance;
    currentY += Math.Sin(heading) * deltas.Distance;
}

あなたはこれが正確ではないというあなたの考えに正しいです。理由から「推測航法」と呼ばれています。

デルタを取得できる場所。「X」座標に基づく見出し(式は(インチ単位のデルタx)/(回転の中心からのインチ単位のマウスセンサー距離)。また、デルタ。距離は「Y」から取得されます。 "センサー、ピクセルからインチに変換した後。

次に、手順を実行するために、次のようなことを行うことができます。

robot.RotateLeft();
heading = 0;
while (heading < 45 degrees)
    heading += SampleMouseDeltas.Heading;
robot.StopRotateLeft();

... etc ...
于 2009-04-12T21:39:56.947 に答える
0

あなたの質問への答えではありませんが、おそらく注意話です...私は1年前の学校のプロジェクトとしてまさにこの種のロボットを作りました。それをやっている間にかなりのことを学びましたが、それは完全な失敗でした。あなたがどれだけ運転したかを追跡するためにマウスを使用することに関して:それは私たち、または他のグループのいずれにとってもうまく機能しませんでした。おそらく、マウスを床から数mm上に置く必要があったために、マウスのカメラの焦点が合っていなかったためです。翌年、同じプロジェクトを行っているグループはこの方法を使用しませんでした。代わりに、車輪にマーキングを付け、単純な赤外線センサーを使用して、車輪が何回転したかを計算しました。

于 2009-04-12T21:24:44.770 に答える
-1

私はこのスレッドをやや壊滅させていることを知っていますが、より正確な角度追跡が必要な場合は、2つの光学マウスが理想的です。基本的に、同じ方向のモーションをキャンセルすると、マウスが互いに対して行ったモーションが残ります。そこから、ボットがどこまで回転したかを正確に判断するのは簡単な計算になります。

于 2010-06-08T18:23:52.873 に答える