很多像我一样初学VTD的同学都可能遇到过只会使用rdbSniffer去打印当前的车辆位置信息,但是有时候将数据输出到excel或者csv文件里面来画图或者来做算法输入。这里将介绍一种最简单的方法。
首先打开VTD/Develop/Communication/RDBClientSample文件夹,里面会有很多.cpp文件和cpp转可执行文件的.sh文件,打开最基础的ExampleConsole.cpp文件,然后在488行的函数下面加上如下代码,可以将数据导出到文件夹中
#include <iostream>
#include <fstream>
void handleRDBitem(const double& simTime, const unsigned int& simFrame, RDB_OBJECT_STATE_t& item, bool isExtended) {
//下面是加入的代码,当前只是输出坐标,你也可以输出速度
std::ofstream outFile("output.csv", std::ios::app); // 打开一个名为output.csv的文件,以追加模式写入数据
if (!outFile.is_open()) {
std::cerr << "Error: Unable to open output file!" << std::endl;
return;
}
if (item.base.id == 1 || item.base.id == 2){
outFile << item.base.id << "," << item.base.pos.x << "," << item.base.pos.y << "," << item.base.pos.z << "\n";
}
outFile.close(); // 关闭文件,其中id是车辆的id,如果不需要输出特定的车辆就不需要id,一般id=1是主车,然后输出的格式可以参考我这个,也可以自己改
}
改完之后,创建一个.sh文件,代码如下:
#!/bin/bash
compile the RDB client example
g++ -o sample(自己输出的可执行文件) ../VtdFramework/VtdToolkit/src/Common/RDBHandler.cc CollisionTraPkg.cpp(修改后的cpp文件名) -I../VtdFramework/VtdToolkit/include
运行./sh文件,生成可执行文件sample。然后再运行VTD,同步运行./sample。会生成output.csv文件,打印效果如下:
想输出速度,加速度这些就直接改代码输出的参数就行,速度加速度的参数可以看前面的代码,也可以自己去RDB_OBJECT_STATE_t里面看。
(补充:VTD有自带的数据录入工具RDBViewer,也在tools里面,操作相对简单,但自己写的话可控性更强,有任何问题欢迎联系修改)