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 // 2nd rear Solid 3-link axle subsystem for the MTV vehicle.
16 //
17 // =============================================================================
18 
19 #ifndef MTV_SOLID3LINK_AXLE_2_H
20 #define MTV_SOLID3LINK_AXLE_2_H
21 
22 #include "chrono_vehicle/wheeled_vehicle/suspension/ChSolidThreeLinkAxle.h"
23 
24 #include "chrono_models/ChApiModels.h"
25 
26 namespace chrono {
27 namespace vehicle {
28 namespace fmtv {
29 
30 /// @addtogroup vehicle_models_fmtv
31 /// @{
32 
33 class CH_MODELS_API MTV_Solid3LinkAxle2 : public ChSolidThreeLinkAxle {
34   public:
35     MTV_Solid3LinkAxle2(const std::string& name);
~MTV_Solid3LinkAxle2()36     ~MTV_Solid3LinkAxle2() {}
37 
38   protected:
39     virtual const ChVector<> getLocation(PointId which) override;
40 
getAxleTubeMass()41     virtual double getAxleTubeMass() const override { return m_axleTubeMass; }
getSpindleMass()42     virtual double getSpindleMass() const override { return m_spindleMass; }
getTriangleMass()43     virtual double getTriangleMass() const override { return m_triangleMass; }
getLinkMass()44     virtual double getLinkMass() const override { return m_linkMass; }
45 
getAxleTubeRadius()46     virtual double getAxleTubeRadius() const override { return m_axleTubeRadius; }
getSpindleRadius()47     virtual double getSpindleRadius() const override { return m_spindleRadius; }
getSpindleWidth()48     virtual double getSpindleWidth() const override { return m_spindleWidth; }
49 
getAxleTubeCOM()50     virtual const ChVector<> getAxleTubeCOM() const override { return ChVector<>(0, 0, 0); }
51 
getAxleTubeInertia()52     virtual const ChVector<>& getAxleTubeInertia() const override { return m_axleTubeInertia; }
getSpindleInertia()53     virtual const ChVector<>& getSpindleInertia() const override { return m_spindleInertia; }
getTriangleInertia()54     virtual const ChVector<>& getTriangleInertia() const override { return m_triangleInertia; }
getLinkInertia()55     virtual const ChVector<>& getLinkInertia() const override { return m_linkInertia; }
56 
getAxleInertia()57     virtual double getAxleInertia() const override { return m_axleShaftInertia; }
58 
getSpringRestLength()59     virtual double getSpringRestLength() const override { return m_springRestLength; }
60     /// Return the functor object for spring force.
getSpringForceFunctor()61     virtual std::shared_ptr<ChLinkTSDA::ForceFunctor> getSpringForceFunctor() const override { return m_springForceCB; }
62     /// Return the functor object for shock force.
getShockForceFunctor()63     virtual std::shared_ptr<ChLinkTSDA::ForceFunctor> getShockForceFunctor() const override { return m_shockForceCB; }
64 
65   private:
66     std::shared_ptr<ChLinkTSDA::ForceFunctor> m_springForceCB;
67     std::shared_ptr<ChLinkTSDA::ForceFunctor> m_shockForceCB;
68 
69     static const double m_axleShaftInertia;
70 
71     static const double m_axleTubeMass;
72     static const double m_spindleMass;
73     static const double m_triangleMass;
74     static const double m_linkMass;
75 
76     static const double m_axleTubeRadius;
77     static const double m_spindleRadius;
78     static const double m_spindleWidth;
79 
80     static const ChVector<> m_axleTubeInertia;
81     static const ChVector<> m_spindleInertia;
82     static const ChVector<> m_triangleInertia;
83     static const ChVector<> m_linkInertia;
84 
85     static const double m_springCoefficient;
86     static const double m_springRestLength;
87     static const double m_springDesignLength;
88     static const double m_springMinLength;
89     static const double m_springMaxLength;
90 
91     static const double m_damperCoefficient;
92     static const double m_damperDegressivityExpansion;
93     static const double m_damperDegressivityCompression;
94 };
95 
96 /// @} vehicle_models_fmtv
97 
98 }  // namespace fmtv
99 }  // end namespace vehicle
100 }  // end namespace chrono
101 
102 #endif
103