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
13 // =============================================================================
14 //
15 // Generic concrete rigid-pinned-axle suspension subsystem.
16 //
17 // This concrete suspension subsystem is defined with respect to a right-handed
18 // frame with X pointing towards the front, Y to the left, and Z up (as imposed
19 // by the base class ChRigidSuspension) and origin in the chassis midplane.
20 //
21 // All point locations are provided for the left half of the suspension.
22 //
23 // =============================================================================
24 
25 #ifndef GENERIC_RIGID_PINNED_AXLE_H
26 #define GENERIC_RIGID_PINNED_AXLE_H
27 
28 #include "chrono_vehicle/wheeled_vehicle/suspension/ChRigidPinnedAxle.h"
29 
30 #include "chrono_models/ChApiModels.h"
31 
32 namespace chrono {
33 namespace vehicle {
34 namespace generic {
35 
36 /// @addtogroup vehicle_models_generic
37 /// @{
38 
39 /// Rigid pinned axle suspension for a generic vehicle (spindles attached to a rigid axle).
40 class CH_MODELS_API Generic_RigidPinnedAxle : public ChRigidPinnedAxle {
41   public:
Generic_RigidPinnedAxle(const std::string & name)42     Generic_RigidPinnedAxle(const std::string& name) : ChRigidPinnedAxle(name) {}
43 
~Generic_RigidPinnedAxle()44     ~Generic_RigidPinnedAxle() {}
45 
46     virtual const ChVector<> getLocation(PointId which) override;
47 
getAxleTubeCOM()48     virtual const ChVector<> getAxleTubeCOM() const override { return m_axleTubeCOM; }
getAxlePinLocation()49     virtual const ChVector<> getAxlePinLocation() const override { return m_axlePinLoc; }
50 
getSpindleMass()51     virtual double getSpindleMass() const override { return m_spindleMass; }
getAxleTubeMass()52     virtual double getAxleTubeMass() const override { return m_axleTubeMass; }
53 
getSpindleRadius()54     virtual double getSpindleRadius() const override { return m_spindleRadius; }
getSpindleWidth()55     virtual double getSpindleWidth() const override { return m_spindleWidth; }
getAxleTubeRadius()56     virtual double getAxleTubeRadius() const override { return m_axleTubeRadius; }
57 
getSpindleInertia()58     virtual const ChVector<>& getSpindleInertia() const override { return m_spindleInertia; }
getAxleTubeInertia()59     virtual const ChVector<>& getAxleTubeInertia() const override { return m_axleTubeInertia; }
60 
getAxleInertia()61     virtual double getAxleInertia() const override { return m_axleInertia; }
62 
63   private:
64     static const double m_spindleMass;
65     static const double m_axleTubeMass;
66 
67     static const double m_spindleRadius;
68     static const double m_spindleWidth;
69     static const double m_axleTubeRadius;
70 
71     static const ChVector<> m_spindleInertia;
72     static const ChVector<> m_axleTubeInertia;
73 
74     static const ChVector<> m_axleTubeCOM;
75     static const ChVector<> m_axlePinLoc;
76 
77     static const double m_axleInertia;
78 };
79 
80 /// @} vehicle_models_generic
81 
82 }  // end namespace generic
83 }  // end namespace vehicle
84 }  // end namespace chrono
85 
86 #endif
87