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 #ifndef MTV_SOLID3LINK_AXLE_1_H 20 #define MTV_SOLID3LINK_AXLE_1_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_Solid3LinkAxle1 : public ChSolidThreeLinkAxle { 34 public: 35 MTV_Solid3LinkAxle1(const std::string& name); ~MTV_Solid3LinkAxle1()36 ~MTV_Solid3LinkAxle1() {} 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