Skip to content

Prajuab Riabroy's Blog

Survey Application – GNSS – UAV – Programing – Python – Dart&Flutter – Rust

Menu
  • Home
  • About Us
  • Survey Application
    • Surveyor Pocket Tools
    • Traverse Pro
    • XSection Plot
    • Geoid Height Pro
    • Spot Fire
    • โปรแกรมงานสำรวจสำหรับเครื่องคิดเลข Casio fx-5800P
    • โปรแกรมงานสำรวจสำหรับเครื่องคิดเลข Casio fx-9860G II SD
  • Download
  • Privacy Policy
Menu

เมื่อผมลองดี โมดิฟายด์แอพ DJI GO 4 ด้วย Deejayeye-Modder สำหรับโดรน DJI Spark

Posted on 21/04/2018

จากลองของเป็นลองดี

จากตอนที่แล้วเมื่อต้องลองของเอาโดรนเซลฟี่ DJI Spark มาบินทำแผนที่ภาพถ่ายทางอากาศ ตอนนี้เลยคำว่า”ลองของ”ไปไกลหลายช่วงตัวแล้ว เพราะแพ็ตช์หรือโมดิฟายด์แอพ DJI GO 4 เรียกง่ายว่าเป็นการ “ลองดี” ไปแล้ว เพื่อนำโดรนมาบินทำแผนที่ภาพถ่ายทางอากาศโดยที่เปิดหรือใช้ฟีเจอร์ที่ซ่อนไว้ ตอนนี้ฟีเจอร์เทียบได้กับโดรนรุ่นใหญ่เช่น Phantom 4 Pro หรือ Mavic

คำเตือน

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

ต้นทุนความเสี่ยง

มาแจกแจงราคาของสปาร์คกันนิด ผมซื้อสปาร์คแบบ fly combo ราคาในตอนนั้น 23,900 บาท ซื้อแบตเตอรีมาเพิ่มหนึ่งลูกราคา 2000 บาทถ้วน (รวมแบตเตอรีทั้งหมด 3 ลูก) ซื้อกระเป๋าสำหรับใส่โดรนมาครั้งแรก 650 บาทแต่ไม่ถูกใจเพราะใส่ของได้ไม่เยอะ ซื้อมาอีกใบราคา 1850 บาท สาย OTG 200 บาท รวมทั้งหมด 28,600 บาท ใช้เงินขนาดนี้สามารถซื้อสมาร์ทโฟนรุ่นดีๆ ได้สักหนึ่งเครื่องเลยทีเดียว

ทำไมต้องโมดีฟายด์แอพ

ความจริงโดรนแต่ละรุ่นของ DJI แอพจะเป็นส่วนหนึ่งที่เป็นตัวกำหนดว่าตัวไหนมีความสามารถอะไรบ้าง โดรนแต่ละรุ่นจะถูกจัดให้ Product อยู่ในเกรดไหนระดับไหน ตามกำลังซื้อของลูกค้า ลูกค้าที่ต้องการ Premium พันธุ์แท้มีกำลังซื้อสูงก็ควรจะมาซื้อรุ่นเทพ Inspire ที่ราคาเหยียบสองแสนบาทไปใช้ ส่วนใครมีกำลังซื้อลดหลั่นกันมาก็ไล่ตั้งแต่ Phantom 4 Pro, Mavic Pro, Mavic Air จนกระทั่ง DJI Spark โดรนเซลฟี่ราคาถูกที่สุดในไลน์การผลิดของ DJI

ฟีเจอร์ของ DJI Spark ที่ถูกซ่อนคือบินตามเส้นทางที่กำหนด (Waypoint) กับบินเป็นวงโคจร (Orbit) ก่อนหน้านี้ผมพยายามเข้าไปดูข่าวสารตามที่ DJI เคยบอกไว้ว่าอาจจะเอาการบินตามเส้นทางที่กำหนดมาใส่ให้สปาร์ค แต่ก็ตามข่าวมาสี่ ห้าเดือนแล้วก็ไม่มีความคืบหน้าอะไร และในตอนนี้ที่เขียนบทความนี้ ทางดีเจไอก็ออกโดรนรุ่น Mavic Air ตัวใหญ่กว่าสปาร์คนิดหนึ่ง ราคาแพงกว่าประมาณหมื่นกว่าบาท บินได้นานขึ้น gimbal ได้สามแกน (แต่สำหรับคนทำแผนที่ภาพถ่ายทางอากาศสองแกนก็พอครับ) แต่ก่อนจะขายบอกว่าสนับสนุนการบินด้วย waypoint แต่พอออกขายจริงๆ กลับตัดฟีเจอร์นี้ไปดื้อๆ ซะอย่างนั้น ก็ได้ก้อนอิฐไปตามระเบียบไปหลายก้อน

นักโมกลุ่ม Deejayeye-Modder

ผมเข้าไปติดตามข่าวสารบ่อยๆตามฟอรั่มของผู้ใช้โดรน ก็เลยค้นไปเจอว่ามีกลุ่มโมดิฟายด์ (modder) ชื่อรวมๆคือ Deejayeye โมดิฟาย์แอพ DJI Go 4 เพื่อเปิดฟีเจอร์ที่ซ่อนนี้สำหรับโดรนสปาร์ค เป็นโค้ดเปิดใน Github โดยการเอาไฟล์ที่ใช้สำหรับติดตั้งในแอนดรอยด์คือไฟล์ APK (Android Package) มาทำการ patch เพื่อเปิดฟีเจอร์ที่ถูกซ่อนนี้ ในตอนแรกก็ไม่มั่นใจแต่ลองเอามาทำด้วยเครื่องมือที่ทีมงานแนะนำมาพร้อมโค้ด ก็ลองดูกลับทำได้สำเร็จ ลองเอาไฟล์นี้มาติดตั้งในโทรศัพท์แอนดรอยด์ของผมก็สามารถใช้งานได้

ย้อนรอยตอนลองของ

ขอเล่าย้อนรอยสั้นๆก่อนหน้านี้ ผมใช้แอพ Litchi ผมพอใจการทำงานของ Litchi ปัญหาเมื่อโดรนต่อกับรีโมทคอนโทรล (Remote controller) สัญญานหลุดจากกันแต่ก็ reconnect ให้ใหม่ได้เร็ว ไม่ต้องลุ้นมาก แอพมีความเสถียรพอสมควร นานๆจะแครชที แต่ข้อเสียคือสุ่มเสี่ยงกับการไม่ได้รับประกันจาก DJI และข้อเสียอีกอย่างคือไม่สนับสนุนการบินตามเส้นทางที่กำหนด (waypoint) สำหรับโดรน DJI Spark ที่ไม่สนับสนุนเพราะว่าเครื่องมือ SDK (Software Development Kit) ของ DJI ไม่มีไว้ให้นั่นเอง คำว่าไม่สนับสนุนคือสั่งให้บินไปตามเส้นทางไม่ได้ แต่สามารถสร้างเส้น waypoint นี้ได้

ผมกำหนดเส้นทางการบิน (waypoint) จากที่มีในแอพ เรียกว่าสามารถใส่จุดล่วงหน้าจากแอพโดยการจิ้มแต่ละจุดไปบน map แต่ข้อเสียคือไม่สามารถนำเข้าไฟล์จาก kml ได้ เครื่องมือสร้าง auto waypoint จากรูปปิดที่กำหนดให้ก็ไม่มี ตอนบินก็เรียกเส้นทางการบินนี้ให้แสดงบนแผนที่ จากนั้นก็บังคับโดรนบินไปตามเส้นทางเหล่านี้ คุณภาพของการบินให้ตรงกับเส้นทางที่กำหนดนี่ต้องอาศัยทักษะพอสมควร แต่ส่วนใหญ่ผมเป๋ไปด้านซ้ายด้านขวาบ้าง แต่ผมออกแบบให้เส้นแนวบิน Overlap กันมากขึ้นคือให้เส้นแนวบินเข้ามาใกล้กันมากกว่าทฤษฎีจะได้ชดเชยเมื่อบินไม่ตรงแนว ตอนบินก็สั่งให้ gimbal ก้มด้วยมุม 85 องศา (เต็มที่แล้ว ไม่ได้ 90 องศา) จากนั้นก็สั่งถ่ายรูปด้วย interval ทุกๆ 3 วินาที ลองดูรูปด้านล่างจะเห็นว่าแนวบินไม่เป็นเส้นตรงเฉไปเฉมา

ตั้งแต่ผมซื้อโดรนมา เคยเอามาเซลฟี่ประมาณ 4-5 ครั้งแค่นั้นเอง จากนั้นเอามาบินทำแผนที่ภาพถ่ายทางอากาศทั้งหมด ดังนั้นฟีเจอร์ที่ผมต้องการที่สุดก็คือบินตามเส้นทางที่กำหนดเท่านั้นเพราะจะได้เบาแรงเมื่อเอาโดรนขึ้นไปบนฟ้า เพิ่มเติมอีกนิดผมเคยใช้แอพทางการของ DJI GO 4 อยู่ไม่กี่ครั้ง จากนั้นก็ใช้ Litchi มาตลอด

เมื่อ DJI กลับลำในกรณี Mavic Air

เท่าที่ผมติดตามเป็นแฟนของโดรน DJI มาสักระยะหนึ่งพบว่านอกจากสินค้าที่ดีด้านฮาร์ดแวร์ ส่วนด้านบริการยังไม่ทราบเพราะไม่เคยได้ใช้ ส่วนซอฟต์แวร์จะดีหรือแย่ค่อยมาว่ากันอีกที ในกรณีของ Mavic Air จะวางขายมีการออกสื่อทั้งทางเว็บทางการของ DJI เองว่า Mavic Air สนับสนุนการบินตามเส้นทางที่กำหนด ผมรู้สึกผิดหวังนิดๆว่าไม่น่ารีบซื้อ Spark มาเลย เตรียมตัวขายต่อครับ จะเอาเงินไปซื้อ Mavic Air แต่สุดท้ายฟ้าผ่าเพราะก่อนหน้าจะออกวางขายไม่กี่วัน DJI ก็ตัดฟีเจอร์นี้ออกจากเว็บไซต์แบบหน้าตาเฉย ตอนนั่นผมไม่รู้จะดีใจหรือผิดหวังดี ที่ดีใจคือไม่ได้ขายสปาร์ค ที่ผิดหวังคือนโยบายที่เอาแน่นอนไม่ได้ของ DJI

พบแสงสว่างบนทางแห่งความเสี่ยง

ในที่สุดกับก็มาพบโมดิฟายด์แอพด้วยเครื่องมือของ Deejayeye ตามที่ผมกล่าวไปข้างต้น พยายามอ่านและทำความเข้าใจอยู่หลายวัน คันไม้คันมือทนไม่ไหว ก็เลยตัดสินใจลองดู ถ้าสำเร็จหมายถึงการรับประกันก็สิ้นสุดทันที ผมดาวน์โหลดไฟล์โดยที่ไฟล์ประกอบด้วยโค้ด โครงสร้างไดเรคทอรีเปล่าๆ ที่จะต้องไปดาวน์โหลดเครื่องมือมาใส่ในไดเรคทอรีนี้ และมีไดเรคทอรีที่ต้องไปหาไฟล์ติดตั้งแอพ DJI GO 4 ที่เป็นแพ็คเกจ APK มาใส่เพื่อให้โปรแกรมสามารถแพ็ตช์ได้

แพ็คเกจ APK สามารถหาดาวน์โหลดได้เฉพาะ DJI GO 4 รุ่น 4.1.4 ถึง 4.1.9 แต่รุ่นหลังจากนี้ทาง DJI ได้ทำการ encrypted ไว้ ไม่สามารถหาได้บนดิน ต้องมุดใต้ดินไปหาครับ

ปัญหา OTG (On The Go)

ปัญหาของ OTG บนแอนดรอยด์สำหรับใช้บนแอพ DJI GO 4 ถือว่าเป็นปัญหาอลเวง เดี๋ยว DJI สนับสนุนเดี๋ยวถอดออก ผมซื้อสายมา 200 บาทแต่ไม่ได้ใช้เลย แต่ที่ได้ยินมาคือฝั่ง IOS ใช้ได้ดีไม่ปัญหาเหมือนฝั่งแอนดรอยด์

OTG คือสายเคเบิลที่เอามาต่อระหว่างรีโมทคอนโทรลกับโทรศัพท์มือถือที่ลงแอพ DJI GO 4 คือที่ได้ยินมาตลอด ถ้ามันต่อได้ดีเสถียร จะเป็นประโยชน์มากกว่าการต่อด้วยไวไฟเพราะไวไฟนี้อาจจะไปกวนไวไฟที่ต่อระหว่างรีโมทคอนโทรลกับโดรนที่บินกลางอากาศ

เลือกเวอร์ชั่นของแอพ DJI GO 4

ผมหาแพ็คเกจ apk ของแอพตอนแรกเลือก 4.1.22 รุ่นล่าสุดในขณะที่เขียนบทความ ทำการแพ็ตช์ ติดตั้งลงโทรศัพท์มือถือปรากฎว่าสาย OTG ใช้ไม่ได้ครับ เพราะตอนแรกอ่านผ่านๆว่ารุ่นหลังๆสนับสนุนแล้ว พอไปอ่านดีๆกลับผมว่า DJI ไม่สนับสนุนในแอพรุ่นนี้ สุดท้ายพบว่ารุ่น 4.1.15 ที่สนับสนุน ก็เลยต้องไปหาแพ็คเกจ apk รุ่นนี้มาทำการแพ็ตช์ แล้วทำการติดตั้งลงมือถือ เลือก Flight mode คือปิดการสื่อสารทุกอย่างบนโทรศัพท์มือถือ เปิดแอพ DJI GO 4 รุ่น 4.1.15 ในที่สุด OTG ใช้ได้

เปิดฟีเจอร์ Waypoint

เมื่อเปิดแอพ DJI GO 4 ทำการต่อสายรีโมทคอนโทรล จากนั้นก็ต่อกับโดรน ช่่วงนี้ลองในบ้านได้ ทำการปรับค่า config ต่างๆ แล้วลองแท็บไปในโหมด Fly intelligent จะเห็นว่า การบินด้วยเส้นทางที่กำหนด (Waypoints) เปิดมาเป็นที่เรียบร้อยพร้อมที่จะไปลองทดสอบ

ปัญหาเมื่อเส้นทางกำหนดการบินไม่สามารถกำหนดล่วงหน้าได้

ผมได้บอกไปแล้วว่าด้าน hardware โดรนในค่ายของ DJI ทำได้ยอดเยี่ยม แต่ด้านซอฟท์แวร์ กลับได้ยินเสียงอึงคะนึงหลายๆอย่าง ที่หนักๆแรงๆคือการบินด้วย waypoint ไม่สามารถป้อนหรือใส่ได้ก่อนแบบที่ Litchi หรือแอพตัวอื่นทำได้ จะวางแผนการบินล่วงหน้าทาง DJI ก็มีให้คือเสียเงินไปซื้อ DJI Ground Station สำหรับ IOS แต่ไม่มีสำหรับฝั่งแอนดรอยด์ที่ผมใช้อยู่

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

ปัญหาอีกอย่างคือในการบินตามเส้นทางที่กำหนด ต้องทำการเป็นลำดับ 1, 2, 3, 4, …. (ไม่ต้องถึงไลน์สุดท้ายก็สามารถเรียกโดรนกลับมาได้) แต่ตัวอย่างเช่นต้องการบินจาก 3, 4 ,5, 6 ทำไม่ได้ครับ ต้องไล่ตั้งแต่ 1, 2, 3 ซึ่งเป็นข้อเสียอย่างแรง

ตามล่าหาวิธีการสร้างเส้นทางการบินที่กำหนดล่วงหน้า

จากปัญหาที่พบผมไม่ต้องไปค้นที่ไหนไกล ในกลุ่มนักโมดิฟายด์ ก็มีคนเห็นปัญหานี้ เขาใช้เครื่องที่ root ตามเข้าไปในดูในโฟลเดอร์ของแอพบนมือถือก็พบว่ามีไฟล์ที่เป็นฐานข้อมูล sqlite ข้างในมีตารางที่แสดง waypoint ด้วยสตริงแบบ json จากนั้นก็เพิ่มฟีเจอร์เข้าไปใน DJI GO 4 เพื่อทำให้ไฟล์นี้เป็น public คือเครื่องไม่ root สามารถไปแก้ไขได้ ในขณะนี้รู้ว่าแอพทำการเก็บข้อมูลที่ไหนและรู้รูปแบบคือเป็นฐานข้อมูล sqlite

Mission Planner สุดยอดโปรแกรมออกแบบเส้นทางการบิน

โปรแกรมนี้บน Desktop PC เป็นโปรแกรมฟรี ใช้งานง่ายมาก ไปดาวน์โหลดได้ที่ ลิ๊งค์นี้  โปรแกรมนี้สามารถสร้าง Polygon ด้วยการจุดบน map ได้ง่ายๆ หรือจะนำเข้าจาก shape file ก็ได้ เมื่อได้พื้นที่แล้วสามารถสร้าง waypoint ได้จากการป้อนค่ามุมอะซิมุทแนวการบิน ความสูงของโดรน และค่าอีกหลายๆค่า จากนั้นโปรแกรมจะสร้าง waypoint ให้ ซึ่งเราสามารถจัดเก็บเป็นไฟล์ในรูปแบบรหัสแอสกี้ (text file) ได้ แต่ตอนนี้ได้ไฟล์มาแต่ยังไม่โดนใจแอพ DJI GO 4 ต้องทำการแปลงเป็นฐานข้อมูล sqlite ก่อน

มาลองดูไฟล์ waypoints ที่ได้จากโปรแกรม Mission Planner

QGC WPL 110
0 1 0 16 0 0 0 0 23.864033 90.366674 8.000000 1
1 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86296860 90.36620300 50.000000 1
2 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86312430 90.36512590 50.000000 1
3 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86336720 90.36516850 50.000000 1
4 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86321230 90.36623980 50.000000 1
5 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86345610 90.36627670 50.000000 1
6 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86361010 90.36521110 50.000000 1
7 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86385300 90.36525370 50.000000 1
8 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86369980 90.36631360 50.000000 1
9 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86394360 90.36635050 50.000000 1
10 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86409600 90.36529640 50.000000 1
11 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86433890 90.36533900 50.000000 1
12 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86418730 90.36638740 50.000000 1
13 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86443110 90.36642420 50.000000 1
14 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86458180 90.36538160 50.000000 1
15 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86482470 90.36542420 50.000000 1
16 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86467480 90.36646110 50.000000 1
17 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86491860 90.36649800 50.000000 1
18 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86506770 90.36546680 50.000000 1
19 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86531060 90.36550940 50.000000 1
20 0 0 16 0.00000000 0.00000000 0.00000000 0.00000000 23.86516230 90.36653490 50.000000 1

ArduMissionToDJISQL ทูลส์มาช่วยแปลงข้อมูล

และนักโมดิฟายด์ท่านนี้ก็ได้สร้างทูลส์แปลงจาก textfile เป็นไฟล์ sql ซึ่งเป็น text file เช่นเดียวกันแต่เป็นไฟล์โค๊ดภาษา sql เพื่อเตรียมปั๊มป์ข้อมูลนี้เข้าไปในฐานข้อมูล ไปหาดาวน์โหลดได้ที่ฟอรั่มตามลิ๊งค์นี้

ไฟล์ sql ที่ได้จากการแปลง waypoints ก็แบบนี้ครับ

INSERT INTO dji_pilot_dji_groundstation_controller_DataMgr_DJIWPCollectionItem ( distance, pointsJsonStr, autoAddFlag, createdDate )
VALUES (1328.54, ‘{“points”:[{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86296860000000,”lng”:90.36620300000000},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86312430000000,”lng”:90.36512590000000},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86336720000000,”lng”:90.36516850000000},{“craftYaw”:8,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86321230000000,”lng”:90.36623980000000},{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86345610000000,”lng”:90.36627670000000},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86361010000000,”lng”:90.36521110000000},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86385300000000,”lng”:90.36525370000000},{“craftYaw”:8,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86369980000000,”lng”:90.36631360000000},{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86394360000000,”lng”:90.36635050000000},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86409600000000,”lng”:90.36529640000001},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86433890000000,”lng”:90.36533900000001},{“craftYaw”:8,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86418730000000,”lng”:90.36638739999999},{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86443110000000,”lng”:90.36642420000000},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86458180000000,”lng”:90.36538160000001},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86482470000000,”lng”:90.36542420000001},{“craftYaw”:8,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86467480000000,”lng”:90.36646110000000},{“craftYaw”:-81,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86491860000000,”lng”:90.36649800000001},{“craftYaw”:9,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86506770000000,”lng”:90.36546679999999},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86531060000000,”lng”:90.36550939999999},{“craftYaw”:99,”gimbalPitch”:-85,”gimbalYaw”:0,”height”:50.00000000000000,”lat”:23.86516230000000,”lng”:90.36653490000000}]}’,1,1524200609000)

SQLite Studio โปรแกรมช่วยบริหารฐานข้อมูล SQLite

SQLite Studio เป็นโปรแกรมฟรีและเปิดโค้ด ผมใช้มานานแล้ว เมื่อติดตั้งแล้ว ผมจะใช้โอนไฟล์จากแอพ DJI GO 4 ชื่อไฟล์คือ dji_mod_4_1_15.db ในเครื่องผมอยู่ที่ /mnt/storage/DJI/ จากนั้น copy มาฝั่ง desktop pc ทำการแก้ไขด้วย SQLite Studio ด้วยการ Add Database แล้วเลือกไฟล์นี้ จากนั้นมองหาตารางข้อมูลชื่อ “dji_pilot_dji_groundstation_controller_DataMgr_DJIWPCollectionItem” เปิด Sqlite Editor จากนั้นเปิดไฟล์ sql  ด้วย Notepad จากขั้นตอนที่แล้วทำการ copy เนื้อหาไปยังคลิปบอร์ด แล้วทำการ paste ที่ Sqlite Editor นี้แล้วทำการ Execute Query ข้อมูลจะถูกปั๊มป์เข้าไปในฐานข้อมูล จากนั้นจะ copy ไฟล์ ฐานข้อมูลนี้กลับไปยังโทรศัพท์มือถือเพื่อไปทับกับไฟล์เดิม

ทดสอบบินตามเส้นทางที่กำหนด

วันแรกที่ผมต้องการลองบินแบบบินตามเส้นทางที่กำหนด (waypoint) รู้สึกใจไม่ค่อยดี หนึ่งนั้นที่เคยบอกไปว่าไม่ค่อยคุ้นกับแอพ DJI GO 4 เพราะไม่ค่อยได้ใช้ และอีกอย่างคือไฟล์เส้นทางการบินที่เตรียมมาไม่สามารถเปิดดูได้จากแอพ DJI GO 4 ก่อน ว่ามีอะไรบ้าง นี่ก็เป็นข้อเสียที่ร้ายแรงอีกอย่างครับ ทำไมให้เปิดดูไม่ได้ก่อน ต้องเอาโดรนบินขึ้นไปบนฟ้าเท่านั้นจึงจะดูได้ แหมถ้าเป็นยุคซามูไร ทีมงานผู้พัฒนาชุดนี้ควรจะต้องคว้านท้องตัวเอง (เอาฮานะครับ) เมื่อขึ้นไปบนท้องฟ้าแล้วผมก็ดูไฟล์แนวบินที่ผมสร้างเอาไว้ ในฐานข้อมูลนั้นจะมี location ด้วยผมใส่คำอธิบายไปด้วยสั้นๆ เพื่อให้หาไฟล์ง่าย เพราะ DJI GO 4 เลือกที่จะเน้นแสดงผลเส้นทางการบินนี้ด้วยวันเวลาที่สร้างซึ่งดูยากมาก

ครั้งแรกที่ลองบินตาม waypoint ผมเลือกเอาเส้นทางการบินตามแนวรถไฟฟ้าที่กำลังก่อสร้างนอกเมือง บริเวณนั้นมีหนองน้ำเยอะพอสมควร สลับด้วยทุ่งหญ้า เมื่อบินขึ้นท้องฟ้าปรากฎว่าผมไปยืนอยู่ผิดตำแหน่งคือห่างจาก waypoint ไปประมาณ 400 เมตร (ถือว่าไกลสำหรับสปาร์ค) ด้วยความที่ไม่อยากเสียเวลาก็เลย Apply เพื่ออัพโหลด waypoint ชุดนี้เข้าโดรน จากนั้นโดรนก็บินไปตาม waypoint จุดที่ 1 พอบินไปได้สัก 6 เส้น ผมลอง stop เพื่อจะเรียกเครื่องกลับ เป็นเรื่องครับ สัญญาณกลับขาดหายไปดื้อๆ ทั้งๆตอนที่บินอยู่ในตอนนั้นโดรนส่งรูปที่ถ่ายมาให้โทรศัพท์มือถือดูได้ตลอด ก่อนสัญญาณจะหลุดผมดูแล้วมีแบตเตอรีเหลือ 38% เมื่อติดต่อกันไม่ได้ผมก็เดินจ้ำอ้าวไปยังจุดที่โดรนบินค้างอยู่กลางอากาศแต่ไม่ทราบว่าอยู่ตรงไหน ด้วยอารามรีบร้อนกลับเลยไปอีกทางหนึ่ง เมื่อตั้งสติได้ก็มาดูที่แอพอีกทีดูจุดสุดท้ายบนแผนที่ ก็เลยวิ่งกันมาที่จุดนั้น เดชะบุญปรากฎว่าโดรนแลนดิ้งลงมาเอง อยู่กลางถนนลาดยางเล็กๆที่ไม่มีใครใช้ แบตเตอรีกระพริบอยู่ พอผมไปถึงแบตเตอรีก็หมดพอดี ผมลองเปลี่ยนแบตเตอรีลูกใหม่ใส่เข้าไปทดลองบินขึ้นอีกครั้งก็ยังดีอยู่ ไม่มีอะไรเสียหาย เมื่อกลับไปผมเอารูปที่ถ่ายมาดู จุดสุดท้ายที่ถ่ายเป็นทุ่งหญ้า แต่ก็สงสัยว่าเครื่องมาแลนดิ้งลงที่ถนนลาดยางห่างออกไป 20 เมตรได้อย่างไร และปลอดภัยด้วย ถือเป็นความโชคดีมากๆเนื่องจากในบริเวณนั้นส่วนใหญ่เป็นหนองน้ำ

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

ไม่พบปัญหาในการทดสอบในภายหลัง

วันต่อมาผมก็เอาโดรนพร้อมทั้งทำ waypoint ประมาณ 3 ชุด แต่ละชุดผมคำนวณระยะทางและความเร็วของการบินโดรนซึ่งผมไม่ให้เกิน 12 กม.ต่อชม. ใช้เวลาประมาณแค่ 9-10 นาทีเท่านั้น (แบตเตอรีตามสเป็คแล้วใช้ได้ 15 นาที) และจุด home ที่ไปยืนปล่อยโดรนต้องเป็นจุดที่อยู่ในพื้นที่นั้นๆ ป้องกันโดรนบินออกไปไกลทั้งขาไปและขากลับ วันที่สองนี้ไม่มีปัญหาครับ สัญญาณไม่หลุด นิ่ง และที่สำคัญคือในขณะนั้นลมแรงไปนิด เพราะมีเมฆฝนตั้งเค้าไกลๆ แต่โดรนสามารถบินไปตามแนวได้อย่างตรงแนว ผิดกับที่ผมบินด้วย manual แบบหน้ามือกับหลังมือ และแอพก็เตือนตลอดว่าลมแรงให้บินด้วยความระมัดระวัง เมื่อบินจบแนวเส้นทางการบินที่กำหนดไว้แล้ว เครื่องก็บินกลับมาจุดปล่อย (home) ได้อย่างปลอดภัย ลองดูรูปด้านล่างจะเห็นว่าแนวบินเป็นเส้นตรง

สรุป

ผมถือว่าภารกิจลองดีครั้งนี้ประสบความสำเร็จด้วยดีแต่ก็ผ่านความหวุดหวุดหวาดเสียวมาพอสมควรในกรณีที่สัญญาณหลุดจนโดรน landing ลงมาเอง ในส่วนของแอพ DJI GO 4 เองยังมีฟีเจอร์หลายอย่างที่ต้องพัฒนาปรับปรุงอีกมากมาย ตามที่ในฟอรั่มผู้ใช้งานได้เรียกร้องกันมาตลอด สำหรับประสบการณ์ของผมในครั้งนี้ก็ถ่ายทอดให้ผู้อ่านพอหอมปากหอมคอและอย่าได้ขอไฟล์แพ็คเกจที่ผมแพ็ตช์ตัวนี้มาเลยนะครับเพราะเป็นเรื่องการละเมิดลิขสิทธิ์ ติดตามกันต่อไปครับ

Related

1 thought on “เมื่อผมลองดี โมดิฟายด์แอพ DJI GO 4 ด้วย Deejayeye-Modder สำหรับโดรน DJI Spark”

  1. somsak says:
    12/01/2021 at 15:50

    คุณประจวบยั้งอยู่ไหนนี้

    Reply

Leave a Reply Cancel reply

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

August 2026
M T W T F S S
 12
3456789
10111213141516
17181920212223
24252627282930
31  
« Jul    

Blog Stats

  • 885,579 hits

Recent Posts

  • ประสบการณ์ใช้งาน Kimi K3 Code เขมือบแบบสยอง
  • สร้างแพลตฟอร์มดู Point Cloud บนเว็บด้วย Potree + CesiumJS — เรื่องเล่าจากสนามบินอู่ตะเภา
  • เมื่อวิศวกรสำรวจคำนวณเรื่องน้ำ – วิเคราะห์ระบบระบายน้ำบริเวณ RESA
  • แนะนำหนังสือ “จีออเดซี” ที่ยอดเยี่ยมของดร.พุทธิพล
  • ESPrtk ทำให้ ESP32 ใช้ไม่ได้? วิธีกู้คืน
  • กรณีศึกษา – คืนชีพ SDL30 ปี 2000 ด้วย ESP32 และแอพทำเอง SDL30 Collector
  • DIY RTK Base Station (survey-grade) รุ่น V3.21 ด้วย Raspberry Pi 2B + UM980 เมื่อคุณปู่กลับมาเป็นฮีโร่ ตอนที่ 4
  • รีวิวกูปรี (CoPre2) โปรแกรมประมวลผลไลดาร์จากค่าย CHCNav
  • DIY RTK Base Station (survey-grade) รุ่น V3.2 ด้วย Orange Pi 3 Zero + UM980 ตอนที่ 3
  • DIY RTK Base Station (survey-grade) รุ่น V3 ด้วย Orange Pi 3 Zero + UM980 ตอนที่ 2
  • เส้นทางและไทม์ไลน์ของใบรับรองความรู้ความชำนาญในการประกอบอาชีพวิศวกรรม(สำรวจ)ระดับวิศวกรวิชาชีพ
  • มัดแหนมรวมสามโปรแกรมไปใช้บนสโตร์ Snap ฝั่งลีนุกซ์
  • ปัดฝุ่น Traverse Pro เพิ่มรายละเอียดรายการคำนวณใหม่แบบแนวนอน (Landscape) และธีมมืด
  • DIY RTK Base Station (Survey-Grade) ด้วยชิป UM980 และบอร์ด ESP32 ตอนที่ 1
  • สร้าง NTRIP Caster ด้วย BNC บนคลาวด์แบบ DIY สำหรับ RTK Base Station ใช้ CHCNav P5
  • จับ AI มาไตรกรีฬา สร้างตัวติดตั้ง Snap สำหรับ Surveyor Pocket Tools กับประเด็นแฝงเร้นความเป็นส่วนตัวของผู้ใช้
  • ทดสอบรีด QGIS แบบโหดสัสด้วยชุดข้อมูล Open Building V3 โพลีกอน 74 ล้านหลัง
  • เมื่อ AI เป็นพิษชักจูงผู้ใช้ด้วยข้อมูลผิดๆ
  • เมื่อ AI กลายเป็นพิษด้วยอัตตา
  • คอมไพล์ PROJ 9.6.0 สำหรับแอนดรอยด์ แก้ปัญหาเพิ่มขนาด page size 16KB ตามกฎใหม่ของกูเกิ้ล
  • เครื่องมือช่วยออกแบบเส้นโครงแผนที่ความคลาดเคลื่อนต่ำ ด้วย LDP Companion เพื่อนคู่คิดมิตรคู่ใจ (#กำลังพัฒนา #Rust #Slint)
  • #Update แก้บั๊กหลุมดำ Surveyor Pocket Tools
  • ปฐมฤกษ์โปรแกรมเดสก์ท็อปภาษา Rust ด้วย Slint
  • การตั้ง Heading จาก RTK GNSS สองเครื่องใน Hypack
  • วิธีการออกแบบและรังวัดโครงข่าย GNSS ฉบับคนเดินถนน (ตอนที่ 3)

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 118 other subscribers

Archives

  • August 2026
  • July 2026
  • May 2026
  • April 2026
  • March 2026
  • January 2026
  • December 2025
  • November 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • July 2024
  • May 2024
  • April 2024
  • January 2024
  • November 2023
  • October 2023
  • September 2023
  • July 2023
  • June 2023
  • May 2023
  • March 2023
  • February 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • July 2022
  • May 2022
  • December 2021
  • October 2021
  • September 2021
  • August 2021
  • May 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • September 2019
  • August 2019
  • July 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
  • January 2018
  • November 2017
  • July 2017
  • June 2017
  • May 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • December 2016
  • November 2016
  • October 2016
  • August 2016
  • November 2015
  • March 2015
  • August 2014
  • March 2014
  • January 2014
  • December 2013
  • February 2012
  • January 2012
  • November 2011
  • October 2011
  • August 2011
  • April 2011
  • February 2011
  • December 2010
  • November 2010
  • October 2010
  • September 2010
  • June 2010
  • April 2010
  • March 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009

Recent Comments

  • 63.013_Sor Saimai on การออกแบบเส้นโครงแผนที่ความเพี้ยนต่ำ (Low Distortion Projection) ตอนที่ 2 (กรณีศึกษาออกแบบเส้นโครงแผนที่ความเพี้ยนต่ำสำหรับกรุงเทพมหานครและปริมณฑล)
  • priabroy on แปลงรูปแบบไฟล์แบบจำลองความสูงจีออยด์ TGM2017 เป็น GGF เพื่อใช้ในโปรแกรม Trimble Business Center
  • priabroy on แปลงรูปแบบไฟล์แบบจำลองความสูงจีออยด์ TGM2017 เป็น GGF เพื่อใช้ในโปรแกรม Trimble Business Center
  • Thanom Sriworasa on แปลงรูปแบบไฟล์แบบจำลองความสูงจีออยด์ TGM2017 เป็น GGF เพื่อใช้ในโปรแกรม Trimble Business Center
  • priabroy on ติดปีกเครื่องคิดเลขเทพ Casio fx 9860G II SD ด้วยโปรแกรมภาษาซีบน AddIn ตอนที่ 7 โปรแกรมคำนวณโค้งราบ (Horizontal Curve)
©2026 Prajuab Riabroy's Blog | Design: Newspaperly WordPress Theme