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