PX4日志读取并转化为.scv文件、MATLAB显示
电脑: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/s2{\rm m/s^2}m/s2 |
原始角速度 | log001_sensor_combined_0.csv | gyro_rad | rad/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 | rad{\rm rad}rad |
期望角速度 | log001_vehicle_rates_setpoint_0.csv | roll, pitch, yaw | rad/s\rm{rad/s}rad/s |
估计姿态(四元数) | log001_vehicle_attitude_0.csv | q | 单位1 |
估计角速度 | log001_vehicle_attitude_0.csv | rollspeed, pitchspeed, yawspeed | rad/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
PX4日志读取并转化为.scv文件、MATLAB显示相关推荐
- matlab读取表格读成mat文件,MATLAB 视频读取 Excel读写 Excel2txt txt2mat 按文件夹读取文件...
视频转图片,图片取大小 clc;clear; obj=VideoReader('双闪.avi'); numFrames = obj.NumberOfFrames;% 帧的总数 for i=1:numF ...
- xps数据怎么导出为txt_WFP: 读取XPS文件或将word、txt文件转化为XPS文件
读取XPS格式文件或将doc,txt文件转化为XPS文件,效果图如下: 1.XAML页面代码: xmlns="http://schemas.microsoft.com/winfx/2006/ ...
- 后缀为.adf 文件读取,转化为tiff(shp)格式,并输出netcdf格式的数据
.adf文件读取,转化为shp或者tif格式,并输出Netcdf格式的数据文件 使用工具为arcgis,本人安装的是arcgis10.8,安装包可自行下载,或者私信我. 以海报高度地形数据的读取为例 ...
- Image 图像转化为 PDF 文件
开发中如果有这样的需求把 Image 图像转化为 PDF 文件你会怎么做呢?你可能会在网上狂找资料寻找解决方案,但是事实上网上这方面的资料非常少,有的作者没有给出一个完整的内容或者给出的内容不适合现在 ...
- Python读取 npy, npz, h5, pkl 文件
文章目录 1. npy文件 2. npz文件 3. h5文件 4. pkl文件 我们在进行数据处理及分析时,常常会用到CSV文件.当CSV文件中数据量较大时,处理数据的速度非常慢,且所占存储空间大.这 ...
- linux 内存block读取6,Linux硬盘
和文件系统维护
1. 分区 MBR(Master Boot Recorder)主引导分区仅提供最多4个分区,主分区(Primary,P)与扩展分区(Extended,E),如3P+1E,扩展分区最多只好 有1个. 2 ...
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
OFFICE文档使用POI控件,PDF可以使用PDFBOX0.7.3控件,完全支持中文,用XPDF也行. java2word 是一个在java程序中调用 MS Office Word 文档的组件(类库 ...
- zip压缩文件转换为可传输byte[]流和不解压下读取指定zip包中文件
一.背景 最近做了一个项目,里面有这么一个需求:将zip文件存放到json字符串中.然后封装成报文发送给终端,终端在得到报文之后发送给终端,终端在获取到json字符串后读取内容并还原成zip文件包,而 ...
- java scel_使用java将搜狗词库.scel文件转化为.txt文件
需求:批量将.scel文件转化为可视的txt文件(支持1对1,多对1,多对多),并从中提取中文词(去重),支持追加内容. 成果: 使用: package com.hxl.files; import j ...
- ubuntu 查询程序崩溃日志_ubuntu查看系统日志及相关文件介绍
1.在ubuntu服务器上,日志是通过syslogd进程处理的.该进程读取如下配置文件: 该文件主要配置哪些信息需要记录日志,记录到什么地方. 在该配置文件的第一部分,是对系统设施日志的配置,主要有: ...
最新文章
- 《精通自动化测试框架设计》—第2章 2.3节测试数据交互基本方法
- Python 基础 - Day 5 Learning Note - 模块 之 标准库:xml (9)
- Windows7查看本地Java安装是否成功和路径的方法
- Hibernate中的一对多XML映射
- FIle类和递归方法的使用
- vue实现一个简单的购物车功能
- linux系统优化配置
- 机器是没有思想的,只会安装规定好的电路工作机器是没有思想的,只会安装规定好的电路工作
- C++面试题-指针-指针数组与数组指针
- RedisSingleUtils 工具类
- 计算机图形学_bresenham画线算法的最简洁实现(已验证)
- 在php中使用守护进程
- STL源码剖析(侯杰)——读书笔记
- 教你给视频画面打马赛克
- 数据结构 Java数据结构 --- 二叉树
- MTK平台 后视镜系列 声控参数调整方法
- think php5 离线手册,thinkphp5.0离线手册下载
- com lofter android,LOFTER
- 【中创福利】有一种年味叫公司发年货
- 登录Linux操作系统并执行第一个C语言代码