1 // =============================================================================
2 // PROJECT CHRONO - http://projectchrono.org
3 //
4 // Copyright (c) 2014 projectchrono.org
5 // All rights reserved.
6 //
7 // Use of this source code is governed by a BSD-style license that can be found
8 // in the LICENSE file at the top level of the distribution and at
9 // http://projectchrono.org/license-chrono.txt.
10 //
11 // =============================================================================
12 // Authors: Radu Serban, Rainer Gericke
13 // =============================================================================
14 //
15 // 1st rear Solid 3-link axle subsystem for the MTV vehicle.
16 //
17 // =============================================================================
18
19 #include "chrono_models/vehicle/mtv/MTV_Solid3LinkAxle1.h"
20 #include "chrono_models/vehicle/mtv/MTV_SpringDamper.h"
21
22 namespace chrono {
23 namespace vehicle {
24 namespace fmtv {
25
26 // -----------------------------------------------------------------------------
27 // Static variables
28 // -----------------------------------------------------------------------------
29
30 const double MTV_Solid3LinkAxle1::m_axleTubeMass = 709;
31 const double MTV_Solid3LinkAxle1::m_spindleMass = 14.705 * 4.1;
32 const double MTV_Solid3LinkAxle1::m_triangleMass = 50.0;
33 const double MTV_Solid3LinkAxle1::m_linkMass = 25.0;
34
35 const double MTV_Solid3LinkAxle1::m_axleTubeRadius = 0.0476;
36 const double MTV_Solid3LinkAxle1::m_spindleRadius = 0.10;
37 const double MTV_Solid3LinkAxle1::m_spindleWidth = 0.06;
38
39 const ChVector<> MTV_Solid3LinkAxle1::m_axleTubeInertia(329.00, 16.46, 330.00);
40 const ChVector<> MTV_Solid3LinkAxle1::m_spindleInertia(0.04117 * 6.56, 0.07352 * 6.56, 0.04117 * 6.56);
41 const ChVector<> MTV_Solid3LinkAxle1::m_triangleInertia(0.2, 0.2, 0.2);
42 const ChVector<> MTV_Solid3LinkAxle1::m_linkInertia(0.05, 0.1, 0.1);
43
44 const double MTV_Solid3LinkAxle1::m_axleShaftInertia = 0.4;
45
46 const double MTV_Solid3LinkAxle1::m_springDesignLength = 0.3;
47 const double MTV_Solid3LinkAxle1::m_springCoefficient = 367000.0;
48 const double MTV_Solid3LinkAxle1::m_springRestLength = m_springDesignLength + 0.06;
49 const double MTV_Solid3LinkAxle1::m_springMinLength = m_springDesignLength - 0.08;
50 const double MTV_Solid3LinkAxle1::m_springMaxLength = m_springDesignLength + 0.08;
51 const double MTV_Solid3LinkAxle1::m_damperCoefficient = 41300.0;
52 const double MTV_Solid3LinkAxle1::m_damperDegressivityCompression = 3.0;
53 const double MTV_Solid3LinkAxle1::m_damperDegressivityExpansion = 1.0;
54
55 // -----------------------------------------------------------------------------
56
MTV_Solid3LinkAxle1(const std::string & name)57 MTV_Solid3LinkAxle1::MTV_Solid3LinkAxle1(const std::string& name) : ChSolidThreeLinkAxle(name) {
58 m_springForceCB =
59 chrono_types::make_shared<MTV_SpringForceRear>(m_springCoefficient, m_springMinLength, m_springMaxLength);
60
61 m_shockForceCB = chrono_types::make_shared<MTV_ShockForceRear>(
62 m_damperCoefficient, m_damperDegressivityCompression, m_damperCoefficient, m_damperDegressivityExpansion);
63 }
64
getLocation(PointId which)65 const ChVector<> MTV_Solid3LinkAxle1::getLocation(PointId which) {
66 switch (which) {
67 case SPRING_A:
68 return ChVector<>(0.0, 0.529, 0.1);
69 case SPRING_C:
70 return ChVector<>(0.0, 0.529, 0.4);
71 case SHOCK_A:
72 return ChVector<>(0.1, 0.529, -0.1);
73 case SHOCK_C:
74 return ChVector<>(0.2, 0.529, 0.570);
75 case SPINDLE:
76 return ChVector<>(0.0, 2.07 / 2.0, 0.0);
77 case TRIANGLE_A:
78 return ChVector<>(0.0, 0.0, 0.260);
79 case TRIANGLE_C:
80 return ChVector<>(-0.50, 0.30, 0.260);
81 case LINK_A:
82 return ChVector<>(0.0, 0.420, -0.090);
83 case LINK_C:
84 return ChVector<>(-0.50, 0.420, -0.090);
85 default:
86 return ChVector<>(0, 0, 0);
87 }
88 }
89
90 } // namespace fmtv
91 } // end namespace vehicle
92 } // end namespace chrono
93