見えないターゲットの探索
探索行動を実装することは、いくつかの状況で役立ちます。一部のゲームでは、スコアを入れようとするゴールが予測可能な場所にないため、「十分近く」まで到達するためのデッドレコニング自律コードに頼ることができません。例えば2009年では、ゴールは相手のロボットに取り付けられており、それらも動き回っていました。探索を実装したいもう一つの理由は、ロボットのドライブトレインが希望する正確な位置に配置するのに十分な信頼性/再現性がない場合です。スウェルブドライブやオムニディレクショナルドライブは、正確な位置に移動するのに苦労することがあります(これはスウェルブやオムニディレクショナルドライブトレインの欠点ではありません。単に再現可能な位置に移動させるのがより難しいだけです)。一部のゲームでは、自律モード中にロボット同士の相互作用が許可されていました。2006年には、防御ロボットが攻撃ロボットをスコアリングポジションから押し出そうとする自律的な決闘に頻繁に参加しました。この場合、何も 確実ではありません!これにより、最初は見えないゴールを自動的に探索するロボットを持つことが役立つ方法について考えるきっかけになれば幸いです。
幸いなことに、ロボットに探索ロジックを追加するのは非常に簡単です。探索を実装するには、ロボットにターゲットをスキャンさせ、見つけたら照準コードの実行を開始するだけです。ターゲットが見えているかどうかを知るために、limelightから報告される「tv」または「target valid」値を使用します。
	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;
