Background

Recently I got the DJI Osmo 7 to use as a gimbal for my phone shooting … which is a big upgrade from what I used previously.

phone holder shot.png

But to get the perfect shot you have to do multiple takes. And starting at $40,000 motion control rigs are still a little out of reach 😅.

So I wondered if I could make the Osmo do the same?

Main Problem

The main issue with this is there’s no SDK by DJI to do i.

<aside> 💡

SDK: essentially an API that you can use to interact with a third party service plus all the surrounding docs, code libraries and testing logic you need to make something.

</aside>

And without an SDK there’s no easy way to understand how to communicate commands to the gimbal.

So the next easiest thing to do is create my own SDK.

Probing

I started by probing all the Bluetooth devices around my area until I found the DJI Osmo and connected it to my laptop.

image.png

I then logged all packets that were being sent back and forth.

There were a LOT, mostly on battery level and current status.

This was great progress - I was able to decode basic packets. But this brought me no closer to understanding how to make the gimbal move.

Bluetooth Snooping

So I started by looking at what already makes the gimbal move - the camera app.

From the DJI camera app, you’re able to get the DJI to move using active tracking. So I went through multiple different scenarios from idle to specific active tracking movements.