يحتوي هذا المستودع على حزمة تطوير البرامج (SDK) العامة من FTC لموسم مسابقة INTO THE DEEP (2024-2025).
يحتوي مستودع GitHub هذا على الكود المصدري المستخدم لإنشاء تطبيق Android للتحكم في روبوت منافسة FIRST Tech Challenge. لاستخدام SDK هذا، قم بتنزيل/استنساخ المشروع بأكمله على جهاز الكمبيوتر المحلي الخاص بك.
لاستخدام مشروع Android Studio هذا، ستحتاج إلى Android Studio 2021.2 (الاسم الرمزي Chipmunk) أو إصدار أحدث.
لبرمجة الروبوت الخاص بك في Blocks أو OnBot Java، لا تحتاج إلى Android Studio.
إذا كنت جديدًا في مجال الروبوتات أو في FIRST Tech Challenge، فيجب عليك مراجعة البرنامج التعليمي الخاص بـ FTC Blocks للتعرف على كيفية استخدام نظام التحكم:
كتل FTC التعليمية عبر الإنترنت
حتى لو كنت مبرمج Java متقدمًا، فمن المفيد البدء بالبرنامج التعليمي لـ FTC Blocks، ثم الانتقال إلى أداة OnBot Java Tool أو Android Studio بعد ذلك.
إذا كنت مبرمجًا في Android Studio، فهناك عدة طرق لتنزيل هذا الريبو. لاحظ أنه إذا كنت تستخدم Blocks أو OnBot Java Tool لبرمجة الروبوت الخاص بك، فلن تحتاج إلى تنزيل هذا المستودع.
استنساخ بوابة https://github.com/FIRST-Tech-Challenge/FtcRobotController.git
أو، إذا كنت تفضل ذلك، يمكنك استخدام زر "Download Zip" المتوفر من خلال صفحة المستودع الرئيسية. سيؤدي تنزيل المشروع كملف ZIP إلى إبقاء حجم التنزيل قابلاً للإدارة.
يمكنك أيضًا تنزيل مجلد المشروع (كملف أرشيف بتنسيق .zip أو .tar.gz) من قسم التنزيلات الفرعي بصفحة الإصدارات لهذا المستودع.
تحتوي صفحة الإصدارات أيضًا على ملفات APK التي تم إنشاؤها مسبقًا.
بمجرد قيامك بتنزيل المجلد وفك ضغطه (إذا لزم الأمر)، يمكنك استخدام Android Studio لاستيراد المجلد ("استيراد مشروع (Eclipse ADT، وGradle، وما إلى ذلك)").
تحتفظ FIRST بوثائق عبر الإنترنت تحتوي على معلومات وبرامج تعليمية حول كيفية استخدام برنامج FIRST Tech Challenge ونظام التحكم في الروبوت. يمكنك الوصول إلى هذه الوثائق باستخدام الرابط التالي:
توثيق التحدي التكنولوجي الأول
لاحظ أن الوثائق عبر الإنترنت عبارة عن مستند "دائم الخضرة" يتم تحديثه وتحريره باستمرار. يحتوي على أحدث المعلومات حول برنامج FIRST Tech Challenge ونظام التحكم.
وثائق Javadoc المرجعية لـ FTC SDK متاحة الآن عبر الإنترنت. انقر فوق الرابط التالي لعرض وثائق FTC SDK Javadoc كموقع ويب مباشر:
وثائق FTC Javadoc
للأسئلة الفنية المتعلقة بنظام التحكم أو FTC SDK، يرجى زيارة موقع مجتمع FIRST Tech Challenge:
مجتمع التحدي التكنولوجي الأول
يحتوي هذا المشروع على مجموعة كبيرة من نماذج OpModes (أمثلة رموز الروبوت) التي يمكن قصها ولصقها في مجلد /teamcode الخاص بك لاستخدامها كما هي، أو تعديلها لتناسب احتياجات فريقك.
مجلد العينات: /FtcRobotController/src/main/Java/org/firstinspires/ftc/robotcontroller/external/samples
يحتوي الملف readme.md الموجود في المجلد /TeamCode/src/main/java/org/firstinspires/ftc/teamcode على شرح لنموذج اصطلاح التسمية، وتعليمات حول كيفية نسخها إلى مساحة المشروع الخاصة بك.
VisionProcessor
جديدة تعتمد على OpenCV (والتي قد تكون متصلة بـ VisionPortal إما في Java أو Blocks) لمساعدة الفرق على تنفيذ معالجة الألوان عبر رؤية الكمبيوتر في لعبة INTO THE DEEPColorBlobLocatorProcessor
بتنفيذ الكشف عن اللون "blob" الخاص بـ OpenCV. نموذج جديد لبرنامج ConceptVisionColorLocator
يوضح استخدامه.PredominantColorProcessor
باستخدام منطقة من الكاميرا باعتبارها "مستشعر ألوان طويل المدى" لتحديد اللون السائد في تلك المنطقة. نموذج جديد لبرنامج ConceptVisionColorSensor
يوضح استخدامه.AngularVelocity.unit
الذي كان من النوع AngleUnit
AngularVelocity.angleUnit
من النوع UnnormalizedAngleUnit
Rev9AxisImuOrientationOnRobot
.RevHubOrientationOnRobot
متوافق أيضًا مع هذا المستشعرlibjpeg-turbo
getCurrentGameTagLibrary()
يرجع الآن إلى العلامات العميقة.Exception
في رمز المستخدم بعد طلب التوقف بواسطة Driver Station، ويتم تناولها بصمتAngularVelocity
في وحدة مختلفة عن الجهاز الذي تم الإبلاغ عنه فيه، فسيتم تطبيعها بين -PI وPI للراديان، و-180 و180 للدرجات. .build()
على VisionPortal BuilderCameraStreamSource
، مما يسمح لمستخدمي البوابات المتعددة بتحديد البوابة التي سيتم توجيهها إلى DS في INIT عن طريق استدعاء CameraStreamServer.getInstance().setSource(visionPortal). يمكن تحديده عبر لوحة الألعاب، بين جلسات Camera Stream.AprilTagProcessor
لمنع تحذيرات المعايرةstopStreaming()
متبوعًا على الفور close()
على VisionPortalstopStreaming()
مباشرة بعد إنشاء VisionPortalAprilTagDetection
و AprilTagPose(ftc/raw)
final
الآنsetCameraMonitorViewId()
إلى setLiveViewContainerId()
وتمت إعادة تسمية enableCameraMonitoring()
إلى enableLiveView()
LinearOpMode
على وجه التحديد (بما في ذلك Block OpModes) هي "Linear OpMode".OpMode
بشكل مباشر هي "OpMode التكراري".OpMode
و LinearOpMode
Javadoc لتكون أسهل في القراءة وتتضمن المزيد من التفاصيل.TouchSensor
بدلاً من DigitalChannel
.hardwareMap
إدخالات فئة lambda بشكل غير صحيحstop()
الخاصة بها. سيتم تجاهل محاولات القيام بذلك وتسجيلها.CANCELLED_FOR_SAFETY
.LynxUsbDevice.addConfiguredModule()
و LynxUsbDevice.getConfiguredModule()
بـ LynxUsbDevice.getOrAddModule()
.VisionPortal
جديدة لرؤية الكمبيوترVisionPortal
نقطة الدخول الجديدة لمعالجة AprilTag وTFOD.AndroidManifest.xml
. يؤدي هذا إلى تصحيح الحالة حيث يمكن أن يعرض التطبيق أرقام الإصدارات المطابقة للمستخدم ولكنه لا يزال يشير إلى أن الإصدارات غير متطابقة.AndroidManifest.xml
لا يتطابق مع إصدار SDK، فسيتم عرض إدخال إصدار SDK على صفحة إدارة الويب.هذا إصدار لإصلاح الأخطاء فقط لمعالجة المشكلات الأربع التالية.
OpMode
msStuckDetectInit
و msStuckDetectInitLoop
و msStuckDetectStart
msStuckDetectLoop
و msStuckDetectStop
.init()
أو init_loop()
أو start()
أو loop()
، لذلك لم تعد الحقول المقابلة لهذه الأساليب مستخدمة.stop()
حد زمني، ولكن تم ترميزه الآن ليكون ثانية واحدة، ولا يمكن تغييره باستخدام msStuckDetectStop
.OpMode
internalPreInit()
و internalPostInitLoop()
و internalPostLoop()
.OpMode
التكرارية في استدعاء هذه الأساليب في حالة تجاوزها.LinearOpMode
s.DeviceProperties.xmlTagAliases
.IMU
جديدة إلى Blocks وJava التي يمكن استخدامها مع كل من BNO055 IMU الأصلي المضمن في جميع مراكز التحكم ومراكز التوسيع القديمة، والبديل الجديد BHI260AP IMU.IMU
الجديدة، راجع https://ftc-docs.firstinspires.org/programming_resources/imu/imu.html. تم أيضًا تحديث نموذج كتل SensorIMU
لاستخدام واجهة IMU
الجديدة، وتمت إضافة نماذج Java التالية:SensorIMUOrthogonal
SensorIMUNonOrthogonal
ConceptExploringIMUOrientations
IMU
الجديدة. يمكن برمجة BNO055 IMU باستخدام واجهة IMU
الجديدة، أو يمكنك الاستمرار في برمجته باستخدام واجهة BNO055IMU
القديمة. إذا كنت تريد أن تكون قادرًا على التبديل بسرعة إلى مركز التحكم الجديد الذي قد يحتوي على BHI260AP IMU، فيجب عليك ترحيل التعليمات البرمجية الخاصة بك لاستخدام واجهة IMU
الجديدة.BNO055IMU
القديمة، والتي تعمل بشكل صحيح فقط عندما تم تركيب محور REV بشكل مسطح على الروبوت الخاص بك، تسمح لك واجهة IMU
بتحديد اتجاه محور REV على الروبوت الخاص بك. وسوف يأخذ في الاعتبار ذلك، ويعطيك التوجيه الخاص بك في نظام إحداثيات الروبوت، بدلاً من نظام إحداثيات خاص لـ REV Hub. ونتيجة لذلك، ستكون درجة الانحراف والانعراج لديك 0 عندما يكون الروبوت الخاص بك مستويًا، بدلاً من أن يكون محور REV مستويًا، مما سيؤدي إلى قيم زاوية توجيه أكثر موثوقية لمعظم اتجاهات التثبيت.IMU
مختلفة عن تلك التي ترجعها واجهة BNO055IMU
. عندما تقوم بترحيل التعليمات البرمجية الخاصة بك، انتبه جيدًا للوثائق.IMU
الجديدة عن طريق تمرير مثيل BNO055IMUNew.Parameters
إلى IMU.initialize()
.IMU
مناسبة أيضًا للتنفيذ من قبل موردي الطرف الثالث لوحدات IMU التي تدعم توفير التوجيه في شكل رباعي.OpMode
التكراري (على عكس LinearOpMode
s) على مؤشر ترابط مخصص.OpMode
s زيادة مقدار الوقت المستغرق لمعالجة أوامر الشبكة، والعكس صحيح.init()
و init_loop()
و start()
و loop()
بحاجة إلى العودة خلال إطار زمني معين.hardwareMap.get()
. للعودة إلى برنامج التشغيل الأصلي، حدد فئة برنامج التشغيل الأصلي. إذا قمت بتحديد واجهة يتم تنفيذها بواسطة كل من برنامج التشغيل الأصلي وبرنامج التشغيل المخصص، فلا يوجد ضمان بشأن التطبيق الذي سيتم إرجاعه.orientation
. HardwareMap
لأول مرة.HardwareMap
أثناء مرحلة Init لـ OpMode . وهي الإعلان عن متغير لكل جهاز سيستخدمه OpMode، وتعيين قيمة لكل جهاز. لا تفعل ذلك أثناء مرحلة التشغيل، وإلا قد يتعطل OpMode الخاص بك لفترة وجيزة أثناء تهيئة الأجهزة التي تقوم باسترجاعها.pitchMode
في BNO055IMU.Parameters
.pitchMode
إلى PitchMode.WINDOWS
إلى كسر اصطلاحات الإحداثيات التي يستخدمها برنامج التشغيل.OpModeManagerImpl
إلى حزمة com.qualcomm.robotcore.eventloop.opmode
.OpMode
المهمل resetStartTime()
(استخدم resetRuntime()
بدلاً من ذلك).LinearOpMode.LinearOpModeHelper
المحمية (والتي لم تكن مخصصة للاستخدام بواسطة OpModes).Enable beta Java 8 support
.terminateOpModeNow()
للسماح لـ Opmodes بالتنظيف الذاتي على الفور.opModeInInit()
إلى LinearOpMode
لتسهيل الحلقات init. على غرار opModeIsActive()
ولكن للمرحلة init."Failed resolution of: Landroid/net/wifi/p2p/WifiP2pManager$DeviceInfoListener"
RumbleEffect
في قائمة الألعاب المتعددة ، فقد يحدث ذلك أنه سيتم إرسال كلا الأوامر Rumble إلى لوحة واحدة فقط.isPwmEnabled()
(العدد رقم 223).isBusy()
على محرك وليس في وضع RTP.close()
لتكون عامة.HardwareMap
المناسبة (مثل hardwareMap.colorSensor
)666667*100ns
بدلاً من 666666*100ns
لـ 15 إطارًا في الثانية) ، فإنها تفشل في البدء.P = 1.17
، I = 0.117
، F = 11.7
الموضع القيم PIDF: P = 5.0
محرك سداسي سداسي: VELOCITY PIDF القيم: P = 4.96
، I = 0.496
، F = 49.6
موضع قيم PIDF: P = 5.0
Problem with 'imu'
). الإصدار 5.5 يتطلب Android Studio 4.0 أو الأحدث.