IdealRollingWheel
Ideal rolling wheel converting rotational motion to translational motion and vice-versa, without inertia.
This component models the ideal kinematic and static interaction between a rotational mechanical port (spline) and a translational mechanical port (flange) representing a wheel rolling on a surface. It assumes perfect rolling contact, meaning there is no slip. The wheel itself is considered massless and frictionless, so no inertial effects or energy losses are included. The key kinematic relationship links the relative angular displacement of the spline (spline.phi - support_r.phi
) to the relative translational displacement of the flange (flange.s - support_t.s
) via the wheel radius:
math The static force-torque balance is also defined, relating the torque at the spline (
math
This component extends from PartialElementaryRotationalToTranslational
Usage
IdealRollingWheel(radius)
Parameters:
Name | Description | Units | Default value |
---|---|---|---|
radius | wheel radius | m |
Connectors
Behavior
Source
# Ideal rolling wheel converting rotational motion to translational motion and vice-versa, without inertia.
#
# This component models the ideal kinematic and static interaction between a rotational mechanical port (spline) and a translational
# mechanical port (flange) representing a wheel rolling on a surface. It assumes perfect rolling contact, meaning there is no slip.
# The wheel itself is considered massless and frictionless, so no inertial effects or energy losses are included.
# The key kinematic relationship links the relative angular displacement of the spline (`spline.phi - support_r.phi`)
# to the relative translational displacement of the flange (`flange.s - support_t.s`) via the wheel radius:
# ```math
# (\text{spline.phi} - \text{support\\_r.phi}) \\cdot \text{radius} = \text{flange.s} - \text{support\\_t.s}
# ```math
# The static force-torque balance is also defined, relating the torque at the spline (\$\text{spline}.\\tau\$) and the force
# at the flange (\$\text{flange.f}\$) through the radius:
# ```math
# \text{radius} \\cdot \text{flange.f} + \text{spline.tau} = 0
# ```math
component IdealRollingWheel
extends PartialElementaryRotationalToTranslational
# wheel radius
parameter radius::Length
relations
(spline.phi-support_r.phi)*radius = flange.s-support_t.s
0 = radius*flange.f+spline.tau
metadata {
"Dyad": {"icons": {"default": "dyad://RotationalComponents/IdealRollingWheel.svg"}}
}
end
Flattened Source
# Ideal rolling wheel converting rotational motion to translational motion and vice-versa, without inertia.
#
# This component models the ideal kinematic and static interaction between a rotational mechanical port (spline) and a translational
# mechanical port (flange) representing a wheel rolling on a surface. It assumes perfect rolling contact, meaning there is no slip.
# The wheel itself is considered massless and frictionless, so no inertial effects or energy losses are included.
# The key kinematic relationship links the relative angular displacement of the spline (`spline.phi - support_r.phi`)
# to the relative translational displacement of the flange (`flange.s - support_t.s`) via the wheel radius:
# ```math
# (\text{spline.phi} - \text{support\\_r.phi}) \\cdot \text{radius} = \text{flange.s} - \text{support\\_t.s}
# ```math
# The static force-torque balance is also defined, relating the torque at the spline (\$\text{spline}.\\tau\$) and the force
# at the flange (\$\text{flange.f}\$) through the radius:
# ```math
# \text{radius} \\cdot \text{flange.f} + \text{spline.tau} = 0
# ```math
component IdealRollingWheel
# Primary rotational mechanical interface
spline = Spline() [{"Dyad": {"placement": {"icon": {"x1": -50, "y1": 450, "x2": 50, "y2": 550}}}}]
# Primary translational mechanical interface
flange = Flange() [{"Dyad": {"placement": {"icon": {"x1": 950, "y1": 450, "x2": 1050, "y2": 550}}}}]
# Rotational mechanical support interface (e.g., for housing)
support_r = Spline() [{"Dyad": {"placement": {"icon": {"x1": 100, "y1": 950, "x2": 200, "y2": 1050}}}}]
# Translational mechanical support interface (e.g., for housing)
support_t = Flange() [{"Dyad": {"placement": {"icon": {"x1": 800, "y1": 950, "x2": 900, "y2": 1050}}}}]
# wheel radius
parameter radius::Length
relations
(spline.phi-support_r.phi)*radius = flange.s-support_t.s
0 = radius*flange.f+spline.tau
metadata {
"Dyad": {"icons": {"default": "dyad://RotationalComponents/IdealRollingWheel.svg"}}
}
end
Test Cases
This is setup code, that must be run before each test case.
using RotationalComponents
using ModelingToolkit, OrdinaryDiffEqDefault
using Plots
using CSV, DataFrames
snapshotsdir = joinpath(dirname(dirname(pathof(RotationalComponents))), "test", "snapshots")
"/home/actions-runner-10/.julia/packages/RotationalComponents/0VPxm/test/snapshots"
Related
Examples
Experiments
Analyses