Görünmeyen Hedefleri Arama
Arama davranışının uygulanması birkaç durumda faydalı olabilir. Bazı oyunlarda, skor yapmaya çalıştığınız hedef tahmin edilebilir bir konumda olmayabilir, bu yüzden "yeterince yakın" olmak için ölü-hesaplama otonom koduna güvenemezsiniz. Örneğin 2009'da, hedefler rakip robotlara bağlıydı ve onlar da etrafta sürüyordu. Arama davranışı uygulamak istemenizin bir başka nedeni de robotunuzun tahrik sisteminin tam olarak istediğiniz konuma ulaşmak için yeterince güvenilir/tekrarlanabilir olmamasıdır. Bazen swerve sürüşleri veya çok yönlü sürüşlerin kesin konumlara gitmekte zorlanabilir (bu swerve veya çok yönlü tahrik sistemlerine bir eleştiri değildir; sadece tekrarlanabilir konumlara ulaşmaları daha zorlayıcıdır). Bazı oyunlar otonom mod sırasında robot-robot etkileşimine bile izin vermiştir. 2006'da savunma robotlarının hücum robotlarını skor pozisyonundan çıkarmaya çalıştığı otonom düellolara sıkça girdik. 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 nasıl faydalı olabileceği konusunda sizi düşündürür.
Neyse ki, robotunuza arama mantığı eklemek çok kolaydır. Arama işlemini uygulamak için, robotunuzun bir hedef için tarama yapmasını ve hedefi bulduğunda nişan alma kodunu çalıştırmaya başlamasını sağlamanız yeterlidir. Bir hedef görüp görmediğimizi anlamak için limelight tarafından bildirilen 'tv' veya '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 arayalım.
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;