สร้าง NTRIP Caster ด้วย BNC บนคลาวด์แบบ DIY สำหรับ RTK Base Station ใช้ CHCNav P5

ถ้าต้องการทำ RTK Base Station แบบ CORS ต่อเนื่อง 24/7 การใช้บริการคลาวด์เพื่อฝาก NTRIP Caster มีความเหมาะสมมากเพราะเวลา Downtime นั้นน้อยมากว่ากันตามสถิติ แทบจะ 99.99% แต่ก่อนจะไปต่อ มาทำความรู้จักกับ NTRIP และองค์ประกอบกันพอสังเขป

🛰️ แผนภาพและความสัมพันธ์ขององค์ประกอบ NTRIP

ระบบ NTRIP (Networked Transport of RTCM via Internet Protocol) เป็นโปรโตคอลที่ใช้ในการส่งข้อมูลแก้ไขค่าความคลาดเคลื่อนของ GNSS RTCM ผ่านอินเทอร์เน็ตแบบเรียลไทม์ ซึ่งประกอบด้วยองค์ประกอบหลัก 3 ส่วน ที่มีความสัมพันธ์กันแบบไคลเอนท์-เซิร์ฟเวอร์ (Client-Server Model)

1. NTRIP Server (สถานีฐานผู้ส่งข้อมูล)

  • คำอธิบาย: คือ แหล่งกำเนิดข้อมูล หรือซอฟต์แวร์ที่ติดตั้งอยู่บนคอมพิวเตอร์ หรือตัวรับสัญญาณ GNSS Base Station เช่น Trimble SPS855, CHCNav P5
  • บทบาทและความสัมพันธ์:
    • รับข้อมูล: รับข้อมูลดิบ RTCM จากสถานีฐาน (Base Station)
    • ส่งข้อมูลไปที่ Caster: ทำหน้าที่เป็น HTTP Clien โดยที่ดัน (Push) ข้อมูล RTCM ไปยัง NTRIP Caster อย่างต่อเนื่องผ่านอินเทอร์เน็ต

2. NTRIP Caster (ศูนย์กลางการจัดสรร)

  • คำอธิบาย: คือ เซิร์ฟเวอร์หลัก ที่ทำงานอยู่บนอินเทอร์เน็ต
  • บทบาทและความสัมพันธ์:
    • รับและจัดเก็บ: รับข้อมูล RTCM จาก NTRIP Server หลายแห่ง
    • จัดการ Source Table: สร้าง รายการแหล่งข้อมูล (Source Table) เพื่อแจ้งให้ NTRIP Client ทราบว่ามีสถานีฐานใดบ้างที่พร้อมใช้งาน (แสดงชื่อ Mount Point, พิกัด และประเภทข้อมูล)
    • เป็นสะพาน: ทำหน้าที่เป็นตัวกลางในการ กระจาย (Route) ข้อมูล RTCM จาก NTRIP Server ไปยัง NTRIP Client ได้หลายรายพร้อมกัน
    • การเชื่อมต่อ: NTRIP Server และ NTRIP Client ทั้งหมดจะติดต่อกับ Caster
  • คำอธิบาย: คือ ตัวรับสัญญาณ GNSS เคลื่อนที่ (Rover) หรือซอฟต์แวร์ที่ต้องการ รับ ข้อมูลแก้ไขค่าความคลาดเคลื่อน
  • บทบาทและความสัมพันธ์:
    • ร้องขอข้อมูล: ทำหน้าที่เป็น HTTP Client ที่ ร้องขอ (Request) ข้อมูล RTCM จาก NTRIP Caster
    • เลือก Mount Point: เชื่อมต่อกับ Caster และเลือกชื่อ Mount Point ที่ต้องการรับข้อมูล
    • คำนวณตำแหน่ง: ใช้ข้อมูล RTCM ที่ได้รับเพื่อคำนวณและปรับตำแหน่งให้มีความแม่นยำสูง (RTK Fix)

3. NTRIP Client (เครื่องลูกข่ายเคลื่อนที่: โรเวอร์)

  • คำอธิบาย: คือ ตัวรับสัญญาณ GNSS เคลื่อน (ในเคสผมคือ P5) ที่ Rover หรือซอฟต์แวร์ที่ต้องการ รับ ข้อมูลแก้ไขค่าความคลาดเคลื่อน
  • บทบาทและความสัมพันธ์:
    • ร้องขอข้อมูล: ทำหน้าที่เป็น HTTP Client ที่ ร้องขอ (Request) ข้อมูล RTCM จาก NTRIP Caster
    • เลือก Mount Point: เชื่อมต่อกับ Caster และเลือกชื่อ Mount Point ที่ต้องการรับข้อมูล (เช่น RW2_RTK_STATION)
องค์ประกอบของ NTRIP (cr: pix4d.com)

บริการ NTRIP Caster บนคลาวด์แบบพร้อมใช้งาน

บริการบนคลาวด์ในลักษณะ NTRIP Caster ก็มีหลายเจ้าตั้งแต่ใช้ฟรีแบบ Emlid Caster (Free) จนถึงเสียเงินรายเดือนเช่น Emlid Caster (Pro) ตั้งแต่ 199 US$ จนถึง 399 US$ ส่วนคลาวด์รายอื่นได้แก่ YouCORS ซึ่งผมก็ไม่เคยใช้ บริการแบบนี้ไม่ต้อง DIY เพราะทำมาให้เสร็จสรรพ หน้าที่ของผู้ตั้ง RTK Base Station คือสตรีมข้อมูล GNSS ขึ้นคลาวด์อย่างเดียว แล้วคอยเอาเครื่องลูกข่าย (RTK Client) ใช้บริการ

พูดถึงคลาวด์มีบริการร้อยแปดพันประการ แต่แบบ DIY ในที่นี้จะบีบแคบลงคือบริการคล้ายๆเช่าเครื่องคอมพิวเตอร์เสมือน แล้วทำการติดตั้งระบบปฏิบัติการแล้วก็ติดตั้งโปรแกรมพวก NTRIP Caster เนื่องจากต้องทำเอง ออกแรงเอง ทำให้ค่าบริการถูกมาก

บริการบนคลาวด์ด้วยการสร้าง NTRIP Caster แบบ DIY

สำหรับคนเดินถนนเดินดินกินข้าวแกงเบี้ยน้อยหอยน้อยและต้องการค่าบริการที่ถูกลงกว่าสิบกว่าเท่าก็ต้อง DIY เอง หน้าที่ของฝั่งผู้ทำ RTK Base Station คือสตรีมส่งข้อมูลพวก RTCM Message ของ GNSS เช่น MSM4 หรือ MSM7 เข้าไปคลาวด์ โดยที่โปรแกรม NTRIP Caster จะทำหน้าที่สร้างค่าปรับแก้ค่าพิกัดและระดับ เพื่อให้บริการเครื่อง RTK Rover (RTK Client) ที่เข้ามาร้องขอ

เลือกเครื่องรับ GNSS สำหรับ NTRIP Server

ผมเคยใช้ Trimble SPS855 ถือว่าดาวค้างฟ้า เพราะอึด ทนทายาด ตอนซื้อของมีออปชั่นท์เปิดดาวเทียมของจีน (Beidou) พูดง่ายๆคือต้องเสียเงินเพิ่ม ในตอนนี้ผมใช้ CHCNav P5 เนื่องจากบริการที่ทางบริษัทผู้ขายให้บริการภาคหลวงเช่นกรมที่ดินและเอกชนมาอย่างนาน พอจะรับประกันได้ว่าไม่ทิ้งกันแน่นอน ทีมงานขายที่รู้จักกันมาอย่างยาวนานยี่สิบกว่าปีที่ขยันขันแข็งพร้อมจะช่วยเหลือแบบกระโจนใส่ไม่อิดออด (โฆษณาให้ครับ ไม่ได้สักบาท 🙂 )

P5 มีคุณสมบัติทุกอย่างที่ยี่ห้อชั้นนำทั้งหลายมี การสื่อสายผ่านไร้สายได้แก่ บลูทูธ, แลน, ไวไฟ, เซลลูลาร์ (4G) และระบบวิทยุ UHF ส่วนสตอเรจในเครื่องให้มาแบบจุกๆถึง 32 GB สามารถบันทึกข้อมูลพร้อมกันได้หลายแบบถึง 8 อย่าง มีระบบแบตเตอรีที่สามารถทำงานต่อได้ถึงประมาณ 20 ชั่วโมงถ้าไฟฟ้าหลวงดับ และมีเว็บอินเทอร์เฟสที่ใช้งานได้ง่ายสะดวก สามารถดู ติดตาม สถานะของ P5 ได้ง่าย สะดวกมากผ่านเครือข่ายไวไฟหรือสายแลน แต่ถ้าจะให้ดีสายแลนนี้ต่อ P5 เข้ากับเราเตอร์เสถียรที่สุด

CHCNav P5

เลือกคลาวด์ Digitalocean สำหรับ DIY

มีตัวเลือกหลายเจ้า แต่จะขอกล่าวถึงแค่ Digitalocean เนื่องจากมีศูนย์ข้อมูลที่สิงคโปร์ใกล้ประเทศไทย ทำให้การเดินทางของข้อมูล ลดดีเลย์ไม่ต้องผ่านหลายๆทวีปน่าจะเดินทางได้เร็วที่สุด เหตุผลอีกอย่างที่เลือกคือราคาถูกที่สุดสำหรับงาน NTRIP Caster

ผมเลือกบริการที่เรียกว่าดรอปเล็ต (Droplets) ซึ่งมีคุณสมบัติดังนี้

  • เซิร์ฟเวอร์เสมือนจริงที่ทำงานบนระบบปฏิบัติการ Linux ที่ปรับขนาดได้ (ต้องติดตั้งเอง)
  • เป็นแกนหลักของบริการ DigitalOcean ซึ่งสามารถปรับแต่ง CPU, RAM และพื้นที่เก็บข้อมูลได้ตามต้องการ (ตามกำลังของทรัพย์เลือกดีมาก ราคายิ่งสูง)
  • สามารถสร้าง Droplet ได้อย่างรวดเร็วเพื่อใช้เป็นเว็บเซิร์ฟเวอร์, เซิร์ฟเวอร์แอปพลิเคชัน หรือเซิร์ฟเวอร์ทดสอบ

เลือกซอฟท์แวร์ BKG NTRIP Caster (BNC)

นี่อาจจะเป็นส่วนสำคัญที่สุด ถ้าไม่มีซอฟท์แวร์พวกนี้หรือตัวนี้ ผมคงไม่มีโอกาสได้ใช้บริการคลาวด์แบบนี้แน่นอนเนื่องจากไม่มีเงินถุงเงินถัง

BKG Professional NTRIP Caster คือซอฟต์แวร์เซิร์ฟเวอร์แบบโอเพนซอร์สที่พัฒนาโดย BKG (Bundesamt für Kartographie und Geodäsie) ซึ่งเป็นหน่วยงานด้านการทำแผนที่และภูมิศาสตร์ของประเทศเยอรมนี  

สรุปคุณสมบัติเด่นของซอฟต์แวร์ BKG Professional NTRIP Caster: 

  • ใช้โปรโตคอล NTRIP: ใช้โปรโตคอล NTRIP (Networked Transport of RTCM via Internet Protocol) ซึ่งเป็นมาตรฐานในการส่งข้อมูลแก้ไข GNSS แบบเรียลไทม์ผ่านอินเทอร์เน็ต
  • รองรับจำนวนผู้ใช้มาก: สามารถรองรับเครื่องรับ (NTRIP Clients) และสถานีส่ง (NTRIP Servers) ได้จำนวนมากพร้อมกัน
  • รันบนระบบ Linux: ซอฟต์แวร์นี้ทำงานบนระบบปฏิบัติการ Linux
  • เน้นการกระจายข้อมูล: มีวัตถุประสงค์หลักเพื่อกระจายข้อมูลแบบสตรีมมิ่ง ไม่ได้ทำหน้าที่คำนวณตำแหน่งขั้นสูง เช่น Virtual Reference Station (VRS)
  • เป็นโอเพนซอร์ส: ซอฟต์แวร์นี้เป็นแบบโอเพนซอร์ส ภายใต้สัญญาอนุญาต GNU General Public License (GPL) ทำให้สามารถนำไปใช้งานและพัฒนาต่อได้ฟรี 

ซอฟต์แวร์นี้มีบทบาทสำคัญสำหรับระบบ RTK (Real-Time Kinematic) หรือเทคนิคการรังวัดตำแหน่งแบบจลน์แบบเรียลไทม์ ซึ่งช่วยให้เครื่องรับ GNSS สามารถระบุพิกัดได้อย่างแม่นยำในระดับเซนติเมตร โดยเฉพาะในงานสำรวจ งานเกษตรกรรม งานก่อสร้างและงานที่ต้องการความแม่นยำสูง 

เลือกเพื่อนคู่คิดมิตรคู่ตัวสำหรับเดินทาง

ครั้งนี้ผมเลือกเจมิไนรุ่นเบสิค เพราะตั้งแต่รู้ว่า chatGPT เก็บข้อมูลผู้ใช้แบบทุกเม็ด ถึงแม้จะรู้ว่าพวกเซิฟเวอร์ของเอไอพวกนี้เก็บข้อมูลผู้ใช้อาจจะทุกๆเจ้า แต่ openAI นี่ชัดเจนที่สุด ผมเลยขยาดไม่อยากใช้

เจมิไนให้ข้อมูลและแนะนำได้ดี ถ้าเราสามารถป้อนข้อมูลความต้องการของเราให้เขาทราบ เช่นต้องการบริการแบบนี้ ความเสถึยรสูงและถูกที่สุด ซึ่งเขาทำได้ดี ไม่มีการเอนเอียง ยุคนี้เป็นยุคเอไอ บางทีเราไม่ต้องรู้มาก แต่ถ้าสามารถใช้เขาให้เป็น เราก็ได้งานและได้ผลงานที่ดี

เนื่องจากไม่มีการสร้างบทสนทนาใหม่ คุยกันว่ากันยาวเหยียด ทำให้เจมิไนมีอาการเอ๋อเป็นบางครั้ง เนื่องจากเขาไม่ได้ออกแบบให้จำทุกเรื่องที่เราพูดแบบ chatGPT ตอนที่ลงระบบปฎิบัติการลีนุกซ์เสร็จ เขาแนะนำให้ผมลงไพทอน ผมก็ลงตามไม่อิดออดเพราะคิดว่า BNC คงต้องการไพทอน แต่ที่ไหนได้ เขาคิดว่าผมจะลงเพื่อพัฒนาแอพจำพวกเว็บแอพพลิเคชัน พอให้ผมทำอีกสอง สามอย่าง ผมชักเอะใจนี่ไม่ใช่แล้ว ก็เลยถามเขาว่าลงทูลส์ตัวนี้เพื่ออะไร ความเลยแตก

สมัครบริการ Digitalocean

ผมสมัครบริการดิจิทัลโอเชียน (Digitalocean) ด้วยการยืนยันตัวตนผ่านทางแอคเคาท์ GitHub ที่ผมมีอยู่แล้ว การกรอกข้อมูลต่างๆ ด้วยความเป็นมือใหม่ทำให้งง ต้องคอยถามเจมิไน ซึ่งเขาแม่นเหมือนกับอ่านหน้าเว็บพร้อมเรา จึงผ่านได้ไม่ยาก ขั้นตอนที่สำคัญมากคือการสร้าง Public Key ทางดิจิทัลโอเชียนมีคำแนะนำอีกทางคือใช้ Putty ซึ่งผมก็ดาวน์โหลดมาติดตั้ง มีขนาดเล็ก ถ้าติดตั้งแล้วจะมี PuttyGen ติดตั้งมาด้วย ผมเรียกใช้งานและสร้าง Public Key ที่สำคัญคือเราจะต้องป้อน Key Passphrase เพื่อเข้ารหัส Private Key ตัว Public Key นี้เราจะคัดลอกและไปวางให้กับดิจิทัลโอเชียน ส่วนฝั่งเราเก็บรักษาไฟล์ Private Key ไว้ในที่ปลอดภัย คำแนะนำคือไม่ควรจะเก็บไว้ในคลาวด์เช่น onedrive, drive

Puttygen

ผมทำการเซฟไฟล์ Private Key และ Public Key เก็บไว้ในดีฟอลต์ของวินโดส์เครื่องผมอยู่ที่ c:\Users\PBRLaptop\.ssh ถ้าให้ดี Private Key ควรจะชื่อ id_rsa ประมาณนี้

เลือกระบบปฏิบัติการ (Image)

ผมเลือก Linux แล้วเลือก Ubuntu 24.04 เนื่องจากเป็นรุ่น LTS (Long Term Service) เนื่องจากจะได้รับการสนับสนุน อัพเดทแพ็ทช์ในระยะยาวๆ มาถึงตรงนี้ ทางเจมิไนแนะนำว่าต้องใช้ powershell เนื่องจากตอนนี้ผมใช้วินโดส์อยู่ เปิด powershell มาแล้วพิมพ์

เลือกแผนงาน (Plan)

มาถึงขั้นตอนสร้างดรอปเล็ต เจมิไนแนะนำให้เลือกรุ่นที่ถูกที่สุด ด้วยสเป็คที่ต่ำอย่างน่าสงสาร 1 x vCPU (ยอมให้แชร์ไปทำงานอื่นด้วย) แรม 512 MB ขนาดฮาร์ดดิสค์ SSD 10 GB และให้ปริมาณทราฟฟิคข้อมูล 500 GB ต่อเดือน ผมเลือก Fix IP ด้วยเพราะว่าเครื่องลูกข่าย RTK ต้องการ IP Address นี้

ค่าบริการขั้นต่ำสำหรับที่เลือกมาคือ 4 US$ หรือประมาณ 128 บาทต่อเดือน ซึ่งราคานี้ซื้อข้าวกระเพราไก่ไข่ดาวจากร้านข้างทางได้สองจาน (ปี 2568) ก็ทดลองก่อนว่าถ้าตอนใช้งานแล้วมีอาการสะดุดหรือดาวน์ก็ต้องปรับแก้เลือกสเป็คคอมพิวเตอร์ที่สูงขึ้นไปอีกและแน่นอนต้องเพิ่มอัตราค่าบริการต่อเดือนไปด้วย

เลือกศูนย์ข้อมูล

ก็ตามที่ผมบอกไว้ตั้งแต่เริ่มต้นบทความคือเลือกที่สิงคโปร์เพราะศูนย์อยู่เขตเดียวกันกับประเทศไทย ทำให้ลดดีเลย์และเพิ่มประสิทธิภาพ

ตั้งชื่อดรอปเล็ต

ผมตั้งชื่อ “GNSS-CORS” สื่อความหมายว่าทำงานต่อเนื่องแบบ 24/7 ควรเลือกชื่อที่สื่อความหมายเพราะถ้าสร้างโครงการหลายโครงการอาจจะสับสน

ติดตั้ง BNC (BKG NTRIP Caster)

ตอนจะติดตั้ง ถ้าเอาสะดวกเรา ควรจะใช้เทอร์มินอลของเราเองเพื่อความสะดวก แทนที่จะใช้เทอร์มินอลของดิจิทัลโอเชียนเพราะจะต้องเปิดเว็บบราวเซอร์ตลอดซึ่งไม่จำเป็นอย่างนั้นทุกครั้ง เมื่อเปิดเทอร์มินอลแล้วใช้ SSH เพื่อเข้ารหัส

PS C:\Users\PBRNotebook\.ssh> ssh -i Prajuab_Riabroy_SSH_Private_key_openssh pbrobo@146.190.82.149

ผมใส่ -i ไปด้วยเพื่อบอกว่าชื่อไฟล์ Private Key ของผมที่อยู่ที่โฟลเดอร์ .ssh ถ้าเข้าสำเร็จเราจะเข้าเทอร์มินอลที่เป็น Ubuntu ทันที หมายเหตุเทอร์มินอลเป็นรูปที่แคปมาภายหลังหลังจากติดตั้งโปรแกรมและทูลส์ต่างๆมาแล้ว ทำให้เห็นว่าพื้นที่โดนใช้ไปแล้ว 38.1%

เทอร์มินอลของ Ubuntu เมื่อการเชื่อมต่อสำเร็จ

ตอนจะติดตั้ง BNC เจมิไนพยายามเลือกจาก Github ให้แต่ไม่ว่าเขาจะเลือกอะไรก็เฟลล์หมดเพราะว่าโครงการนั้นให้ผมเดาน่าจะเคยฝากไว้ที่ Github ตอนหลังน่าจะถอนว่าไว้ที่เวบไซต์ทางการอย่างเดียว ผมเลยไปดาวน์โหลดไฟล์โปรแกรมจากเวบไซต์ทางการ โดยใช้คำสั่ง git clone ตามด้วยชื่อพาทและไฟล์ที่ทางเวบไซต์โฮสต์ไว้ที่ไดเรคทอรี ftp (ทางเจมิไนบอกว่าเข้าไม่ถึง)

เมื่อโหลดโปรแกรมมาแล้วไฟล์จะอยู่ที่ home ของเรา จะเป็นไฟล์ tar ทำการ untar จะได้ไดเรคทอรีของโปรแกรมต้นฉบับที่เป็นซอร์สโค้ด ตัวอย่างที่เครื่องคอมผม ~\ntripcaster-2.0.47

การคอมไพล์และติดตั้ง BNC

เนื่องจาก BNC ถูกเขียนด้วยภาษาซี ทางผู้พัฒนาได้เตรียมการให้สามารถคอมไพล์ได้ง่ายอยู่แล้ว เริ่มจากคำสั่ง cd ~/ntripcaster-2.0.47 เพื่อเข้าไปในไดเรคทอรีไฟล์โปรแกรมต้นฉบับและคำสั่ง ./configure, make และ make install ซึ่งใช้เวลาไม่นานนักก็ผ่านไปด้วยดี

เมื่อติดตั้งแล้วโปรแกรมจะไปอยู่ที่ไดเรคทอรี /usr/local/ntripcaster ในนั้นจะมีไดเรคทอรีย่อยชื่อ conf สำคัญมากๆ เพราะจะมีไฟล์ต้นแบบ (*.dist) ให้เราทำการกอปปี้เพื่อสร้างสำเนาโดยคงไฟล์ต้นฉบับไว้เหมือนเดิม

ไฟล์ที่สำคัญที่เราต้องไปจัดการมี ntripcaster.conf, users.aut, groups.aut, sourcemounts.aut และ sourcetable.dat ทั้งหมดเป็นไฟล์ที่ copy มาจากต้นฉบับ (ไฟล์ที่คัดลอกมาผมขีดเส้นใต้)

เปรียบเทียบ NTRIP V1.0 vs. NTRIP V2.0

NTRIP เป็นมาตรฐานที่ออกมาสองรุ่นแล้วรุ่นที่ V1.0 นั้นเป็นมาตรฐานเก่ายังมีข้อบกพร่องหลายอย่างแต่ยังสามารถใช้งานได้กับ BNC ส่วนรุ่น V2.0 ต้องเป็นรุ่นที่เราควรต้องใช้เพราะมีการปรับปรุงประสิทธิภาพ ความน่าเชื่อถือและความปลอดภัย

คุณสมบัติNTRIP V1.0 (แบบเดิม)NTRIP V2.0 (แบบใหม่)
โปรโตคอล HTTPอ้างอิงจาก HTTP/1.0อ้างอิงจาก HTTP/1.1
การเชื่อมต่อ (Keep-Alive)ไม่มีคุณสมบัติ Keep-Alive ในตัว การเชื่อมต่อมักจะ หลุด หรือต้องสร้างใหม่บ่อยครั้งรองรับ การเชื่อมต่อแบบต่อเนื่อง (Persistent Connections หรือ Keep-Alive) ทำให้การเชื่อมต่อเสถียรและรวดเร็วยิ่งขึ้น
การบีบอัดข้อมูลไม่รองรับอย่างเป็นทางการ (ไม่มีส่วนหัว (header) เพื่อระบุการบีบอัด)รองรับการ บีบอัดแบบ GZIP อย่างเป็นทางการ โดยใช้ส่วนหัว Ntrip-Compression
การเชื่อมต่อ Caster-to-ServerServer (สถานีฐาน) มักเชื่อมต่อเข้า Caster ผ่าน V1.0รองรับ HTTP/1.1 อย่างเป็นทางการสำหรับการเชื่อมต่อ Caster-to-Server
ข้อมูล Mountpointรายละเอียด Mountpoint เรียบง่ายและมีโครงสร้างน้อยกว่าข้อมูลเมตาของ Mountpoint มีรายละเอียดมากขึ้น และมีโครงสร้าง (เช่น รวม ID เครือข่าย, จำนวน Client ทั้งหมด, เวอร์ชันของรูปแบบข้อมูล)
ความปลอดภัย (SSL/TLS)ไม่มีการรองรับมาตรฐาน ในโปรโตคอลรองรับการเชื่อมต่อ SSL/TLS (HTTPS) อย่างสมบูรณ์ ซึ่งมักจะผ่านพอร์ต 443 (หรือพอร์ตที่ปลอดภัย เช่น 2102)

ความสำคัญของไฟล์หลักใน NTRIP Caster

ต่อไปจะอธิบายไฟล์คอนฟิกหลักและไฟล์ที่เกี่ยวกับความปลอดภัย *.aut และไฟล์ sourcetable.dat ว่าไฟล์เหล่านี้เป็นส่วนประกอบสำคัญที่กำหนดวิธีการทำงาน การรักษาความปลอดภัย และการจัดการข้อมูลของ NTRIP Caster (เช่น โปรแกรม BNC)

1. ntripcaster.conf

ไฟล์ความสำคัญ (The Importance)
ntripcaster.confไฟล์ตั้งค่าหลัก (Main Configuration File) เป็นไฟล์ที่กำหนดการตั้งค่าพื้นฐานทั้งหมดของ Caster Server เช่น พอร์ต (Port) ที่ใช้ในการรับส่งข้อมูล และที่สำคัญที่สุดคือ เส้นทางไปยังไฟล์ผู้ใช้งานและไฟล์ Mountpoint อื่นๆ หากไฟล์นี้มีข้อผิดพลาด Caster Server จะไม่สามารถทำงานได้
location ITD-Airport, Rayong
name prajuabRiabroy
url http://163.47.11.26:2101
rp_email priabroy@live.com
operator pbr
operator_url https://www.priabroy.name

max_clients 1000
max_clients_per_source 1000
max_sources 40
max_admins 2
throttle 2000.0

max_ip_connections 1000

# This password for NTRIP Server (software/GNSS).
encoder_password "Super_strong_password#@!"
# This password grants full control over the Caster! USE A STRONG, UNIQUE PASSWORD.
admin password "SuperSecretAdminPassword30+Characters$"
# This password grants lower-level operator access. USE A STRONG PASSWORD.
oper password "AnotherStrongPassword16+Chars#"

server_name 163.47.11.26
port 8001
port 2101

sourcetablefile /usr/local/ntripcaster/conf/sourcetable.dat

logfilename ntripcaster
usagefilename usage
logdir /usr/local/ntripcaster/logs
logfiledebuglevel 0
watchfilename /usr/local/ntripcaster/var/watchdog.check
pidfilename /usr/local/ntripcaster/var/caster.pid

templatedir /usr/local/ntripcaster/templates

console_mode 3

reverse_lookups 0

acl_policy 1

sourcetable_via_udp 0

2. groups.aut และ users.aut

ไฟล์เหล่านี้ควบคุมการเข้าถึงและการตรวจสอบสิทธิ์ผู้ใช้งาน (Authentication) เพื่อความปลอดภัยของข้อมูล

ไฟล์ความสำคัญ (The Importance)
groups.autไฟล์การตรวจสอบสิทธิ์กลุ่ม (Group Authentication) กำหนดกลุ่มผู้ใช้งานและสิทธิ์การเข้าถึง (Permissions) ต่างๆ ที่จะนำไปใช้กับ Source Mount แต่ละตัว
users.autไฟล์การตรวจสอบสิทธิ์ผู้ใช้งาน (User Authentication) กำหนดรายชื่อ Username และ Password ของผู้ใช้งานที่ได้รับอนุญาตให้เชื่อมต่อกับ Caster Server โดยมักจะลิงก์กับสิทธิ์ที่กำหนดในไฟล์ groups.aut
#users.aut
# Username;Password;Group;Max_Connections;Validity(YYYY-MM-DD)
rover01;pass001;field;1;2032-12-31
rover02;pass002;field;1;2032-12-31
rover03;pass003;field;1;2032-12-31
rover04;pass004;field;1;2032-12-31
rover05;pass005;field;1;2032-12-31
rover06;pass006;field;1;2032-12-31
rover07;pass007;field;1;2032-12-31

# groups.aut

# Group;Mountpoint1,Mountpoint2,Mountpoint3
# The 'field' group can only access the primary base station
field;YOUR_RTK_STATION
# The 'machine' group can access the primary base and a backup stream (if it exists)
machine;YOUR_RTK_STATION

3. sourcemounts.aut

ไฟล์ความสำคัญ (The Importance)
sourcemounts.autไฟล์ควบคุมการรับข้อมูลจาก Base Station (Source Authentication) กำหนดรายชื่อและรหัสผ่าน (Password) ของ Source/Base Station ที่ได้รับอนุญาตให้ส่งข้อมูลเข้าสู่ Caster (เช่น ข้อมูลดิบจาก CHCNAV P5) หากไม่มีไฟล์นี้ หรือข้อมูลไม่ตรงกัน Base Station จะไม่สามารถเผยแพร่ข้อมูลได้
# sourcemounts.aut
#
# This is the authentication file for NTRIP Servers (Base Stations)
# pushing data to the Caster.
# Format: MountpointName;Password
#

YOUR_RTK_STATION;your_strong_password

4. sourcetable.dat

ไฟล์ความสำคัญ (The Importance)
sourcetable.datไฟล์ตารางแหล่งข้อมูล (Source Table Data) เป็น ตารางข้อมูลที่แสดงให้ผู้ใช้งานเห็น เมื่อผู้ใช้งาน (Rover) เชื่อมต่อกับ Caster ไฟล์นี้จะบรรจุรายละเอียดสำคัญของแต่ละ Mountpoint (เช่น ชื่อ Mountpoint ความถี่ของสัญญาณที่ใช้, พิกัดของสถานี (Latitude, Longitude, Ellipsoid \ Height ) เพื่อให้ผู้ใช้งานทราบว่ากำลังจะรับข้อมูลจากสถานีใด
CAS;163.47.11.26;8001;YOUR_RTK_STATION;PBR;0;THA;12.71;101.01;Custom RTK Caster
STR;YOUR_RTK_STATION;RAYONG;CASTER_Project;THA;12.708019708333;101.00972162222;Singapore;RTCM 3.3;AnyReceiver;RTK;1;CasterBase;none;none;no;0;163.47.11.26;2.0;;Yes;http://163.47.11.26:8001;1
ENDSOURCETABLE

สรุป: ไฟล์ *.aut ทั้งสามไฟล์ (groups, users, sourcemounts) จัดการเรื่องความปลอดภัยและการเข้าถึง ส่วนไฟล์ ntripcaster.conf คือการตั้งค่าพื้นฐาน และ sourcetable.dat คือข้อมูลสาธารณะที่ประกาศให้ผู้ใช้เห็นหรือพูดง่ายๆคือเป็น Metadata

🚀 ขั้นตอนการเริ่มต้น NTRIP Daemon (BNC) ครั้งแรก

โดยทั่วไปแล้ว NTRIP Daemon จะถูกรันบนระบบปฏิบัติการ Linux หรือผ่านทางหน้าต่างคำสั่ง (Command Line)

1. การตั้งค่าเริ่มต้น (Initial Setup)

ก่อนจะรันโปรแกรม ต้องมั่นใจว่าไฟล์การตั้งค่าที่สำคัญทั้งหมดอยู่ในตำแหน่งที่ถูกต้อง (ในเคสของผมอยู่ที่ /usr/local/ntripcaster/conf) และได้รับการแก้ไขเรียบร้อยแล้ว โดยเฉพาะ:

  • ntripcaster.conf: กำหนด Port และที่อยู่ของไฟล์อื่นๆ
  • users.aut และ sourcemounts.aut: มีการกำหนด Username/Password สำหรับผู้ใช้งานและสำหรับ Base Station (เช่นในเคสผมใช้ CHCNav P5)

2. คำสั่งพื้นฐานในการเริ่มต้น

สมมติว่าอยู่ในไดเรกทอรี (Directory) ที่ติดตั้ง BNC ไว้ คำสั่งพื้นฐานที่ใช้ในการเริ่มต้น BNC คือการเรียกใช้ไฟล์ปฏิบัติการของโปรแกรม (executable file)

คำสั่ง (Command)คำอธิบาย (Description)
./ntripdaemonนี่คือคำสั่งมาตรฐานที่ใช้เรียกโปรแกรม NTRIP Daemon ขึ้นมาทำงาน หากติดตั้งไฟล์ไว้ในไดเรกทอรีปัจจุบัน (current directory)

3. การรันในพื้นหลัง (Running in Background – แนะนำ)

โดยปกติแล้ว เราไม่ต้องการให้ NTRIP Caster หยุดทำงานเมื่อปิดหน้าต่างคำสั่ง (Terminal) ดังนั้นจึงควรใช้คำสั่งที่สั่งให้โปรแกรมทำงานในพื้นหลัง (Daemonize)

คำสั่ง (Command)คำอธิบาย (Description)
./ntripdaemon -dใช้ -d (ย่อมาจาก daemon) เป็นตัวเลือกเสริม (option) เพื่อให้โปรแกรม BNC ทำงานในลักษณะของ Daemon คือทำงานต่อเนื่องไปในพื้นหลังของระบบ แม้จะออกจากระบบไปแล้ว

4. การดูสถานะและบันทึก (Checking Status and Logs)

หลังจากรันด้วยคำสั่งข้างต้นแล้ว BNC จะเริ่มทำงานและบันทึกข้อมูลการทำงานลงในไฟล์ Log (ตามที่กำหนดใน ntripcaster.conf)

คำสั่ง (Command)คำอธิบาย (Description)
tail -f /path/to/bnc.logใช้คำสั่งนี้เพื่อ ดูข้อมูลการทำงานแบบเรียลไทม์ (real-time log) เพื่อตรวจสอบว่า Base Station (เช่นในกรณีผมใช้ CHCNav P5) เชื่อมต่อและเริ่มส่งข้อมูลเข้ามายัง Caster ได้สำเร็จหรือไม่

สรุปการเริ่มต้น:

ให้ใช้คำสั่ง: ./ntripdaemon -d แล้วจึงตรวจสอบสถานะด้วยไฟล์ log

🛠️ ขั้นตอนการตั้งค่า CHCNav P5 ผ่าน Web Interface

1. การเชื่อมต่อและการเข้าสู่ระบบ (Connect & Login)

ลำดับขั้นตอนเมนูหลักที่เกี่ยวข้อง
1.1เชื่อมต่อเครือข่ายเชื่อมต่อ PC เข้ากับ P5 ผ่าน LAN Wi-Fi
1.2กำหนด IPตรวจสอบและกำหนดค่า IP Address ในเมนู Network Set หากจำเป็น
1.3เข้าสู่ระบบเปิดเบราว์เซอร์ ป้อน IP Address ของ P5 และเข้าสู่ระบบด้วย Username/Password

2. การกำหนดค่าสถานีอ้างอิงและเสาอากาศ (Reference Station & Antenna)

ขั้นตอนนี้สำคัญที่สุดในการป้อนพิกัด

ลำดับขั้นตอนเมนูหลักที่เกี่ยวข้อง
2.1กำหนดค่าพื้นฐานของ Baseไปที่เมนู Receiver Configuration -> Reference Station Settings เพื่อตั้งค่า
2.2ป้อนพิกัดหลักในเมนู Receiver Configuration -> Reference Station Settings ให้ป้อนค่า Latitude และ Longitude ที่ถูกต้องของ ARP
2.3ป้อนความสูง (h)ป้อนค่า Ellipsoid Height (h) ที่คำนวณไว้ (Leveling -> Geoid ->Ellipsoid) ลงในช่องความสูงที่ถูกต้อง
2.4กำหนดเสาอากาศไปที่เมนู Receiver Configuration -> Antenna Configuration
2.5เลือกชนิดเสาอากาศเลือก CHC Nav AT312 หรือรุ่นที่ถูกต้องจากรายการ
2.6ป้อนความสูงเสาอากาศป้อน ความสูงทางกายภาพ ที่วัดจากหมุดถึง ARP (Measured Height) (หมายเหตุ: P5 จะนำค่านี้ไปรวมกับค่า PCO เองโดยอัตโนมัติ)

3. การตั้งค่าการส่งข้อมูล NTRIP PUSH (NTRIP Service Setup)

ในเมื่อ P5 ถูกออกแบบมาให้ทำหน้าที่เป็น Base ที่ PUSH ข้อมูลไปยัง Caster ภายนอก (BNC) ขั้นตอนนี้จึงอยู่ในส่วน I/O Setting

ลำดับขั้นตอนเมนูหลักที่เกี่ยวข้อง
3.1ตั้งค่าพอร์ตการส่งข้อมูลไปที่เมนู I/O Setting
3.2กำหนดการส่งออกเลือก Port ที่คุณต้องการใช้งาน ตัวอย่าง 2101
3.3ระบุ Caster (BNC)ป้อน IP Address และ Port ของ NTRIP Caster (BNC) ที่ติดตั้งไว้
3.4กำหนด Mountpointกำหนดชื่อ Mountpoint (เช่น MYBASE) และ Password ให้ตรงกับที่กำหนดไว้ในไฟล์ sourcemounts.aut ของ BNC
3.5เลือก RTCM Messagesเลือก RTCM Message ซึ่งการเลือกจะเป็นการเลือกรุ่นเช่น RTCM 3.2

4. การจัดการข้อมูลและการบันทึก (Data Recording & Logs)

หัวข้อนี้สำหรับการ log ข้อมูลในการรังวัด Static เท่านั้น ไม่เกี่ยวข้องกับ NTRIP Caster

ลำดับขั้นตอนเมนูหลักที่เกี่ยวข้อง
4.1ตั้งค่าการบันทึก RINEXไปที่เมนู Data Recording
> Log Settings เพื่อตั้งค่า Logging Rate (เช่น 1s) และ (File formatRINEX)
4.2ตั้งค่า Push(ตัวเลือกเสริม) ไปที่ Data Recording -> FTP Push Settings หากต้องการให้ P5 ส่งไฟล์ RINEX ไปยังเซิร์ฟเวอร์สำรองโดยอัตโนมัติ
4.3ตรวจสอบสถานะใช้เมนู Status และ Satellites เพื่อตรวจสอบความเสถียรของสัญญาณ (Signal-to-Noise Ratio) และการล็อกดาวเทียมก่อนเริ่มใช้งานจริง

วิธีการวัดความสูงของ Antenna

ถ้าตามคู่มือควรจะป้อนข้อมูลตามตารางที่วางไว้ข้างต้น แต่สิ่งที่ web interface ของ CHCNav ไม่เคลียร์คือการชนิดการวัดความสูงของ Antenna ผมเลือกใช้ Antenna Phase Center โดยผมวัดความสูงมาถึง ARP คือ Bottom of Antenna Mount แล้วคำนวณหาค่าความสูงเป็น Ellipsoid height (h) จากสูตร h = H + N ; ค่า N คือความสูงยีออยด์ คำนวณได้จาก TGM2017, H (Orthometric height)

วิธีการทำจะเดินระดับมาที่หมุดที่อยู่ใต้ Antenna จากนั้นผมจะต้องบวกความสูง HI ในเคสผม Antenna ตั้งอยู่บนหลังคาตึก จะต้องมีการวัดแนวดิ่งด้วยเทปเหล็ก (หลักการเดียวกันกับดึงค่าระดับไปหัวเสา (Pier Column) จากนั้นจะบวกค่า Phase Center Offset (PCO) เพื่อเป็นความสูงของ Antenna Phase Center (APC)

ค่าระดับ APC = ระดับของหมุด + HI + PCO

สถานีฐานชั่วคราว (RTK Base Station) และการวัดความสูง

การเลือก Phase Center Offset

ปัญหาคือจานที่ผมใช้คือ AT312 มันจะมีค่า PCO สองค่าคือ L1 offset 59.8mm ส่วนอีกค่าคือ L2 offset 49.8mm ซึ่งจากความรู้ที่ได้คือต้องใช้ L1 offset ด้วยเหตุผลนี้ (วานผู้รู้จริงข่วยไขความกระจ่างอีกทีด้วยครับ)

  • Single-Frequency Reference (จุดอ้างอิงความถี่เดียว): ความถี่ L1 เป็นสัญญาณที่เก่าแก่ที่สุดและถูกติดตามได้อย่างสม่ำเสมอที่สุดในกลุ่มดาวเทียมนำหนทั่วโลกทั้งหมด (GPS, GLONASS, Galileo, BeiDou และอื่น ๆ) ในการกำหนดค่าพิกัดเดี่ยวและคงที่เพื่อเป็นตัวแทนตำแหน่งของสถานีฐานสำหรับข้อมูลการสังเกตการณ์ทุกประเภท phase center ของ L1 จึงทำหน้าที่เป็นจุดอ้างอิงทางเรขาคณิตเป็นหลัก
  • Rover’s Initial Fix (การหาค่าแก้เริ่มต้นของตัวรับเคลื่อนที่): ถึงแม้ว่าเครื่องรับ (Rover) จะติดตามหลายความถี่ (L1, L2, L5 และอื่น ๆ) แต่กระบวนการเริ่มต้นในการหาตัวเลขปริศนา (ambiguity resolution) หรือ การหาค่าแก้แบบ RTK มักจะอาศัยสัญญาณ L1 เป็นหลัก เนื่องจากมีแบนด์วิธและความเสถียรสูง ดังนั้น ตำแหน่งที่สถานีฐานจึงถูกอ้างอิงถึงจุดเดียวกันนี้

เปิดใช้งาน NTRIP Caster

และแล้วก็มาถึงตอนสำคัญ เป็นการสั่งให้ NTRIP Caster ในเคสผมก็คือสั่งให้ BKG ทำงาน รับข้อมูลจาก GNSS ในรูปแบบ RTCM แล้วคำนวณหาค่าปรับแก้ (correction) จากนั้นรอคอยเครื่องลูกเครือข่าย (Rover) ร้องขอเข้ามา คำสั่งบนอูบุนตู้ที่สั่งให้ทำงานคือ คำสั่งแรกจะเป็นการฆ่า ntripdaemon ที่ทำงาน background คำสั่งที่สองคือคำสั่งให้ ntripdaemon ทำงานโดยการเรียกไฟล์คอนฟิก ntripcaster.conf ที่ผมตั้งไว้ข้างต้น

pbrobo@ubuntu-s-1vcpu-512mb-10gb-sgp1-01:/usr/local/ntripcaster$ sudo killall ntripdaemon

pbrobo@ubuntu-s-1vcpu-512mb-10gb-sgp1-01:/usr/local/ntripcaster$sudo sbin/ntripdaemon -c conf/ntripcaster.conf

ดูสถานะการทำงานของ NTRIP Caster

การทำงานของ NTRIP Caster ที่ใช้ทรัพยากรน้อยดั่งเช่นสเป็คคอมที่ผมกล่าวไปข้างต้นที่ แรมแค่ 512MB ซึ่งแรมของ Raspberry PI สมัยนี้ยังมากกว่าเลย คือมันน้อยมาก ดังนั้นผู้ออกแบบ NTRIP Caster จะเน้นให้โปรแกรมทำงานของตัวเองเท่านั้น ไม่ทำอย่างอื่นที่ไม่จำเป็น ดังนั้นการดูสถานะเหมือนจะให้ดูได้แค่เบื้องต้น การดูสถานะจะดูที่เวบบราวเซอร์ อย่างของผมดูได้ที่ http://163.47.11.26:8001/admin

สถานะของ NTRIP Caster

เมื่อคลิกที่ sourcetable จะต้องเห็นบรรทัดที่ตัวหนังสือสีดำเท่านั้นที่ถือว่าเปิดใช้งานแล้ว สังเกตว่า mount point ผมชื่อ RW2_RTK_STATION

CAS;163.47.11.26;8001;RW2_RTK_STATION;PBR;0;THA;12.71;101.01;Custom RTK Caster
STR;RW2_RTK_STATION;RAYONG;CASTER_Project;THA;12.708019708333;101.00972162222;Singapore;RTCM 3.3;AnyReceiver;RTK;1;CasterBase;none;none;no;0;163.47.11.26;2.0;;Yes;http://163.47.11.26:8001;1
ENDSOURCETABLE

เชื่อมต่อเครื่องลูกข่าย

สุดท้ายสิ่งที่เราต้องการคือใช้เครื่องลูกข่ายหรือโรเวอร์ไปทำงานหน้างาน เครื่องลูกข่ายอาจจะเป็นเครื่องที่ติดไว้กับรถการเกษตร รถไถดิน หรือถ้าเป็นก่อสร้างจะเป็นลักษณะเป็นเครื่องต่อกับโพล แล้วช่างสำรวจจะถือเดินไปให้ตำแหน่งก่อสร้าง (Staking) หรือเก็บโทโป

ผมลองใช้เครื่องโรเวอร์ของ Emlid M2 ผ่านแอพ Emlid Flow และสถานะจะต้องเป็น “Fix” ถึงสามารถใช้งานได้ ในงานก่อสร้างช่างสำรวจจะต้องหมั่นสังเกตค่านี้ ถ้า “Float” เมื่อไหร่ให้หยุดทันที


การทดสอบกับหมุดของโครงการ

ทีมงานผมได้ทดสอบกับหมุดหลักของโครงการจำนวนหกหมุด ได้ผลเป็นที่น่าพอใจ ค่าระดับดูเหมือนว่าจะดีกว่าค่าพิกัดเล็กน้อย ในทางทฤษฏีค่าควรจะแย่กว่า

ทดสอบหาค่า error จากหมุดหลักของโครงการ

ยุคคลาวด์ได้ผ่านมาแล้ว ตอนนี้ถึงยุค AI บางทีเราใช้คลาวด์และ AI โดยไม่รู้ตัว ถ้าศึกษาหาความรู้ก็จะได้ประสบการณ์ที่สามารถนำไปใช้ในชีวิตประจำวันได้ คือสามารถเอาไปทำงานให้ได้ผลผลิต ยุคนี้ทางเลือกมีมากเพียงแต่เราต้องศึกษาและเลือกใช้ของดี ราคาถูกก็ย่อมเป็นไปได้ ฉบับนี้ว่ากันยาวเหยียดไม่เบรคเพราะต้องการให้บทความจบในตอนเดียว โปรดติดตามตอนหน้าครับ

2 thoughts on “สร้าง NTRIP Caster ด้วย BNC บนคลาวด์แบบ DIY สำหรับ RTK Base Station ใช้ CHCNav P5”

  1. เคยลองทำแต่ไปต่อไม่ไหวครับ ยากเกินไปสำหรับผม

    1. จุดสลบถ้าระบบนี้มันอยู่ที่ต้องมีพื้นความรู้ Linux มาบ้างครับ

Leave a Reply to Prasong Juntrpraisee Cancel reply

Your email address will not be published. Required fields are marked *