Understanding csv file obtained from ulog2csv from pixhawk data

Hi guys,

I am new to the drone hobby and I kindly need some help. I build a custom drone, put a pixhawk on it, and I currently have it flying indoors using PX4Flow only for state estimation. I would like to perform system identification. I have the data from the sdcard and I have converted from ulog to csv, but I am still a bit confused about what the csv files mean, their columns etc.

Moreover, I know I would need to choose sampling rates etc. but I have very little idea of how to proceed. Please help if you can.

Thank you.

Best wishes,

Take a look here for logging configuration https://dev.px4.io/v1.9.0/en/log/logging.html

Each CSV file holds the data for a given uORB topic. You can read about uORB here https://dev.px4.io/v1.9.0/en/middleware/uorb.html

You may also want to take a look at the message definitions for each topic https://github.com/PX4/Firmware/tree/master/msg


@dakejahl so this means if I define my custom uORB Messages I can create my personal specified uLOG entries?
Also do you know, if there’s a possibility to recieve the uORBs on a companion computer via mavros?

@dakejahl Thank you very much for your response. I have gone through the links you gave. The last one (the defs for each topic) was most helpful. I have another question. I want to perform system id and I guess I would need to use the ‘actuator_controls’ topic. however, I can see there are several topics under this definition. And no further information is given as to what is what. I am flying from a radio, so I don’t know which input is actuator_controls_0 or …_1 or …_2 etc. Do you have any ideas on that?

For the sensor_combined messages I can see that there is some description about the different topics. For instance,
gyro_rad # average angular rate measured in the XYZ body frame in rad/s over the last gyro sampling period

Thanks for your help. I’m grateful.

If you want to understand acuator_controls, take a look at

If you simply want to understand what each of your sticks on your RC map to, see https://github.com/PX4/Firmware/blob/master/msg/manual_control_setpoint.msg

1 Like


In theory yes, I personally have never done it. It would be better if you opened a separate issue to ask this question.

1 Like

@dakejahl and @hsu-ret Thank you once again. One other confusion. Which signals are logged by The actuator_controls_0, and actuator_outputs topics?

The mixer takes in Torques(roll,pitch,yaw) and Thrust, and converts it to actuator outputs (pwm) values which sets the speed of the motors.

From this, my understanding is that, the ‘actuator_controls_0’ topic records the control_input commands going into the mixer, while the ‘actuator_outputs’ topic records the setpoint pwm values going out of the mixer into the motors. I just want to confirm that I am right.

Or if I’m missing something because, I am unsure if the ‘actuator_controls_0’ are the ones going out of the mixer into the motors and the ‘actuator_outputs’ are the signals measured from the motors.

I am currently trying to plot the signals and compare them with the log analysis from flight review but it would be helpful if someone can comment on this.

Thank you.

Please help clear my confusion.


So after a chat with @RicardoM17 I understand that the ‘actuator_controls_o’ topic indeed records the controller commands going into the mixer which then computes the individual PWM values for each actuator recorded in ‘actuator_outputs_0’. Incase anyone else in future, has similar confusion.
Thanks guys.

Thank you for leaving the update about what you found out. I’m logging in SDLOG_PROFILE=3 and I have 3 topics in the log file:

I’m trying to figure out what each one is. After flying my quadrotor, the logged actuator_controls_0 and actuator_outputs signals are identical, but actuator_controls_3 is different and varies from +1 to -1. This is true in manual mode, position mode, altitude mode.

Could anyone shed light on what signal actuator_controls_3 is actually logging, as it relates to the control block diagram? ie, is it the “RC inputs” from the hand controller, before going into the PID controller? Or is it the signal coming out of the PID controller into the mixer (seems unlikely since that is actuator_controls_0 according to this thread).

Also I would have expected to see a difference between actuator_controls_0 and actuator_outputs depending on autopilot mode

thank you very much