Görünmeyen Hedefleri Arama
Arama davranışı uygulamak birkaç durumda faydalı olabilir. Bazı oyunlarda, skor yapmaya çalıştığınız hedef tahmin edilebilir bir konumda olmayabilir, bu nedenle "yeterince yakın" olmak için ölü-hesaplama otonom koduna güvenemezsiniz. Örneğin 2009'da, hedefler rakiplerin etrafta dolaşan robotlarına bağlıydı. Arama davranışı uygulamak istemenizin bir başka nedeni de, robotunuzun tahrik sisteminin tam olarak istediğiniz konuma getirmek için yeterince güvenilir/tekrarlanabilir olmamasıdır. Bazen swerve sürüşleri veya çok yönlü sürüşlerin tam konumlara gitmekte zorlanabilir (bu swerve veya çok yönlü tahrik sistemlerine bir eleştiri değildir; sadece onları tekrarlanabilir konumlara götürmek daha zorludur). 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 sık 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 düşünmenizi sağlar.
Neyse ki, robotunuza arama mantığı eklemek çok kolaydır. Arama davranışını 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ğlarsınız. 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;