Skip to content

Latest commit

 

History

History
88 lines (71 loc) · 4.17 KB

simple4linkPendulumBing.rst

File metadata and controls

88 lines (71 loc) · 4.17 KB

simple4linkPendulumBing.py

You can view and download this file on Github: simple4linkPendulumBing.py

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This is an EXUDYN example
#
# Details:  4-link pendulum
#
# Author:   Bing AI with some help by Johannes Gerstmayr; note that doublePendulum2D.py did not exist prior to this model
# Date:     2023-04-15
#
# Copyright:This file is part of Exudyn. Exudyn is free software. You can redistribute it and/or modify it under the terms of the Exudyn license. See 'LICENSE.txt' for more details.
#
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

import exudyn as exu
from exudyn.utilities import *

SC = exu.SystemContainer()
mbs = SC.AddSystem()

# create nodes:
n0=mbs.AddNode(NodeRigidBody2D(referenceCoordinates=[0,0,0], initialVelocities=[0,0,0]))
n1=mbs.AddNode(NodeRigidBody2D(referenceCoordinates=[1,0,0], initialVelocities=[0,0,0]))
n2=mbs.AddNode(NodeRigidBody2D(referenceCoordinates=[2,0,0], initialVelocities=[0,0,0]))
n3=mbs.AddNode(NodeRigidBody2D(referenceCoordinates=[3,0,0], initialVelocities=[0,0,0]))

# create bodies:
b0=mbs.AddObject(RigidBody2D(physicsMass=1, physicsInertia=1,nodeNumber=n0,
       visualization=VRigidBody2D(graphicsData=[GraphicsDataLine([[-0.5,0,0],[0.5,0,0]])])))
b1=mbs.AddObject(RigidBody2D(physicsMass=1, physicsInertia=1,nodeNumber=n1,
                 visualization=VRigidBody2D(graphicsData=[GraphicsDataLine([[-0.5,0,0],[0.5,0,0]])])))
b2=mbs.AddObject(RigidBody2D(physicsMass=1, physicsInertia=1,nodeNumber=n2,
                 visualization=VRigidBody2D(graphicsData=[GraphicsDataLine([[-0.5,0,0],[0.5,0,0]])])))
b3=mbs.AddObject(RigidBody2D(physicsMass=1, physicsInertia=1,nodeNumber=n3,
                 visualization=VRigidBody2D(graphicsData=[GraphicsDataLine([[-0.5,0,0],[0.5,0,0]])])))

# add markers and loads:
oGround = mbs.AddObject(ObjectGround())
mGround=mbs.AddMarker(MarkerBodyPosition(bodyNumber=oGround, localPosition=[-0.5, 0., 0.]))
m00 = mbs.AddMarker(MarkerBodyPosition(bodyNumber=b0, localPosition=[-0.5, 0., 0.]))
m01 = mbs.AddMarker(MarkerBodyPosition(bodyNumber=b0, localPosition=[ 0.5, 0., 0.]))
m10 = mbs.AddMarker(MarkerBodyPosition(bodyNumber=b1, localPosition=[-0.5, 0., 0.]))
m12 = mbs.AddMarker(MarkerBodyPosition(bodyNumber=b1, localPosition=[ 0.5, 0., 0.]))
m21 = mbs.AddMarker(MarkerBodyPosition(bodyNumber=b2, localPosition=[-0.5, 0., 0.]))
m23 = mbs.AddMarker(MarkerBodyPosition(bodyNumber=b2, localPosition=[ 0.5, 0., 0.]))
m32 = mbs.AddMarker(MarkerBodyPosition(bodyNumber=b3, localPosition=[-0.5, 0., 0.]))

# add joints:
jg0 = mbs.AddObject(RevoluteJoint2D(markerNumbers=[mGround,m00]))
j01 = mbs.AddObject(RevoluteJoint2D(markerNumbers=[m01,m10]))
j12 = mbs.AddObject(RevoluteJoint2D(markerNumbers=[m12,m21]))
j23 = mbs.AddObject(RevoluteJoint2D(markerNumbers=[m23,m32]))

# add loads:

mLoad0=mbs.AddMarker(MarkerNodePosition(nodeNumber=n0))
mLoad1=mbs.AddMarker(MarkerNodePosition(nodeNumber=n1))
mLoad2=mbs.AddMarker(MarkerNodePosition(nodeNumber=n2))
mLoad3=mbs.AddMarker(MarkerNodePosition(nodeNumber=n3))

mbs.AddLoad(Force(markerNumber=mLoad0, loadVector=[0,-9.81*1,0]))
mbs.AddLoad(Force(markerNumber=mLoad1, loadVector=[0,-9.81*1,0]))
mbs.AddLoad(Force(markerNumber=mLoad2, loadVector=[0,-9.81*1,0]))
mbs.AddLoad(Force(markerNumber=mLoad3, loadVector=[0,-9.81*1,0]))

# add time integration scheme:
mbs.Assemble()
simulationSettings = exu.SimulationSettings()
simulationSettings.timeIntegration.numberOfSteps = 10000
simulationSettings.timeIntegration.endTime = 10
simulationSettings.solutionSettings.writeSolutionToFile = True
simulationSettings.solutionSettings.solutionWritePeriod = 0.01

exu.StartRenderer()
mbs.WaitForUserToContinue()
mbs.SolveDynamic(simulationSettings)
exu.StopRenderer()