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