メインコンテンツまでスキップ

見えないターゲットの探索

探索動作の実装は、いくつかの状況で役立ちます。一部のゲームでは、得点を狙うゴールが予測可能な位置にない場合があり、デッドレコニングによる自律コードで「十分近く」に到達することに頼れません。例えば2009年では、ゴールは相手のロボットに取り付けられており、それらも動き回っていました。探索を実装したいもう一つの理由は、ロボットのドライブトレインが十分に信頼性/再現性がなく、望む位置に正確に配置できない場合です。スワーブドライブや全方向ドライブは、正確な位置への移動に苦労することがあります(これはスワーブや全方向ドライブトレインを批判しているわけではありません。再現性のある位置への移動がより難しいというだけです)。一部のゲームでは、自律モード中にロボット同士の相互作用が許可されていることもあります。2006年では、ディフェンスロボットがオフェンスロボットを得点位置から押し出そうとする自律対決がよく行われました。この場合、何も確実ではありません!これを読んで、最初は見えないゴールをロボットが自動的に探索することが役立つ方法について考えるきっかけになれば幸いです。

幸いなことに、ロボットに探索ロジックを追加するのは非常に簡単です。探索を実装するには、ロボットにターゲットをスキャンさせ、見つけたら照準コードを実行し始めるだけです。Limelightが報告する'tv'(ターゲット有効)の値を使用して、ターゲットが見えているかどうかを判断します。

	std::shared_ptr<NetworkTable> table = NetworkTable::GetTable("limelight");
float tv = table->GetNumber("tv");
float tx = table->GetNumber("tx");

float steering_adjust = 0.0f;
if (tv == 0.0f)
{
// ターゲットが見えないので、安全な速度でその場で回転してターゲットを探索する
steering_adjust = 0.3f;
}
else
{
// ターゲットが見えるので、照準コードを実行する
float heading_error = tx;
steering_adjust = Kp * tx;
}

left_command+=steering_adjust;
right_command-=steering_adjust;

CS_seeking_anim