当前位置: 首页 > article >正文

第四十一篇,一次matlab与spdlog的合作

做了一次matlab解析spdlog日志文件并动态绘制行车轨迹的尝试,大获成功。

spdlog的存储,数据头有固定格式如下:

日志类型一个字符+空格+[日期时间]+空格+[日志内容tag]+空格+日志内容

有了固定的格式,做解析就好办了。

(日志内容格式自由,我设计的是多个数据间用英文逗号间隔,解析的时候一个split就行了)

这次解析,日志头是用不到的,所以像吃虾一样把头掐掉,代码如下:

function str = WashData(str)
i=1;
sign2 = 0;
while (i <= length(str))
    if (str(i) == ']')
        sign2 = sign2 + 1;
    end
    if sign2 == 2
        str = str(i+2 : length(str));
        return;
    end
    i = i + 1;
end
end
  1.  从spdlog的格式分析可知,只要找到第二个“]”就算把头找齐了,别的不用管,所以WashData()里前几行是找到第二个“]”的操作;
  2. 找到之后就可以做字符串截取了,注意还有一个空格别漏了,所以用了i+2;
  3. 截取完直接return返回即可;
  4. WashData()的IO接口用了MATLAB的引用技巧,即I和O参数做同样的命名,这样达到c/c++里引用传递的效果,节省空间与操作数;
  5. 传给WashData()的str是用fgetl()读取的一行日志字符串。

按理应该放上轨迹随时间动态变化的视频,但因为公司的电脑打了水印不方便录屏,就先不放了,脑补一下吧,主要就是用h=plot()画出xy,然后用while或for循环每帧delete(h)再重绘,就做成了动态变化的效果,代码如下,ts_打头的是上面解析出来的数据:

figure;
grid on;
hold on;

SampleTime = 0.02;
for i = 1 : 1 : DataCount
    title((i-1)*SampleTime);

    traj_size = 1 : 1 : ts_TrajSize(i,2);

    ego_x = ts_EgoX(i, 2);
    ego_y = ts_EgoY(i, 2);

    traj_x = ts_points_x(i, 2:ts_TrajSize(i,2)+1);
    traj_y = ts_points_y(i, 2:ts_TrajSize(i,2)+1);

    plot_traj = plot(traj_x, traj_y, 'r');
    plot_ego = plot(ego_x, ego_y, 'r-o');

    pause(SampleTime);
    delete(plot_traj);
    delete(plot_ego);
end


http://www.kler.cn/news/156716.html

相关文章:

  • 如何使用PostMan进行并发测试?
  • Ansible及其优势是什么?
  • Vue:Vue-dev开发者工具国内下载地址
  • 盘点2023年有哪些办公的效率工具
  • C语言--每日选择题--Day33
  • 苍穹外卖--导出运营数据Excel报表
  • 【go语言开发】Minio基本使用,包括环境搭建,接口封装和代码测试
  • mac mini只有键盘怎么连接蓝牙鼠标
  • 使用 PHPMailer 实现邮件的实时发送
  • Java中synchronized与Lock的区别与使用
  • CityEngine2023 shp数据城市与路网三维模型并导入UE5
  • 科普关于msvcp140.dll文件是什么内容,解决msvcp140.dll丢失的修复方法
  • Reactor网络线程模型
  • 第十五届蓝桥杯模拟赛(第二期 C++)
  • prometheus基础,结合node_exporter监控节点
  • docker配置redis主从、哨兵集群
  • css新闻链接案例
  • Clickhouse Join
  • 外包干了4年,技术退步太明显了。。。。。
  • Mac IDEA解决Maven项目命令行报错:command not found: mvn
  • [C国演义] 第二十三章
  • SpringBoot + Spring Cloud Alibaba + Nacos实现服务管理
  • Qt 网络通信
  • 【JavaEE】单例模式
  • 使用ESP8266驱动TFT显示屏
  • html/css中用float实现的盒子案例
  • virtualbox上win7企业微信CPU高问题
  • 企业微信协议开发,API接口调用
  • 大数据基础设施搭建 - 数据装载
  • C++ 系列 第五篇 C++ 算术运算符及类型转换