Hello Tello Pilot!
Join our DJI Tello community & remove this banner.
Sign up

Sniffing Tello drone status packets

vasonic

New member
Joined
Nov 18, 2024
Messages
3
Reaction score
1
Hello, dear Tello co-pilots!

Recently, I have been sniffing the packets which are being exchanged between the Tello drone and its app-controller(my phone) using Wireshark. I found out that Pinggu has created a .lua dissector which filters the packets based on their contents and he has described this here. Also the packets' general structure is described here.
I managed to decode the TELLO_CMD_STATUS packets' contents with the following information so far(shown in the screenshot attached). I, however, cannot find out if there is a byte(s) in that packet that shows the yaw of the drone. Ideally, it should be in degrees but it just seems it's not being transmitted, at least in that packet. And yes, I have had a look at the TELLO_CMD_STICK packets but they contain just the direction of the left stick at a certain moment and that does not guarantee that the drone will be turned in the desired direction at that exact moment.
So, can anybody help me or direct me where should I look for the yaw values, at least in the packets, because it appears they're not available in the "status" packets?
Also, does the Tello set its yaw initial value(assuming it's in degrees) to 0 every time it's turned on or, for example, every time it lands?

1732016507889.png
 
What I have found out so far:

In the official SDK 1.3 for Tello, there is a link to a Python script which controls the Tello using strings, sent over a "socket"(IP+port). These strings are described in the SDK pdf file itself. When the Python script is ran and the command "attitude?" is entered inside of it, we get the pitch, roll and yaw as a response. The yaw is measured in degrees from 0 to 180 and -1 to -180, depending on the direction in which the drone is turning. Also, the yaw value of the drone gets reset to 0 degrees every time the drone is shut off and turned on again. However, it doesn't get reset if the drone only lands in-between flights. In order to start communication and send commands, the user must first enter "command" in the Python script shell and then the keyword for the desirable command(ex. "takeoff").

An interesting thing is that when using that Python script, the Tello doesn't send "TELLO_CMD_STATUS" packets, instead it sends just "TELLO_CMD" packets, containing raw byte data which can be converted to a string.

Another important thing to mention is that the Tello has a magnetometer, which it uses to measure its' yaw value. The Vision Positioning System(VPS) doesn't play a part in that because the yaw value gets updated even if the VPS lens are covered.
 
  • Like
Reactions: BigL
The binary packet you are referring to does not contain yaw orientation. It contains altitude, horizontal and vertical speed, and various timers, states, flight modes, etc

If you want yaw info you need to tell tello to send log information and extract that info from the log sentence. If I remember correctly there is an IMU related log sentence that holds IMU based speed and orientation info and another VPS related sentence that contains VPS based positions and speeds.

The binary protocol isn't well document but you can find a few pointers to get you started. I am aware of three sources:
The wiki on TelloPilots (see link at the top)
Pingu's website
Github repository TelloLib including the aTello app available there

Take all these sources with a grain of salt. None is perfect
 
  • Like
Reactions: vasonic

Members online

Forum statistics

Threads
5,789
Messages
40,372
Members
17,555
Latest member
Matěj Bláha