بعد
تجربة الذكاء الاصطناعي ، قرر الطيار الآلي لخزانتي اتخاذ خطوة إلى الوراء وتعلم كيفية التنقل في الأقمار الصناعية القديمة الجيدة.
يتم عرض الصورة ، مما يشير إلى أن أي نظام نقل GPS يمكنه التسخين الذاتي تحت سيطرة المستكشف.

التوت بي + GPS
أولاً ، تم شراء وحدة GPS USB بسيطة.
تسترشد مقالة
Adafrukt ، لقد بدأت التنفيذ.
على الرغم من حقيقة أن المقال كتب قبل 6 سنوات ، لم يتغير شيء كثيرًا في عالم الملاحة بالمدارس القديمة.
فقط بعض الفروق الدقيقة لم تتطابق:
- تم اكتشاف قطعة الحديد كـ / dev / ttyACM0 بدلاً من / dev / ttyUSB0
- عند تثبيت GPSd لم أجد الجهاز بنفسي ، اتضح أنه من الضروري التسجيل في / etc / default / gpsd:
DEVICES="/dev/ACM0"
- بالنسبة إلى نظام python-3 GPS ، يجب تسليم الحزمة يدويًا ، ولا تتوافق مع gpsd
يشبه الجهاز نفسه محرك أقراص فلاش USB عاديًا:

ثم توقفت لفترة طويلة ، لأن GPS الخاص بي لم ير الإحداثيات.
عمل الجهاز ، وأبلغ عن الإصدار والشركة المصنعة وغيرها من المعلومات المفيدة ، ولكن لا شيء أكثر من ذلك.
في البداية اعتقدت أنه لا يزال معيبًا. من التجارب السابقة ، لا يزال لدي بطاقة SD من Raspbian 2017 ، والتي يعمل نظام GPS عليها.
تم إقلاعها منه - و- ها - جاء نظام GPS إلى الحياة وامض مصباحًا ضوئيًا ، وامطر في إحداثيات السجل.
لقد أدهشت أدمغتي لمدة أسبوع ، ومقارنة جميع التكوينات ، وبدأت في الخطيئة على عربات التي تجرها الدواب جديدة Raspbian وكنت على استعداد لإعادة بناء GPSd في التصحيح ، عندما فجأة في منتدى Raspberry في واحدة من المواضيع المتعلقة بمشاكل GPS (وهناك العديد منهم هناك) صادفت نصائح لإخراج الجهاز على الشارع في طقس صافٍ واجعله يعثر على أقمار صناعية ، والتي قد تستغرق ما يصل إلى نصف ساعة.
جاءت هذه الفكرة إلى ذهني ، ولكن يبدو أن الطقس لم يكن واضحًا بما يكفي ، ولكن بعد ذلك تزامن كل شيء ، وعاد الجهاز إلى الحياة. إذا قمت بحفر أعمق قليلاً ، فقد تبين أن المعلومات الضرورية حول الأقمار الصناعية مخزنة في البرامج الثابتة للجهاز ولا يمكن التحكم بها بواسطة Raspbian.
كيف يمكن لطلبي الحصول على بيانات التقويم / التقويم الفلكي / الكاذب؟
عذرًا ، لا توجد طريقة سهلة للقيام بهذه الأشياء من خلال GPSD حتى الآن. السبب هو أنه لا توجد طريقة ثابتة لجعل أجهزة استقبال GPS تبلغ عن هذه المعلومات.
كثير لا شحنه على الإطلاق. يقوم آخرون (بما في ذلك بعض وليس جميع الأجهزة التي تشحن حزم SiRF الثنائية) بشحنها من حين لآخر في معلومات SUBFRAME ، ولكن عليك أن تعرف بالضبط كيف تتعقب حقول SUBFRAME للحصول عليها وتوثيق تلك الموجودة في IS-GPS-200E - بروتوكول الهواء الذي تستخدمه الأقمار الصناعية GPS) غامض للغاية. لا يزال التقرير الآخرين تختلف إنشاء مجموعات فرعية من بيانات التقويم / التقويم الفلكي / الكاذب بطرق واضحة ومباشرة ، ولكن في جمل خاصة بالمورد تكون محددة للغاية لأنواع المستقبل الفردية ، وسوء التوثيق أو غير موثقة ، وغالبًا ما تحتاج إلى التنشيط عن طريق تسلسلات تحكم محددة بنفس القدر وأسوأ من ذلك الموثقة.
لقد نجحت الآلية الصعبة وحان الوقت للاستفادة منها.
البرنامج النصي لقراءة البيانات من GPSd في بيثون بسيط للغاية:
import gps gs = gps.gps("localhost", "2947") gs.stream(gps.WATCH_ENABLE | gps.WATCH_NEWSTYLE) for i in range(0,10): report = gs.next() print (report)
خرائط جوجل API
أتحكم في الخزان من الهاتف ، لذلك اضطررت إلى دراسة العمل مع خرائط Google.
قامت Google بعمل جيد في تبسيط العمل باستخدام الخرائط ، لذلك لم تكن هناك مشاكل.
يمكن لـ Android Studio إنشاء مشروع فارغ مع خريطة ، حيث يكون من الضروري نقل جميع التفاصيل المهمة بعناية إلى المشروع الرئيسي.
تتطلب Google تسجيل
مفتاح للعمل مع Maps API ، ويتم ذلك مجانًا (في الوقت الحالي).
قمت بتوسيع واجهة REST للخزان بحيث يعطي إحداثياته ، وينقل الإحداثيات إلى الخريطة ، ويرسم أيقونة الخزان وكل شيء يبدو لائقًا تمامًا.
القادمة تحتاج إلى تمهيد الطريق.
تحدد نقطة على الخريطة الهدف وتغذيته في
الاتجاهات API .
الاتجاهات هي خدمة الويب التي تأخذ إحداثيات نقطتين وفي استجابة تفريغ مجموعة من المعلومات حول الطريق ، بما في ذلك العناوين والأسماء الجديرة بالملاحظة والشرح. لكنني كنت بحاجة فقط إلى سلسلة من الخطوات. نختار الإحداثيات ونرسمها على الخريطة.
الآن هناك كل ما هو ضروري للسيطرة البصرية والإدارة.

تحديد المواقع والملاحة
أبعد من الهاتف إلى الخزان يتم نقل النقطة الأولى من الطريق.
يواجه الخزان مشكلة صغيرة - في الوقت الأولي ، لا يعرف اتجاهه.
يتم حل المشكلة بسهولة بواسطة البوصلة ، ولكن يمكن لأي شخص التعامل مع البوصلة ...
كان من الممكن الخروج بحقيقة أنه خلال الثواني القليلة الأولى ، يمر الخزان إلى الأمام ببساطة ، ويتلقى إحداثيات بداية المسار ونهايته وحساب اتجاهه منها. تجدر الإشارة إلى أنه يمكن الحصول على نفس البيانات مباشرة من نظام تحديد المواقع العالمي (GPS) ، حيث يوجد حقل تعقب يوضح الانحراف من الزاوية إلى القطب الشمالي.
ولكن على أي حال ، حتى يتم ملء هذا بعد ذلك ، هناك حاجة إلى حركة.
حساب الاتجاه:
def azimuth(pos1, pos2): lat1 = toRadians(pos1["lat"]) lon1 = toRadians(pos1["lon"]) lat2 = toRadians(pos2["lat"]) lon2 = toRadians(pos2["lon"]) dlat = lat2 - lat1 dlon = lon2 - lon1 x = math.sin(dlon) * math.cos(lat2) y = math.cos(lat1) * math.sin(lat2) - math.sin(lat1) * math.cos(lat2) * math.cos(dlon) return math.atan2(x, y)
لاحظت أن نظام تحديد المواقع العالمي (GPS) لا يعمل دائمًا بشكل دقيق ، وقد يتضح أن إحداثيات بداية ونهاية مسار الاختبار ستكون مع وجود خطأ يجعل القياسات بلا معنى (حتى عندما يتقدم إحداثيات نهاية المسار إلى الخلف).
في هذه الحالة ، يمنح GPS الاتجاه من خلال المسار بشكل موثوق ، لذلك تم استخدام هذا الحقل افتراضيًا ، وإذا لم يكن موجودًا ، فقد اضطررت إلى التنقل باختلاف الإحداثيات.
بعد التوجيه على التضاريس ، يتحول الخزان تقريبًا عند الضرورة (تقريبًا - لأنه من الصعب تحديد الاتجاه بدقة دون بوصلة أو جيروسكوب) ويتحرك لعدة ثوانٍ. ثم يتلقى الإحداثيات مرة أخرى ، يتحقق من الاتجاه ، يتحول ، ركوب الخيل. وهكذا حتى يصبح الهدف في دائرة نصف قطرها من الخطأ.
بشكل عام ، فإن أكبر مشكلة هي الخطأ في إحداثيات GPS ، والذي بسببه يفقد الخزان اتجاهه ويبدأ في الاندفاع في اتجاهات مختلفة.
كل شيء يذهب إلى حقيقة أنه بدون بوصلة لا يمكنك البقاء على قيد الحياة.
مراجع
- مقالة تمهيدية حول إعداد وحدة GPS لنظام Raspberry Pi
- خدمة للعمل مع GPS على نظام Linux
- موقع مفيد مع الصيغ لحساب المسافة والاتجاه بواسطة إحداثيات نقطتين
- النظام العالمي لتحديد المواقع دبابة شفرة المصدر
- وثائق خرائط Google لنظام Android