PlanarMechanics.SpringDamper
Linear 2D translational spring-damper with independent x, y, and phi stiffness and damping.
Combines spring and damping forces along world x and y axes with a rotational spring-damper acting on the relative angle between frames.
This component extends from PartialTwoFrames This component extends from MultibodyComponents.Renderable
Usage
MultibodyComponents.PlanarMechanics.SpringDamper(render=true, color=[0, 0.0, 1, 1], specular_coefficient=0.7, c_x=1, c_y=1, c_phi=1e5, d_x=1, d_y=1, d_phi=1, s_relx0=0, s_rely0=0, phi_rel0=0, radius=0.1, num_windings=6, N=200, end_ratio=0.1, z_position=0)
Parameters:
| Name | Description | Units | Default value |
|---|---|---|---|
render | – | true | |
color | – | [0, 0, 1, 1] | |
specular_coefficient | – | 0.7 | |
c_x | Spring constant in x dir | N/m | 1 |
c_y | Spring constant in y dir | N/m | 1 |
c_phi | Spring constant in phi dir | N.m/rad | 100000 |
d_x | Damping constant in x dir | – | 1 |
d_y | Damping constant in y dir | – | 1 |
d_phi | Damping constant in phi dir | – | 1 |
s_relx0 | Unstretched spring length | m | 0 |
s_rely0 | Unstretched spring length | m | 0 |
phi_rel0 | Unstretched spring angle | rad | 0 |
radius | Radius of spring coil when rendered | – | 0.1 |
num_windings | Number of spring coil windings | – | 6 |
N | Number of points used to render each winding | – | 200 |
end_ratio | Fraction of total length used for the tapered ends | – | 0.1 |
z_position | z-position of the spring in animations | – | 0 |
Connectors
frame_a- Coordinate system (2-dim.) fixed to the component with one cut-force and cut-torque.
All variables are resolved in the planar world frame. (Frame2D)
frame_b- Coordinate system (2-dim.) fixed to the component with one cut-force and cut-torque.
All variables are resolved in the planar world frame. (Frame2D)
Variables
| Name | Description | Units |
|---|---|---|
s_relx | Relative x position | m |
s_rely | Relative y position | m |
phi_rel | Relative angle | rad |
v_relx | Relative velocity in x direction | m/s |
v_rely | Relative velocity in y direction | m/s |
w_rel | Relative angular velocity | rad/s |
f_x | Force in x direction | N |
f_y | Force in y direction | N |
tau | Torque | N.m |
Behavior
Dict{MIME{Symbol("text/plain")}, String} with 1 entry: MIME type text/plain => "Error displaying result"
Source
"""
Linear 2D translational spring-damper with independent x, y, and phi stiffness and damping.
Combines spring and damping forces along world x and y axes with a rotational
spring-damper acting on the relative angle between frames.
"""
component SpringDamper
extends PartialTwoFrames
extends MultibodyComponents.Renderable(color = [0, 0.0, 1, 1])
"Visualization shape for the spring-damper"
shape = MultibodyComponents.SpringShape(render = render, color = color, num_windings = num_windings, N = N, end_ratio = end_ratio)
"Spring constant in x dir"
parameter c_x::TranslationalSpringConstant = 1
"Spring constant in y dir"
parameter c_y::TranslationalSpringConstant = 1
"Spring constant in phi dir"
parameter c_phi::RotationalSpringConstant = 1e5
"Damping constant in x dir"
parameter d_x::Real = 1
"Damping constant in y dir"
parameter d_y::Real = 1
"Damping constant in phi dir"
parameter d_phi::Real = 1
"Unstretched spring length"
parameter s_relx0::Length = 0
"Unstretched spring length"
parameter s_rely0::Length = 0
"Unstretched spring angle"
parameter phi_rel0::Angle = 0
"Radius of spring coil when rendered"
parameter radius::Real = 0.1
"Number of spring coil windings"
parameter num_windings::Real = 6
"Number of points used to render each winding"
parameter N::Integer = 200
"Fraction of total length used for the tapered ends"
parameter end_ratio::Real = 0.1
"z-position of the spring in animations"
parameter z_position::Real = 0
"Relative x position"
variable s_relx::Length
"Relative y position"
variable s_rely::Length
"Relative angle"
variable phi_rel::Angle
"Relative velocity in x direction"
variable v_relx::Velocity
"Relative velocity in y direction"
variable v_rely::Velocity
"Relative angular velocity"
variable w_rel::AngularVelocity
"Force in x direction"
variable f_x::Dyad.Force
"Force in y direction"
variable f_y::Dyad.Force
"Torque"
variable tau::Torque
relations
s_relx = frame_b.x - frame_a.x
s_rely = frame_b.y - frame_a.y
phi_rel = frame_b.phi - frame_a.phi
v_relx = der(s_relx)
v_rely = der(s_rely)
w_rel = der(phi_rel)
tau = c_phi * (phi_rel - phi_rel0) + d_phi * w_rel
frame_a.tau = -tau
frame_b.tau = tau
f_x = c_x * (s_relx - s_relx0) + d_x * v_relx
f_y = c_y * (s_rely - s_rely0) + d_y * v_rely
frame_a.fx = -f_x
frame_b.fx = f_x
frame_a.fy = -f_y
frame_b.fy = f_y
# set shape: spring runs from frame_a to frame_b
shape.r = [frame_a.x, frame_a.y, z_position]
shape.R = MultibodyComponents.RR(MultibodyComponents.nullrotation())
shape.r_shape = [0, 0, 0]
shape.length_direction = [s_relx, s_rely, 0]
shape.width_direction = [0, 0, 1]
shape.length = sqrt(s_relx ^ 2 + s_rely ^ 2)
shape.width = radius
shape.height = 0
metadata {"Dyad": {"icons": {"default": "dyad://MultibodyComponents/SpringDamper.svg"}}}
endFlattened Source
"""
Linear 2D translational spring-damper with independent x, y, and phi stiffness and damping.
Combines spring and damping forces along world x and y axes with a rotational
spring-damper acting on the relative angle between frames.
"""
component SpringDamper
frame_a = Frame2D() {
"Dyad": {
"placement": {
"diagram": {"iconName": "default", "x1": 50, "y1": 450, "x2": 150, "y2": 550, "rot": 0}
},
"tags": []
}
}
frame_b = Frame2D() {
"Dyad": {
"placement": {
"diagram": {"iconName": "default", "x1": 850, "y1": 450, "x2": 950, "y2": 550, "rot": 0}
},
"tags": []
}
}
parameter render::Boolean = true
parameter color::Real[4] = [0.5, 0.5, 0.5, 1.0]
parameter specular_coefficient::Real = 0.7
"Visualization shape for the spring-damper"
shape = MultibodyComponents.SpringShape(render = render, color = color, num_windings = num_windings, N = N, end_ratio = end_ratio)
"Spring constant in x dir"
parameter c_x::TranslationalSpringConstant = 1
"Spring constant in y dir"
parameter c_y::TranslationalSpringConstant = 1
"Spring constant in phi dir"
parameter c_phi::RotationalSpringConstant = 1e5
"Damping constant in x dir"
parameter d_x::Real = 1
"Damping constant in y dir"
parameter d_y::Real = 1
"Damping constant in phi dir"
parameter d_phi::Real = 1
"Unstretched spring length"
parameter s_relx0::Length = 0
"Unstretched spring length"
parameter s_rely0::Length = 0
"Unstretched spring angle"
parameter phi_rel0::Angle = 0
"Radius of spring coil when rendered"
parameter radius::Real = 0.1
"Number of spring coil windings"
parameter num_windings::Real = 6
"Number of points used to render each winding"
parameter N::Integer = 200
"Fraction of total length used for the tapered ends"
parameter end_ratio::Real = 0.1
"z-position of the spring in animations"
parameter z_position::Real = 0
"Relative x position"
variable s_relx::Length
"Relative y position"
variable s_rely::Length
"Relative angle"
variable phi_rel::Angle
"Relative velocity in x direction"
variable v_relx::Velocity
"Relative velocity in y direction"
variable v_rely::Velocity
"Relative angular velocity"
variable w_rel::AngularVelocity
"Force in x direction"
variable f_x::Dyad.Force
"Force in y direction"
variable f_y::Dyad.Force
"Torque"
variable tau::Torque
relations
s_relx = frame_b.x - frame_a.x
s_rely = frame_b.y - frame_a.y
phi_rel = frame_b.phi - frame_a.phi
v_relx = der(s_relx)
v_rely = der(s_rely)
w_rel = der(phi_rel)
tau = c_phi * (phi_rel - phi_rel0) + d_phi * w_rel
frame_a.tau = -tau
frame_b.tau = tau
f_x = c_x * (s_relx - s_relx0) + d_x * v_relx
f_y = c_y * (s_rely - s_rely0) + d_y * v_rely
frame_a.fx = -f_x
frame_b.fx = f_x
frame_a.fy = -f_y
frame_b.fy = f_y
# set shape: spring runs from frame_a to frame_b
shape.r = [frame_a.x, frame_a.y, z_position]
shape.R = MultibodyComponents.RR(MultibodyComponents.nullrotation())
shape.r_shape = [0, 0, 0]
shape.length_direction = [s_relx, s_rely, 0]
shape.width_direction = [0, 0, 1]
shape.length = sqrt(s_relx ^ 2 + s_rely ^ 2)
shape.width = radius
shape.height = 0
metadata {"Dyad": {"icons": {"default": "dyad://MultibodyComponents/SpringDamper.svg"}}}
endTest Cases
No test cases defined.
Related
Examples
Experiments
Analyses