โดรน SAR DIY ทำแผนที่ความสูงด้วย InSAR ได้อย่างไร?
Synthetic Aperture Radar หรือ SAR ไม่ได้ต้องการแค่เรดาร์ที่ดี แต่ยังต้องรู้ตำแหน่งของเรดาร์ขณะเคลื่อนที่ให้แม่นมากด้วย และเมื่อขยับจาก SAR ธรรมดาไปสู่ Interferometric SAR หรือ InSAR ความคลาดเคลื่อนระดับเพียงไม่กี่เซนติเมตร ก็สามารถทำให้ Phase ระหว่างภาพสองเที่ยวบินไม่ตรงกัน จนผลวัดความสูงเสียได้
Henrik Forsten จึงใช้เวลาราวหนึ่งปีครึ่ง ปรับทั้ง Hardware และ Software ของ SAR Drone เดิม: เพิ่ม RTK/PPK Positioning, ปรับ PLL ของ FMCW Radar, ทำ Lossless Compression บน FPGA, เขียน Ground Control Software ใหม่ และพัฒนา Residual Motion Estimation เพื่อให้โดรน DIY สามารถสร้าง Interferogram และ Digital Elevation Model จากการบินหลาย Pass ได้
- ระบบนี้เป็น FMCW SAR Drone ที่พัฒนาต่อจาก Project เดิมของผู้สร้าง
- RTK GPS ลด Position Error ในการทดสอบจากระดับประมาณ 1 m เหลือประมาณ 2 cm
- ผู้สร้างยังใช้ PPK เพื่อปรับ Position Solution แบบ Offline
- PLL Loop Filter ที่ไม่เหมาะสร้าง Integer Boundary Spur และ Artifact ใน SAR Image ได้
- ADC ให้ Raw Data 75 MB/s แต่ SD Interface ใช้งานจริงได้ประมาณ 20 MB/s
- จึงสร้าง Lossless Nibble Compression และย้าย Compressor ไปทำบน FPGA
- Repeat-pass InSAR ใช้ Phase Difference ระหว่างการบินสอง Pass เพื่อคำนวณความสูง
- Processing Pipeline ใช้ GPGA, Backprojection, RME, Interferogram และ Phase Unwrapping
- Mean Coherence ใน Mission หลักดีขึ้นจาก 0.210 เป็น 0.453 หลัง Autofocus + RME
- Processing Code ส่วน SAR อยู่ใน Open-source Project ชื่อ torchbp
จาก SAR Drone เดิม สู่ Interferometric SAR
ผู้สร้างไม่ได้เปลี่ยน Radar และ Drone ทั้งชุด แต่เลือกพัฒนาระบบเดิมทีละส่วน เพราะ Hardware ปัจจุบันยังมีพื้นที่ให้ปรับปรุงได้อีกมาก
Upgrade หลักแบ่งได้เป็น 4 กลุ่ม:
Non-RTK GPS → RTK + PPK
PLL Loop Filter / Spur Reduction
Lossless FPGA Compression
GPGA + RME + InSAR + DEM
InSAR คืออะไรแบบไม่ต้องเริ่มจากสมการยาว?
SAR ปกติจาก Linear Track เดียว ให้ข้อมูลระยะและตำแหน่งบนภาพได้ดี แต่การ Solve ความสูงของ Target ต้องมีข้อมูลเพิ่ม เช่น Reference DEM หรือ Measurement จากอีกตำแหน่งหนึ่ง
InSAR ใช้ Phase ของ Radar Return จากสอง Pass ที่มี Geometry ต่างกัน แล้วดู Phase Difference เพื่ออนุมานความต่างของระยะทางและ Elevation
Phase ไวต่อระยะมาก: ระยะเปลี่ยนเพียงครึ่ง Wavelength ก็ทำให้ Phase เปลี่ยนครบรอบ 360 องศา แต่ข้อเสียคือ Phase วัดได้แบบ Modulo 360° จึงต้องผ่านขั้นตอน Phase Unwrapping ก่อนแปลงเป็น Elevation
ทำไม GPS ปกติระดับเมตรไม่พอ?
ระบบเดิมใช้ Non-RTK GPS ที่ Creator เปรียบเทียบว่ามี Error ระดับประมาณ 1 m ซึ่งมากเกินไปสำหรับ SAR โดยตรง และต้องใช้ Autofocus Algorithm ช่วยแก้หนักมาก
RTK GPS ใช้ Receiver สองฝั่ง:
- Base Station — อยู่กับที่และมีตำแหน่งอ้างอิง
- Rover — อยู่บน Drone
Base ส่ง RTCM Correction พร้อมข้อมูลที่เกี่ยวข้องกับ Satellite Signal ให้ Rover ทำให้ Position Solution ของ Project นี้ ดีขึ้นเป็นระดับประมาณ 2 cm
RTK แล้วยังต้อง PPK ทำไม?
RTK ต้องส่ง Correction แบบ Real-time และ Rover Solve ตำแหน่งขณะทำงาน
แต่ SAR Image ของ Project นี้ ถูกประมวลผล Offline อยู่แล้ว จึงสามารถใช้ PPK ซึ่งเก็บ Raw GNSS Data จากทั้ง Base และ Rover แล้วคำนวณ Position ภายหลัง
ข้อดีคือ Solver สามารถใช้ข้อมูล จากช่วงเวลาทั้งก่อนและหลังตำแหน่งที่กำลัง Solve และยังช่วยกู้ Measurement ในกรณีที่ RTK Correction Link มีปัญหาชั่วคราว
Creator ระบุว่าเมื่อ RTK ทำงานดีอยู่แล้ว PPK ปรับ Position เพิ่มเล็กน้อย: ต่างราว 1 cm ใน XY และมากกว่าใน Z แต่ Image Quality ต่างกันเพียงเล็กน้อย
ArduPilot Raw GPS Logging เจออะไร?
GPS บน Drone เชื่อมกับ Flight Controller และ Position/Timing ถูกส่งต่อไปยัง Radar
Creator ทดลองใช้ GPS Raw Data Logging ของ ArduPilot สำหรับ PPK แต่ Version ที่ใช้อยู่ตอนพัฒนามีปัญหา เช่น:
- Buffer รองรับ Satellite Measurement ได้เพียง 32 รายการ
- Measurement ที่มี Satellite มากกว่านั้นถูก Drop
- Signal ID / Frequency Band ไม่ถูก Log ทำให้ Phase Solving ใช้งานไม่ได้
เขาแก้ปัญหาเหล่านี้ และส่ง Pull Request กลับไปยัง ArduPilot
RTCM Correction ก็มี Bandwidth Bottleneck ได้
ช่วงแรก Creator ส่ง RTCM Corrections ผ่าน ExpressLRS ใน MAVLink Mode แต่ Correction Data ใช้ Bandwidth มากกว่าที่ Link รองรับ จึงเกิด Packet Drop
RC Command ยังทำงานได้ เพราะมี Priority สูงกว่า แต่ RTK Fix Quality ได้รับผล
วิธีแก้คือสร้าง RTCM Server ของตัวเอง ที่จำกัด Bandwidth เพื่อไม่ให้ Telemetry Link อิ่ม
PLL ทำไมสร้าง Artifact ในภาพ Radar ได้?
FMCW Radar ส่ง Linear Frequency Sweep และ Radar ของ Creator ใช้ PLL สร้าง Sweep นี้
Loop Filter เดิมมี Bandwidth กว้างเกินไป ขณะที่ Charge Pump Current ตั้งต่ำเกิน ทำให้เกิด Instability และ Spur
Integer Boundary Spur หรือ IBS
เมื่อ PLL Sweep ผ่าน Integer Multiple ของ Reference Frequency สามารถเกิด Spur ที่แรงขึ้นได้ ถ้า Loop Filter ตั้งไม่เหมาะ
Impulse สั้นแต่ Wideband เหล่านี้ สะสมใน SAR Image จนเห็นเป็นเส้น Artifact
Loop bandwidth ประมาณ 60 kHz
Phase margin ประมาณ 55°
ADC 75 MB/s แต่ SD รับได้ราว 20 MB/s แก้ยังไง?
| จุดในระบบ | ค่าที่ Source ระบุ |
|---|---|
| ADC Sample Rate | 50 MSPS |
| ADC Resolution | 12-bit |
| Raw Data Rate | 75 MB/s |
| SD Interface Theoretical | 25 MB/s |
| SD Practical | ประมาณ 20 MB/s |
เดิม Creator เก็บ Data ลง EMMC ก่อน แล้วหลัง Measurement ค่อย Copy ไป SD
Measurement ประมาณ 1 นาที อาจต้องรอ Copy อีกราว 3 นาที ทำให้ Workflow ช้ามาก
แทนที่จะทำ PCB ใหม่ เขาเลือกแก้ด้วย Data Compression
Custom Lossless Compression ทำงานอย่างไร?
FMCW Signal ใน Time Domain ค่อนข้าง Smooth เพราะ Return ระยะใกล้ มี Amplitude สูงกว่าส่วนความถี่ที่แทนระยะไกล
Creator จึงใช้แนวคิด:
- คำนวณ Difference ระหว่าง Sample ติดกัน
- ทำ Zigzag Encoding เพื่อเปลี่ยน Signed Value เป็น Positive Value
- ใช้ Code สั้นสำหรับ Delta เล็ก
- ใช้ Code ยาวขึ้นเฉพาะ Delta ที่ใหญ่
ใน Measurement ตัวอย่างหนึ่ง:
- 79% ของ Sample ใช้ 1-nibble code
- 20% ใช้ 3-nibble code
- เพียง 0.004% ใช้ 5-nibble code
| Method | Compression Ratio | Bits / Sample |
|---|---|---|
| FLAC | 2.8× | 4.5 |
| Rice | 2.7× | 4.8 |
| Nibble | 2.3× | 5.7 |
| zstandard | 2.1× | 6.1 |
| gzip | 2.0× | 6.5 |
ทำไม Compressor ต้องอยู่ใน FPGA?
ARM Core ใน Zynq SoC ของระบบนี้ รันที่ 667 MHz แต่ Creator พบว่า แม้ Algorithm จะง่าย CPU ก็ยังประมวลผล ADC Stream แบบ Real-time ไม่ทัน
เขาจึง Implement Compressor ใน Programmable Logic ของ FPGA
Implementation ของ Creator ประมวลผลได้ประมาณ 3 Samples ต่อ Clock Cycle และเมื่อรวม Compression กับ 2× Decimation Data Rate สามารถลดลงจนเขียน SD ได้ง่ายขึ้น
Custom Ground Control Software ช่วยอะไร?
เดิม Creator ใช้ Mission Planner แต่บน Linux เจอทั้งเรื่อง Mono, Performance, Crash และ Workflow สร้าง Radar Mission ที่ยุ่งยาก
จึงเขียน Ground Control Software ที่ออกแบบสำหรับ SAR โดยเฉพาะ
- สร้าง Linear SAR Mission
- สร้าง Circular SAR Mission
- สร้าง Interferometric SAR Mission
- ตั้ง Sweep Length
- ตั้ง PRF
- เลือก Polarization
- ดู Radar Status แบบ Real-time
- Upload RTCM Correction
- Save Base Station Log
- จัดการ Telemetry Bandwidth
- ปรับ ArduPilot Parameters
- Download Autopilot Logs
- ดู Drone Location และ Telemetry
Processing Pipeline จาก Raw Radar ไปเป็น DEM
- GPGA Autofocus: Focus แต่ละ Pass แยกกัน
- Backprojection: สร้างภาพบน Flat Ground Plane หรือ Reference DEM
- Grid Alignment: Interpolate ภาพให้ตรง Grid เดียวกัน
- Residual Motion Estimation: แก้ Phase Error ที่ยังเหลือระหว่าง Pass
- Interferogram: สร้าง Phase Difference ระหว่างภาพ
- Filtering: ลด Noise ตามความเหมาะสม
- Phase Unwrapping: Creator ใช้ SNAPHU
- Elevation: แปลง Unwrapped Phase ไปเป็น DEM
หากมี Reference DEM Backprojection สามารถใช้ Surface นั้นเป็น Reference ทำให้ Phase ที่เหลือแสดงความต่าง ระหว่าง Measurement กับ Reference ซึ่งช่วยให้ Unwrap ง่ายขึ้น
RME ช่วย Coherence ได้แค่ไหน?
ปัญหาของ InSAR คือ ภาพ Amplitude สอง Pass อาจดูคล้ายกันมาก แต่ Phase Error เพียงเล็กน้อย ก็ทำให้ Interferogram แย่ลงได้มาก
Creator จึงพัฒนา Residual Motion Estimation จากแนวคิด Generalized Phase Gradient เพื่อ Align Phase History ระหว่าง Pass
Creator ระบุว่า Method นี้ เป็นแนวทางใหม่ตามความรู้ของเขา จึงควรตีความเป็น Claim ของผู้พัฒนา ไม่ใช่ข้อสรุปว่าเป็น Algorithm แรกที่ผ่าน Peer Review แล้ว
| Processing | Mean Coherence |
|---|---|
| No Autofocus / No RME | 0.210 |
| Autofocus | 0.297 |
| Autofocus + RME | 0.453 |
| Autofocus + RME + Reference DEM | 0.468 |
Flight Mission ถูกวางแผนยังไง?
Drone บิน Measurement แบบอัตโนมัติ ผ่าน Mission ที่สร้างจาก Custom Ground Control
| Parameter | ค่าที่ Creator ใช้ |
|---|---|
| Transit Speed Limit | 10 m/s เพื่อ Safety |
| SAR Capture Speed | 5 m/s |
| Pass Direction | บินทิศเดียวกัน |
| Vertical Baseline | 1 m |
Capture ที่ 5 m/s ช่วยให้เก็บ Measurement ได้มากขึ้นต่อระยะทาง เมื่อเทียบกับการบินเร็วกว่า
สอง Pass ถูกบินทิศเดียวกัน เพื่อให้ Doppler และ Timing Error บางชนิดมีแนวโน้ม Cancel กัน ได้ง่ายกว่าการบินสวนทิศ
SAR DEM เทียบ Lidar ได้ใกล้แค่ไหน?
หลัง Phase Unwrapping ด้วย SNAPHU Creator สร้าง DEM แล้วเปรียบเทียบกับ Lidar Reference
ใน Dataset นี้:
- RMS Height Difference: 0.4 m
- Median Absolute Difference: 0.11 m
Creator ยังพบ Baseline Error คงที่ ระดับมิลลิเมตร ซึ่งหากไม่แก้ สามารถกลายเป็น Elevation Error ระดับหลายเมตรที่ขอบภาพ เพราะ InSAR ไวต่อ Geometry มาก
ทำไม Forest และ Shadow กลายเป็นช่องว่างใน DEM?
Low Coherence บางส่วน ไม่ได้เกิดจาก Software Error อย่างเดียว
Vegetation
Return จากต้นไม้และพืช เปลี่ยนระหว่าง Pass เพราะโครงสร้างมี Height Variation มาก ทำให้ Phase ไม่ Correlate กันดี
Radar Shadow
พื้นที่ที่ Radar Beam มองไม่ถึง ไม่มี Return ที่เพียงพอ จึงไม่สามารถสร้าง Elevation อย่างน่าเชื่อถือได้
Smooth Surface
ถนนเรียบบางมุม สะท้อน Energy กลับ Radar น้อย จึงมี Signal ต่ำ
SNAPHU ช่วยระบุ Connected Region ที่ Phase Unwrapping เชื่อถือได้ และ Creator ตัดพื้นที่ที่ไม่น่าเชื่อถือออกจาก DEM
Mission ที่สองบอกอะไรเรา?
Mission ที่สองบินหลัง Mission แรกเพียงไม่กี่นาที และใช้ Vertical Baseline 1 m เช่นกัน
หลัง Autofocus + RME Mean Coherence ของ Mission ที่สอง อยู่ที่ 0.480 รวมพื้นที่ที่ Decorrelate ด้วย
เมื่อจำกัดเฉพาะ Field Area Coherence เข้าใกล้ 1 มากขึ้น แสดงให้เห็นว่า Scene Type และ Look Angle มีผลต่อ InSAR อย่างมาก
Processing บน RTX 3090 Ti ใช้เวลานานแค่ไหน?
Creator ให้ Processing Example ของ Full SAR Image ไว้ชัดเจน
| รายการ | ค่าจาก Measurement ตัวอย่าง |
|---|---|
| GPU | RTX 3090 Ti |
| Input | 17,000 Radar Sweeps |
| Output Grid | 4,156 × 16,473 pixels |
| Autofocus | 22 seconds |
| Image Formation | 0.9 seconds / polarization |
ดู Source Code ใน torchbp
Creator เปิด Source Code สำหรับ SAR Image Formation และ Autofocus ใน Repository: torchbp
Current Repository อธิบายตัวเองว่าเป็น C++ / PyTorch extension สำหรับ Differentiable SAR Image Formation และ Autofocus บน GPU
Current README ระบุว่า Nvidia GPU ได้รับการรองรับเป็นหลัก และ CPU รองรับเพียงบาง Operation
pip install torch
git clone https://github.com/Ttl/torchbp.git
cd torchbp
pip install --no-build-isolation -e .
ดู SAR Measurement จาก Drone จริง
Creator มี VideoSAR จาก Measurement จริง เพื่อให้เห็นว่าภาพ Radar เปลี่ยนตามตำแหน่ง Drone อย่างไร
Maker ได้อะไรจาก Project นี้?
1. Sensor Accuracy อย่างเดียวไม่พอ
Positioning, Timing, RF Hardware, Data Link และ Image Processing ต้องแม่นร่วมกันทั้งระบบ
2. Hardware Artifact อาจดูเหมือน Software Bug
Straight-line Artifact ใน SAR Image บางส่วน มาจาก PLL / IBS ไม่ใช่ Image Processing เพียงอย่างเดียว
3. Bottleneck แก้ได้หลาย Layer
แทนการทำ PCB ใหม่เพื่อเพิ่ม SD Bandwidth Creator ใช้ Algorithm + FPGA Compression แก้ข้อจำกัดของ Hardware เดิม
4. RTK ไม่ได้ทำให้ Motion Error หายทั้งหมด
แม้ Position Reference ดีขึ้นมาก InSAR ก็ยัง Sensitive จนต้องมี Autofocus และ RME ช่วยแก้ Residual Error
5. Open-source Processing ทำให้ Project ต่อได้ไกลกว่า Hardware ชิ้นเดียว
Hardware Radar ชุดนี้ไม่ได้ขาย แต่ Processing Library อย่าง torchbp เปิด Source ภายใต้ MIT License ให้ศึกษาและต่อยอดได้
FAQ: คำถามที่พบบ่อย
1. SAR คืออะไร?
Synthetic Aperture Radar ใช้การเคลื่อนที่ของ Radar และการรวม Measurement หลายตำแหน่ง เพื่อสร้าง Aperture เสมือนและสร้างภาพ Radar
2. InSAR ต่างจาก SAR ยังไง?
InSAR ใช้ Phase Difference จากมากกว่าหนึ่ง SAR Measurement เพื่อวัดความต่างของ Geometry เช่น Elevation ของพื้นผิว
3. Project นี้ใช้ Radar แบบไหน?
Source ระบุ FMCW Radar
4. ทำไม GPS ปกติถึงไม่พอ?
Creator ระบุว่า Non-RTK GPS มี Error ประมาณ 1 m ในการเปรียบเทียบ ซึ่งทำให้ SAR Image Blur หากไม่ใช้ Autofocus ช่วย
5. RTK ให้ Accuracy เท่าไร?
ใน System นี้ Creator ใช้ค่าประมาณ 2 cm แต่ไม่ควรถือเป็น Accuracy Guarantee ของ RTK ทุกระบบ
6. ทำไมต้องใช้ PPK เพิ่มจาก RTK?
PPK Solve Position แบบ Offline จาก GNSS Data ทั้ง Base และ Rover และช่วยได้เมื่อ Real-time Correction Link มีปัญหาชั่วคราว
7. Radar ใช้ PLL รุ่นอะไร?
Source ระบุ LMX2491 ใน Frequency-sweeping PLL ของระบบ
8. Loop bandwidth 60 kHz ใช้กับ Radar อื่นได้เลยไหม?
ไม่ ค่านี้มาจาก Optimization สำหรับ Hardware และ Sweep Parameter ของ Creator ใน Test ชุดนั้น
9. ADC สร้าง Data เร็วเท่าไร?
Source ระบุ 50 MSPS, 12-bit หรือ Raw Data Rate 75 MB/s
10. ทำไมไม่ใช้ gzip หรือ zstandard?
Creator ต้องการ Real-time FPGA Implementation และเลือก Nibble Scheme เพราะ Hardware ง่ายกว่าและ Decode เร็วกว่า แม้ Compression Ratio ไม่ดีที่สุด
11. Compression Ratio ของระบบเท่าไร?
Measurement ตัวอย่างหนึ่ง ได้ประมาณ 2.3× และ 5.7 bits/sample แต่ Ratio ขึ้นกับ Data
12. RME คืออะไร?
Residual Motion Estimation ใช้แก้ Phase Error ที่ยังเหลือระหว่าง SAR Pass หลัง Autofocus
13. Coherence ดีขึ้นเท่าไรหลัง RME?
ใน Mission หลัก Mean Coherence เพิ่มจาก 0.297 หลัง Autofocus เป็น 0.453 หลัง Autofocus + RME
14. Baseline ระหว่างสอง Pass เท่าไร?
Mission ที่อธิบายใช้ Vertical Baseline 1 m
15. Drone บินเร็วเท่าไรตอนเก็บ SAR?
Creator ใช้ 5 m/s ตอน Capture และจำกัด Transit ไว้ที่ 10 m/s เพื่อ Safety
16. DEM ของระบบแม่น 11 cm หรือไม่?
ไม่ควรสรุปแบบนั้น Source ระบุ Median Absolute Difference 0.11 m และ RMS Height Difference 0.4 m สำหรับ Dataset ที่เปรียบเทียบกับ Lidar
17. ทำไม Forest มี Coherence ต่ำ?
Vegetation Return เปลี่ยนระหว่าง Pass และมี Height Variation มาก ทำให้ Phase Decorrelate
18. Source Code เปิดหรือไม่?
SAR Processing Code เปิดอยู่ใน torchbp Repository ภายใต้ MIT License แต่ Hardware Radar ทั้งชุดไม่ได้ขาย
19. ระบบทั้งหมดราคาเท่าไร?
Creator สรุป Hardware Cost ของ Radar + Drone ใน Project นี้ ไว้ราว 1,000 EUR ซึ่งเป็น Cost Context ของการสร้างชุดนั้น ไม่ใช่ราคาสินค้าปัจจุบัน
20. มี STL ของ GPS Holder ให้ดาวน์โหลดไหม?
Source แสดงว่ามีชิ้นส่วน 3D Printed GPS Holder แต่ชุด Source ที่ใช้ในบทความนี้ ไม่ได้ให้ STL/CAD File จึงไม่มีไฟล์ให้ดาวน์โหลดจากบทความนี้
References / แหล่งข้อมูลต้นฉบับ
Radar Project แบบนี้ไม่ได้ยากเพราะมี Sensor ตัวเดียว
สิ่งที่ Project นี้แสดงได้ชัด คือระบบ Remote Sensing ขั้นสูง ต้องทำให้ GNSS, RF, FPGA, Flight Controller, Data Link และ Processing Pipeline ทำงานสัมพันธ์กันทั้งหมด
หากกำลังทดลองงาน Embedded, GNSS, FPGA, Sensor หรือ Development Board Project สามารถสอบถามทีม Globalbyte เรื่องบอร์ด, Module และอุปกรณ์ที่เหมาะกับ Project ได้