Ana içeriğe geç

Menzile Girme

FRC robotları genellikle, puanlama mekanizmalarının iyi çalışması için 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 hedefe 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 ayarlanmasıyla, robotunuz çok hızlı ve doğru bir şekilde istenen mesafeye gitmelidir. Nişan almaya kıyasla, doğru mesafeye gitmek genellikle daha kolaydır çünkü çoğu robot ileri ve geri hareket etmeyi, yerinde dönmeye göre çok daha kolay yapar.

Şimdi, doğru mesafeye gitmeyi daha da kolaylaştıracak basit bir püf noktasını açıklayacağız. Gerçek mesafeyi hesaplamak yerine, limelight nişangâhını kullanabilirsiniz. Robotunuzu hedeften istediğiniz mesafeye 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ç 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 nişangâhını yeniden kalibre edin.

Resim

İş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 geri çekildiğine dikkat edin:

Resim