【移植Ardupilot的日志记录方法到linux上】

这篇具有很好参考价值的文章主要介绍了【移植Ardupilot的日志记录方法到linux上】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明

采用二进制文件记录,可在mission planer查看

  1. 支持所有数据类型记录
  2. 精巧移植方便
  3. 可直接在地面站绘制曲线查看
  4. 可导出生成mat文件在matlab上分析
    提供的日志目标结构
    【移植Ardupilot的日志记录方法到linux上】

日志结构组成

  1. 日志头
  2. 日志消息类型
  3. 消息长度
  4. 日志消息名称
  5. 数据类型标识
  6. 数据标签
  7. 数据单位
  8. 数据格式
    数据结构体定义:
// 用于定义日志记录格式的结构
struct LogStructure {
    uint8_t msg_type;
    uint8_t msg_len;
    const char *name;
    const char *format;
    const char *labels;
    const char *units;
    const char *multipliers;
};

日志写入操作

预定义日志项

该日志项为预先设定好,使用时无需在进行日志名称定义。
预先设置的日志项如下:

// 日志头声明处理
const struct LogStructure log_structure[] = {

  { LOG_FORMAT_MSG, sizeof(log_Format), \
      "FMT", "BBnNZ",      "Type,Length,Name,Format,Columns", "-b---", "-----" },
  { LOG_FORMAT_UNITS_MSG, sizeof(log_Format_Units), \
      "FMTU", "QBNN",      "TimeUS,FmtType,UnitIds,MultIds","s---", "F---" },
  {
    LOG_TEST_MSG, sizeof(struct log_TEST),
    "TEST", "QH",         "TimeUS,value","S-","F-"
  },
  { LOG_MESSAGE_MSG, sizeof(log_Message), \
    "MSG",  "QZ",     "TimeUS,Message", "s-", "F-"}, 
};

其中,LOG_FORMAT_MSG与LOG_FORMAT_UNITS_MSG是必须的,这个是地面站能够正常解析日志的关键,其他为用户自定义。
预先设置的日志写入函数:

// 预先定义类型的日志记录测试函数实体
void Write_Test(uint64_t time_us, uint16_t value)
{
  struct log_TEST pkt = {
    LOG_PACKET_HEADER_INIT(LOG_TEST_MSG),
    .time_us = time_us,
    .value   = value,
  };
  WriteBlock(&pkt, sizeof(pkt));
}

uint64_t micros64()
{
    uint64_t sys_time;
    //在此处赋值系统时间戳
    //sys_time = ;
    return sys_time;
}
// 在日志中写入文本消息的函数实体
bool Write_Message(const char *message)
{
    struct log_Message pkt{
        LOG_PACKET_HEADER_INIT(LOG_MESSAGE_MSG),
        time_us : micros64(),
        msg  : {}
    };
    strncpy(pkt.msg, message, sizeof(pkt.msg));
    return WriteBlock(&pkt, sizeof(pkt));
}

运行时添加日志项的方法

很多时候想临时添加一组日志来对某些状态进行记录分析,直接进行日志结构体构造会省很多事,所以专门提供了一个进行此操作的接口。

/* Write support */
void Write_Log(const char *name, const char *labels, const char *units, const char *mults, const char *fmt, ...)
{
    va_list arg_list;

    va_start(arg_list, fmt);
    WriteV(name, labels, units, mults, fmt, arg_list);
    va_end(arg_list);
}

单例测试

主函数代码:
主要实现了日志初始化,对预先设定的日志项进行一百次的写入,之后对文本消息进行写入操作。

int main()
{
    //初始化日志
    Log_Init();

    //循环写入100次各项日志
    for(uint16_t i=0; i<100; i++){
        Write_Test(i,i);                //预先写好的日志实体测试
        Write_Log("WTS","T1,T2,T3",     //运行时添加的任意日志
            "s--","F--","HHH",
            i,i,i);

        Write_Log_test();               //写入不同数据类型的数据
    }

    //以下为消息日志记录,每次写入的字符串不能大于64字节
    Write_Message("This logging method is applicable to Linux systems");
    Write_Message("In the case of MCU system with SD card,");
    Write_Message("it is also necessary to adjust the write function");
    Write_Message("Take a closer look at the WriteBlock function");
    
    return 0;
}

编译方法

  1. 进入logts目标,创建build文件夹
mkdir build
  1. 进入build目录
cd build
  1. 运行cmake
cmake ..
  1. 编译源码
make

【移植Ardupilot的日志记录方法到linux上】
运行demo

./log

可看到在build目录下生成了log1.bin文件,该文件即为我们需要的日志文件,此时可使用地面站打开次文件查看相关内容
【移植Ardupilot的日志记录方法到linux上】

查看数据

  1. 查看常规数据
    打开mission planner地面站,选择回顾日志,打开log1.bin,选择对应的日志项勾选对应的标签即可查看数据。
    【移植Ardupilot的日志记录方法到linux上】
  2. 查看文本消息日志
    勾选Data Table,再对消息进行滤波,选择MSG日志项。
    【移植Ardupilot的日志记录方法到linux上】
    【移植Ardupilot的日志记录方法到linux上】
    文件日志也可以在该界面上右键导出csv文件。
  3. 导出成matlab文件可使用地面站的创建matlab文件 功能

其他

  1. 将本例程放入到实际系统去时还需要考虑每次开始记录时按照递进的方式对文件名曾1,否则会直接在文件尾继续写入新数据。
  2. 若在MCU上使用,则需要另外封装读写函数,主要是WriteBlock函数

资料下载链接:
https://download.csdn.net/download/qq_39016531/87720027文章来源地址https://www.toymoban.com/news/detail-427725.html

到了这里,关于【移植Ardupilot的日志记录方法到linux上】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 全志F1C100s主线linux入坑记录 (4)GT911触摸移植

    百度网站 在 drivers/input/touchscreen 路径下添加gt911.c文件 修改Makefile 添加gt911.c的文件编译 drivers/input/touchscreen/Makefile 添加obj-y += gt911.o 添加I2C属性定义 到soc节点下 添加I2C引脚定义 到pio节点下 修改LCD的引脚定义,因为有两个脚被I2C占用了 添加头文件 添加gt911设备树配置 编译文

    2023年04月14日
    浏览(86)
  • 全志F1C100s主线linux入坑记录 (7)GBA模拟器移植

    百度网站 gpsp源码 解压文件 gpsp需要SDL环境我们先在bulidroot中添加SDL包 我们全选SDL路径下的所有选项 打开之前解压的 gpsp 文件夹配置Makefile 添加 buildroot 的 gcc 编译器 告知 SDL.h 位置以及 SDL 元件库位置 其实很简单在buildroot文件夹搜索 sdl-config 位置在哪里,然后在Makfike里替换

    2024年02月16日
    浏览(31)
  • 查看linux ssh登陆日志记录

    要查看Linux用户是使用密钥登录还是密码登录,可以通过检查系统日志文件来获取相关信息。在CentOS 7系统中,系统日志通常存储在/var/log目录下,主要包括secure日志文件。 以下是通过查看secure日志文件来确定用户是使用密钥登录还是密码登录的步骤: 打开终端或SSH连接到C

    2024年02月13日
    浏览(85)
  • 【Linux】记录错误信息日志的实现

    我们这个设计的日志可以自定以输出的方向,可以向显示器打印错误信息,也可以向指定目录写入,或者是分类写入 这里我们以命名管道之间两个进程传递信息为场景使用这个日志功能

    2024年02月05日
    浏览(62)
  • 分享一种快速移植OpenHarmony Linux内核的方法

    本文面向希望将 OpenHarmony 移植到三方芯片平台硬件的开发者,介绍一种借助三方芯片平台自带 Linux 内核的现有能力,快速移植 OpenHarmony 到三方芯片平台的方法。 内核态层和用户态层 为了更好的解释整个内核移植,首先需要介绍一些概念: 我们可以把 OpenHarmony 简单的分为

    2024年04月26日
    浏览(52)
  • linux系统重启 查看相关日志和历史记录

    last 命令不仅可以按照时间从近到远的顺序列出该会话的特定用户、终端和主机名,而且还可以列出指定日期和时间登录的用户。输出到终端的每一行都包括用户名、会话终端、主机名、会话开始和结束的时间、会话持续的时间. 使用 last 命令来查询最近登录到系统的用户和系

    2024年02月13日
    浏览(106)
  • python | Logging日志标准库的常见使用方法(手搓日志记录装饰器)

    日志级别从低到高分为: DEBUG INFO WARNING ERROR CRITICAL 使用前需要设置记录的日志级别,只有大等于该日志级别的日志才会被记录。 例如,设置日志级别为 WARNING ,则 WARNING 、 ERROR 、 CRITICAL 三种级别的日志才会被记录。 运行这段代码,可以在控制台看到以下输出: 可以自定义

    2024年02月11日
    浏览(40)
  • SQL Server 中查看代理作业记录日志的方法有哪些?

    在实际应用中,我们可以通过 Microsoft SQL Server Management Studio、Transact-SQL 或 SQL Server 管理对象在 SQL Server 中查看代理作业历史记录日志: 1、打开 Microsoft SQL Server Management Studio,然后点击文件,连接资源对象管理器,连接到 SQL Server 数据库引擎的实例 2、展开该实例,然后展开

    2024年02月04日
    浏览(44)
  • Secure CRT 自动记录日志和时间戳功能配置的方法

    我是开始工作后才使用SecureCRT,一直没记录过日志不过搜了下,看看这功能不错,可以看看自己做什么,有时甚至可以看看之前是不是犯了什么错,很不错的功能所以我也决定开始记录日志,设置很简单,不过我自己瞎捣鼓发现还可以自动分文件夹,不知道大家是否都知道,因

    2024年02月07日
    浏览(37)
  • stlink下载调试器使用说明(STM32采用stlink下载程序)

    stlink能干什么?  最基本的功能:下载程序。  一般STM32支持ISP串口下载,也支持stlink、jlink等下载器下载 。 使用stlink、jlink下载要比串口方便很多,在keil里直接点击下载就行了,不需要去选择hex文件,速度上要快很多,主要一点,jlink、stlink能实现硬件仿真调试,程序出问

    2024年02月02日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包