Skip to content
IdealRollingWheel.md

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:

(\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 (spline.τ) and the force at the flange (flange.f) through the radius:

radiuscdotflange.f+spline.tau=0

math

This component extends from PartialElementaryRotationalToTranslational

Usage

IdealRollingWheel(radius)

Parameters:

NameDescriptionUnitsDefault value
radiuswheel radiusm

Connectors

Behavior

radius(support_r.phi(t)+spline.phi(t))=flange.s(t)support_t.s(t)0=spline.tau(t)+radiusflange.f(t)

Source

dyad
# 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
dyad
# 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.

julia
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"
  • Examples

  • Experiments

  • Analyses