-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSensorSimulator.hpp
More file actions
62 lines (49 loc) · 1.88 KB
/
SensorSimulator.hpp
File metadata and controls
62 lines (49 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//
// SensorSimulator.hpp
// OpenGLTutorial
//
// Created by Robby Tong on 2/2/19.
// Copyright © 2019 Robby Tong. All rights reserved.
//
#ifndef SensorSimulator_hpp
#define SensorSimulator_hpp
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <random>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <glm/gtc/quaternion.hpp>
#include <glm/gtx/quaternion.hpp>
class SensorSimulator
{
private:
glm::quat mLastSensorToWorldAttitude;
glm::vec3 mLastWorldPosition;
glm::vec3 mLastWorldVelocity;
glm::vec3 mWorldGravity;
glm::vec3 mWorldNorth;
float mSimulatedSampleRate;
float mAcceSensorData[3];
float mGyroSensorData[3];
float mMagnSensorData[3];
// random noise generator
std::default_random_engine mNoiseSource;
std::normal_distribution<float> mGyroNoiseDist;
std::normal_distribution<float> mAcceNoiseDist;
std::normal_distribution<float> mMagnNoiseDist;
void calculate_gryosco(float sensor_data[3], glm::quat new_sensor_to_world_attitude);
void calculate_mangeto(float sensor_data[3], glm::mat3 world_to_sensor_transform);
void calculate_gravity(float sensor_data[3], glm::mat3 world_to_sensor_transform);
void calculate_acceler(float sensor_data[3], glm::mat3 world_to_sensor_transform, glm::vec3 new_position, float time_delta);
public:
SensorSimulator(float simulated_sample_rate=60.0f,
glm::vec3 world_gravity=glm::vec3(0.0f, -1.0f, 0.0f),
glm::vec3 world_north =glm::vec3(0.0f, 0.0f, -1.0f));
void updateWithSensorToWorldQuaternionAndPosition(glm::quat attitude, glm::vec3 position);
void getUpdatedSensorData(float gyro_sensor_data[3], float accel_sensor_data[3], float magnetometer_sensor_data[3]);
};
#endif /* SensorSimulator_hpp */