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