PX4日志读取并转化为.scv文件、MATLAB显示
电脑:Windows/Linux/MacOS皆可,此处使用Windows软件:安装 pyulog,教程 https://github.com/PX4/pyulog飞控:Pixhawk2.4.8,固件版本 PX4FMU_V2一、获取日志将PX4存储卡插入读卡器,接入电脑,很容易找到日志文件,以 .ulg 结尾。比如我的叫 log001.ulg,复制一份到自己的电脑上;安装好 pyulog,进入 .u
·
电脑:Windows/Linux/MacOS皆可,此处使用Windows
软件:安装 pyulog,教程 https://github.com/PX4/pyulog
飞控:Pixhawk2.4.8,固件版本 PX4FMU_V2
一、获取与转换日志
- 将PX4存储卡插入读卡器,接入电脑,很容易找到日志文件,以 .ulg 结尾。比如我的叫 log001.ulg,复制一份到自己的电脑上;
- 安装好 pyulog,进入 .ulg 文件所在文件夹下;
- 输入命令
ulog2csv log001.ulg
,则在当前文件夹下生产一系列导出文件,如下图:
二、日志含义
log001.ulg 导出了一系列 .csv 文件,个人比较关心原始加速度计与陀螺仪数据、期望姿态与期望角速度、估计姿态与估计角速度、输入油门值与输出PWM波占空比几个数据,经查找如下:
物理量 | 所在文件 | 变量 | 单位 |
---|---|---|---|
原始加速度 | log001_sensor_combined_0.csv | accelerometer_m_s2 | m / s 2 {\rm m/s^2} m/s2 |
原始角速度 | log001_sensor_combined_0.csv | gyro_rad | r a d / s \rm{rad/s} rad/s |
期望姿态(四元数) | log001_vehicle_attitude_setpoint_0.csv | q_d | 单位1 |
期望姿态(欧拉角) | log001_vehicle_attitude_setpoint_0.csv | roll_body, pitch_body, yaw_body | r a d {\rm rad} rad |
期望角速度 | log001_vehicle_rates_setpoint_0.csv | roll, pitch, yaw | r a d / s \rm{rad/s} rad/s |
估计姿态(四元数) | log001_vehicle_attitude_0.csv | q | 单位1 |
估计角速度 | log001_vehicle_attitude_0.csv | rollspeed, pitchspeed, yawspeed | r a d / s {\rm rad/s} rad/s |
遥控器输入值 | log001_input_rc_0.csv | values | 遥控器原始值 |
输入PWM波占空比(比较值) | log001_actuator_outputs_0.csv | output | 计数器比较值 |
输入PWM波占空比(归一化) | log001_actuator_outputs_0_0.csv | control | -1~1 |
注:PX4的 timestamp 每 1ms 加 1
三、MATLAB数据读取与显示
原始数据链接:链接:https://pan.baidu.com/s/1lHGjgfOT_EJO-C3LEMDZ-A 提取码:51rb
%% 文件实现读取PX4日志(.scv)数据并绘图
%% 读取数据
imu_data = importdata('log001_sensor_combined_0.csv');
atti_d_data = importdata('log001_vehicle_attitude_setpoint_0.csv');
atti_data = importdata('log001_vehicle_attitude_0.csv');
rate_d_data = importdata('log001_vehicle_rates_setpoint_0.csv');
rc_data = importdata('log001_input_rc_0.csv');
pwm_data = importdata('log001_actuator_outputs_0.csv');
pwm1_data = importdata('log001_actuator_controls_0_0.csv');
%% 数据选择
% 原始IMU数据 imu
t_imu = imu_data.data(:,1)*1e-6;
gyro = imu_data.data(:,2:4); % gyrox, gyroy, gyroz
acc = imu_data.data(:,7:9); % accx, accy, accz
% 期望姿态 atti_d
t_atti_d = atti_d_data.data(:,1)*1e-6;
atti_d = atti_d_data.data(:,2:4); % 期望角速度(欧拉角)
atti_dq = atti_d_data.data(:,6:9); % 期望角速度(四元数)
q0 = atti_dq(:,1);q1=atti_dq(:,2);q2=atti_dq(:,3);q3=atti_dq(:,4);
roll_d = atan((2*(q0.*q1+q2.*q3)) ./ (1 - 2*(q1.^2+q2.^2)));
pitch_d = asin(2*(q0.*q2 - q1.*q3));
yaw_d = atan(2*(q0.*q3 + q1.*q2) ./ (1-2*(q2.^2+q3.^2)));
% 估计姿态 atti
t_atti = atti_data.data(:,1)*1e-6;
atti_q = atti_data.data(:,5:8);
q0 = atti_q(:,1);q1=atti_q(:,2);q2=atti_q(:,3);q3=atti_q(:,4);
roll = atan((2*(q0.*q1+q2.*q3)) ./ (1 - 2*(q1.^2+q2.^2)));
pitch = asin(2*(q0.*q2 - q1.*q3));
yaw = atan(2*(q0.*q3 + q1.*q2) ./ (1-2*(q2.^2+q3.^2)));
% 期望角速度 rate_d
t_rate_d = rate_d_data.data(:,1)*1e-6;
rate_d = rate_d_data.data(:,2:4);
% 估计角速度 rate
t_rate = atti_data.data(:,1)*1e-6;
rate = atti_data.data(:,2:4);
% 输入rc
t_rc = rc_data.data(:,1)*1e-6;
rc = rc_data.data(:,8:11);
% 输出PWM
t_pwm = pwm_data.data(:,1)*1e-6; % 原始值
pwm = pwm_data.data(:,3:6);
t_pwm1 = pwm1_data.data(:,1)*1e-6; % 归一化
pwm1 = pwm1_data.data(:, 3:6);
%% 绘图
plot(t_atti_d, roll_d, '-',t_atti, roll, '-');legend('期望滚转角', '估计滚转角');xlabel('时间t (s)');ylabel('rad');
plot(t_atti_d, pitch_d, '-',t_atti, pitch, '-');legend('期望俯仰角', '估计俯仰角');xlabel('时间t (s)');ylabel('rad');
plot(t_atti_d, yaw_d, '-',t_atti, yaw, '-');legend('期望偏航角', '估计偏航角');xlabel('时间t (s)');ylabel('rad');
plot(t_rate_d, rate_d(:,1), t_rate, rate(:,1));legend('期望x角速度', '估计x角速度');xlabel('时间t (s)');ylabel('rad/s');
plot(t_rate_d, rate_d(:,2), t_rate, rate(:,2));legend('期望y角速度', '估计y角速度');xlabel('时间t (s)');ylabel('rad/s');
plot(t_rate_d, rate_d(:,3), t_rate, rate(:,3));legend('期望z角速度', '估计z角速度');xlabel('时间t (s)');ylabel('rad/s');
plot(t_rc, rc); legend('CH1', 'CH2', 'CH3', 'CH4'); % 遥控器输入
plot(t_pwm, pwm); legend('Output1', 'Output2', 'Output3', 'Output4'); % 电机输出(原始值)
plot(t_pwm1, pwm1);legend('Output1', 'Output2', 'Output3', 'Output4'); % 电机输出(归一化)
其中,第一张图片如下,其他略。
附
PX4日志分析官网教程:http://docs.px4.io/master/zh/log/flight_log_analysis.html
更多推荐
已为社区贡献1条内容
所有评论(0)