# qgc2dji.py ## Why? QGroundControl is great! It's open source and provides the ability to easily produce "survey" flight paths, which often costs a lot of money to achieve via other apps and software. Unfortunately it does not work with DJI drones. Some great looking work has been done with https://github.com/diux-dev/rosettadrone which seems to provide this capacity. I have not tested it, but looks cool. For one reason or another, I decided to just use the flight plan output from QGroundControl and wrangle it into a shape that DJI GO 4 is happy with. This way I can use the stock DJI app for now, until I have tested, and am comfortable that the `rosettadrone` approach is stable for my uses. And I get to save masses of time with survey-type waypoints :D ## Description Convert QGroundControl survey waypoints to DJI GO 4 waypoints 2.0. This is spefically intended to work _only_ with the "survey" mode from QGroundControl. This will likely only work if your smartphone is rooted, as you will need `su`. My personal recommendation is to get `Magisk` installed. This script is largely very naiive. It works as expected with `qgroundcontrol v4.0.11-1` and `DJI GO 4 v??` as of date 06-11-2020. There is no guarantee it will continue to work with future updates of either application. You have been warned. By default, a backup of the original DJI GO 4 database is made, so even if the resulting db is broken, you can always recover the original. Has only been tested using `omnirom beryllium` - your mileage may vary. ## Dependencies For the script: - Python 3 - all required modules are I believe part of python core - sqlite3 Obviously: - QGroundControl - DJI GO 4 ## Prerequisite - Open QGroundControl - either with the app on your phone, or more easily with the desktop version. Tested with Linux and the App, but should be the same for Mac and Windoze - Create a survey waypoint mission - Make sure the camera lens settings are all correct - Use your common sense to determine - suitable overlap - cruising flight speed - suitable altitude - other? Some settings can be passed directly to the script from the commandline, and will overwrite the equivalent values from QGroundControl. *n.b.* This script currently ignores takeoff and landing points, and solely focusses on the survey mission waypoints, at a single altitude. ## Preparation It is assumed that you have a terminal open on your "host" in a suitable working directory, and that `qgc2dji.py` is in that directory. When copying the `.db` you can store it wherever you like - it just has to be a location that `adb pull` can retrieve from. Once your phone is rooted and reasonably under your own control (developer options enabled, USB debugging enabled): ## Usage Use your own judgement when it comes to `chown` and `chmod` to match the original `.db` ``` [host]$ adb shell [phone]$ su [phone]# cp /data/data/dji.go.v4/databases/way_point_2.db /sdcard/ [phone]# [phone]$ [host]$ adb pull /sdcard/way_point_2.db ./ [host]$ python ./qgc2dji.py -i -d ./way_point_2.db [host]$ adb push ./way_point_2.db /sdcard/ [host]$ adb shell [phone]$ su [phone]# cd /data/data/dji.go.v4/databases [phone]# mv /sdcard/way_point_2.db ./ [phone]# ls -ld drwxrwx--x 2 4096 2020-11-06 11:48 . [phone]# chown : ./way_point_2.db [phone]# chmod 660 ./way_point_2.db ``` ## Future - Also update 'way_point_2_cache.db' - Choice of "action upon mission completion" - Currently defaults to hover - Altitude per waypoint - Takeoff and landing points? - Calculate appropriate crusing flight speed? - Dependent on required overlap and limitation of camera regarding photo interval - Waypoint triggers (start/stop recording, take photo, etc)