Ana içeriğe geç

Menzile Girme

FRC robotları genellikle, skorlama mekanizmalarının iyi çalışabilmesi için bir skorlama hedefinden belirli bir mesafede konumlandırılmalıdır. Limelight'ın kalibre edilmiş artı işaretini basit bir oransal kontrol döngüsüyle birlikte kullanarak, robotunuzun hedeften belirli bir mesafeye kolayca gitmesini sağlayabilirsiniz.

Bu örnek için, robotunuzun hedefe yönlendirildiğinden emin olmalısınız. Daha sonra hedefleme ve mesafe ayarını tek bir fonksiyonda birleştireceğiz, ancak bu örnekte sadece robotun doğru mesafeye gitmesini sağlayan koda odaklanıyoruz.

Hedefleme örneğine benzer şekilde, burada robotunuzun güncelleme döngüsünde çalıştırılabilecek bir fonksiyon gösteriyoruz.

float KpDistance = -0.1f;  // Mesafe için oransal kontrol sabiti
float current_distance = Estimate_Distance(); // 'Vaka Çalışması: Mesafe Tahmini' bölümüne bakın

if (joystick->GetRawButton(9))
{
float distance_error = desired_distance - current_distance;
driving_adjust = KpDistance * distance_error;

left_command += distance_adjust;
right_command += distance_adjust;
}

KpDistance ayarının biraz düzenlenmesiyle, robotunuz istenen mesafeye çok hızlı ve doğru bir şekilde gidebilmelidir. Hedeflemeyle karşılaştırıldığında, doğru mesafeye sürmek genellikle daha kolaydır çünkü çoğu robot olduğu yerde dönmekten çok ileri ve geri gitmeyi daha kolay yapar.

Şimdi doğru mesafeye sürmeyi daha da kolaylaştıracak basit bir püf noktasından bahsedeceğiz. Gerçek mesafeyi hesaplamak yerine, limelight artı işaretini kullanabilirsiniz. Robotunuzu hedeften istediğiniz mesafeye konumlandırın ve artı işaretinin y-pozisyonunu kalibre edin. Artık robotunuz doğru mesafedeyken y-açınız 0.0 olarak rapor edilecektir. Bu püf noktasını kullanarak, gerçek mesafeyi hiç hesaplamanız gerekmez ve kodunuz şuna benzer görünebilir:

float KpDistance = -0.1f; 

std::shared_ptr<NetworkTable> table = NetworkTable::GetTable("limelight");
float distance_error = table->GetNumber("ty");

if (joystick->GetRawButton(9))
{
driving_adjust = KpDistance * distance_error;

left_command += distance_adjust;
right_command += distance_adjust;
}

Atış mesafesini değiştirmeniz gerekirse, robotunuzu yeni mesafeye taşıyın ve limelight artı işaretini yeniden kalibre edin.

Image

İşte yukarıdaki fikri kullanan bir robot örneği. Sürücü sürmeyi bırakıp "hedefle" düğmesine bastığında robotun otomatik olarak doğru menzile geri çekildiğine dikkat edin:

Image