mars_lib  0.1.0.3dc76ee85e09
Modular and Robust Sensor-Fusion
read_sim_data.h
Go to the documentation of this file.
1 // Copyright (C) 2021 Christian Brommer, Control of Networked Systems, University of Klagenfurt, Austria.
2 //
3 // All rights reserved.
4 //
5 // This software is licensed under the terms of the BSD-2-Clause-License with
6 // no commercial use allowed, the full terms of which are made available
7 // in the LICENSE file. No license in patents is granted.
8 //
9 // You can contact the author at <christian.brommer@ieee.org>
10 
11 #ifndef READ_SIM_DATA_H
12 #define READ_SIM_DATA_H
13 
16 #include <mars/time.h>
20 #include <Eigen/Dense>
21 #include <vector>
22 
23 namespace mars
24 {
26 {
27 public:
28  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
29 
30  ReadSimData(std::vector<BufferEntryType>* data_out, std::shared_ptr<SensorAbsClass> sensor,
31  const std::string& file_path)
32  {
33  std::vector<std::string> expect_entry = {
34  "t", "a_x", "a_y", "a_z", "w_x", "w_y", "w_z", "p_x", "p_y", "p_z", "v_x", "v_y",
35  "v_z", "q_w", "q_x", "q_y", "q_z", "ba_x", "ba_y", "ba_z", "bw_x", "bw_y", "bw_z",
36  };
37 
38  CsvDataType csv_data;
39  ReadCsv(&csv_data, file_path);
40 
41  unsigned long number_of_datapoints = csv_data["t"].size();
42  data_out->resize(number_of_datapoints);
43 
44  CoreStateType core_ground_truth;
45 
46  for (size_t k = 0; k < number_of_datapoints; k++)
47  {
48  Time time = csv_data["t"][k];
49 
50  Eigen::Vector3d w_imu(csv_data["w_x"][k], csv_data["w_y"][k], csv_data["w_z"][k]);
51  Eigen::Vector3d a_imu(csv_data["a_x"][k], csv_data["a_y"][k], csv_data["a_z"][k]);
52  Eigen::Vector3d p(csv_data["p_x"][k], csv_data["p_y"][k], csv_data["p_z"][k]);
53  Eigen::Vector3d v(csv_data["v_x"][k], csv_data["v_y"][k], csv_data["v_z"][k]);
54  Eigen::Quaterniond q(csv_data["q_w"][k], csv_data["q_x"][k], csv_data["q_y"][k], csv_data["q_z"][k]);
55  q = Utils::NormalizeQuaternion(q, "sim csv reader");
56 
57  Eigen::Vector3d bGyr(csv_data["bw_x"][k], csv_data["bw_y"][k], csv_data["bw_z"][k]);
58  Eigen::Vector3d bAcc(csv_data["ba_x"][k], csv_data["ba_y"][k], csv_data["ba_z"][k]);
59 
60  CoreStateType core_ground_truth;
61  core_ground_truth.p_wi_ = p;
62  core_ground_truth.q_wi_ = q;
63  core_ground_truth.v_wi_ = v;
64  core_ground_truth.b_w_ = bGyr;
65  core_ground_truth.b_a_ = bAcc;
66 
67  BufferDataType data;
68  // TODO
69  // data.set_core_state(std::make_shared<CoreStateType>(core_ground_truth));
70  data.set_measurement(std::make_shared<IMUMeasurementType>(a_imu, w_imu));
71 
72  BufferEntryType current_entry(time, data, sensor);
73  data_out->at(k) = current_entry;
74  }
75  }
76 };
77 } // namespace mars
78 
79 #endif // READ_SIM_DATA_H
The BufferDataType binds the core and sensor state in form of a shared void pointer.
Definition: buffer_data_type.h:36
void set_measurement(std::shared_ptr< void > meas)
Definition: buffer_data_type.h:75
Definition: buffer_entry_type.h:41
Definition: core_state_type.h:21
Eigen::Vector3d v_wi_
Definition: core_state_type.h:28
Eigen::Vector3d b_a_
Definition: core_state_type.h:31
Eigen::Vector3d b_w_
Definition: core_state_type.h:30
Eigen::Vector3d p_wi_
Definition: core_state_type.h:27
Eigen::Quaternion< double > q_wi_
Definition: core_state_type.h:29
Definition: read_csv.h:30
Definition: read_sim_data.h:26
EIGEN_MAKE_ALIGNED_OPERATOR_NEW ReadSimData(std::vector< BufferEntryType > *data_out, std::shared_ptr< SensorAbsClass > sensor, const std::string &file_path)
Definition: read_sim_data.h:30
Definition: time.h:20
static Eigen::Quaterniond NormalizeQuaternion(const Eigen::Quaterniond &quat, std::string note="")
Definition: buffer.h:27
std::map< std::string, std::vector< double > > CsvDataType
Definition: read_csv.h:26