14 errorMsgs.emplace_back(msg);
17 return errorMsgs.size() != 0;
63 else if (tp < simStartTimePt)
76 std::vector<std::pair<SENSTimePt, SENSGps::Location>> gpsData;
78 std::vector<std::pair<SENSTimePt, SENSOrientation::Quat>> orientationData;
80 std::vector<std::pair<SENSTimePt, int>> cameraData;
81 std::string videoFileName;
89 bool initialized =
false;
93 if (orientationData.size())
95 if (cameraData.size())
101 _clock = std::make_unique<SENSSimClock>(SENSClock::now(), simStartTimePt);
113 if (orientationData.size())
116 _activeSensors.push_back(std::unique_ptr<SENSSimulatedOrientation>(
119 std::move(orientationData),
123 if (cameraData.size())
129 std::move(cameraData),
137 Utils::log(
"SENS",
"SENSSimulator: Directory does not exist: %s", simDirName.c_str());
141 Utils::log(
"SENS",
"SENSSimulator: Exception while parsing sensor files");
158 bool aSensorIsRunning =
false;
163 aSensorIsRunning =
true;
168 if (!aSensorIsRunning)
187 std::string gpsFileName = dirName +
"gps.txt";
192 ifstream file(gpsFileName);
195 while (std::getline(file, line))
198 long long readTimePt;
200 std::vector<std::string> values;
202 if (values.size() == 5)
204 readTimePt = std::stoll(values[0]);
212 data.push_back(std::make_pair(tPt, loc));
218 Utils::log(
"SENS",
"SENSSimulator: Unable to open file: %s", gpsFileName.c_str());
224 std::string orientationFileName = dirName +
"orientation.txt";
229 ifstream file(orientationFileName);
232 while (std::getline(file, line))
235 long long readTimePt;
237 std::vector<std::string> values;
239 if (values.size() == 5)
241 readTimePt = std::stoll(values[0]);
242 quat.
quatX = std::stof(values[1]);
243 quat.
quatY = std::stof(values[2]);
244 quat.
quatZ = std::stof(values[3]);
245 quat.
quatW = std::stof(values[4]);
249 data.push_back(std::make_pair(tPt, quat));
255 Utils::log(
"SENS",
"SENSSimulator: Unable to open file: %s", orientationFileName.c_str());
260 std::vector<std::pair<SENSTimePt, int>>& data,
261 std::string& videoFileName,
264 std::string textFileName = dirName +
"camera.txt";
265 videoFileName = dirName +
"video.avi";
266 std::string configFileName = dirName +
"cameraConfig.json";
274 fs.open(configFileName, cv::FileStorage::READ);
277 fs[
"deviceId"] >> cameraConfig.
deviceId;
282 fs[
"focusMode"] >> focusMode;
285 fs[
"facing"] >> facing;
289 Utils::log(
"SENS",
"SENSSimulator: Unable to open file: %s ", configFileName.c_str());
295 ifstream file(textFileName);
298 while (std::getline(file, line))
301 long long readTimePt;
303 std::vector<std::string> values;
305 if (values.size() == 2)
307 readTimePt = std::stoll(values[0]);
308 frameIndex = std::stoi(values[1]);
312 data.push_back(std::make_pair(tPt, frameIndex));
318 Utils::log(
"SENS",
"SENSSimulator: Unable to open file: %s ", textFileName.c_str());
std::chrono::microseconds SENSMicroseconds
std::chrono::high_resolution_clock::time_point SENSTimePt
SENSCameraFocusMode
Definition of autofocus mode.
SENSCameraFacing
Definition of camera facing.
void findSimStartTimePt(SENSTimePt &simStartTimePt, bool &initialized, SENSTimePt tp)
virtual bool getErrorMsg(std::string &msg)=0
std::atomic_bool _running
flags if simulator is currently running
void loadOrientationData(const std::string &dirName, std::vector< std::pair< SENSTimePt, SENSOrientation::Quat >> &data)
load data from file and instantiate sensor if valid
bool getSimulatorErrors(std::vector< std::string > &errorMsgs)
std::unique_ptr< SENSSimClock > _clock
SENSMicroseconds passedTime()
get passed simulation time
std::vector< std::unique_ptr< SENSSimulatedBase > > _activeSensors
list of currently activated sensors. Which sensors are activated depends on the content of simulation...
void loadGpsData(const std::string &dirName, std::vector< std::pair< SENSTimePt, SENSGps::Location >> &data)
load data from file and instantiate sensor if valid
void pause()
pause simulation time
SENSSimulator(const std::string &simDirName)
ctor, transfer directory containing sensor data that was recorded with SENSRecorder
void resume()
resume simulation time
void onStart()
callback called from SENSSimulated when the simulated sensor was started
void loadCameraData(const std::string &dirName, std::vector< std::pair< SENSTimePt, int >> &data, std::string &videoFileName, SENSCameraConfig &cameraConfig)
load data from file and instantiate sensor if valid
void onSensorSimStopped()
callback called from SENSSimulated when the simulated sensor was stopped
SENSTimePt now()
reset simulation time
string unifySlashes(const string &inputDir, bool withTrailingSlash)
Returns the inputDir string with unified forward slashes, e.g.: "dirA/dirB/".
bool fileExists(const string &pathfilename)
Returns true if a file exists.
bool dirExists(const string &path)
Returns true if a directory exists.
void splitString(const string &s, char delimiter, vector< string > &splits)
Splits an input string at a delimiter character into a string vector.
void log(const char *tag, const char *format,...)
logs a formatted string platform independently
SENSCameraFacing facing
camera facing
SENSCameraStreamConfig streamConfig
currently selected stream config index (use it to look up original capture size)
SENSCameraFocusMode focusMode
autofocus mode