| GPSD_JSON(5) | مستندات GPSD | GPSD_JSON(5) |
نام (NAME)
gpsd_json - پروتکل درخواست و پاسخ gpsd
بررسی اجمالی (OVERVIEW)
برنامه gpsd یک دیمن سرویس است که میتواند برای نظارت بر گیرندههای GPS، گیرندههای DGPS، پخشهای سامانه شناسایی خودکار دریایی (Marine AIS) و حسگرهای گوناگون دیگر مربوط به موقعیتیابی و کینماتیک مورد استفاده قرار گیرد.
کلاینتها میتوانند از طریق درخواستها و پاسخهای متنی بر بستر یک سوکت با gpsd ارتباط برقرار کنند. ارتباط مستقیم برنامهها با این پروتکل ایده مناسبی نیست؛ در عوض، آنها باید از کتابخانه کلاینت libgps (برای C؛ اتصالات برای زبانهای دیگر نیز وجود دارد) استفاده کرده و با دقت در کد خود، نسخههای اصلی (major) و فرعی (minor) مورد انتظار پروتکل را بررسی کنند.
پروتکل GPSD بر پایه JSON (نشانهگذاری اشیاء جاوااسکریپت)، مطابق با مشخصات [RFC-7159] (قالب تبادل داده نشانهگذاری اشیاء جاوااسکریپت)، مشابه با ECMA 404 ساخته شده است.
استفاده GPSD از JSON به روشهایی محدود شده است که تجزیه آن را در زبانهایی با دامنه ایستا (مانند C) آسانتر میکند.
یک خط درخواست با علامت «?» آغاز میشود و میتواند شامل چندین دستور باشد. دستورها با یک شناسه دستور شروع میشوند که پس از آن یا یک نویسه پایانی ';' میآید یا یک علامت مساوی «=» و یک شیء JSON که به عنوان آرگومان در نظر گرفته میشود. هرگونه ';' یا نویسه خط جدید (LF یا CR-LF) پس از پایان یک دستور نادیده گرفته میشود. تمامی خطوط درخواست باید از نویسههای US-ASCII تشکیل شده باشند و طول آنها بدون احتساب خط جدید پایانی، نباید بیش از ۸۰ نویسه باشد.
پاسخها اشیاء تکی JSON هستند که دارای یک ویژگی «class» میباشند که مقدار آن نشاندهنده نوع شیء است. انواع شیء شامل «TPV»، «SKY»، «DEVICE» و «ERROR» میشوند، اما محدود به این موارد نیستند. اشیاء هم در پاسخ به دستورها و هم بهصورت دورهای هنگام ارسال گزارشهای gpsd فرستاده میشوند. هر شیء با نویسههای بازگشت به ابتدای سطر و خط جدید (CR-NL) پایان مییابد.
ترتیب ویژگیهای JSON درون یک شیء پاسخ هرگز دارای اهمیت نیست و شما میتوانید ویژگیهای دستور را به هر ترتیبی مشخص کنید. پاسخها هرگز حاوی مقدار ویژه JSON یعنی null نیستند؛ در عوض، ویژگیهای با مقادیر خالی یا تعریفنشده حذف میشوند. محدودیت طول برای پاسخها و گزارشها در حال حاضر ۱۰۲۴۰ نویسه با احتساب CR-NL پایانی است. پاسخهای طولانیتر بریده خواهند شد، بنابراین کد کلاینت باید برای احتمال دریافت قطعات ناقص JSON آماده باشد.
حداکثر طول پیشفرض پیام توسط GPS_JSON_RESPONSE_MAX در فایل include/gpsd_json.h در زمان کامپایل تنظیم میشود.
در گزارشهای JSON، اگر وجود یک ویژگی مشروط به وجود ویژگی والد یا قرار داشتن آن در یک محدوده خاص باشد، ویژگی والد ابتدا صادر میشود.
یک قید در مورد ترتیبی که ویژگیها حذف میشوند وجود دارد: اگر یک ویژگی اختیاری تنها در صورتی وجود داشته باشد که ویژگی والد دارای مقدار یا محدودهای از مقادیر مشخص باشد، ویژگی والد ابتدا صادر خواهد شد تا تجزیه آن آسانتر شود.
بخش بعدی پروتکل اصلی GPSD را مستند میکند. افزونهها در بخشهای پس از آن مستند شدهاند. اگر نمونه gpsd شما با مجموعهای محدود از ویژگیها کامپایل شده باشد، ممکن است این افزونهها پشتیبانی نشوند.
این پروتکل توسط اریک اس. ریموند (Eric S. Raymond) طراحی و مستند شده است.
پاسخهای پروتکل اصلی (CORE PROTOCOL RESPONSES)
پاسخهای پروتکل اصلی در ادامه آمده است:
TPV
شیء TPV یک گزارش زمان-موقعیت-سرعت (time-position-velocity) است. فیلدهای «class» و «mode» بهطور مطمئن همیشه وجود خواهند داشت. هنگامی که «mode» برابر با 0 (نامشخص) باشد، احتمالاً هیچ داده قابل استفادهای در جمله وجود ندارد. بقیه فیلدها اختیاری هستند و حضور آنها به دادههایی که گیرنده GNSS ارسال کرده و آنچه gpsd ممکن است از آن دادهها محاسبه کند بستگی دارد.
یک شیء TPV معمولاً حداقل یک بار برای هر دوره اندازهگیری (epoch) که توسط فیلد «time» تعیین میشود، ارسال خواهد شد. مگر اینکه گیرنده یک تثبیت موقعیت (fix) پایدار داشته باشد و از ثانیه کبیسه جاری مطلع باشد، ممکن است مقدار زمان تصادفی باشد.
اغلب در هر دوره چندین شیء TPV ارسال میشود. هنگامی که گیرنده دادهها را به مرور و قطرهچکانی به gpsd میدهد، gpsd چارهای ندارد جز اینکه آن را در چندین پیام TPV به کلاینت منتقل کند.
فیلد اختیاری «status» (نوع تثبیت)، یک توصیفکننده برای mode است. این فیلد جایگزین یا فرامجموعهای از فیلد «mode» نیست. این مقدار تقریباً (اما نه کاملاً) مشابه مقادیر شاخص کیفیت GPS در NMEA 4.x xxGGA است. بسیاری از گیرندههای GNSS آن را ارائه نمیدهند. آنهایی هم که ارائه میدهند، مشخصات را به روشهای ناسازگار مختلفی تفسیر میکنند. برای صرفهجویی در فضای خروجی و جلوگیری از سردرگمی، JSON هرگز شامل مقادیر وضعیت 0 یا 1 نمیشود.
تمام تخمینهای خطا (epc, epd, epe, eph, ept, epv, epx, epy) با اطمینان ۹۵٪ حدس زده میشوند، اما ممکن است اطمینان ۵۰٪، یک سیگما یا دو سیگما نیز باشند. بسیاری از گیرندههای GNSS سطح اطمینان را مشخص نمیکنند و هیچکدام نحوه محاسبه مقدار را مشخص نمیسازند. از تخمینهای خطا با احتیاط و صرفاً به عنوان نشانگرهای نسبی «کیفیت» استفاده کنید. اگر GPS مقداری را به gpsd گزارش دهد، gpsd همان مقدار را گزارش خواهد کرد؛ در غیر این صورت gpsd تلاش میکند مقدار را از نمای آسمان محاسبه کند.
برای یادداشتهای تکمیلی در مورد موارد و مقادیر موجود در پیام TPV، به فایل include/gps.h، بهویژه struct gps_data_t مراجعه کنید.
جدول ۱. شیء TPV
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "TPV" |
| device | خیر | string | نام دستگاه مبدا. |
| mode | بله | numeric | حالت NMEA: 0=نامشخص، 1=بدون تثبیت، 2=دوبعدی (2D)، 3=سهبعدی (3D). |
| alt | خیر | numeric | منسوخ شده. تعریفنشده. از altHAE یا altMSL استفاده کنید. |
| altHAE | خیر | numeric | ارتفاع، بلندی از روی بیضیگون مبنا بر حسب متر. احتمالاً WGS84. |
| altMSL | خیر | numeric | ارتفاع از سطح متوسط دریا (MSL) بر حسب متر. ژئوئید استفاده شده به ندرت مشخص میشود و اغلب نادقیق است. توضیحات زیر در مورد geoidSep را ببینید. مقدار altMSL برابر است با altHAE منهای geoidSep. |
| ant | خیر | numeric | وضعیت آنتن: 2=اتصال کوتاه، 3=مدار باز. |
| antPwr | خیر | numeric | وضعیت برق آنتن: 0=نامشخص، 1=خاموش، 2=روشن. |
| climb | خیر | numeric | نرخ صعود (مثبت) یا فرود (منفی) بر حسب متر بر ثانیه. |
| clockbias | خیر | numeric | انحراف ساعت محلی GNSS نسبت به UTC بر حسب نانوثانیه. همچنین با نام انحراف ساعت (Clock Offset) شناخته میشود. گاهی به عنوان بخش در میلیارد (ppb) ارائه میشود که معادل نانوثانیه است. |
| clockdrift | خیر | numeric | نرخ رانش ساعت محلی بر حسب ns/s. |
| datum | خیر | string | مبدأ مختصاتی (Datum) جاری. ترجیحاً WGS84. |
| depth | خیر | numeric | عمق بر حسب متر. احتمالاً عمق زیر تیر اصلی کف کشتی (keel)... |
| dgpsAge | خیر | numeric | سن دادههای DGPS بر حسب ثانیه. |
| dgpsSta | خیر | numeric | ایستگاه دادههای DGPS. |
| ecefx | خیر | numeric | موقعیت X در مختصات ECEF بر حسب متر. |
| ecefy | خیر | numeric | موقعیت Y در مختصات ECEF بر حسب متر. |
| ecefz | خیر | numeric | موقعیت Z در مختصات ECEF بر حسب متر. |
| ecefpAcc | خیر | numeric | خطای موقعیت ECEF بر حسب متر. قطعیت نامشخص. |
| ecefvx | خیر | numeric | سرعت X در مختصات ECEF بر حسب متر بر ثانیه. |
| ecefvy | خیر | numeric | سرعت Y در مختصات ECEF بر حسب متر بر ثانیه. |
| ecefvz | خیر | numeric | سرعت Z در مختصات ECEF بر حسب متر بر ثانیه. |
| ecefvAcc | خیر | numeric | خطای سرعت ECEF بر حسب متر بر ثانیه. قطعیت نامشخص. |
| epc | خیر | numeric | تخمین خطای صعود بر حسب متر بر ثانیه. قطعیت نامشخص. |
| epd | خیر | numeric | تخمین خطای مسیر (جهت) بر حسب درجه. قطعیت نامشخص. |
| eph | خیر | numeric | تخمین خطای موقعیت افقی (2D) بر حسب متر. همچنین با عنوان تخمین خطای موقعیت (epe) شناخته میشود. قطعیت نامشخص. |
| eps | خیر | numeric | تخمین خطای سرعت بر حسب متر بر ثانیه. قطعیت نامشخص. |
| ept | خیر | numeric | تخمین خطای برچسب زمان بر حسب ثانیه. قطعیت نامشخص. |
| epx | خیر | numeric | تخمین خطای طول جغرافیایی بر حسب متر. قطعیت نامشخص. |
| epy | خیر | numeric | تخمین خطای عرض جغرافیایی بر حسب متر. قطعیت نامشخص. |
| epv | خیر | numeric | تخمین خطای عمودی بر حسب متر. قطعیت نامشخص. |
| geoidSep | خیر | numeric | جدایی ژئوئید، تفاوت بین بیضیگون مرجع WGS84 و ژئوئید (سطح متوسط دریا) بر حسب متر است. تقریباً هیچ گیرنده GNSS نحوه محاسبه ژئوئید خود را مشخص نمیکند. هنگامی که گیرنده جدایی ژئوئید را ارائه نمیدهد، gpsd ژئوئید را از یک جدول ۵×۵ درجهای از مقادیر EGM2008 درونیابی میکند. مقدار geoidSep محاسبهشده توسط gpsd معمولاً با مقدار «واقعی» اختلافی در حد یک متر دارد، اما ممکن است تا ۱۲ متر نیز خطا داشته باشد. |
| jam | خیر | numeric | شاخص پارازیت (Jamming) 0 (بدون پارازیت) تا 255 (پارازیت شدید). -1 به معنی تنظیمنشده است. |
| lat | خیر | numeric | عرض جغرافیایی بر حسب درجه: +/- نشاندهنده شمال/جنوب است. |
| leapseconds | خیر | integer | ثانیههای کبیسه جاری. |
| lon | خیر | numeric | طول جغرافیایی بر حسب درجه: +/- نشاندهنده شرق/غرب است. |
| magtrack | خیر | numeric | مسیر روی زمین بر حسب درجه مغناطیسی. |
| magvar | خیر | numeric | تغییرات مغناطیسی بر حسب درجه. همچنین با عنوان انحراف مغناطیسی (جهت مؤلفه افقی میدان مغناطیسی که در جهت عقربههای ساعت از شمال اندازه گرفته میشود) بر حسب درجه شناخته میشود؛ مقادیر مثبت نشاندهنده تغییرات به سمت غرب و مقادیر منفی نشاندهنده تغییرات به سمت شرق است. |
| relD | خیر | numeric | مؤلفه پایین (Down) بردار موقعیت نسبی بر حسب متر. |
| relE | خیر | numeric | مؤلفه شرق (East) بردار موقعیت نسبی بر حسب متر. |
| relN | خیر | numeric | مؤلفه شمال (North) بردار موقعیت نسبی بر حسب متر. |
| sep | خیر | numeric | تخمین خطای موقعیت کروی (3D) بر حسب متر. با اطمینان ۹۵٪ حدس زده میشود، اما از آنجا که بسیاری از گیرندههای GNSS آن را مشخص نمیکنند، قطعیت نامشخص است. |
| speed | خیر | numeric | سرعت روی زمین بر حسب متر بر ثانیه. |
| status | خیر | numeric | وضعیت تثبیت GPS: 0=نامشخص، 1=عادی، 2=DGPS، 3=RTK ثابت (Fixed)، 4=RTK شناور (Floating)، 5=DR، 6=GNSSDR، 7=زمان (نقشهبرداریشده)، 8=شبیهسازیشده، 9=P(Y) |
| temp | خیر | numeric | دمای گیرنده بر حسب درجه سلسیوس. |
| time | خیر | string | برچسب زمان/تاریخ در قالب ISO8601، بر مبنای UTC. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد. در صورتی که حالت 2D یا 3D نباشد ممکن است وجود نداشته باشد. اگر تثبیت موقعیت وجود نداشته باشد ممکن است موجود اما نامعتبر باشد. قبل از اطمینان از اینکه زمان UTC است، ۳ تثبیت 3D متوالی را بررسی کنید. حتی در آن صورت نیز ممکن است تا زمان مشخص شدن ثانیههای کبیسه جاری، چندین ثانیه خطا داشته باشد. |
| track | خیر | numeric | مسیر روی زمین، درجه نسبت به شمال حقیقی. |
| velD | خیر | numeric | مؤلفه سرعت به سمت پایین بر حسب متر. |
| velE | خیر | numeric | مؤلفه سرعت به سمت شرق بر حسب متر. |
| velN | خیر | numeric | مؤلفه سرعت به سمت شمال بر حسب متر. |
| wanglem | خیر | numeric | زاویه مغناطیسی باد بر حسب درجه. |
| wangler | خیر | numeric | زاویه نسبی باد بر حسب درجه. |
| wanglet | خیر | numeric | زاویه واقعی باد بر حسب درجه. |
| wspeedr | خیر | numeric | سرعت نسبی باد بر حسب متر بر ثانیه. |
| wspeedt | خیر | numeric | سرعت واقعی باد بر حسب متر بر ثانیه. |
| wtemp | خیر | numeric | دمای آب بر حسب درجه سلسیوس. |
هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه میکند، بیتهای اعتبار را در عضو set سطح بالا برای هر فیلد دریافتشده فعال میکند؛ برای نامها و مقادیر ماسک بیتی به gps.h مراجعه کنید.
مقادیر ممیز شناور نامعتبر یا ناشناخته روی NAN تنظیم خواهند شد. همواره مقادیر ممیز شناور را پیش از استفاده با isfinite() بررسی کنید؛ تابع isnan() کافی نیست.
نمونهای از یک جمله TPV:
{"class":"TPV","device":"/dev/pts/1",
"time":"2005-06-08T10:34:48.283Z","ept":0.005,
"lat":46.498293369,"lon":7.567411672,"alt":1343.127,
"eph":36.000,"epv":32.321,
"track":10.3788,"speed":0.091,"climb":-0.085,"mode":3}
SKY
شیء SKY نمایی از موقعیتهای ماهوارههای GPS در آسمان را گزارش میدهد. اگر هیچ دستگاه GPS در دسترس نباشد، یا هنوز هیچ نمای آسمانی گزارش نشده باشد، تنها فیلد «class» بهصورت معتبر حضور خواهد داشت.
جدول ۲. شیء SKY
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "SKY" |
| device | خیر | string | نام دستگاه مبدا |
| nSat | خیر | numeric | تعداد اشیاء ماهواره در آرایه "satellites". |
| gdop | خیر | numeric | کاهش دقت هندسی (ابرکُروی)، ترکیبی از PDOP و TDOP. یک ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید. |
| hdop | خیر | numeric | کاهش دقت افقی، یک ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطای دایرهای به دست آید. |
| pdop | خیر | numeric | کاهش دقت موقعیت (کُروی/3D)، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید. |
| pr | خیر | numeric | شبهفاصله (Pseudorange) بر حسب متر. |
| prRate | خیر | numeric | نرخ تغییر شبهفاصله بر حسب متر بر ثانیه. |
| prRes | خیر | numeric | باقیمانده شبهفاصله بر حسب متر. |
| qual | خیر | numeric | شاخص کیفیت 0=بدون سیگنال 1=در حال جستجوی سیگنال 2=سیگنال دریافت شد 3=سیگنال شناسایی شد اما غیرقابل استفاده است 4=قفل کد و زمان همگامسازی شده است 5, 6, 7=قفل کد و حامل و زمان همگامسازی شده است |
| satellites | خیر | list | فهرست اشیاء ماهواره در نمای آسمان |
| tdop | خیر | numeric | کاهش دقت زمانی، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید. |
| time | خیر | string | برچسب زمان/تاریخ در قالب ISO8601، بر مبنای UTC. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد. |
| uSat | خیر | numeric | تعداد ماهوارههای استفاده شده در محاسبات ناوبری. |
| vdop | خیر | numeric | کاهش دقت عمودی (ارتفاع)، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید. |
| xdop | خیر | numeric | کاهش دقت طولی، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید. همچنین به عنوان Northing DOP شناخته میشود. |
| ydop | خیر | numeric | کاهش دقت عرضی، ضریب بدون بعد که باید در UERE پایه ضرب شود تا تخمین خطا به دست آید. همچنین به عنوان Easting DOP شناخته میشود. |
بسیاری از دستگاهها ضرایب کاهش دقت را محاسبه میکنند اما آنها را در گزارشهای خود لحاظ نمینمایند. بسیاری از آنهایی هم که DOP را گزارش میدهند، تنها HDOP (خطای دایرهای دوبعدی) را گزارش میکنند. برنامه gpsd همیشه هر آنچه را که دستگاه گزارش دهد مستقیماً عبور میدهد و سپس تلاش میکند با محاسبه دترمینانهای مناسب در ماتریس کوواریانس بر اساس نمای ماهوارهها، سایر مقادیر DOP را پر کند. اگر برخی از این دترمینانها منفرد (singular) باشند، ممکن است مقادیر DOP وجود نداشته باشند. حتی ممکن است پیش بیاید که دستگاه یک تخمین خطا را بر حسب متر گزارش دهد در حالی که DOP متناظر در دسترس نیست؛ چرا که برخی دستگاهها از مدلسازی خطای پیشرفتهتری نسبت به محاسبات کوواریانس استفاده میکنند.
اشیاء فهرست ماهواره دارای عناصر زیر هستند:
جدول ۳. شیء ماهواره (Satellite)
| نام | همواره؟ | نوع | توضیحات |
| PRN | بله | numeric | شناسه PRN ماهواره. به بخش «PRN, GNSS ID, SV ID, AND SIG ID» مراجعه کنید. |
| az | خیر | numeric | سمت (Azimuth)، درجه نسبت به شمال حقیقی. |
| el | خیر | numeric | زاویه ارتفاع (Elevation) بر حسب درجه. |
| freqid | خیر | numeric | تنها برای ماهوارههای GLONASS: شناسه فرکانس سیگنال، مطابق با تعریف u-blox در محدوده 0 تا 13. مقدار freqid برابر با شماره اسلات فرکانس به علاوه ۷ است. |
| gnssid | خیر | numeric | شناسه GNSS. به بخش «PRN, GNSS ID, SV ID, AND SIG ID» مراجعه کنید. |
| health | خیر | numeric | وضعیت سلامت این ماهواره؛ 0 نامشخص، 1 سالم و 2 ناسالم است. |
| ss | خیر | numeric | نسبت سیگنال به نویز بر حسب dBHz. |
| sigid | خیر | numeric | شناسه سیگنال این سیگنال. به بخش «PRN, GNSS ID, SV ID, AND SIG ID» مراجعه کنید. بر اساس u-blox و نه NMEA. برای جزئیات به مستندات u-blox مراجعه کنید. |
| svid | خیر | numeric | شناسه ماهواره (PRN) در منظومه خود. به بخش «PRNs» مراجعه کنید. |
| used | بله | boolean | آیا در راهحل ناوبری جاری استفاده شده است؟ (ماهوارههای SBAS/WAAS/EGNOS اگر تصحیحات آنها در راهحل استفاده شده باشد ممکن است به عنوان استفادهشده نشانهگذاری شوند، اما همه درایورها این اطلاعات را ارائه نمیدهند.) |
توجه داشته باشید که اشیاء ماهواره فاقد فیلد «class» هستند، زیرا هرگز خارج از یک شیء SKY ارسال نمیشوند.
هنگامی که کتابخانه کلاینت C یک پاسخ SKY را تجزیه میکند، بیت SATELLITE_SET را در عضو set سطح بالا فعال میسازد.
نمونه:
{"class":"SKY","device":"/dev/pts/1",
"time":"2005-07-08T11:28:07.114Z",
"xdop":1.55,"hdop":1.24,"pdop":1.99,
"satellites":[
{"PRN":23,"el":6,"az":84,"ss":0,"used":false},
{"PRN":28,"el":7,"az":160,"ss":0,"used":false},
{"PRN":8,"el":66,"az":189,"ss":44,"used":true},
{"PRN":29,"el":13,"az":273,"ss":0,"used":false},
{"PRN":10,"el":51,"az":304,"ss":29,"used":true},
{"PRN":4,"el":15,"az":199,"ss":36,"used":true},
{"PRN":2,"el":34,"az":241,"ss":43,"used":true},
{"PRN":27,"el":71,"az":76,"ss":43,"used":true}]}
GST
شیء GST یک گزارش نویز شبهفاصله است.
جدول ۴. شیء GST
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "GST" |
| device | خیر | string | نام دستگاه مبدا |
| time | خیر | string | برچسب زمان/تاریخ در قالب ISO8601، بر مبنای UTC. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد. |
| rms | خیر | numeric | مقدار انحراف معیار ورودیهای برد به فرآیند ناوبری (ورودیهای برد شامل شبهفاصلهها و تصحیحات DGPS است). |
| major | خیر | numeric | انحراف معیار نیمقطر بزرگ بیضی خطا بر حسب متر. |
| minor | خیر | numeric | انحراف معیار نیمقطر کوچک بیضی خطا بر حسب متر. |
| orient | خیر | numeric | جهتگیری نیمقطر بزرگ بیضی خطا، بر حسب درجه نسبت به شمال حقیقی. |
| alt | خیر | numeric | انحراف معیار خطای ارتفاع بر حسب متر. |
| lat | خیر | numeric | انحراف معیار خطای عرض جغرافیایی بر حسب متر. |
| lon | خیر | numeric | انحراف معیار خطای طول جغرافیایی بر حسب متر. |
| ve | خیر | numeric | انحراف معیار خطای سرعت شرق بر حسب متر بر ثانیه. |
| vn | خیر | numeric | انحراف معیار خطای سرعت شمال بر حسب متر بر ثانیه. |
| vu | خیر | numeric | انحراف معیار خطای سرعت بالا (Up) بر حسب متر بر ثانیه. |
نمونه:
{"class":"GST","device":"/dev/ttyUSB0",
"time":"2010-12-07T10:23:07.096Z","rms":2.440,
"major":1.660,"minor":1.120,"orient":68.989,
"lat":1.600,"lon":1.200,"alt":2.520}
ATT
شیء ATT یک گزارش وضعیت سمتی/جهتگیری بدنه (vehicle-attitude) است. این گزارش توسط حسگرهای قطبنمای دیجیتال و ژیروسکوپ بازگردانده میشود؛ بسته به دستگاه، ممکن است شامل موارد زیر باشد: جهت قطبنما (heading)، گام (pitch)، غلتش (roll)، انحراف سمت (yaw)، قرائتهای ژیروسکوپ و میدان مغناطیسی. از آنجا که چنین حسگرهایی اغلب به عنوان بخشی از سامانههای ناوبری دریایی بستهبندی میشوند، پاسخ ATT ممکن است شامل عمق آب نیز باشد.
فیلدهای «class» و «mode» همیشه به طور معتبر وجود خواهند داشت. سایر فیلدها ممکن است بسته به نوع دستگاه خاص گزارش شوند یا نشوند.
شیء ATT با دوره GNSS همگام است. برخی از دستگاهها اطلاعات جهتگیری را با مقیاسهای زمانی دلخواه یا حتی نامنظم گزارش میکنند. برنامه gpsd آنها را در یک شیء IMU گزارش میدهد. اشیاء ATT و IMU دارای فیلدهای یکسانی هستند، اما اشیاء IMU در سریعترین زمان ممکن خروجی داده میشوند. برخی از دستگاهها هر دو نوع را با درهمآمیزی اختیاری خروجی میدهند.
جدول ۵. شیء ATT
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "ATT" |
| device | بله | string | نام دستگاه مبدا |
| time | خیر | string | برچسب زمان/تاریخ در قالب ISO8601، بر مبنای UTC. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد. |
| timeTag | خیر | string | برچسب زمانی اختیاری اندازهگیری. |
| heading | خیر | numeric | جهت، درجه نسبت به شمال حقیقی. |
| mag_st | خیر | string | وضعیت مغناطیسسنج. |
| mheading | خیر | numeric | جهت، درجه نسبت به شمال مغناطیسی. |
| pitch | خیر | numeric | زاویه پیچ (Pitch) بر حسب درجه. |
| pitch_st | خیر | string | وضعیت حسگر پیچ. |
| rot | خیر | numeric | نرخ چرخش (Rate of Turn) بر حسب درجه در دقیقه. |
| yaw | خیر | numeric | زاویه یاو (Yaw) بر حسب درجه. |
| yaw_st | خیر | string | وضعیت حسگر یاو. |
| roll | خیر | numeric | زاویه رول (Roll) بر حسب درجه. |
| roll_st | خیر | string | وضعیت حسگر رول. |
| dip | خیر | numeric | میل مغناطیسی محلی، بر حسب درجه، هنگامی که میدان مغناطیسی به سمت پایین (درون زمین) اشاره میکند مثبت است. |
| mag_len | خیر | numeric | شدت اسکالر میدان مغناطیسی. |
| mag_x | خیر | numeric | مؤلفه X شدت میدان مغناطیسی. |
| mag_y | خیر | numeric | مؤلفه Y شدت میدان مغناطیسی. |
| mag_z | خیر | numeric | مؤلفه Z شدت میدان مغناطیسی. |
| acc_len | خیر | numeric | شتاب اسکالر. |
| acc_x | خیر | numeric | مؤلفه X شتاب (m/s^2). |
| acc_y | خیر | numeric | مؤلفه Y شتاب (m/s^2). |
| acc_z | خیر | numeric | مؤلفه Z شتاب (m/s^2). |
| gyro_x | خیر | numeric | مؤلفه X سرعت زاویهای (deg/s). |
| gyro_y | خیر | numeric | مؤلفه Y سرعت زاویهای (deg/s). |
| gyro_z | خیر | numeric | مؤلفه Z سرعت زاویهای (deg/s). |
| depth | خیر | numeric | عمق آب بر حسب متر. |
| temp | خیر | numeric | دما در محل حسگر، بر حسب درجه سانتیگراد. |
کدهای وضعیت heading، pitch و roll (در صورت وجود) بسته به دستگاه متفاوت است. برای قطبنماهای دیجیتال TNT Revolution، آنها به شرح زیر کدگذاری میشوند:
جدول ۶. پرچمهای دستگاه
| کد | توضیحات |
| C | هشدار کالیبراسیون مغناطیسسنج |
| L | هشدار سطح پایین |
| M | اخطار سطح پایین |
| N | عادی |
| O | اخطار سطح بالا |
| P | هشدار سطح بالا |
| V | هشدار سطح ولتاژ مغناطیسسنج |
هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه میکند، مقدار ATT_IS را فعال میسازد.
نمونه:
{"class":"ATT","time":1270938096.843,
"heading":14223.00,"mag_st":"N",
"pitch":169.00,"pitch_st":"N", "roll":-43.00,"roll_st":"N",
"dip":13641.000,"mag_x":2454.000}
IMU
شیء IMU نسبت به دوره GNSS ناهمگام است. این شیء با مقیاسهای زمانی اختیاری یا حتی جابهجا گزارش میشود.
اشیاء ATT و IMU دارای فیلدهای یکسانی هستند، اما اشیاء IMU در سریعترین زمان ممکن در خروجی صادر میشوند.
برای جزئیات فیلدها به توضیحات شیء ATT مراجعه کنید.
TOFF
این پیام در هر چرخه صادر میشود و اختلاف بین زمان ساعت میزبان و زمان GPS را در ابتدای ثانیه گزارش میدهد (در واقع، زمانی که اولین داده برای چرخه گزارش دریافت میشود).
این پیام دقیقاً بازتابدهنده پیام PPS است.
پیام TOFF زمان GPS به دست آمده از جریان دادههای سریالی GPS را گزارش میکند. پیام PPS زمان GPS به دست آمده از پالس PPS مربوط به GPS را گزارش میدهد.
یک شیء TOFF دارای عناصر زیر است:
جدول ۷. شیء TOFF
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "TOFF" |
| device | بله | string | نام دستگاه مبدا |
| real_sec | بله | numeric | ثانیهها از ساعت GPS |
| real_nsec | بله | numeric | نانوثانیهها از ساعت GPS |
| clock_sec | بله | numeric | ثانیهها از ساعت سیستم |
| clock_nsec | بله | numeric | نانوثانیهها از ساعت سیستم |
این پیام یک بار در ثانیه برای ناظران یک دستگاه صادر میشود و هدف آن گزارش برچسبهای زمانی گزارش درونباندی GPS و ثانیههای گزارششده توسط ساعت سیستم (که ممکن است با NTP تصحیح شده باشد) در زمان مشاهده اولین برچسب زمانی معتبر از چرخه گزارش است.
این پیام شامل دو جفت ثانیه/نانوثانیه است: real_sec و real_nsec حاوی زمانی هستند که GPS تصور میکند در شروع چرخه جاری بوده است؛ clock_sec و clock_nsec حاوی زمانی هستند که ساعت سیستم تصور میکند هنگام دریافت اولین پیام زمانبندی چرخه بوده است. مقدار real_nsec همیشه با دقت نانوثانیه است. مقدار clock_nsec در اکثر سیستمها دارای دقت نانوثانیه است.
نمونه:
{"class":"TOFF","device":"/dev/ttyUSB0",
"real_sec":1330212592, "real_nsec":343182,
"clock_sec":1330212592,"clock_nsec":343184,
"precision":-2}
PPS
این پیام هر بار که دیمن یک پالس PPS (پالس در ثانیه) معتبر را از یک دستگاه شناسایی کند صادر میشود.
این پیام دقیقاً بازتابدهنده پیام TOFF است.
پیام TOFF زمان GPS حاصل از جریان دادههای سریالی GPS را گزارش میدهد. پیام PPS زمان GPS مشتقشده از پالس PPS سختافزاری GPS را گزارش میکند.
منابع مختلفی برای خطا در زمانهای گزارششده ساعت وجود دارد. سرعت اتصال سریال بین GPS و سیستم، تأخیری را در تشخیص شروع چرخه ایجاد میکند. خطای بزرگتری نیز به دلیل زمان متغیر محاسبات درون GPS اضافه میشود. در مجموع، زمان به دست آمده از شروع چرخه GPS میتواند دارای انحرافهای ۱۰ میلیثانیه تا ۷۰۰ میلیثانیه و لغزش و تغییرات ترکیبی ۱۰۰ تا ۳۰۰ میلیثانیه باشد.
برای تعریف دقت (precision)، به مستندات NTP مراجعه کنید.
یک شیء PPS دارای عناصر زیر است:
جدول ۸. شیء PPS
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "PPS" |
| device | بله | string | نام دستگاه مبدا |
| real_sec | بله | numeric | ثانیهها از منبع PPS |
| real_nsec | بله | numeric | نانوثانیهها از منبع PPS |
| clock_sec | بله | numeric | ثانیهها از ساعت سیستم |
| clock_nsec | بله | numeric | نانوثانیهها از ساعت سیستم |
| precision | بله | numeric | تخمین به سبک NTP از دقت PPS |
| shm | بله | string | کلید حافظه اشتراکی (shm) این PPS |
| qErr | خیر | numeric | خطای کوانتیزاسیون PPS بر حسب پیکوثانیه. گاهی اوقات خطای «دندانهارهای» (sawtooth) نامیده میشود. |
این پیام یک بار در ثانیه برای ناظران دستگاهی که PPS ارسال میکند صادر میشود و زمان شروع ثانیه GPS (زمانی که 1PPS میرسد) و ثانیههای گزارششده توسط ساعت سیستم (که ممکن است با NTP تصحیح شده باشد) را در آن لحظه گزارش میکند.
پیام شامل دو جفت ثانیه/نانوثانیه است: real_sec و real_nsec حاوی زمانی هستند که GPS تصور میکند در لبه پالس PPS بوده است؛ clock_sec و clock_nsec حاوی زمانی هستند که ساعت سیستم تصور میکند در لبه پالس PPS بوده است. مقدار real_nsec همیشه با دقت نانوثانیه است. مقدار clock_nsec در اکثر سیستمها دارای دقت نانوثانیه است.
منابع مختلفی برای خطا در زمانهای گزارششده ساعت وجود دارد. برای PPS که از طریق یک خط سریال واقعی ارسال میشود، تأخیر وقفه سریال به علاوه زمان پردازش تا فراخوانی تایمر باید از بالا به حدود ۱۰ میکروثانیه محدود شود؛ اگر هسته شما از [RFC-2783] پشتیبانی کند، این مقدار میتواند به کمتر از ۱ میکروثانیه کاهش یابد. شبیهسازی خط کنترل USB1.1 به سریال به حدود ۱ میلیثانیه محدود است.
نمونه:
{"class":"PPS","device":"/dev/ttyUSB0",
"real_sec":1330212592, "real_nsec":343182,
"clock_sec":1330212592,"clock_nsec":343184,
"precision":-3}
OSC
این پیام وضعیت یک نوسانساز منضبطشده با GPS (GPSDO) را گزارش میدهد. خروجی GPS PPS (که پایداری بلندمدت فوقالعادهای دارد) معمولاً برای منضبط کردن یک نوسانساز محلی با پایداری کوتاهمدت بسیار بهتر (مانند یک ساعت اتمی روبیدیوم) استفاده میشود.
یک شیء OSC دارای عناصر زیر است:
جدول ۹. شیء OSC
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "OSC" |
| device | بله | string | نام دستگاه مبدا. |
| running | بله | boolean | اگر مقدار true باشد، نوسانساز در حال حاضر در حال اجرا است. نوسانسازها ممکن است در ابتدای روز نیاز به زمان گرم شدن داشته باشند. |
| reference | بله | boolean | اگر مقدار true باشد، نوسانساز در حال دریافت سیگنال GPS PPS است. |
| disciplined | بله | boolean | اگر مقدار true باشد، سیگنال GPS PPS به اندازه کافی پایدار است و برای منضبط کردن نوسانساز محلی استفاده میشود. |
| delta | بله | numeric | اختلاف زمانی (بر حسب نانوثانیه) بین پالس خروجی PPS نوسانساز منضبطشده و آخرین پالس ورودی GPS PPS. |
نمونه:
{"class":"OSC","running":true,"device":"/dev/ttyUSB0",
"reference":true,"disciplined":true,"delta":67}
دستورهای پروتکل اصلی (CORE PROTOCOL COMMANDS)
دستورهایی که میتوانید به gpsd ارسال کنید در ادامه آمده است.
?VERSION;
شیئی با ویژگیهای زیر را بازمیگرداند:
جدول ۱۰. شیء VERSION
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "VERSION" |
| release | بله | string | سطح انتشار عمومی |
| rev | بله | string | سطح بازبینی داخلی در کنترل نسخه. |
| proto_major | بله | numeric | سطح بازبینی اصلی (major) رابط برنامهنویسی API. |
| proto_minor | بله | numeric | سطح بازبینی فرعی (minor) رابط برنامهنویسی API. |
| remote | خیر | string | آدرس اینترنتی (URL) دیمن راه دور که این نسخه را گزارش میکند. اگر خالی باشد، این نسخه متعلق به دیمن محلی است. |
هنگامی که کلاینت برای نخستین بار متصل میشود، دیمن یک پاسخ VERSION به هر کلاینت ارسال میکند.
هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه میکند، بیت VERSION_SET را در عضو set سطح بالا فعال میسازد.
نمونه:
{"class":"VERSION","version":"2.40dev",
"rev":"06f62e14eae9886cde907dae61c124c53eb1101f",
"proto_major":3,"proto_minor":1
}
?DEVICES;
یک شیء فهرست دستگاه با عناصر زیر را بازمیگرداند:
جدول ۱۱. شیء DEVICES
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "DEVICES" |
| devices | بله | list | فهرستی از توضیحات دستگاهها |
| remote | خیر | string | آدرس اینترنتی (URL) دیمن راه دور که مجموعه دستگاهها را گزارش میکند. اگر خالی باشد، این یک پاسخ DEVICES از دیمن محلی است. |
هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه میکند، بیت DEVICELIST_SET را در عضو set سطح بالا فعال میسازد.
نمونه:
{"class"="DEVICES","devices":[
{"class":"DEVICE","path":"/dev/pts/1","flags":1,"driver":"SiRF binary"},
{"class":"DEVICE","path":"/dev/pts/3","flags":4,"driver":"AIVDM"}]}
دیمن گاهی یک شیء DEVICE تکی (یعنی شیئی که درون یک پوشش DEVICES قرار ندارد) به کلاینت ارسال میکند. محتوای دادههای این اشیاء بعداً به عنوان پاسخ به دستور ?DEVICE شرح داده خواهد شد.
?WATCH;
این دستور حالت نظارهگر (watcher mode) را تنظیم میکند. همچنین خطمشی به ازای هر مشترک و بیت داده خام را تنظیم کرده یا گزارشی از آن را دریافت میکند. شیء WATCH به عنوان آرگومان، خطمشی مشترک را تغییر میدهد. پاسخ ارائهشده، خطمشی مشترک را شرح میدهد و همچنین شامل یک شیء DEVICES خواهد بود.
یک شیء WATCH دارای عناصر زیر است:
جدول ۱۲. شیء WATCH
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "WATCH" |
| enable | خیر | boolean | فعالسازی (true) یا غیرفعالسازی (false) حالت نظارهگر. پیشفرض true است. |
| json | خیر | boolean | فعالسازی (true) یا غیرفعالسازی (false) ارسال گزارشهای JSON. پیشفرض false است. |
| nmea | خیر | boolean | فعالسازی (true) یا غیرفعالسازی (false) تبدیل بستههای باینری به شبه-NMEA. پیشفرض false است. |
| raw | خیر | integer | حالت داده خام ('raw') را کنترل میکند. هنگامی که این ویژگی برای یک کانال روی 1 تنظیم شود، gpsd جریان داده پردازشنشده NMEA یا AIVDM را از هر دستگاه متصل گزارش میکند. بستههای باینری GPS به صورت هگزادسیمال نمایش داده میشوند. بستههای RTCM2 و RTCM3 در حالت خام نمایش داده نمیشوند. هنگامی که این ویژگی برای کانالی که دادههای باینری را پردازش میکند روی 2 تنظیم شود، gpsd دادههای دریافتی را به طور مستقیم و بدون تبدیل به هگزادسیمال گزارش میدهد. |
| scaled | خیر | boolean | در صورت مقدار true، مقسومعلیههای مقیاسپذیری را پیش از ارسال در خروجی اعمال میکند؛ پیشفرض false است. |
| split24 | خیر | boolean | در صورت مقدار true، بخشهای جملات AIS نوع 24 را تجمیع میکند. در صورت false، هر بخش را به عنوان یک شیء JSON جداگانه گزارش میدهد و تطبیق MMSIها و تجمیع را به کلاینت واگذار میکند. پیشفرض false است. فقط در گزارشهای AIS کاربرد دارد. |
| pps | خیر | boolean | در صورت مقدار true، پیام JSON مربوط به TOFF را در هر چرخه و پیام JSON مربوط به PPS را هنگام صدور 1PPS توسط دستگاه ارسال میکند. پیشفرض false است. |
| device | خیر | string | در صورت وجود، نظارت را تنها برای دستگاه مشخصشده به جای تمام دستگاهها فعال میکند. در حالتهای raw و NMEA که پاسخهای دستگاه برچسبگذاری نشدهاند مفید است. هنگامی که همراه با enable:false استفاده شود، هیچ تأثیری ندارد. |
| remote | خیر | string | آدرس اینترنتی (URL) دیمن راه دور که مجموعه نظارت را گزارش میکند. اگر خالی باشد، این یک پاسخ WATCH از دیمن محلی است. |
یک ویژگی بولی اضافی به نام «timing» نیز وجود دارد که مستند نشده است، زیرا این بخش از رابط ناپایدار بوده و صرفاً برای استفاده توسعهدهندگان است.
در حالت نظارهگر، گزارشهای GPS به صورت پاسخهای TPV و SKY ارسال میشوند. گزارشدهی AIS، Subframe و RTCM در بخش بعدی شرح داده شده است.
هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه میکند، بیت POLICY_SET را در عضو set سطح بالا فعال میسازد.
نمونه:
{"class":"WATCH", "raw":1,"scaled":true}
?POLL;
دستور POLL دادههای آخرین تثبیتهای مشاهدهشده را در تمامی دستگاههای فعال GPS درخواست میکند. دستگاهها برای اینکه قابل نظرسنجی (poll) باشند باید قبلاً توسط ?WATCH فعال شده باشند.
استفاده از نظرسنجی در دستگاههایی مانند NMEA GPS که در آنها تثبیت کامل باید از چندین جمله جمعآوری شود، ممکن است نتایج غیرمنتظرهای به همراه داشته باشد. اگر در حین ارسال این جملات نظرسنجی انجام دهید، پاسخ تنها شامل دادههای تثبیتی خواهد بود که تاکنون در دوره جاری جمعآوری شده است و ممکن است به اندازه یک چرخه زمانی (معمولاً ۱ ثانیه) قدیمی باشد.
پاسخ POLL شامل یک فهرست زماندار از اشیاء TPV (دادههای کششده) و یک فهرست زماندار از اشیاء SKY (پیکربندی ماهوارهها) خواهد بود. اگر دستگاهی تثبیت موقعیتی ندیده باشد، با فیلد mode برابر با صفر گزارش میشود.
جدول ۱۳. شیء POLL
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "POLL" |
| time | بله | Numeric | برچسب زمان در قالب ISO 8601. ممکن است دارای بخش کسری با دقت حداکثر ۰.۰۰۱ ثانیه باشد. |
| active | بله | Numeric | تعداد دستگاههای فعال. |
| tpv | بله | JSON array | فهرستی از اشیاء TPV جدا شده با کاما. |
| sky | بله | JSON array | فهرستی از اشیاء SKY جدا شده با کاما. |
نمونهای از پاسخ POLL:
{"class":"POLL","time":"2010-06-04T10:31:00.289Z","active":1,
"tpv":[{"class":"TPV","device":"/dev/ttyUSB0",
"time":"2010-09-08T13:33:06.095Z",
"ept":0.005,"lat":40.035093060,
"lon":-75.519748733,"track":99.4319,"speed":0.123,"mode":2}],
"sky":[{"class":"SKY","device":"/dev/ttyUSB0",
"time":1270517264.240,"hdop":9.20,
"satellites":[{"PRN":16,"el":55,"az":42,"ss":36,"used":true},
{"PRN":19,"el":25,"az":177,"ss":0,"used":false},
{"PRN":7,"el":13,"az":295,"ss":0,"used":false},
{"PRN":6,"el":56,"az":135,"ss":32,"used":true},
{"PRN":13,"el":47,"az":304,"ss":0,"used":false},
{"PRN":23,"el":66,"az":259,"ss":0,"used":false},
{"PRN":20,"el":7,"az":226,"ss":0,"used":false},
{"PRN":3,"el":52,"az":163,"ss":32,"used":true},
{"PRN":31,"el":16,"az":102,"ss":0,"used":false}
]}]}
نکته
نرمافزار کلاینت نباید فرض کند که فهرست فیلدهای پاسخ POLL برای همیشه ثابت است. با جمعآوری و کش کردن دادههای بیشتر از انواع حسگرهای مختلف توسط gpsd، احتمالاً آن دادهها نیز راه خود را به این پاسخ باز خواهند کرد.
?DEVICE; ?DEVICE=
این دستور وضعیت یک دستگاه را گزارش میدهد (اگر پس از آن ';' بیاید)، یا بیتهای کنترلی خاص دستگاه، بهویژه سرعت دستگاه، حالت سریال و بیت حالت بومی را تنظیم میکند (اگر پس از آن '=' و یک شیء DEVICE بیاید). اگر بیش از یک کلاینت به کانال متصل باشد و مسیر دستگاه مشخص نشده باشد، فرم تنظیم پارامتر رد خواهد شد.
به پاسخ توجه کنید، زیرا اگر GPS از یک دستور پشتیبانی نکند یا فقط از برخی ترکیبات حالتها پشتیبانی نماید، ممکن است این دستور با شکست مواجه شود. در صورت شکست، دیمن و GPS به برقراری ارتباط با همان سرعت قبلی ادامه خواهند داد.
از فرم تنظیم پارامتر با احتیاط استفاده کنید. در گیرندههای GPS مبتنی بر USB و بلوتوث نیز امکان دارد تنظیم حالت سریال با شکست مواجه شود؛ یا به این دلیل که تراشه مبدل سریال از حالتهای غیر 8N1 پشتیبانی نمیکند، یا به این دلیل که سفتافزار دستگاه هنگام تغییر سرعت، تراشه مبدل سریال را با UART روی چیپست GPS به درستی همگام نمیکند. این خرابیها میتواند دستگاه شما را متوقف (hang) کند و احتمالاً نیاز به قطع و وصل تغذیه GPS یا (در موارد حاد) قطع فیزیکی باتری پشتیبان NVRAM داشته باشد.
یک شیء DEVICE دارای عناصر زیر است:
جدول ۱۴. شیء DEVICE
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "DEVICE" |
| activated | خیر | string | زمان فعال شدن دستگاه به صورت یک برچسب زمانی ISO8601. اگر دستگاه غیرفعال باشد این ویژگی وجود ندارد. |
| bps | خیر | integer | سرعت دستگاه بر حسب بیت بر ثانیه. |
| cycle | خیر | real | زمان چرخه دستگاه بر حسب ثانیه. |
| driver | خیر | string | نام درایور دستگاه در GPSD. تا زمانی که gpsd بستههای قابل شناسایی از دستگاه ندیده باشد، گزارش نخواهد شد. |
| flags | خیر | integer | بردار بیتی از پرچمهای ویژگی. پرچمهای تعریفشده فعلی انواع بستههای دیدهشده تاکنون (GPS, RTCM2, RTCM3, AIS) را توصیف میکنند. اگر خالی باشد گزارش نخواهد شد (مثلاً قبل از اینکه gpsd بستههای قابل شناسایی را از دستگاه ببیند). |
| hexdata | خیر | string | دادهها به صورت هگزادسیمال خالص برای ارسال به گیرنده GNSS. |
| mincycle | خیر | real | حداقل زمان چرخه دستگاه بر حسب ثانیه. تنها در صورتی از طریق ?DEVICE گزارش میشود که نرخ قابل تغییر باشد. این مقدار فقطخواندنی است و قابل تنظیم نیست. |
| native | خیر | integer | مقدار 0 به معنای حالت NMEA و 1 به معنای حالت جایگزین است (در صورت وجود، حالت باینری بهویژه برای چیپستهای SiRF و Evermore). تلاش برای تنظیم این حالت روی یک دستگاه غیر GPS منجر به خطا میشود. |
| parity | خیر | string | مقادیر N، O یا E برای بدون توازن (no parity)، فرد (odd)، یا زوج (even). |
| path | خیر | string | نام دستگاهی که بیتهای کنترلی برای آن گزارش میشوند، یا قرار است روی آن اعمال گردند. این ویژگی تنها زمانی میتواند حذف شود که دقیقاً یک کانال اشتراک وجود داشته باشد. |
| readonly | خیر | boolean | در صورت فقطخواندنی بودن دستگاه، مقدار true است. |
| sernum | خیر | string | شماره سریال سختافزاری (در صورتی که درایور دستگاه آن مقدار را بازگرداند). |
| stopbits | بله | integer | بیتهای توقف (1 یا 2). |
| subtype | خیر | string | هرگونه اطلاعات نسخهای که درایور دستگاه بازگردانده است. |
| subtype1 | خیر | string | اطلاعات نسخه بیشتری که درایور دستگاه بازگردانده است. |
پارامترهای سریال (bps, parity, stopbits) در پاسخی که یک منبع TCP/IP مانند جریان Ntrip، DGPSIP یا AIS را توصیف میکند حذف خواهند شد؛ در یک دستگاه سریال، آنها همیشه حضور خواهند داشت.
محتوای فیلد flags باید به صورت زیر تفسیر شود:
جدول ۱۵. پرچمهای دستگاه
| تعریف در C | مقدار | توضیحات |
| SEEN_GPS | 0x01 | دادههای GPS روی این دستگاه دیده شده است |
| SEEN_RTCM2 | 0x02 | دادههای RTCM2 روی این دستگاه دیده شده است |
| SEEN_RTCM3 | 0x04 | دادههای RTCM3 روی این دستگاه دیده شده است |
| SEEN_AIS | 0x08 | دادههای AIS روی این دستگاه دیده شده است |
هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه میکند، بیت DEVICE_SET را در عضو set سطح بالا فعال میسازد.
نمونه:
{"class":"DEVICE","bps":4800,"parity":"N","stopbits":1,"native":0}
هنگامی که کلاینت در حالت نظارهگر باشد، در زمان اضافه شدن دستگاهی به استخر یا غیرفعال شدن آن، دیمن اعلانهای DEVICE را برای آن ارسال میکند.
هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه میکند، بیت DEVICE_SET را در عضو set سطح بالا فعال میسازد.
مثالها (EXAMPLES)
اعلان مربوط به یک دستگاه غیرفعالشده:
{"class":"DEVICE","path":"/dev/pts1","activated":0}
ارسال یک درخواست برای پیام UBX-MON-VER به یک گیرنده u-blox در مسیر /dev/ttyUSB2:
?DEVICE={"path":"/dev/ttyUSB2","hexdata":"b5620a0400000e34"}
دیمن gpsd در صورت موفقیت با یک ACK پاسخ خواهد داد:
{"class":"ACK"}
ERROR
دیمن ممکن است در پاسخ به یک خط فرمان با نحو نامعتبر یا یک دستور ناشناخته، یک شیء خطا ارسال کند. این شیء دارای عناصر زیر است:
جدول ۱۶. شیء اعلان ERROR
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "ERROR" |
| message | بله | string | پیام خطای متنی |
نمونه:
{"class":"ERROR","message":"Unrecognized request '?FOO'"}
هنگامی که کتابخانه کلاینت C پاسخی از این نوع را تجزیه میکند، بیت ERR_SET را در عضو set سطح بالا فعال میسازد.
پروتکل RTCM2 (RTCM2)
استاندارد RTCM-104 خانوادهای از پروتکلهای سریال است که برای پخش تصحیحات شبهفاصله از ایستگاههای مرجع GPS تفاضلی (DGPS) استفاده میشود. بسیاری از گیرندههای GPS میتوانند این تصحیحات را برای بهبود دقت گزارشدهی خود بپذیرند.
پروتکل RTCM-104 در دو ساختار اصلی و ناسازگار 2.x و 3.x عرضه میشود. هر ساختار اصلی دارای بازبینیهای فرعی (سازگار) است.
استاندارد قابل اعمال برای RTCM نسخه 2.x سند استانداردهای پیشنهادی RTCM برای سرویس تفاضلی NAVSTAR GPS تحت عنوان RTCM Paper 194-93/SC 104-STD است. برای RTCM 3.1 این سند RTCM Paper 177-2006-SC104-STD میباشد. دستورالعملهای سفارش هر دو استاندارد از وبسایت کمیسیون فنی رادیویی خدمات دریایی (RTCM) https://www.rtcm.org/ تحت بخش "Publications" در دسترس است.
انتقالهای سیمی RTCM (RTCM WIRE TRANSMISSIONS)
ایستگاههای تصحیح تفاضلی GPS شامل یک گیرنده مرجع GPS متصل به یک فرستنده فرکانس پایین (LF) هستند. گیرنده مرجع GPS یک GPS با دقت نقشهبرداری است که ردیابی حامل GPS را انجام میدهد و میتواند موقعیت خود را تا چند میلیمتر مشخص کند. این گیرنده تصحیحات برد و نرخ برد را تولید کرده و آنها را به RTCM104 کدگذاری میکند، سپس RTCM104 را بر روی سیگنال سریال RS-232 با سرعت ۱۰۰ یا ۲۰۰ بود (بسته به نیاز فرستنده) به فرستنده LF ارسال مینماید.
فرستنده LF سیگنال رادیویی تقریباً ۳۰۰ کیلوهرتز را پخش میکند که گیرندههای رادیویی GPS تفاضلی آن را دریافت میکنند. فرستندههایی که قرار است برد بیشتری داشته باشند، باید با نرخ کمتری ارسال کنند. هرچه نرخ داده بالاتر باشد، دریافت سیگنال با نسبت سیگنال به نویز مناسب برای گیرنده رادیویی راه دور سختتر خواهد بود (سیگنالهای با نرخ داده بالاتر را نمیتوان در بازه زمانی طولانی میانگینگیری کرد، از این رو پرنویزتر به نظر میرسند).
قالبهای سیمی RTCM (RTCM WIRE FORMATS)
یک پیام RTCM 2.x شامل دنبالهای از حداکثر ۳۳ کلمه ۳۰ بیتی است. ۲۴ بیت با ارزشتر هر کلمه، داده و شش بیت کمارزشتر، بیتهای توازن (Parity) هستند. الگوریتم توازن مورد استفاده همان ISGPS-2000 است که در لینکهای رو به پایین ماهوارههای GPS استفاده میشود. هر پیام RTCM 2.x بسته به نوع پیام، از دو کلمه سرآیند و به دنبال آن صفر یا چند کلمه داده تشکیل شده است.
یک پیام RTCM 3.x با یک بایت راهنمای ثابت 0xD3 آغاز میشود. پس از آن شش بیت اطلاعات نسخه و ۱۰ بیت اطلاعات طول بار داده (payload) قرار دارد. پس از آن بار داده و به دنبال آن یک جمعآزمایی ۳ بایتی از بار داده با استفاده از الگوریتم Qualcomm CRC-24Q قرار گرفته است.
قالب جیسان RTCM2 (RTCM2 JSON FORMAT)
هر پیام RTCM2 به عنوان یک شیء JSON تکی به ازای هر پیام تخلیه میشود و فیلدهای پیام به عنوان ویژگیهای آن شیء قرار میگیرند. آرایههای آمار ماهواره، ایستگاه و منظومه به آرایههایی از زیر-اشیاء JSON تبدیل میشوند. هر جمله معمولاً دارای یک فیلد «device» نیز خواهد بود که حاوی مسیر دستگاه مبدا است.
تمام ویژگیها به جز فیلد device اجباری هستند. ویژگیهای سرآیند قبل از سایر ویژگیها صادر میشوند.
بخش سرآیند (Header portion)
جدول ۱۷. شیء سرآیند RTCM2
| نام | نوع | توضیحات |
| class | string | مقدار ثابت: "RTCM2". |
| type | integer | نوع پیام (1-9). |
| station_id | integer | شناسه گیرنده مرجع GPS. فرستندههای LF نیز دارای شمارههای شناسه (متفاوت) هستند. |
| zcount | real | زمان مرجع تصحیحات در پیام بر حسب ثانیه در ساعت جاری. توجه داشته باشید که این زمان بر مبنای زمان GPS است که چند ثانیه جلوتر از UTC است (جدول [UTC-TAU] مربوط به تصحیحات ثانیه کبیسه در رصدخانه نیروی دریایی ایالات متحده را ببینید). |
| seqnum | integer | شماره توالی. تنها ۳ بیت است و پس از ۷ مجدداً دور میزند. |
| length | integer | تعداد کلمات پس از سرآیند که پیام را تشکیل میدهند. |
| station_health | integer | وضعیت انتقال ایستگاه. سلامت بیکن را به عنوان یک منبع مرجع نشان میدهد. هر مقدار غیر صفر به این معنی است که ماهواره احتمالاً دادههای نادرست ارسال میکند و نباید در تثبیت استفاده شود. مقدار 6 یعنی انتقال نظارت نمیشود. مقدار 7 یعنی ایستگاه به درستی کار نمیکند. مقادیر دیگر توسط اپراتور بیکن تعریف میشوند. |
مقدار <message type> یکی از موارد زیر است:
1
3
4
5
6
7
9
16
31
نوع ۱ و ۹: دادههای تصحیح (Correction data)
یک یا چند شیء ماهواره پس از سرآیند برای پیامهای نوع ۱ یا نوع ۹ قرار میگیرند. قالب آن بدین شرح است:
جدول ۱۸. شیء ماهواره
| نام | نوع | توضیحات |
| ident | integer | شماره PRN ماهوارهای که این داده تصحیح برای آن است. به بخش «PRNs» مراجعه کنید. |
| udre | integer | خطای برد تفاضلی کاربر (0-3). مقادیر آن را در جدول زیر مشاهده کنید. |
| iod | integer | شماره صدور داده (Issue Of Data)، مطابق با IOD برای تقویم مداری جاری این ماهواره، همانطور که توسط ماهواره ارسال شده است. IOD یک برچسب منحصر به فرد است که تقویم مداری را مشخص میکند؛ GPS استفادهکننده از تصحیح DGPS و سامانه DGPS تولیدکننده داده باید از موقعیتهای مداری یکسانی برای ماهواره استفاده کنند. |
| prc | real | خطای شبهفاصله بر حسب متر برای این ماهواره که توسط گیرنده مرجع بیکن در دوره مشخصشده توسط z_count در رکورد والد اندازهگیری شده است. |
| rrc | real | نرخ تغییر خطای شبهفاصله بر حسب متر بر ثانیه برای این ماهواره که توسط گیرنده مرجع بیکن در دوره مشخصشده توسط فیلد z_count در رکورد والد اندازهگیری شده است. در صورت نیاز گیرنده GPS، از این فیلد برای محاسبه خطاهای شبهفاصله در دورههای دیگر استفاده میشود. |
مقادیر خطای برد تفاضلی کاربر (UDRE) به شرح زیر است:
جدول ۱۹. مقادیر UDRE
| 0 | خطای ۱ سیگما ⇐ ۱ متر |
| 1 | خطای ۱ سیگما ⇐ ۴ متر |
| 2 | خطای ۱ سیگما ⇐ ۸ متر |
| 3 | خطای ۱ سیگما > ۸ متر |
نمونه:
{"class":"RTCM2","type":1,
"station_id":688,"zcount":843.0,"seqnum":5,"length":19,"station_health":6,
"satellites":[
{"ident":10,"udre":0,"iod":46,"prc":-2.400,"rrc":0.000},
{"ident":13,"udre":0,"iod":94,"prc":-4.420,"rrc":0.000},
{"ident":7,"udre":0,"iod":22,"prc":-5.160,"rrc":0.002},
{"ident":2,"udre":0,"iod":34,"prc":-6.480,"rrc":0.000},
{"ident":4,"udre":0,"iod":47,"prc":-8.860,"rrc":0.000},
{"ident":8,"udre":0,"iod":76,"prc":-7.980,"rrc":0.002},
{"ident":5,"udre":0,"iod":99,"prc":-8.260,"rrc":0.002},
{"ident":23,"udre":0,"iod":81,"prc":-8.060,"rrc":0.000},
{"ident":16,"udre":0,"iod":70,"prc":-11.740,"rrc":0.000},
{"ident":30,"udre":0,"iod":4,"prc":-18.960,"rrc":-0.006},
{"ident":29,"udre":0,"iod":101,"prc":-24.960,"rrc":-0.002}
]}
نوع ۳: پارامترهای ایستگاه مرجع (Reference Station Parameters)
اعضای بار داده یک پیام نوع ۳ (پارامترهای ایستگاه مرجع) به شرح زیر است:
جدول ۲۰. پارامترهای ایستگاه مرجع
| نام | نوع | توضیحات |
| x | real | مختصات ECEF X. |
| y | real | مختصات ECEF Y. |
| z | real | مختصات ECEF Z. |
مختصات شامل موقعیت ایستگاه بر حسب متر با دو رقم اعشار، در مختصات زمینمرکز زمینثابت (ECEF) است. این مقادیر معمولاً به چارچوب مرجع WGS84 ارجاع داده میشوند، اما ممکن است در ایالات متحده به NAD83 (که اساساً برای همه به جز متخصصان ژئودزی با WGS84 یکسان است) یا چارچوبهای مرجع دیگر در سایر نقاط جهان ارجاع داده شوند.
یک پیام مرجع نامعتبر با یک سرآیند نوع ۳ بدون فیلدهای بار داده نمایش داده میشود.
نمونه:
{"class":"RTCM2","type":3,
"station_id":652,"zcount":1657.2,"seqnum":2,"length":4,"station_health":6,
"x":3878620.92,"y":670281.40,"z":5002093.59
}
نوع ۴: مبدأ مختصاتی (Datum)
اعضای بار داده یک پیام نوع ۴ (مبدأ مختصاتی) به شرح زیر است:
جدول ۲۱. مبدأ مختصاتی (Datum)
| نام | نوع | توضیحات |
| dgnss_type | string | یکی از مقادیر "GPS"، "GLONASS"، "GALILEO" یا "UNKNOWN". |
| dat | integer | مقدار 0 یا 1 بوده و جهت تغییر انتقال ارائهشده توسط dx, dy, dz را نشان میدهد. مقدار dat = 0 به این معنی است که مختصات ایستگاه (در پیام مرجع) به یک مبدأ محلی ارجاع داده شده و افزودن dx, dy, dz به آن موقعیت، آن را در مختصات GNSS (برای GPS برابر با WGS84) قرار میدهد. اگر dat = 1 باشد، موقعیت ایستگاه مرجع در مختصات GNSS است و افزودن dx, dy, dz آن را به مبدأ محلی تبدیل میکند. |
| datum_name | string | یک نام استاندارد برای مبدأ مختصاتی. |
| dx | real | انحراف در راستای محور X. |
| dy | real | انحراف در راستای محور Y. |
| dz | real | انحراف در راستای محور Z. |
مقادیر <dx> <dy> <dz> انحرافاتی برای تبدیل از مبدأ محلی به مبدأ GNSS یا برعکس هستند. این فیلدها اختیاری میباشند.
یک پیام مبدأ مختصاتی نامعتبر با یک سرآیند نوع ۴ بدون فیلدهای بار داده نمایش داده میشود.
نوع ۵: سلامت منظومه (Constellation Health)
یک یا چند مورد از این موارد پس از سرآیند برای پیامهای نوع ۵ قرار میگیرند — یکی برای هر ماهواره.
قالب آن به شرح زیر است:
جدول ۲۲. سلامت منظومه
| نام | نوع | توضیحات |
| ident | integer | شماره PRN ماهواره. به بخش «PRNs» مراجعه کنید. |
| iodl | bool | مقدار True نشان میدهد که این اطلاعات مربوط به اطلاعات ماهواره در یک پیام نوع ۱ یا نوع ۹ همراه است. |
| health | integer | مقدار 0 نشان میدهد که ماهواره سالم است. هر مقدار دیگر نشاندهنده یک مشکل است (نحوه کدگذاری مشخص نیست). |
| snr | integer | نسبت حامل به نویز سیگنال دریافتی در محدوده ۲۵ تا ۵۵ dB(Hz). |
| health_en | bool | اگر روی True تنظیم شده باشد نشان میدهد که ماهواره سالم است حتی اگر دادههای ناوبری ماهواره بگویند ناسالم است. |
| new_data | bool | مقدار True نشان میدهد که IOD برای این ماهواره بهزودی در پیامهای نوع ۱ یا ۹ بهروزرسانی خواهد شد. |
| los_warning | bool | هشدار خط دید (Line-of-sight). مقدار True نشان میدهد که ماهواره بهزودی ناسالم خواهد شد. |
| tou | integer | زمان سالم باقیمانده بر حسب ثانیه. |
نوع ۶: تهی (Null)
این نوع صرفاً یک پیام تهی را نشان میدهد و فاقد فیلدهای بار داده است.
پیام ناشناخته (Unknown message)
این قالب برای نمایش کلمات پیام به صورت هگزادسیمال زمانی استفاده میشود که فیلد نوع پیام با هیچیک از انواع شناختهشده مطابقت نداشته باشد.
قالب آن بدین شرح است:
جدول ۲۳. پیام ناشناخته
| نام | نوع | توضیحات |
| data | list | فهرستی از رشتهها. |
هر رشته در آرایه یک عبارت هگزادسیمال است که ۳۰ بیت اطلاعات را پس از بررسی توازن و وارونسازی نشان میدهد. دو بیت با ارزشتر باید نادیده گرفته شوند.
نوع ۷: تقویم نجومی بیکن رادیویی (Radio Beacon Almanac)
قالب آن بدین شرح است:
جدول ۲۴. تقویم نجومی بیکن رادیویی
| نام | نوع | توضیحات |
| lat | real | عرض جغرافیایی بر حسب درجه برای آنتن فرستنده LF ایستگاهی که این تقویم نجومی برای آن است. مقادیر شمال مثبت هستند. |
| lon | real | طول جغرافیایی بر حسب درجه برای آنتن فرستنده LF ایستگاهی که این تقویم نجومی برای آن است. مقادیر شرق مثبت هستند. |
| range | integer | برد منتشرشده ایستگاه بر حسب کیلومتر. |
| frequency | real | فرکانس پخش ایستگاه بر حسب کیلوهرتز (kHz). |
| health | integer | مقدار <health> وضعیت سلامت ایستگاهی است که این تقویم نجومی برای آن است. اگر غیر صفر باشد، ایستگاه دادههای مشکوک ارسال میکند و نباید برای تثبیت استفاده شود. استانداردهای ITU و RTCM104 در مورد تفسیر دقیقتر فیلد <health> و حتی پهنای بیتی آن تفاوت دارند. |
| station_id | integer | شناسه فرستنده. این مقدار با شناسه مرجع در سرآیند یکسان نیست، چرا که مورد دوم شناسه گیرنده مرجع است. |
| bitrate | integer | نرخ بیت ارسال شده. |
نمونه:
{"class":"RTCM2","type":9,"station_id":268,"zcount":252.6,
"seqnum":4,"length":5,"station_health":0,
"satellites":[
{"ident":13,"udre":0,"iod":3,"prc":-25.940,"rrc":0.066},
{"ident":2,"udre":0,"iod":73,"prc":0.920,"rrc":-0.080},
{"ident":8,"udre":0,"iod":22,"prc":23.820,"rrc":0.014}
]}
نوع ۱۳: پارامترهای فرستنده زمینی (Ground Transmitter Parameters)
اعضای بار داده یک پیام نوع ۱۳ (پارامترهای فرستنده زمینی) به شرح زیر است:
جدول ۲۵. پارامترهای فرستنده زمینی
| نام | نوع | توضیحات |
| lat | real | درجه عرض جغرافیایی علامتدار؛ مثبت یعنی شمال (N)، منفی یعنی جنوب (S). |
| lon | real | درجه طول جغرافیایی علامتدار؛ مثبت یعنی شرق (E)، منفی یعنی غرب (W). |
| range | integer | برد ارسال بر حسب کیلومتر (1-1024). |
| rangeflag | bool | در صورت True، نشان میدهد که برد تخمینی با مقدار یافتشده در پیام نوع ۷ (که شامل برد فهرستشده بیکن است) متفاوت است. عموماً نشاندهنده کاهش برد به دلیل عواملی مانند شرایط نامساعد یونوسفر یا کاهش توان ارسال است. |
| status | bool | در صورت True، به کاربر علامت میدهد که منتظر یک پیام توضیحی نوع ۱۶ مرتبط با این ایستگاه باشد. احتمالاً نشاندهنده وقوع یک رویداد غیرعادی است. |
این نوع پیام در RTCM 2.3 جایگزین پیام نوع ۳ (پارامترهای ایستگاه مرجع) شده است.
نوع ۱۴: زمان هفته GPS (GPS Time of Week)
اعضای بار داده یک پیام نوع ۱۴ (زمان هفته GPS) به شرح زیر است:
جدول ۲۶. زمان هفته GPS
| نام | نوع | توضیحات |
| hour | integer | ساعت از هفته (0-167). |
| leapsecs | integer | ثانیههای کبیسه (0-63). |
| week | integer | هفته GPS (0-123). |
نمونه:
{"class":"RTCM2","type":14,"station_id":652,"zcount":1657.2,
"seqnum":3,"length":1,"station_health":6,"week":601,"hour":109,
"leapsecs":15}
نوع ۱۶: پیام ویژه (Special Message)
جدول ۲۷. پیام ویژه
| نام | نوع | توضیحات |
| message | string | یک پیام متنی ارسال شده توسط اپراتور بیکن. |
نوع ۳۱: دادههای تصحیح (Correction data)
یک یا چند شیء ماهواره GLONASS پس از سرآیند برای پیامهای نوع ۱ یا نوع ۹ قرار میگیرند. قالب آن بدین شرح است:
جدول ۲۸. شیء ماهواره
| نام | نوع | توضیحات |
| ident | integer | شماره PRN ماهوارهای که این داده تصحیح برای آن است. به بخش «PRN, GNSS ID, SV ID, AND SIG ID» مراجعه کنید. |
| udre | integer | خطای برد تفاضلی کاربر (0-3). مقادیر آن را در جدولهای قبلی ببینید. |
| change | boolean | بیت تغییر تقویم مداری (Change-of-ephemeris). |
| tod | uinteger | تعداد دورههای ۳۰ ثانیهای از ابتدای ساعت. |
| prc | real | خطای شبهفاصله بر حسب متر برای این ماهواره که توسط گیرنده مرجع بیکن در دوره مشخصشده توسط z_count در رکورد والد اندازهگیری شده است. |
| rrc | real | نرخ تغییر خطای شبهفاصله بر حسب متر بر ثانیه برای این ماهواره که توسط گیرنده مرجع بیکن در دوره مشخصشده توسط فیلد z_count در رکورد والد اندازهگیری شده است. در صورت نیاز گیرنده GPS، از این مقدار برای محاسبه خطاهای شبهفاصله در دورههای دیگر استفاده میشود. |
نمونه:
{"class":"RTCM2","type":31,"station_id":652,"zcount":1642.2,
"seqnum":0,"length":14,"station_health":6,
"satellites":[
{"ident":5,"udre":0,"change":false,"tod":0,"prc":132.360,"rrc":0.000},
{"ident":15,"udre":0,"change":false,"tod":0,"prc":134.840,"rrc":0.002},
{"ident":14,"udre":0,"change":false,"tod":0,"prc":141.520,"rrc":0.000},
{"ident":6,"udre":0,"change":false,"tod":0,"prc":127.000,"rrc":0.000},
{"ident":21,"udre":0,"change":false,"tod":0,"prc":128.780,"rrc":0.000},
{"ident":22,"udre":0,"change":false,"tod":0,"prc":125.260,"rrc":0.002},
{"ident":20,"udre":0,"change":false,"tod":0,"prc":117.280,"rrc":-0.004},
{"ident":16,"udre":0,"change":false,"tod":17,"prc":113.460,"rrc":0.018}
]}
قالب خروجی RTCM3 (RTCM3 DUMP FORMAT)
پشتیبانی از خروجی RTCM104v3 ناقص و دارای باگ است. تلاش نکنید از آن برای محیطهای عملیاتی استفاده کنید! هر کسی که به آن علاقهمند است باید کد منبع را مطالعه کند.
قالبهای خروجی AIS (AIS DUMP FORMATS)
پشتیبانی از AIS یک افزونه است. اگر نمونه gpsd شما با مجموعهای از ویژگیهای محدود ساخته شده باشد، ممکن است وجود نداشته باشد.
بستههای AIS به صورت اشیاء JSON با کلاس "AIS" خارج میشوند. هر شیء گزارش AIS شامل یک فیلد «type» است که نوع پیام AIS را مشخص میکند و یک فیلد «scaled» که نشان میدهد آیا بقیه فیلدها در قالب مقیاسبندیشده یا مقیاسبندینشده صادر شدهاند (این فیلدها قبل از هرگونه فیلد مخصوص نوع صادر میشوند). همچنین شامل یک فیلد «device» خواهد بود که منبع داده را نام میبرد. سایر فیلدها دارای نامها و انواعی هستند که در سند AIVDM/AIVDO Protocol Decoding در وبسایت پروژه GPSD مشخص شده است؛ جدول فیلد هر پیام ممکن است مستقیماً به عنوان مشخصاتی برای اعضای نوع شیء JSON متناظر تفسیر شود.
به طور پیشفرض، برخی عملیاتهای مقیاسبندی و تبدیل برای خروجی JSON انجام میشود. عرضها و طولهای جغرافیایی به جای واحد بومی AIS یعنی ۱/۱۰۰۰۰ دقیقه قوسی، به درجات اعشاری تبدیل میشوند. سرعتهای کشتی (و نه هوایی) به جای واحدهای یکدهم گره، به گره مقیاسبندی میشوند. نرخ چرخش در صورت در دسترس نبودن ممکن است به صورت "nan" ظاهر شود، یا در صورتی که خارج از محدوده کدگذاری AIS باشد به صورت یکی از رشتههای "fastright" یا "fastleft" نشان داده شود؛ در غیر این صورت به صورت درجه دوم به عدد حسگر چرخش بر حسب درجه در دقیقه نگاشت میشود. آبخور شناور به جای دسیمترهای بومی AIS به مترهای اعشاری تبدیل میشود. تبدیلات مقیاسبندی مختلف دیگری نیز در سند "AIVDM/AIVDO Protocol Decoding" شرح داده شده است.
قالبهای خروجی SUBFRAME (SUBFRAME DUMP FORMATS)
پشتیبانی از Subframe همواره در gpsd کامپایل میشود، اما بسیاری از GPSها دادههای subframe را خروجی نمیدهند یا ممکن است درایور gpsd از subframeها پشتیبانی نکند.
بستههای Subframe به صورت اشیاء JSON با کلاس "SUBFRAME" تخلیه میشوند. هر شیء گزارش subframe شامل یک فیلد «frame» است که شماره subframe را مشخص میکند، یک فیلد «tSV» برای شماره ماهواره ارسالکننده، یک فیلد «TOW17» حاوی ۱۷ بیت باارزشتر شروع پیام ۱۲ ثانیهای بعدی و یک فیلد «scaled» که مشخص میکند آیا بقیه فیلدها به صورت مقیاسبندیشده تخلیه میشوند یا خیر. این شیء همچنین شامل یک فیلد «device» خواهد بود که نام منبع داده را مشخص میسازد. هر شیء SUBFRAME دارای یک زیر-شیء مختص به آن نوع صفحه subframe خواهد بود. فیلدهای آن زیر-شیء دارای نامها و انواعی شبیه به موارد مشخصشده در سند IS-GPS-200 هستند؛ جدول فیلد هر پیام میتواند مستقیماً به عنوان مشخصاتی برای اعضای نوع شیء JSON متناظر تفسیر گردد.
جدول ۲۹. شیء SUBFRAME
| نام | همواره؟ | نوع | توضیحات |
| class | بله | string | مقدار ثابت: "SUBFRAME" |
| device | بله | string | نام دستگاه مبدا. |
| frame | خیر | integer | شماره فریم |
| gnssId | بله | integer | منظومه ماهواره ارسالکننده |
| scaled | بله | boolean | در صورت مقیاسبندی مقادیر مقدار True است |
| tSV | بله | integer | شناسه ماهواره ارسالکننده (نه PRN) |
| TOW17 | خیر | integer | مقدار ۱۷ بیت زمان هفته GPS بعدی |
شناسههای PRN، GNSS ID، SV ID و SIG ID (PRN, GNSS ID, SV ID, AND SIG ID)
این ساختار JSON به ماهوارههای تکی بر اساس PRN، و با ترکیب شناسه منظومه (gnssid) و شناسه ماهواره (svid) اشاره میکند.
توجه داشته باشید: آنچه بیشتر افراد به عنوان PRN در نظر میگیرند، همان PRN نیست که هر منظومه (GPS, GLONASS, BeiDou و غیره) در مستندات خود استفاده میکند.
هر منظومه شمارهگذاری PRNهای خود را از ۱ آغاز میکند. سامانه GPS تمام PRNها را تا ۱۰۲۳ رزرو کرده است. آنچه بیشتر کاربران به عنوان PRN میشناسند چیزی است که NMEA آن را PRN مینامد، که همان PRN استاندارد و بومی نیست. مقادیر NMEA PRN در ابتدا همان PRNهای GPS بودند، اما با در دسترس قرار گرفتن منظومههای دیگر، سازندگان گیرندههای GNSS آن فیلد NMEA را بارگذاری مضاعف (overload) کردند؛ بدون اینکه میان خود استانداردسازی یا هماهنگی انجام دهند. برخی گیرندهها بسته به پیکربندی زمان اجرا، از نگاشتهای مختلف PRN استفاده میکنند. انتظار هیچگونه صراحت و قطعیتی در یک PRN متعلق به NMEA نداشته باشید؛ هیچ معنای مورد اجماعی برای آن وجود ندارد.
برای پشت سر گذاشتن این آشفتگی، سازندگان گیرندهها اکنون به هر ماهواره با منظومه آن (GPS, GLONASS و غیره) و PRN آن (شروع از ۱) در آن منظومه اشاره میکنند.
برنامه gpsd به هر منظومه با gnssid و به هر ماهواره درون آن منظومه با PRN بومی آن (svid) اشاره میکند. البته هیچ استانداردسازی یا اجماعی روی این شناسهها وجود ندارد، بنابراین gpsd خود در این باره تصمیمگیری کرده است. این شناسهها تا حدی بر اساس کاربرد u-blox تعیین شدهاند:
جدول ۳۰. جدول gnssid و svid
| منظومه ماهوارهای | اختصار | gnssid | svid (PRN بومی) |
| BeiDou | BD | 3 | 1-37 |
| Galileo | GA | 2 | 1-36 |
| GLONASS | GL | 6 | 1-32, 255 |
| GPS | GP | 0 | 1-32 |
| IMES | IM | 4 | 1-10 |
| NavIC (IRNSS) | IR | 7 | 1-11 |
| QZSS | QZ | 5 | 1-7 |
| SBAS | SB | 1 | 120-158 |
البته ماجرا به اینجا ختم نمیشود. ماهوارههای مدرن بر روی بیش از یک باند فرکانسی (L1, L2, L5 و غیره) و با استفاده از بیش از یک مدولاسیون سیگنال (C/a, CM, CL, P و غیره) ارسال میکنند. بنابراین یک ماهواره GPS با (gnssid = 0) و PRN بومی ۳ با (svid = 3) ممکن است روی باندهای L2 و L5 با استفاده از چندین مدولاسیون ارسال انجام دهد. هر یک از اینها ممکن است به صورت جداگانه توسط گیرنده شما با شناسه سیگنال (sigid) به همراه دادههای مربوط به سلامت، SNR، وضعیت استفاده و غیره گزارش شوند.
اگر یک گیرنده چندبانده دارید و واقعاً میخواهید شناسههای sigid آن را درک کنید، برای صرف زمان زیادی با مستندات آن آماده باشید. با ظهور گیرندههای جدید با باندها و مدولاسیونهای نوین، همگام ماندن با همه آنها ناممکن است. در اینجا جدولی از برخی sigidهای شناختهشده برای gpsd آمده است:
جدول ۳۱. جدول sigid
| منظومه ماهوارهای | sigid | نام سیگنال |
| BeiDou | 0 | B1I D1 |
| 1 | B1I D2 | |
| 2 | B2I D1 | |
| 3 | B2I D2 | |
| 7 | B2a | |
| Galileo | 0 | E1 C |
| 1 | E1 B | |
| 3 | E5 aI | |
| 4 | E5 aQ | |
| 5 | E5 bl | |
| 6 | E5 bQ | |
| GLONASS | 0 | L1 OF |
| 2 | L2 OF | |
| GPS | 0 | L1C/A |
| 3 | L2 CL | |
| 4 | L2 CM | |
| 6 | L5 I | |
| 7 | L5 Q | |
| IRNSS | ?? | |
| QZSS | 0 | L1C/A |
| 4 | L2 CM | |
| 5 | L2 CL | |
| SBAS | 0 | L1C/A |
| ? | L5I |
خواندن دادهها (READING)
خواندن خروجی خام JSON میتواند خستهکننده باشد. شما میتوانید برای خوانایی آسانتر، JSON خود را با ابزار [jq] زیباسازی و رنگآمیزی کنید. استفاده از jq برای مرتبسازی و چاپ زیبای یک فایل JSON میتواند به سادگی زیر باشد:
$ jq . GPSD.json
برای دریافت ۱۰ ثانیه از خروجی زنده JSON مربوط به gpsd و نمایش مرتب آن:
$ gpspipe -w -x 10 | jq .
اگر میخواهید فقط پیامهای TPV را ببینید:
$ gpspipe -w -x 10 | fgrep TPV | jq .
همچنین ببینید (SEE ALSO)
منابع (RESOURCES)
تارنمای پروژه: https://gpsd.io/
[RFC 2783]: https://datatracker.ietf.org/doc/html/rfc2783
Pulse-Per-Second API for UNIX-like Operating Systems
[RFC 7159]: https://datatracker.ietf.org/doc/html/rfc7159
The JavaScript Object Notation (JSON) Data Interchange Format
[jq]: https://github.com/stedolan/jq
: https://maia.usno.navy.mil/ser7/tai-utc.dat
جدول
تصحیحات
UTC به TAI در USNO.
کپیرایت (COPYING)
کپیرایت
این فایل
متعلق به
پروژه GPSD است
SPDX-License-Identifier: BSD-2-clause
نویسنده (AUTHOR)
اریک اس. ریموند (Eric S. Raymond)
| 2025-11-08 | GPSD, نسخه 3.27.5 |