Menzile Girme
FRC robotları, skorlama mekanizmalarının iyi çalışabilmesi için genellikle bir skorlama hedefinden belirli bir mesafede konumlandırılmalıdır. Limelight'ın kalibre edilmiş nişangâhı ile basit bir orantısal kontrol döngüsü 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 nişan alma ve mesafe ayarlamayı tek bir fonksiyonda birleştireceğiz, ancak bu örnekte sadece robotun doğru mesafeye gitmesini sağlayan koda odaklanıyoruz.
Nişan alma ö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 orantısal 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 ince ayarı ile robotunuz istenen mesafeye çok hızlı ve doğru bir şekilde gidebilmelidir. Nişan almaya kıyasla, doğru mesafeye sürüş genellikle daha kolaydır çünkü çoğu robot, yerinde dönmekten çok daha kolay bir şekilde ileri ve geri gider.
Şimdi doğru mesafeye sürüşü daha da kolaylaştıracak basit bir püf noktasını açıklayacağız. Mesafeyi gerçekten hesaplamak yerine, limelight nişangâhını kullanabilirsiniz. Robotunuzu hedeften ideal mesafede konumlandırın ve nişangâhın y konumunu kalibre edin. Artık robotunuz doğru mesafede olduğunda y açınız 0.0 olarak rapor edilecektir. Bu püf noktasını kullanarak, gerçek mesafeyi hiç hesaplamak zorunda kalmazsınız 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 nişangâhını yeniden kalibre edin.
İşte yukarıdaki fikri kullanan bir robot örneği. Sürücü sürmeyi bırakıp "nişan al" düğmesine bastığında robotun otomatik olarak doğru menzile nasıl geri çekildiğine dikkat edin: