الوصول إلى المدى المطلوب
غالبًا ما تحتاج روبوتات FRC إلى وضعها على مسافة محددة من هدف التسجيل حتى تعمل آلية التسجيل الخاصة بها بشكل جيد. يمكنك استخدام حلقة تحكم تناسبية بسيطة جنبًا إلى جنب مع الشعرية المتقاطعة المعايرة لـ limelight لجعل روبوتك يتحرك بسهولة إلى مسافة محددة من الهدف.
بالنسبة لهذا المثال، يجب عليك التأكد من أن روبوتك موجه نحو الهدف. لاحقًا سنجمع بين التصويب وتعديل المسافة في وظيفة واحدة، ولكن في هذا المثال نركز فقط على الكود الذي يقود الروبوت إلى المسافة الصحيحة.
على غرار مثال التصويب، نعرض هنا وظيفة يمكن تشغيلها في حلقة تحديث الروبوت الخاص بك.
float KpDistance = -0.1f; // ثابت التحكم التناسبي للمسافة
float current_distance = Estimate_Distance(); // انظر 'دراسة حالة: تقدير المسافة'
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، يجب أن يتحرك روبوتك بسرعة ودقة إلى المسافة المطلوبة. مقارنة بالتصويب، عادة ما يكون القيادة إلى المسافة الصحيحة أسهل لأن معظم الروبوتات تتحرك للأمام والخلف بسهولة أكبر من دورانها في المكان.
بعد ذلك سنصف حيلة بسيطة لجعل القيادة إلى المسافة الصحيحة أسهل. بدلاً من حساب المسافة فعليًا، يمكنك استخدام الشعرية المتقاطعة لـ limelight. ما عليك سوى وضع روبوتك على المسافة المثالية من الهدف ومعايرة الموضع العمودي للشعرية المتقاطعة. الآن سيتم الإبلاغ عن زاوية y الخاصة بك على أنها 0.0 عندما يكون روبوتك على المسافة الصحيحة. باستخدام هذه الحيلة، لن تضطر أبدًا إلى حساب المسافة الفعلية ويمكن أن يبدو الكود الخاص بك كما يلي:
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;
}
إذا كنت بحاجة إلى تغيير مسافة التصويب، ما عليك سوى تحريك روبوتك إلى المسافة الجديدة وإعادة معايرة الشعرية المتقاطعة لـ limelight.
هنا مثال على روبوت يستخدم الفكرة المذكورة أعلاه. لاحظ كيف يتراجع تلقائيًا إلى النطاق الصحيح عندما يتوقف السائق عن القيادة ويضغط على زر "التصويب":