
读取csv文件中的数据,并保存为二维数组。
vector<vector<double>> read_gt_file(string filename){
ifstream inFile(filename, ios::in);
string lineStr;
char delim=',';
vector<vector<double>> matrix;
if(inFile.fail()){
cout <<"Read files fail....."<<endl;
return matrix;
}
while (getline(inFile, lineStr)) {
stringstream ss(lineStr);
string str;
vector<double> lineArray;
// cut apart by flag
while (getline(ss, str, delim))
lineArray.push_back(std::stod(str));
matrix.push_back(lineArray);
}
return matrix;
}
如果有做slam的需要,当位姿数据的存储格式为TUM格式(具体形式为:)
timestamp x y z q_x q_y q_z q_w
这时读取位姿数据可以使用如下版本:
#include "Eigen/Core"
#include "Eigen/Geometry"
vector<Eigen::Matrix4d> read_gt_file(string filename){
ifstream inFile(filename, ios::in);
string lineStr;
char delim=' ';
if(inFile.fail()){
cout <<"Read files fail....."<<endl;
Eigen::Matrix4d::Identity();
}
vector<Eigen::Matrix4d> gt_poses;
while (getline(inFile, lineStr)) {
Eigen::Matrix4d gt_pose = Eigen::Matrix4d::Identity();
stringstream ss(lineStr);
string str;
vector<double> lineArray;
// cut apart by flag
while (getline(ss, str, delim))
lineArray.push_back(std::stod(str));
Eigen::Quaterniond q(lineArray[7], lineArray[4], lineArray[5], lineArray[6]);
gt_pose.block<3,3>(0, 0) = q.toRotationMatrix();
gt_pose.block<3,1>(0, 3) = Eigen::Vector3d(lineArray[1], lineArray[2], lineArray[3]);
gt_poses.push_back(gt_pose);
}
return gt_poses;
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)