Ana içeriğe geç

Görünmeyen Hedefleri Arama

Arama davranışını uygulamak birkaç durumda faydalı olabilir. Bazı oyunlarda, skor yapmaya çalıştığınız hedef tahmin edilebilir bir konumda olmayabilir, bu nedenle hedefe "yeterince yaklaşmak" için önceden belirlenmiş otonom koda güvenemezsiniz. Örneğin, 2009'da hedefler rakip robotlara bağlıydı ve onlar da etrafta dolaşıyordu. Arama davranışını uygulamak istemenizin bir başka nedeni, 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üşler kesin 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 hatta otonom mod sırasında robot-robot etkileşimine izin vermiştir. 2006'da sıklıkla savunma robotlarının hücum robotlarını skor pozisyonundan çıkarmaya çalıştığı otonom düellolara 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. Aramayı uygulamak için, robotunuzun bir hedef için tarama yapmasını ve bulduğunda hedefleme 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 rapor edilen '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 arayın.
steering_adjust = 0.3f;
}
else
{
// Hedefi görüyoruz, hedefleme kodunu çalıştır
float heading_error = tx;
steering_adjust = Kp * tx;
}

left_command+=steering_adjust;
right_command-=steering_adjust;

CS_seeking_anim