LIBRARY
PlanarMechanics.Damper
Linear velocity-dependent damper.
Damping force acts along the line connecting the two frames. Uses ifelse to prevent zero-division when the distance between frames is very small.
This component extends from PartialTwoFrames
Usage
MultibodyComponents.PlanarMechanics.Damper(d=1, s_small=1e-10)
Parameters:
| Name | Description | Units | Default value |
|---|---|---|---|
d | Damping constant | – | 1 |
s_small | Prevent zero-division if distance between frame_a and frame_b is zero | m | 1e-10 |
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 |
|---|---|---|
r0x | Relative position x component | m |
r0y | Relative position y component | m |
d0x | Direction x component | – |
d0y | Direction y component | – |
vx | Relative velocity x component | m/s |
vy | Relative velocity y component | m/s |
v | Relative velocity magnitude | m/s |
f | Damping force | N |
Behavior
Source
dyad
"""
Linear velocity-dependent damper.
Damping force acts along the line connecting the two frames. Uses `ifelse` to prevent
zero-division when the distance between frames is very small.
"""
component Damper
extends PartialTwoFrames
"Damping constant"
parameter d::Real = 1
"Prevent zero-division if distance between frame_a and frame_b is zero"
parameter s_small::Length = 1e-10
"Relative position x component"
variable r0x::Length
"Relative position y component"
variable r0y::Length
"Direction x component"
variable d0x::Real
"Direction y component"
variable d0y::Real
"Relative velocity x component"
variable vx::Velocity
"Relative velocity y component"
variable vy::Velocity
"Relative velocity magnitude"
variable v::Velocity
"Damping force"
variable f::Dyad.Force
relations
frame_a.x + r0x = frame_b.x
frame_a.y + r0y = frame_b.y
der(frame_a.x) + vx = der(frame_b.x)
der(frame_a.y) + vy = der(frame_b.y)
v = adjoint([vx, vy]) * [d0x, d0y]
f = -d * v
d0x = ifelse(sqrt(r0x ^ 2 + r0y ^ 2) < s_small, r0x, r0x / sqrt(r0x ^ 2 + r0y ^ 2))
d0y = ifelse(sqrt(r0x ^ 2 + r0y ^ 2) < s_small, r0y, r0y / sqrt(r0x ^ 2 + r0y ^ 2))
frame_a.fx = d0x * f
frame_a.fy = d0y * f
frame_a.tau = 0
frame_a.fx + frame_b.fx = 0
frame_a.fy + frame_b.fy = 0
frame_a.tau + frame_b.tau = 0
metadata {"Dyad": {"icons": {"default": "dyad://MultibodyComponents/Damper.svg"}}}
endFlattened Source
dyad
"""
Linear velocity-dependent damper.
Damping force acts along the line connecting the two frames. Uses `ifelse` to prevent
zero-division when the distance between frames is very small.
"""
component Damper
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": []
}
}
"Damping constant"
parameter d::Real = 1
"Prevent zero-division if distance between frame_a and frame_b is zero"
parameter s_small::Length = 1e-10
"Relative position x component"
variable r0x::Length
"Relative position y component"
variable r0y::Length
"Direction x component"
variable d0x::Real
"Direction y component"
variable d0y::Real
"Relative velocity x component"
variable vx::Velocity
"Relative velocity y component"
variable vy::Velocity
"Relative velocity magnitude"
variable v::Velocity
"Damping force"
variable f::Dyad.Force
relations
frame_a.x + r0x = frame_b.x
frame_a.y + r0y = frame_b.y
der(frame_a.x) + vx = der(frame_b.x)
der(frame_a.y) + vy = der(frame_b.y)
v = adjoint([vx, vy]) * [d0x, d0y]
f = -d * v
d0x = ifelse(sqrt(r0x ^ 2 + r0y ^ 2) < s_small, r0x, r0x / sqrt(r0x ^ 2 + r0y ^ 2))
d0y = ifelse(sqrt(r0x ^ 2 + r0y ^ 2) < s_small, r0y, r0y / sqrt(r0x ^ 2 + r0y ^ 2))
frame_a.fx = d0x * f
frame_a.fy = d0y * f
frame_a.tau = 0
frame_a.fx + frame_b.fx = 0
frame_a.fy + frame_b.fy = 0
frame_a.tau + frame_b.tau = 0
metadata {"Dyad": {"icons": {"default": "dyad://MultibodyComponents/Damper.svg"}}}
endTest Cases
No test cases defined.
Related
Examples
Experiments
Analyses
Tests