DJI Virtual Flight (iOS) has been broken for five months
forum.dji.com
forum.dji.com
So, software is treated the same way. Engineers copy and paste whatever stuck-together yarn ball of code off Gitee they need to produce an artifact which passes QA, then ship it.
The problem comes in when there's software that needs to live for a long time in the real world - Virtual Flight, for example, was broken by some Apple update or another, and their Fly app has to support a broad range of drones so it creaks under the weight of everything being pasted together.
IMO, almost all "hardware" companies trying to make software are the same way. From industrial controls to mobile phone vendors. If anything, DJI have gotten better in recent years about after-sales updates, fixes, and support than they used to be.
Shouldn't they already factor in the cost of app support for the next X years when selling the product?
I assume the same principle applies when you purchase an iPhone. Though in this case, DJI may not see Virtual Flight as core software for their product.
I do think that in recent years DJI have gotten way better at budgeting for after-sales support on mainline products. The Mavic 3 series have gotten consistent and meaningful updates for quite some time now. This Virtual Flight app was always kind of a joke and I’m not really surprised it’s abandoned.
Depends what you mean by “should”. If you mean that they should because it would be the right thing to do, sure. If you mean it would be competitively advantageous, well I rather doubt it. Consumers have almost uniformly demonstrated that price trumps all.
--
[0] - Sadly, it's likely for better. The world after most people get an accurate feel for how much they can trust companies will be a very bad place to live in.
All this obsolence, just so that they can sell you the new Anafi drones (which will be similarly obsolesced).
Thank god for the Ardupilot community[2ŧŦ] stepping in to open up their drones for at least some semblance of autonomy, so that people can once again control the devices that they've purchased...
1: https://play.google.com/store/apps/details?id=com.parrot.fre...
2: https://discuss.ardupilot.org/t/controlling-parrot-drones-us...
ŧ: admittedly some ex-Parrot developers helped port some stuff over.
Ŧ: Andrew Tridgell (of "reason for chaging VC in Linux from BitKeeper to Git", and other true-coder fame) is pretty active here. It's a very talented community.
A caveat with the controller: it needs to have custom firmware[2] to get it communicating with ardupilot, and to get the firmware onto the controller you need telnet/adb into it via SkyController→usb→ethernet→usb→Laptop adaptor(s) setup.
For a ground control system (GCS), there's three to choose from: Mission Planner, APM Planner, and QGroundControl[3] (ignore the rest, use this one).
For configuring the drone, mission planner is pretty good... but you can also just use MavProxy[4] which is a fantastic commandline program that all the GCSes use in some way, and can even be installed in Termux/Android.
1: https://github.com/uavpal/disco4g/
2: https://github.com/ArduPilot/dema-rc/
Recent example: I patched in to my 3D printer's mainboard using a TTL to USB and opened up putty and guess what shows on the console?
> Linux version 3.4.39+ (zhanglei@ubuntu Revision:543)
It would also do absolutely nothing in this situation where the product already comes from a foreign country.
Microsoft: We told you what not to do, and you did it anyway, so we’ll put code in our OS specifically to keep your app running.
Apple: We didn’t tell you that was OK to do, and you did it, and our latest cool stuff broke your app. Over to you. Also, we didn’t mention this earlier, but no more 32-bit apps next year, sorry.
Android: We try to keep your app running, for a while, but TBH a lot of the platform comes from manufacturers who only care for about 18 months. Let’s all just try to survive.
The app reviews are flooded with people complaining it’s broken. I absolutely have no hope it will ever get fixed.
Every single comment blames DJI, but shouldn't it be Apple's responsibility to not break existing apps with iOS "upgrades"?
Apple is free to decide they don't care one bit about retro compatibility, but it's just weird we would simply accept that and think of updates like a kind of act of God that just happens.
according to the comments in the thread it doesn’t work even on ios 15.7?
But on the other hand, that's a well-known difference between Apple and Microsoft philosophies. Microsoft bends over backwards to support old software (e.g. hard-coding old buggy/undefined behavior for specific legacy apps), while Apple fully expects app developers to maintain their software and upgrade it as necessary with each new iOS release, using new versions of libraries etc.
I don't think either is "correct", they're just different philosophies. The Microsoft way leads to incredibly complicated OS behavior that must be hell on the Windows devs. But if you develop an iOS app, you should know this going into it, that you'll need to budget for a certain level of occasional maintenance or risk that the app breaks.
This is also why Apple will never be a long-term gaming platform for anything other than gacha pull and otherwise exploitative games. I can still play the original Dark Souls with DSFix on modern Windows (or Linux via Proton for that matter). The game is timeless and should never be lost to lazy platform holders.
Your mileage may vary. I think backwards compatibility is important, but we can't expect Apple to do a quality test on every last app on the app store for hours and hours making sure it opens on every phone on every software version.
I believe it's Apple's policy to remove apps that are not upgraded, even if they're still working. Which is baffling and highly questionable IMHO.
Apps are more interoperable than every before so the idea of something you write once and never touch again stops making any sense. Encryption standards progress, privacy entitlements become more granular, image formats get added, retina compatibility becomes expected, dark mode becomes expected, etc. etc. etc.
https://www.joelonsoftware.com/2004/06/13/how-microsoft-lost...
starting at § "The Two Forces at Microsoft" where he describes the Raymond Chen Camp vs. the MSDN Magazine Camp.
Well I contacted DJI to see if they would replace it, due to clearly a software error on their side, and they basically told me to pound sand. I sent them a video recording of the drone’s final moments (it synced to my phone), and they wanted me to pay for their “free data analysis” because the drone was out of warranty; even though I had only flown it a handful of times. (This is data I know they can see, along with the rest of the flight data).
They ended up offering me a 40% coupon, which is just a joke, and I told them I will keep publicly shaming them unless they can offer a replacement. (So here I am). They also randomly called me at 11am on a workday, twice in a row, and didn’t leave a message; about a week after my emails with cs. Just a really weird experience. Highly don’t recommend DJI.
Proprietary hardware will always be abandon by its manufacturers eventually. Always!! This is not the first drone to be dust-binned by software obsolescence. It will not be the last. What will it take for people to realize this fundamental truth?
But it depends on your budget/use case really (just to fly around with a camera like payload, drone racing, autonomous missions using gps). A lot of the drones out there use a lot of open source software for one thing or another.
Ardupilot, PX4, Betaflight, iNav etc.. are open source drone flight control software which run on drone flight controllers. flight controller = a little microcontroller + gyro/accelerometer + connections to some peripherals like radio receivers , GPS, sensors like sonar etc.
Blheli_S, AM32 etc.. are Open Source ESC firmware. ESC = Electronic Speed Controller. The component that is responsible to spin the motors as the flight controller wants it to.
Sik Radio, ExpressLRS, mLRS etc.. are Open Source RC control link software that let you send control messages from your ground station to your drone.
As for Video Transmission, you can use anything from OpenHD/wifibroadcast(doesn't use Wifi. just Wifi hardware in monitor mode.) to webrtc over 4g to transmit video from quad to your ground station. And optionally record it on the drone side too.
Mix and match these open source components to build your own drone as per your needs.
I mostly fly racing drones and every single component on my quads is open source to one extent or another.
I appreciate all of the info you have supplied.
I would very much like to buy a complete multicopter to which I can add payloads and program routes/waypoints and otherwise customize. Do you or anyone else reading this have good experience with any vendors of open source drones?
https://newbeedrone.com/products/holybro-px4-development-kit...
Review: https://www.youtube.com/watch?v=27rbxCeCq4Y
I have used some holybro products and they work well.
Seems like a lot of "ready to fly" kits/models have disappeared these days. I am guessing the new drone regulations have something to do with it.
If you are a little more adventurous (i.e dont mind soldering/assembling your own drone), you'd be able to build a quad for a LOT smaller/cheaper.
Also a transmitter like Radiomaster pocket and a receiver would be very handy. Iirc you can use a regular joystick with QGroundControl but I prefer to have a separate strong control link that will let you recover the quad if the connection to ground station is lost.
Ardupilot and PX4 are great projects, but they're just a basic ingredient in making a drone with good autonomy. They handle the basics of stabilizing a multicopter or plane (with a lot of tuning required) and have some rudimentary range finding and optical flow support, but don't offer much in the way of state-of-the-art vision based autonomy for position hold, obstacle avoidance, or route planning. Even in the commercial space (where a lot of stuff is based on PX4, it's BSD licensed so products don't need to be source-available), nothing really gets close to DJI. On the other end of the hobby drone space, INAV and Betaflight are fun, but they're mostly for FPV which is a completely different ball game.
The gaps for full open source _and_ non-DJI commercial drones are numerous. Really they're pretty much end-to-end:
* Vision autonomy. There are a _ton_ of UAV vision autonomy projects on GitHub, mostly because it's a popular thesis project. Unfortunately, none of them have taken off as a practical, well-maintained thing you can integrate into normal drone hardware and use. In the commercial space, Skydio finally got a good win here, but they've given up on the consumer market. This isn't just a critical feature for whiz-bang inside-out pathing like Skydio do, it's an important fundamental for strong position hold (called visual odometry) as GPS is drift-prone and traditional low resolution optical flow struggles once a drone is at a higher altitude.
* Camera image sensor quality. This is the place where Skydio really fell behind DJI in the consumer market. This is a highly proprietary, closely guarded space. It's almost impossible to find a good image sensor plus the parameters to make it look good (ISP firmware / sensor parameterization) that's not locked under 100 levels of NDA. Add on the need for specialized optics and you're in for a really tall order. Even the Pi Foundation essentially gave up on this and ship a DRMed camera with proprietary ISP parameterization.
* Video downlink. This is a big one too, and one of the other big places where Skydio fell behind. DJI and Autel have access to modified mobile phone IP via China. Everyone else is using either analog video or WiFi and it just isn't good.
* Camera gimbal quality. Ardupilot did a GSoC project around this recently. This space is really underinvested too. Making a good gimbal is _hard_, and it goes hand-in-hand with the camera sensor issue in some ways because making a gimbal which is weight/balance-matched to a specific camera is a lot easier than a general purpose one. Also, most open source projects spent a long time focused on on bottom-facing survey / photogrammetry use cases because they were easier, so basic features like "aim/zoom to a tapped point on a video" aren't fully baked at all.
* Battery quality and parameters. Open source / hobby drones tend to use either polymer-electrolyte prismatic pouch packs with extremely high instantaneous discharge but comparatively low overall capacity (FPV drones) or round-cell lithium ion batteries with good overall capacity, but poor instantaneous discharge and poor packaging. The optimal battery for a small camera drone is right between these two extremes.
Even in the commercial space, I'd recommend DJI. Autel is basically one generation behind DJI at a higher price point. Skydio drones were cool but they exited the consumer market, and they were loud and had bad cameras and a weak video link compared to their contemporary DJI rivals. Parrot are interesting as a non-Chinese option, but they're about two generations behind DJI, also at an even higher price point.
If you want a camera drone today, buy a DJI drone with a standalone remote controller (the one with a screen). That way, you don't need to install their sketchy app on your phone, you can firewall the controller however you'd like, and you only need to give up limited information as part of the initial activation/login process and then you're good to go.
But! There are workarounds. You can backdoor upload waypoints in DJI WPML / KMZ format to the Air 3 and Mavic 3 consumer drone series. Here's the waypoint XML format: https://developer.dji.com/doc/cloud-api-tutorial/en/api-refe... . This is actually surprisingly effective and works really well.
https://www.litchiutilities.com/litchiToM3.php offers an interesting workflow for this, creating flight paths using the Litchi app that's generally used for controlling drones that _do_ support the SDK and then importing them. This page also has the best documentation I've seen for the backdoor upload method.
In the past, you could use 3rd-party apps that extended features, and offered new ones. One popular app is Litchi https://flylitchi.com
However, DJI seems to have stopped updating their iOS API, so 3rd-party iOS apps won't work with any newer drones and Android stuff seems to be available only by side-loading.
Perhaps there's something in the newer APIs that neither Apple or Google like? Sending back too much data to DJI?
I’d love to see a proper security analysis of their packages, because I would be willing to bet cash money that every app they offer does multiple nefarious things to collect your personal and flight data.
Sadly, such revelations still would probably not be enough to damage their reputation and sales in a meaningful way.
Its no secret they save flight data (like everything you input, temperature, gps points...) in their cloud.
I think there are workarounds for this, a friend of mine never paired his drone with a smartphone connected to any network. Iam pretty sure this will not work for a long time.
Its very daunting if you ask me, the amount of data they gather. Not a small part of drones used in active wars, like ukraine right now, is by DJI. This is alot of power in the hands of a few.
But if you ask them that doesn't exist, once you login you never need to login again... except, well, you do.
Their hardware is excellent. I wish their software was at least remotely on par with that.
When I first purchased the robot it never required phone GPS. And that now if you disable it at any point it disconnects you from the robot. It sits gaining dust because I wish not to use an IOS app with GPS enabled for no reason.
Questioning support to why this is required they said "people are happy with GPS on" and that was that.
I look at it sadly because it runs Linux, has full root access and so much potential. But, I just don't like the fact that could be potentially tracking GPS coords back to HQ.
The one good experience I've had with customer support for a hardware+software company was for the Eufy cameras by Anker.
Opening the app would stop the audio stream that was playing. No reason to do that while showing me a list of cameras. The audio stream should have been interrupted only once one selects a camera to view and listen to.
I wrote customer support and after some explanation and friction, they understood and a fix was released about two months later.
https://gizmodo.com/eufy-local-security-camera-cloud-unencry...
(I mean, I probably could make Amcrest stuff work if I tried hard enough, but I am at the age where spare time is precious, so I was looking for something that I could order and install without hassle or tinkering with mains electricity.)
UniFi Protect only runs on their NVRs and "Dream" routers and only works with UniFi cameras. The wireless cameras only work with Protect because otherwise there's no way to get them on the network. Once a camera is paired to Protect, you cannot get a standard RTSP stream directly from it (but you can restream RTSP from Protect). They've got a Doorbell camera that doesn't send ring notifications or video to HomeKit / Alexa / Google Home.
There's hack-y stuff to make Protect work with standard RTSP cameras. And a HomeBridge plug-in to get HomeKit. But it's all subject to breakage and YMMV.
All that said, Protect is pretty great. I'm a (mostly) happy home user.
My educated guess is that the company Vincross sold their tech to the Chinese Military back in 2017 and China is being China.
It is a very nifty robot, the company still exists but feels as an empty shell.
Would be nice if users could give BLE permissions but _not_ GPS or wifi-based location permission to an app.
Not sure about iOS, but Android supports that for several years now (to the point where a given app only gets BLE access to one device it cares about which prevents data leakage).
The McDonald's app does some similar BS. You can't do anything in the app without granting the "precise GPS" permission, using a digital coupon in-store requires full GPS permission. If you use the "Ask me each time if I want to share" option, it will still reject you and tell you it needs to be always-on.
Alternatively it's probably a lot cheaper to offer an apk while for Apple there is no other option than the app store requiring all kinds of paperwork and lawyer fees.
Page visible only if you have installed the app in the past: https://play.google.com/store/apps/details?id=dji.mimo
The mimo app on the other hand is straight up garbage. The thing never works right if it even connects to the device at all. I regret buying that thing (it's the osmo mobile version 2 or 3). It's so bad I don't think I will ever buy a new dji device.
I love flying my spark but the battery life is trash and my Air 2 isn't fun to fly (it's more of a utility van than a fun little sports car). I'd love to get a replacement for my spark. It's probably better to just build my own at this point.
Apple has always made it clear and so DJI is absolutely to blame.
never had any such problem on android, I still have working apps that target android 6...
"Currently, existing apps (across mobile, Android Auto, Android TV) must target API level 31 or above by August 31, 2023 (target API 30 or up API level 33 for Wear OS). Otherwise, they will stop being discoverable to all Google Play users whose devices run Android OS versions newer than your app’s target API level"
https://support.google.com/googleplay/android-developer/answ...
It is now a yearly requirement to target the latest API version.
You might have "working apps that target Android 6" but no one with a phone built after 2017 can find them. I often run into incompatibilities between API versions.
They dont stop working if you installed them before the minimum requirements for new apps came into force, and you can still install them on new phones from the list of applications attached to your account.
But there have been changes in the Android API that have been non-backwards compatible and if your app is using those API's, they will break when run on newer versions. Same as for iOS.
Many simple apps targeting very old versions of their respective API/SDK will still work on both platforms.
Ultimately, keeping an app active and functional does require maintenance.
Only for _acquiring_ new customers on _very new_ devices.
Old customers on new devices are just fine.
https://developer.android.com/topic/libraries/support-librar...
Goes all the way back to Android 4.
Sounds like they still work though. GP's Android 6 application won't stop working, would it?
Obviously expect that boundary to ratchet up with time, plus the single point of failure if they ever decide to remove `--bypass-low-target-sdk-block` from the dev tools.
Thats 10 years ago, and only 5 years after the very first iPhone (2007)
6 was a milestone, because it was the first to actually feature restricted app access to contacts/microphone/camera.
facebook, twitter, linkedin and a load of others (especially facebook games) got where they are from stealing everyones contacts via that method and then spamming them with adverts. TF those days are behind us.
And usually the breaking changes only come after many years of advance notification from Apple, unless it’s an urgent change to address for example abusive developers doing egregious infringement of privacy.
Those developers tend to be hit harder. Maybe that’s the case here.
I was able to buy DJI care after the repair which came in handy for my upcoming high risk flights ;-)