PX4模块设计之十五:PX4 Log设计

2023-05-16

PX4模块设计之十五:PX4 Log设计

  • 1. PX4 Log介绍
  • 2. ULog文件格式
    • 2.1. ULog文件结构
    • 2.2. ULog文件头结构
    • 2.3. ULog消息结构定义
      • 2.3.1 B: Flag Bits 消息
      • 2.3.2 F: Format 消息
      • 2.3.3 I: Information 消息
      • 2.3.4 M: Multi Information 消息
      • 2.3.5 P: Parameter 消息
      • 2.3.6 Q: Default Parameter 消息
    • 2.4. ULog数据结构定义
      • 2.4.1 A: Subscription 消息
      • 2.4.2 R: Unsubscription 消息
      • 2.4.3 D: Logged Data 消息
      • 2.4.4 【*】L: Logged String 消息
      • 2.4.5 【*】C: Tagged Logged String 消息
      • 2.4.6 S: Synchronization 消息
      • 2.4.7 O: Dropout 消息
      • 2.4.8 I: Information 消息
      • 2.4.9 M: Multi Information 消息
      • 2.4.10 P: Parameter 消息
      • 2.4.11 Q: Default Parameter 消息
  • 3. Logger模块
  • 4. Replay模块
  • 5. Hardfault模块
  • 6. 参考资料

1. PX4 Log介绍

PX4 Log主要是用于记录飞控内部数据状态和信息,应用场景主要有以下几种:

  1. 黑匣子数据记录
  2. 模拟飞行重现
  3. 程序异常记录

为此,PX4 Log在设计上通过以下进行切割:

  1. ULog文件格式
  2. Logger模块
  3. Replay模块
  4. HardFault模块

2. ULog文件格式

2.1. ULog文件结构

  +--------------------+
  |       Header       |
  +--------------------+
  |    Definitions     |
  +--------------------+
  |        Data        |
  +--------------------+

2.2. ULog文件头结构

文件头结构

  +------------------------------------+--------------+----------------+
  | 0x55 0x4c 0x6f 0x67 0x01 0x12 0x35 | 0x01         | uint64_t       |
  | File magic (7B)                    | Version (1B) | Timestamp (8B) |
  +------------------------------------+--------------+----------------+
  • File Magic (7 Bytes): File type indicator that reads “ULogXYZ where XYZ is the magic bytes sequence 0x01 0x12 0x35”
  • Version (1 Byte): File format version (currently 1)
  • Timestamp (8 Bytes): uint64_t integer that denotes when the logging started in microseconds

2.3. ULog消息结构定义

消息体中的消息头结构

struct message_header_s {
  uint16_t msg_size;
  uint8_t msg_type;
};

2.3.1 B: Flag Bits 消息

struct ulog_message_flag_bits_s {
  struct message_header_s header; // msg_type = 'B'
  uint8_t compat_flags[8];
  uint8_t incompat_flags[8];
  uint64_t appended_offsets[3]; // file offset(s) for appended data if appending bit is set
};

2.3.2 F: Format 消息

struct message_format_s {
  struct message_header_s header; // msg_type = 'F'
  char format[header.msg_size];
};

2.3.3 I: Information 消息

struct ulog_message_info_header_s {
  struct message_header_s header; // msg_type = 'I'
  uint8_t key_len;
  char key[key_len];
  char value[header.msg_size-1-key_len]
};

2.3.4 M: Multi Information 消息

struct ulog_message_info_multiple_header_s {
  struct message_header_s header; // msg_type = 'M'
  uint8_t is_continued; // can be used for arrays
  uint8_t key_len;
  char key[key_len];
  char value[header.msg_size-2-key_len]
};

2.3.5 P: Parameter 消息

struct message_info_s {
  struct message_header_s header; // msg_type = 'P'
  uint8_t key_len;
  char key[key_len];
  char value[header.msg_size-1-key_len]
};

2.3.6 Q: Default Parameter 消息

struct ulog_message_parameter_default_header_s {
  struct message_header_s header; // msg_type = 'Q'
  uint8_t default_types;
  uint8_t key_len;
  char key[key_len];
  char value[header.msg_size-2-key_len]
};

2.4. ULog数据结构定义

2.4.1 A: Subscription 消息

struct message_add_logged_s {
  struct message_header_s header; // msg_type = 'A'
  uint8_t multi_id;
  uint16_t msg_id;
  char message_name[header.msg_size-3];
};

2.4.2 R: Unsubscription 消息

struct message_remove_logged_s {
  struct message_header_s header; // msg_type = 'R'
  uint16_t msg_id;
};

2.4.3 D: Logged Data 消息

struct message_data_s {
  struct message_header_s header; // msg_type = 'D'
  uint16_t msg_id;
  uint8_t data[header.msg_size-2];
};

2.4.4 【*】L: Logged String 消息

struct message_logging_s {
  struct message_header_s header; // msg_type = 'L'
  uint8_t log_level;
  uint64_t timestamp;
  char message[header.msg_size-9]
};

2.4.5 【*】C: Tagged Logged String 消息

struct message_logging_tagged_s {
  struct message_header_s header; // msg_type = 'C'
  uint8_t log_level;
  uint16_t tag;
  uint64_t timestamp;
  char message[header.msg_size-9]
};

2.4.6 S: Synchronization 消息

struct message_sync_s {
  struct message_header_s header; // msg_type = 'S'
  uint8_t sync_magic[8];
};

2.4.7 O: Dropout 消息

struct message_dropout_s {
  struct message_header_s header; // msg_type = 'O'
  uint16_t duration;
};

2.4.8 I: Information 消息

略:与3.3 I: Information 消息共用同样的消息结构体

2.4.9 M: Multi Information 消息

略:与3.4 M: Multi Information 消息共用同样的消息结构体

2.4.10 P: Parameter 消息

略:与3.5 P: Parameter 消息共用同样的消息结构体

2.4.11 Q: Default Parameter 消息

略:与3.6 Q: Default Parameter 消息共用同样的消息结构体

3. Logger模块

pxh> logger

### Description
System logger which logs a configurable set of uORB topics and system printf messages
(`PX4_WARN` and 
Usage: logger <command> [arguments...]
 Commands:

   start
     [-m <val>]  Backend mode
                 values: file|mavlink|all, default: all
     [-x]        Enable/disable logging via Aux1 RC channel
     [-e]        Enable logging right after start until disarm (otherwise only when armed)
     [-f]        Log until shutdown (implies -e)
     [-t]        Use date/time for naming log directories and files
     [-r <val>]  Log rate in Hz, 0 means unlimited rate
                 default: 280
     [-b <val>]  Log buffer size in KiB
                 default: 12
     [-p <val>]  Poll on a topic instead of running with fixed rate (Log rate and topic intervals are ignored if this i
                 values: <topic_name>
     [-c <val>]  Log rate factor (higher is faster)
                 default: 1.0

   on            start logging now, override arming (logger must be running)

   off           stop logging now, override arming (logger must be running)

   stop

   status        print status info

注:模块细节后续给出进一步研究和分析。

4. Replay模块

pxh> replay

### Description
This module is used to replay ULog files.

There are 2 environment variables used for configuration: `
Usage: replay <command> [arguments...]
 Commands:

   start         Start replay, using log file from ENV variable 'replay'

   trystart      Same as 'start', but silently exit if no log file given

   tryapplyparams Try to apply the parameters from the log file

   stop

   status        print status info

注:模块细节后续给出进一步研究和分析。

5. Hardfault模块

pxh> hardfault_log

### Description
Hardfault utility

Used in startup scripts to handle hardfaults
Usage: hardfault_log                   command
   check         Check if there's an uncommited hardfault
   rearm         Drop an uncommited hardfault
   fault         Generate a hardfault (this command crashes the system :)
			     0|1 Hardfault type: 0=divide by 0, 1=Assertion (default=0)
   commit        Write uncommited hardfault to /fs/microsd/fault_-1816558944.txt (and rearm, but don't reset)
   count         Read the reboot counter, counts the number of reboots of an uncommited hardfault (returned as the exit code of the program)
   reset         Reset the reboot counter

注:模块细节后续给出进一步研究和分析。

6. 参考资料

【1】PX4开源软件框架简明简介
【2】PX4 Logging
【3】PX4 ULog File Format
【4】PX4 logger模块
【5】PX4 replay模块
【6】PX4 hardfault log模块

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4模块设计之十五:PX4 Log设计 的相关文章

  • Linux下抓取串口log

    1 准备 串口线一条 手机一个 2 步骤 1将串口线插入电脑USB口 xff0c 开启另一个终端查看串口设备名 xff0c 输入下面命令 xff1a dmesg 2找到最下面一行 xff0c 尾部即是串口设备名称 xff0c 我这里叫做 t
  • 初学PX4之环境搭建

    文章转自 xff1a http www jianshu com p 36dac548106b 前言 前段时间linux崩溃了 xff0c 桌面进去后只有背景 xff0c 折腾好久没搞定 xff0c 为了节省时间索性重装了系统 xff0c 同
  • 无人机仿真—PX4编译,gazebo仿真及简单off board控制模式下无人机起飞

    无人机仿真 PX4编译 xff0c gazebo仿真及简单off board控制模式下无人机起飞 前言 在上篇记录中 xff0c 已经对整体的PX4仿真环境有了一定的了解 xff0c 现如今就要开始对无人机进行起飞等仿真环境工作 xff0c
  • PX4 ---- Indoor Flight

    文章目录 室内飞行ROS amp PX4Pose Data 飞机配置MAVROS 基于工训赛 VIO 飞行总结 室内飞行 ROS amp PX4 Pose Data 飞机配置 VIO 参考此处 xff0c 采用 T265 配置 相机与飞控机
  • PX4模块设计之九:PX4飞行模式简介

    PX4模块设计之九 xff1a PX4飞行模式简介 关于模式的探讨1 需求角度1 1 多旋翼 MC multi copter 1 1 1 RC控制模式1 1 1 1 Position Mode1 1 1 2 Altitude Mode1 1
  • PX4模块设计之十一:Built-In框架

    PX4模块设计之十一 xff1a Built In框架 1 Nuttx Built In框架2 PX4 Built In框架2 1 NSH Built In关联文件2 2 NSH Built In关联文件生成2 3 NSH Built In
  • PX4模块设计之十七:ModuleBase模块

    PX4模块设计之十七 xff1a ModuleBase模块 1 ModuleBase模块介绍2 ModuleBase类介绍3 ModuleBase类功能介绍3 1 模块入口3 2 模块启动3 3 模块停止3 4 状态查询3 5 任务回调3
  • PX4模块设计之三十九:Commander模块

    PX4模块设计之三十九 xff1a Commander模块 1 Commander模块简介2 模块入口函数2 1 主入口commander main2 2 自定义子命令custom command 3 Commander模块重要函数3 1
  • PX4模块设计之四十六:dataman模块

    PX4模块设计之四十六 xff1a dataman模块 1 dataman模块简介2 模块入口函数dataman main3 dataman模块重要函数3 1 start3 2 stop3 3 status3 4 task main 4 A
  • PX4模块设计之四十七:mavlink模块

    PX4模块设计之四十七 xff1a mavlink模块 1 mavlink模块简介2 模块入口函数mavlink main3 mavlink模块重要函数3 1 Mavlink start3 2 Mavlink task main3 3 Ma
  • PX4-4-任务调度

    PX4所有的功能都封装在独立的模块中 xff0c uORB是任务间数据交互和同步的工具 xff0c 而管理和调度每个任务 xff0c PX4也提供了一套很好的机制 xff0c 这一篇我们分享PX4的任务调度机制 我们以PX4 1 11 3版
  • px4无人机常识介绍(固件,px4等)

    专业名词解释 aircraft 任何可以飞或者可以携带物品还是搭载旅客的飞行器统称为飞机 航空器 uav 无人驾驶飞机 vehicle 飞行器 airplane plane aero plane 有机翼和一个或多个引擎的飞行器统称为飞机 D
  • PX4之常用函数解读

    PX4Firmware 经常有人将Pixhawk PX4 APM还有ArduPilot弄混 这里首先还是简要说明一下 xff1a Pixhawk是飞控硬件平台 xff0c PX4和ArduPilot都是开源的可以烧写到Pixhawk飞控中的
  • PX4:Policy “CMP0097“ is not known to this version of CMake.

    make px4 fmu v3 时报的错 CMake版本的问题 由https blog csdn net zhizhengguan article details 118380965推测 xff0c 删除cmake policy也没事 ma
  • 大神浅谈无人机飞控软件设计 系统性总结

    写在前面 深感自己对飞控软件 算法的知识点过于杂乱 很久没有进行系统的总结了 因此决定写几篇文章记录一些飞控开发过程的知识点 主要是针对一些软件 算法部分进行讨论 如内容有错误 欢迎指出 1 飞控软件的基本模块 无人机能够飞行主要是依靠传感
  • 如何考虑BLL层和DAL层的日志

    DAL层日志 DAL层与数据库交互 日志记录的目的是 1 发生异常时通过日志查找原始信息 便于快速定位原因 2 对于一些复杂的事务可以通过对日志的分析来发现错误的具体位置 BLL层日志 BLL层与UI交互 虽然UI已经对用户输入进行了一些过
  • 阿里云 日志服务接入

    目前项目中都有用到日志记录 一般会存到本地 但是时间长了 去删除也是很麻烦的 阿里云日志服务 是个不错的选择 可分为两种 自动采集和自动上传到云 1 写文件到本地 然后配置 让阿里云自动采集 LogHub 支持客户端 网页 协议 SDK A
  • 飞行姿态解算(三)

    继之前研究了一些飞行姿态理论方面的问题后 又找到了之前很流行的一段外国大神写的代码 来分析分析 第二篇文章的最后 讲到了文章中的算法在实际使用中有重大缺陷 大家都知道 分析算法理论的时候很多情况下我们没有考虑太多外界干扰的情况 原因是很多情
  • 如何使用 Rsyslog 和 MySQL 设置 LogAnalyzer

    本文是文章的第二部分使用 MySQL 和 LogAnalyzer 设置 Rsyslog在 CentOS RHEL 系统上 在里面第一部分我们已经将Rsyslog与MySQL数据库服务器集成 所有日志现在都保存在数据库中 下面是我们在第 1
  • 04-Qt软件加入Log文件输出与终端彩色打印(包含行号)

    一 目的与需求 在开发qt应用程序中 经常使用打印调试软件 qt自己的qDebug 就满足了需求 但是当需要把一部分log记录到文件的时候qt就没有提供了 这个时候可以使用qDebug 的qInstallMsgHandler来指定打印回掉函

随机推荐

  • 四轴飞控DIY集成FPV功能

    四轴飞控DIY集成FPV功能 1 功能需求2 概念介绍2 1 制式2 2 显示分辨率2 3 摄像头线数高于700线低于700线 3 需求分析4 组件选择5 接线组装5 1 摄像头接线5 2 图传接线 6 组装位置7 FPV功能调试7 1 摄
  • MFC拷贝文件及进度条显示

    参考 xff1a 封装CopyFileEx函数 xff0c 实现文件复制中的暂停 xff0c 控速 xff0c 获取进度 http blog csdn net career2011 article details 6844513 实例讲解C
  • BetaFlight模块设计之三十二:MSP协议模块分析

    BetaFlight模块设计之三十二 xff1a MSP协议模块分析 1 MSP协议模块1 1 MSP描述1 2 MSP版本优缺点1 3 MSP代码资源 2 MSP报文解析2 1 MSP收包状态机2 2 MSP报文格式 3 MSP报文处理3
  • BetaFlight模块设计之三十三:Pid模块分析

    BetaFlight模块设计之三十三 xff1a Pid模块分析 Pid模块1 Pid audio子模块2 Pid init子模块3 Pid算法子模块3 1 TPA模式3 2 飞行模式3 3 Launch模式3 4 AcroTrainer模
  • BetaFlight模块设计之三十四:OSD模块分析

    BetaFlight模块设计之三十四 xff1a OSD模块分析 1 OSD模块1 1 osd状态机子模块1 2 osd warnings检查子模块1 3 osd elements子模块 2 OSD设备 驱动及适配框架2 1 OSD设备2
  • ssh无法远程登陆问题汇总

    ssh无法远程登陆问题汇总 1 ssh服务是否已经启动1 1 sshd服务是否已经安装1 2 sshd是否已经启动 2 检查sshd配置3 检查路由情况4 检查hosts许可文件5 检查防火墙问题5 1 检查防火墙是否启动5 2 修改防火墙
  • traceroute命令结果分析

    traceroute命令结果分析 1 基本原理2 IP地址种类2 1 A类IP地址2 2 B类IP地址2 3 C类IP地址2 4 D类地址用于多点广播 Multicast 2 5 E类IP地址 3 测试3 1 第一次3 2 第二次 4 总结
  • bash脚本返回值应用

    bash脚本返回值应用 应该说bash脚本对于linux系统来说具有举足轻重的意义 这里不做展开 xff0c 也不做bash脚本介绍 更多的是做一个例子 xff0c 应用了bash脚本的以下特性 xff1a 输入参数函数定义调用可执行命令脚
  • 如何理解printf变参函数的实现

    如何理解printf变参函数的实现 1 printf函数变参的问题2 printf函数定义和解释2 1 printf函数定义2 2 Linux Man page解释 https man7 org linux man pages man3 s
  • BetaFlight模块设计之三十五:RSSI信号强度&链路稳定性分析

    BetaFlight模块设计之三十五 xff1a RSSI信号强度 amp 链路稳定性分析 1 RSSI信号强度1 1 RSSI Value1 2 RSSI dBm Value 2 链路稳定性3 RSSI amp LinkQuality来源
  • Linux的so组件设计框架及逻辑

    Linux的so组件设计框架及逻辑 1 组件关注点1 1 组件定义关注点1 2 组件业务关注点 2 so特性3 so组件设计逻辑4 so组件设计框架4 1 so组件范例4 2 so隐式调用范例4 3 so显式调用范例 5 so组件设计建议
  • PX4模块设计之八:Ubuntu 20.04搭建FlightGear模拟器

    PX4模块设计之八 xff1a Ubuntu 20 04搭建FlightGear模拟器 1 使用FlightGear的源由2 FlightGear模拟器简介3 Ubuntu 20 04搭建FlightGear步骤3 1 设置flightge
  • 封装CopyFileEx函数,实现文件复制中的暂停,控速,获取进度

    封装CopyFileEx函数 xff0c 实现文件复制中的暂停 xff0c 控速 xff0c 获取进度等 前段时间无意间想到如何控制文件复制过程的复制速度 xff0c 并且能实时获得复制进度 对于一个几兆甚至更小的文件 xff0c 调用AP
  • PX4模块设计之九:PX4飞行模式简介

    PX4模块设计之九 xff1a PX4飞行模式简介 关于模式的探讨1 需求角度1 1 多旋翼 MC multi copter 1 1 1 RC控制模式1 1 1 1 Position Mode1 1 1 2 Altitude Mode1 1
  • PX4模块设计之十:PX4启动过程

    PX4模块设计之十 xff1a PX4启动过程 1 硬件 飞控硬件上电2 硬件 飞控硬件初始化3 硬件 43 软件 飞控bootloader初始化4 硬件 43 软件 飞控系统初始化5 软件 飞控应用初始化6 配置 SD卡配置文件6 1 e
  • PX4模块设计之十一:Built-In框架

    PX4模块设计之十一 xff1a Built In框架 1 Nuttx Built In框架2 PX4 Built In框架2 1 NSH Built In关联文件2 2 NSH Built In关联文件生成2 3 NSH Built In
  • PX4模块设计之十二:High Resolution Timer设计

    PX4模块设计之十二 xff1a High Resolution Timer设计 1 HRT模块特性2 HRT模块基本功能2 1 循环触发接口2 2 延迟触发接口2 3 定时触发接口2 4 其他功能 3 HRT模块精度3 1 精度粒度3 2
  • PX4模块设计之十三:WorkQueue设计

    PX4模块设计之十三 xff1a WorkQueue设计 1 WorkQueue启动2 WorkQueue接口2 1 基本接口2 2 辅助接口2 3 WorkQueue任务函数2 3 1 Flat Build2 3 2 Protected
  • PX4模块设计之十四:Event设计

    PX4模块设计之十四 xff1a Event设计 1 Event主要接口1 1 字符串消息接口1 2 参数消息接口1 3 内部uORB实现 2 PX4 Events框架2 1 配置文件2 2 内嵌代码 3 使用方法3 1 Step 1 xf
  • PX4模块设计之十五:PX4 Log设计

    PX4模块设计之十五 xff1a PX4 Log设计 1 PX4 Log介绍2 ULog文件格式2 1 ULog文件结构2 2 ULog文件头结构2 3 ULog消息结构定义2 3 1 B Flag Bits 消息2 3 2 F Forma