DJI Mavic, Air and Mini Drones
Friendly, Helpful & Knowledgeable Community
Join Us Now

Meaning of Parameters in CsvView SigPlayers

jclarkw

Well-Known Member
Joined
Dec 31, 2020
Messages
139
Reactions
26
Age
23
Location
USA
Bud (or anybody) -- Now that I have access to decrypted CSV files from the DJI Fly app for my Mavic Air 2 via Mike Singer's new Flight Reader software for PC, I have another puzzle: Faced with the dozens of columns of data, the physical meaning of many of which is obscure to me, I wonder which ones are worth visualizing in CsvView's SigPlayer feature. (This problem also exists in CsvView's own direct decoding of unencrypted TXT files.) E.g., what does the prefix, "OSD" (as opposed to CsvView's "GENERAL," "CUSTOM," or "CALC") mean?

Does anyone have a reference giving the physical meanings of these various parameters, either in general or specifically for the Mavic Air 2? (Mike tells me he does not.) -- jclarkw
 
Would be nice if you shared the file.
surfbird -- Does the attached help?
mavicpilots.com does not allow CSV files (go figure...), so I converted it in Excel to tab-delimited text. (I also removed the lat/long data for privacy.) -- jclarkw
 

Attachments

  • AnonymousDJIFlightRecord_2021-07-25_(15-59-55)-aircraft.txt
    1.2 MB · Views: 25
OSD probably comes from the internal class name. It's used to collect all data from the AC.
Why they named it OSD, don't know, but these are the numbers that comes from the AC. It's kind of a collecting class with all important info.

Most names are pretty self-explaining. Is it any specific you thinking of?
Sometimes the speed has to be /10. speedx/y/z are coordinates on the AC.
Swaze = ground sensor


The class looks like this:
public class DataOsdGetPushCommon extends gfd {
private static DataOsdGetPushCommon instance;
private DataOsdGetPushCommon.DroneType mLastDroneType;

public static synchronized DataOsdGetPushCommon getInstance() {
return null;
}

public DataOsdGetPushCommon() {
}

public DataOsdGetPushCommon(boolean var1) {
}

protected void setPushRecPack(dji.midware.fdd.gfd.fdd.fdd var1) {
}

protected void setPushLose() {
}

public double getLongitude() {
return 0.0D;
}

public double getLatitude() {
return 0.0D;
}

public int getHeight() {
return 0;
}

public int getXSpeed() {
return 0;
}

public int getYSpeed() {
return 0;
}

public int getZSpeed() {
return 0;
}

public int getPitch() {
return 0;
}

public int getRoll() {
return 0;
}

public int getYaw() {
return 0;
}

public boolean getRcState() {
return false;
}

public DataOsdGetPushCommon.FLYC_STATE getFlycState() {
return null;
}

public FLYC_COMMAND getAppCommand() {
return null;
}

public boolean canIOCWork() {
return false;
}

public int groundOrSky() {
return 0;
}

public boolean isMotorUp() {
return false;
}

public boolean isSwaveWork() {
return false;
}

public DataOsdGetPushCommon.GOHOME_STATUS getGohomeStatus() {
return null;
}

public boolean isImuPreheatd() {
return false;
}

public boolean isVisionUsed() {
return false;
}

public int getVoltageWarning() {
return 0;
}

public DataOsdGetPushCommon.RcModeChannel getModeChannel() {
return null;
}

public DataOsdGetPushCommon.RcModeChannel getModeChannelByFR() {
return null;
}

public boolean isGpsUsed() {
return false;
}

public boolean getCompassError() {
return false;
}

public boolean getWaveError() {
return false;
}

public int getGpsLevel() {
return 0;
}

public DataOsdGetPushCommon.BatteryType getBatteryType() {
return null;
}

public boolean isAcceletorOverRange() {
return false;
}

public boolean isVibrating() {
return false;
}

public boolean isBarometerDeadInAir() {
return false;
}

public boolean isEscError() {
return false;
}

public boolean isMotorBlock() {
return false;
}

public boolean isNotEnoughForce() {
return false;
}

public boolean isPropellerCatapult() {
return false;
}

public boolean isGoHomeHeightModified() {
return false;
}

public boolean isOutOfLimit() {
return false;
}

public boolean isGPSValid() {
return false;
}

public boolean isCompassError() {
return false;
}

public int getGpsNum() {
return 0;
}

public DataOsdGetPushCommon.FLIGHT_ACTION getFlightAction() {
return null;
}

public DataOsdGetPushCommon.NON_GPS_CAUSE getNonGpsCause() {
return null;
}

public boolean getWaypointLimitMode() {
return false;
}

public boolean isQuickSpin() {
return false;
}

public boolean isShowNearGroundProtectTips() {
return false;
}

public int getBattery() {
return 0;
}

public int getSwaveHeight() {
return 0;
}

public int getFlyTime() {
return 0;
}

public int getMotorRevolution() {
return 0;
}

public int getFlycVersion() {
return 0;
}

public DataOsdGetPushCommon.DroneType getDroneType() {
return null;
}

public DataOsdGetPushCommon.MotorStartFailedCause getMotorFailedCause() {
return null;
}

public DataOsdGetPushCommon.MotorStartFailedCause getMotorStartCauseNoStartAction() {
return null;
}

public DataOsdGetPushCommon.IMU_INITFAIL_REASON getIMUinitFailReason() {
return null;
}

public boolean isImuInitError() {
return false;
}

public boolean isAllowImuInitfailReason() {
return false;
}

public DataOsdGetPushCommon.MotorFailReason getMotorFailReason() {
return null;
}

public DataOsdGetPushCommon.SDKCtrlDevice getSDKCtrlDevice() {
return null;
}

public boolean isFrontRightPropellerInstallError() {
return false;
}

public boolean isFrontLeftPropellerInstallError() {
return false;
}

public boolean isBehindLeftPropellerInstallError() {
return false;
}

public boolean isBehindRightPropellerInstallError() {
return false;
}

public boolean isTakeoffFail() {
return false;
}

public int getWindSpeed() {
return 0;
}

public DataOsdGetPushCommon.WindDirection getWindDirection() {
return null;
}

public int getHoverStateCnt() {
return 0;
}

protected void doPack() {
}
 
  • Like
Reactions: jclarkw
The field labels are not, for the most part, assigned by CsvView. These labels are created by DJI software, then passed through the Flight Reader and then passed through CsvView. AFAIK, no one outside of DJI has seen a document that explains the field labels. But, as @surfbird explains, many of the labels are self explanatory. Unfortunately, the obvious explanation is sometimes incorrect. Over the years the cadre of flight analysts have figured out a few things. E.g.

OSD is short for On Screen Display - the stuff that gets displayed in mobile device app
OSD.xSpeed is the speed in the North direction. I.e., the earth frame of reference not the AC FOR
OSD.yspeed is the speed in the east direction

Just to forestall the inevitable comments that the labels are sometimes misleading, incorrect, or should be different. Yes, that's true but it is what it is.
 
  • Like
Reactions: AZDave and jclarkw
...Most names are pretty self-explaining. Is it any specific you thinking of?
Sometimes the speed has to be /10. speedx/y/z are coordinates on the AC.
Swaze = ground sensor...
Sorry, but the Class info doesn't mean anything to me. Some software construct?
What do you mean by "Sometimes the speed has to be /10."
OSD.isSwaveWork is always FALSE. In other words, there are no ground sensors?
Specific questions:
OSD.vpsHeight = info from visual positioning system?
OSD.altitude -- Come from the GPS?
Is there a standard, right-handed xyz coordinate system attached to the A/C?
Looks like OSD.zSpeed is negative upward!?
And OSD.xSpeed is negative forward!? (Not sure about OSD.ySpeed.)
Are these speeds true as computed from GPS data?
Similar questions on coordinate system for pitch, yaw, and roll.
(Ops! -- Pasting an Excel cell leaves a trace I can't get rid of...)
Can you say anything about OSD.flycState and OSD.flycCommand in terms of commands available in the DJI Fly app, e.g., Normal vs. Sport mode, Takeoff, Land, Return to Home, etc?
OSD.waveError = FALSE. What might this mean?
Do gimbal pitch, yaw, and roll use the same coordinate system as above?
A lot of the HOME signals don't seem to make any sense (except HOME.distance and HOME.goHomeHeight). For example, the go home command seems nowhere indicated, although I did use it, and the home altitude is way off.
I didn't look into the BATTERY. signals in any detail yet. What's most important?

Many thanks for your help on this learning exercise! -- jclarkw
 
...OSD.xSpeed is the speed in the North direction. I.e., the earth frame of reference not the AC FOR
OSD.yspeed is the speed in the east direction...
Bud -- If the coordinate system is right-handed, then zspeed would be positive downward, as it appears. Right? -- jclarkw
 
Bud -- If the coordinate system is right-handed, then zspeed would be positive downward, as it appears. Right? -- jclarkw
Maybe. I always thought the Z axis points down because the gravitational field points down. Acceleration, thus velocity, increases as an object moves towards the earth.
 
  • Like
Reactions: jclarkw
Sorry, but the Class info doesn't mean anything to me. Some software construct?
What do you mean by "Sometimes the speed has to be /10."
OSD.isSwaveWork is always FALSE. In other words, there are no ground sensors?
Specific questions:
OSD.vpsHeight = info from visual positioning system?
OSD.altitude -- Come from the GPS?
Is there a standard, right-handed xyz coordinate system attached to the A/C?
Looks like OSD.zSpeed is negative upward!?
And OSD.xSpeed is negative forward!? (Not sure about OSD.ySpeed.)
Are these speeds true as computed from GPS data?
Similar questions on coordinate system for pitch, yaw, and roll.
(Ops! -- Pasting an Excel cell leaves a trace I can't get rid of...)
Can you say anything about OSD.flycState and OSD.flycCommand in terms of commands available in the DJI Fly app, e.g., Normal vs. Sport mode, Takeoff, Land, Return to Home, etc?
OSD.waveError = FALSE. What might this mean?
Do gimbal pitch, yaw, and roll use the same coordinate system as above?
A lot of the HOME signals don't seem to make any sense (except HOME.distance and HOME.goHomeHeight). For example, the go home command seems nowhere indicated, although I did use it, and the home altitude is way off.
I didn't look into the BATTERY. signals in any detail yet. What's most important?

Many thanks for your help on this learning exercise! -- jclarkw
What do you mean by "Sometimes the speed has to be /10."
I was wrong, it's coded like that in the dumldore msgs.

Can you say anything about OSD.flycState and OSD.flycCommand in terms of commands available in the DJI Fly app, e.g., Normal vs. Sport mode, Takeoff, Land, Return to Home, etc?
P-GPS = Normal mode

OSD.altitude -- Come from the GPS?
Pressure sensor

Are these speeds true as computed from GPS data?
Fused with the imu

OSD.waveError = FALSE. What might this mean?
No problems with the swave (VPS)

Do gimbal pitch, yaw, and roll use the same coordinate system as above?
No

A lot of the HOME signals don't seem to make any sense (except HOME.distance and HOME.goHomeHeight). For example, the go home command seems nowhere indicated, although I did use it, and the home altitude is way off.
Go Home

I didn't look into the BATTERY. signals in any detail yet. What's most important?
Cell differences


You can get a lot of info from the usemanual.
Internal states can be found on the sdk doc (and gimbal coordinates):

Coordinate system is easy to figure out from the rest of the data, x is north, I was wrong.
 
  • Like
Reactions: jclarkw
What do you mean by "Sometimes the speed has to be /10."
I was wrong, it's coded like that in the dumldore msgs.

Can you say anything about OSD.flycState and OSD.flycCommand in terms of commands available in the DJI Fly app, e.g., Normal vs. Sport mode, Takeoff, Land, Return to Home, etc?
P-GPS = Normal mode

OSD.altitude -- Come from the GPS?
Pressure sensor

Are these speeds true as computed from GPS data?
Fused with the imu

OSD.waveError = FALSE. What might this mean?
No problems with the swave (VPS)

Do gimbal pitch, yaw, and roll use the same coordinate system as above?
No

A lot of the HOME signals don't seem to make any sense (except HOME.distance and HOME.goHomeHeight). For example, the go home command seems nowhere indicated, although I did use it, and the home altitude is way off.
Go Home

I didn't look into the BATTERY. signals in any detail yet. What's most important?
Cell differences


You can get a lot of info from the usemanual.
Internal states can be found on the sdk doc (and gimbal coordinates):

Coordinate system is easy to figure out from the rest of the data, x is north, I was wrong.
Thanks, surfbird -- With your info and Bud's, I can probably piece it together... -- jclarkw
 
Last edited:
What do you mean by "Sometimes the speed has to be /10."
I was wrong, it's coded like that in the dumldore msgs.

Can you say anything about OSD.flycState and OSD.flycCommand in terms of commands available in the DJI Fly app, e.g., Normal vs. Sport mode, Takeoff, Land, Return to Home, etc?
P-GPS = Normal mode

OSD.altitude -- Come from the GPS?
Pressure sensor

Are these speeds true as computed from GPS data?
Fused with the imu

OSD.waveError = FALSE. What might this mean?
No problems with the swave (VPS)

Do gimbal pitch, yaw, and roll use the same coordinate system as above?
No

A lot of the HOME signals don't seem to make any sense (except HOME.distance and HOME.goHomeHeight). For example, the go home command seems nowhere indicated, although I did use it, and the home altitude is way off.
Go Home

I didn't look into the BATTERY. signals in any detail yet. What's most important?
Cell differences


You can get a lot of info from the usemanual.
Internal states can be found on the sdk doc (and gimbal coordinates):

Coordinate system is easy to figure out from the rest of the data, x is north, I was wrong.
Sorry to be crashing uninvited, I've been looking my own CSV data from my Air 2S and this is... AWESOME.

as we know, OSD stands for on screen display, AKA the User Interface that composes the every bit of info that is presented to us during flight.

Most of the "osd_home" SigPlayer flags make perfect sense. It's pretty much your UI. longitude and latitude are the coordinates for that blue dot within the mini map representing the controller location. Recorder state is the photo/video mode. Vertical limit and vertical limit values are self-explanatory. Wind Speed normalized is the drone's speed showed to you in the app.
 
OSD.xSpeed is the speed in the North direction. I.e., the earth frame of reference not the AC FOR
OSD.yspeed is the speed in the east direction
Do any of the fields list the speeds realtive to the direction the drone is pointing? In layman's term the speeds forwards/backwards, left/right etc.
 
Thank you.
You can easily add a column:
=SQRT(x*x+y*y)
Yes and correct me if I am wrong, but that would just give me the simple horizontal speed which is already listed, isn't it?

Calculating the forwards/backwards and or sideway components from the magnetic x and y speeds would involve the sine and cosine of the drone's yaw angle applied to the those speeds and then their vector addition, wouldn't it?

Aside from that, fields directly available in the log or output of CsvView would allow CsvView to plot a chart of forward speed etc. if, for example, one wanted to compare forward speed with elevator stick input.
 
Last edited:
You are correct.
I've done something similar.

speed = SQRT(x*x+y*y)
deviation = ac_yaw - math.atan2(speed_y, speed_x)
side_speed = speed * sin(deviation)
straight_speed = deviation * cos(deviation)
 
Lycus Tech Mavic Air 3 Case

DJI Drone Deals

New Threads

Forum statistics

Threads
131,305
Messages
1,561,828
Members
160,247
Latest member
Rambezito