forked from bobsayshilol/engine-sim
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathvehicle.cpp
More file actions
50 lines (40 loc) · 1.26 KB
/
vehicle.cpp
File metadata and controls
50 lines (40 loc) · 1.26 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
#include "../include/vehicle.h"
#include <cmath>
Vehicle::Vehicle() {
m_rotatingMass = nullptr;
m_mass = 0;
m_dragCoefficient = 0;
m_crossSectionArea = 0;
m_diffRatio = 0;
m_tireRadius = 0;
m_travelledDistance = 0;
}
Vehicle::~Vehicle() {
/* void */
}
void Vehicle::initialize(const Parameters ¶ms) {
m_mass = params.Mass;
m_dragCoefficient = params.DragCoefficient;
m_crossSectionArea = params.CrossSectionArea;
m_diffRatio = params.DiffRatio;
m_tireRadius = params.TireRadius;
m_rollingResistance = params.RollingResistance;
}
void Vehicle::update(double dt) {
m_travelledDistance += getSpeed() * dt;
}
void Vehicle::addToSystem(atg_scs::RigidBodySystem *system, atg_scs::RigidBody *rotatingMass) {
m_rotatingMass = rotatingMass;
}
double Vehicle::getSpeed() const {
const double E_r = 0.5 * m_rotatingMass->I * m_rotatingMass->v_theta * m_rotatingMass->v_theta;
const double vehicleSpeed = std::sqrt(2 * E_r / m_mass);
return vehicleSpeed;
// E_r = 0.5 * I * v_theta^2
// E_k = 0.5 * m * v^2
}
double Vehicle::linearForceToVirtualTorque(double force) const {
const double rotationToKineticRatio =
std::sqrt(m_rotatingMass->I / m_mass);
return rotationToKineticRatio * force;
}