Ana içeriğe geç

Görünmeyen Hedefleri Arama

Arama davranışı uygulamak birkaç durumda faydalı olabilir. Bazı oyunlarda, gol atmaya çalıştığınız hedef tahmin edilebilir bir konumda olmayabilir, bu yüzden "yeterince yakın" olmak için dead-reckoning otonom koduna güvenemezsiniz. Örneğin 2009'da, hedefler rakip robotlara bağlıydı ve onlar da hareket ediyordu. Arama uygulamak istemenizin bir diğer nedeni, robotunuzun tahrik sisteminin sizi tam olarak istediğiniz konuma getirecek kadar güvenilir/tekrarlanabilir olmaması olabilir. Bazen swerve tahrik sistemleri veya çok yönlü tahrik sistemleri hassas konumlara gitmekte zorlanabilir (bu swerve veya çok yönlü tahrik sistemlerine bir eleştiri değildir; sadece tekrarlanabilir konumlara gitmelerini sağlamak daha zorludur). Bazı oyunlar otonom mod sırasında robot-robot etkileşimine bile izin vermiştir. 2006'da sıklıkla savunma robotlarının hücum robotlarını gol pozisyonundan çıkarmaya çalıştığı otonom düellolara girerdik. Bu durumda hiçbir şeyden emin olamazsınız! Umarım bu, robotunuzun başlangıçta göremediği bir hedefi otomatik olarak aramasının faydalı olabileceği bazı yollar hakkında düşünmenizi sağlar.

Neyse ki, robotunuza arama mantığı eklemek çok kolaydır. Aramayı uygulamak için, robotunuzun bir hedef taraması yapmasını ve bulduğunda nişan alma kodunu çalıştırmaya başlamasını sağlarsınız. Bir hedef görüp görmediğimizi bilmek için limelight tarafından bildirilen 'tv' veya 'target valid' (hedef geçerli) değerini kullanacağız.

	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)
{
// Hedefi görmüyoruz, güvenli bir hızda yerinde dönerek hedefi ara.
steering_adjust = 0.3f;
}
else
{
// Hedefi görüyoruz, nişan alma kodunu çalıştır
float heading_error = tx;
steering_adjust = Kp * tx;
}

left_command+=steering_adjust;
right_command-=steering_adjust;

CS_seeking_anim