IdealRollingWheel

model IdealRollingWheel "Simple 1-dim. model of an ideal rolling wheel without inertia"
    extends Rotational.Interfaces.PartialElementaryRotationalToTranslational;

    parameter Modelica.SIunits.Distance radius(start = 0.3) "Wheel radius";
equation
    0 = radius * flangeT.f + flangeR.tau;
    (flangeR.phi - internalSupportR.phi) * radius = flangeT.s - internalSupportT.s;

    annotation (
        Icon(
            coordinateSystem(
                preserveAspectRatio = true,
                extent = {
                    {-100, -100}, 
                    {100, 100}}),
            graphics = {
                Rectangle(
                    lineColor = {64, 64, 64},
                    fillColor = {192, 192, 192},
                    fillPattern = FillPattern.HorizontalCylinder,
                    extent = {
                        {-100, -10}, 
                        {-46, 10}}), 
                Ellipse(
                    lineColor = {64, 64, 64},
                    fillColor = {255, 255, 255},
                    fillPattern = FillPattern.HorizontalCylinder,
                    extent = {
                        {-50, -80}, 
                        {10, 80}}), 
                Rectangle(
                    lineColor = {64, 64, 64},
                    fillColor = {255, 255, 255},
                    pattern = LinePattern.None,
                    fillPattern = FillPattern.HorizontalCylinder,
                    extent = {
                        {-20, -80}, 
                        {12, 80}}), 
                Ellipse(
                    lineColor = {64, 64, 64},
                    fillColor = {128, 128, 128},
                    fillPattern = FillPattern.Solid,
                    extent = {
                        {-16, -80}, 
                        {44, 80}}), 
                Ellipse(
                    lineColor = {192, 192, 192},
                    fillColor = {192, 192, 192},
                    fillPattern = FillPattern.Solid,
                    extent = {
                        {-2, -52}, 
                        {34, 52}}), 
                Ellipse(
                    lineColor = {64, 64, 64},
                    fillColor = {192, 192, 192},
                    fillPattern = FillPattern.HorizontalCylinder,
                    extent = {
                        {12, -10}, 
                        {20, 10}}), 
                Rectangle(
                    lineColor = {64, 64, 64},
                    fillColor = {192, 192, 192},
                    pattern = LinePattern.None,
                    fillPattern = FillPattern.HorizontalCylinder,
                    extent = {
                        {16, -10}, 
                        {60, 10}}), 
                Ellipse(
                    fillColor = {192, 192, 192},
                    fillPattern = FillPattern.Solid,
                    extent = {
                        {56, -10}, 
                        {64, 10}}), 
                Text(
                    lineColor = {0, 0, 255},
                    extent = {
                        {-150, 90}, 
                        {150, 130}},
                    textString = "%name"), 
                Polygon(
                    lineColor = {0, 127, 0},
                    fillColor = {0, 127, 0},
                    fillPattern = FillPattern.Solid,
                    points = {
                        {80, 10}, 
                        {80, 26}, 
                        {60, 26}, 
                        {60, 20}, 
                        {70, 20}, 
                        {70, -20}, 
                        {60, -20}, 
                        {60, -26}, 
                        {80, -26}, 
                        {80, -10}, 
                        {90, -10}, 
                        {90, 10}, 
                        {80, 10}}), 
                Line(points = {
                    {-100, -20}, 
                    {-60, -20}}), 
                Line(points = {
                    {-100, -20}, 
                    {-100, -100}}), 
                Line(points = {
                    {-100, 20}, 
                    {-60, 20}}), 
                Line(
                    points = {
                        {100, -90}, 
                        {-40, -90}},
                    color = {0, 127, 0}), 
                Line(
                    points = {
                        {70, -26}, 
                        {70, -50}, 
                        {100, -50}, 
                        {100, -100}},
                    color = {0, 127, 0}), 
                Line(
                    origin = {-2.5, 80},
                    points = {
                        {-17.5, 0}, 
                        {17.5, 0}},
                    color = {64, 64, 64}), 
                Line(
                    origin = {-2.5, -80},
                    points = {
                        {-17.5, 0}, 
                        {17.5, 0}},
                    color = {64, 64, 64}), 
                Line(
                    origin = {38, 10},
                    points = {
                        {-22, 0}, 
                        {22, 0}},
                    color = {64, 64, 64}), 
                Line(
                    origin = {38, -10},
                    points = {
                        {-22, 0}, 
                        {22, 0}},
                    color = {64, 64, 64}), 
                Text(
                    extent = {
                        {-150, -120}, 
                        {150, -150}},
                    textString = "radius=%radius")}),
        Documentation(info = "<html>\n<p>\nA simple kinematic model of a rolling wheel which has no inertia and\nno rolling resistance. This component defines the kinematic constraint:\n</p>\n\n<pre>\n   (flangeR.phi - internalSupportR.phi)*wheelRadius = (flangeT.s - internalSupportT.s);\n</pre>\n</html>"));
end IdealRollingWheel;