Can you show the discrepancies that you are observing in the simulation? Are you aware about the chaotic behaviour of the double pendulum? Double_pendulum#Chaotic_motion <https://en.wikipedia.org/wiki/Double_pendulum#Chaotic_motion> A slight change in the initial conditions, little approximations, etc can lead to totally different results and this is somehow expected.
Dario Il giorno mercoledì 21 maggio 2025 alle 04:37:22 UTC+2 aa...@rice.edu ha scritto: > Hello > > I am trying to model a 2D double pendulum problem with the following > geometry and initial conditions. However, the solution does not match the > analytical results. I would like to verify whether my inputs are correct. > > Also, if I plan to make one of the links flexible, what would be an > efficient way to implement it? > > The code is included below. > > > .................................................................................................................................................... > > import pychrono as chrono > import pychrono.irrlicht as chronoirr > > # Create system > > sys = chrono.ChSystemNSC() > sys.SetGravitationalAcceleration(chrono.ChVector3d(0, -9.81, 0)) > > # 1. Ground body (fixed) > ground = chrono.ChBody() > ground.SetFixed(True) > ground.SetPos(chrono.ChVector3d(0, 0, 0)) > sys.Add(ground) > > # 2. First pendulum body > pend1 = chrono.ChBody() > pend1.SetMass(0.79) > pend1.SetInertiaXX(chrono.ChVector3d(0.01, 0.01, 0.0658)) > pend1.SetPos(chrono.ChVector3d(0, -0.5, 0)) # CG in center of bar > pend1.SetAngVelParent(chrono.ChVector3d(0, 0, 10)) > sys.Add(pend1) > > # Visual: 1m tall, half-dim = 0.5, shift visual down by 0.5 > shape1 = chrono.ChVisualShapeBox(chrono.ChVector3d(0.01,1, 0.01)) > shape1.SetColor(chrono.ChColor(0.5, 0.5, 0.8)) > pend1.AddVisualShape(shape1) > > # 3. Second pendulum body > pend2 = chrono.ChBody() > pend2.SetMass(0.3) > pend2.SetInertiaXX(chrono.ChVector3d(0.01, 0.01, 0.0250)) > pend2.SetPos(chrono.ChVector3d(0, -1.5, 0)) # CG in center of second bar > pend2.SetAngVelParent(chrono.ChVector3d(0, 0, 5)) > sys.Add(pend2) > > # Visual for pend2 > shape2 = chrono.ChVisualShapeBox(chrono.ChVector3d(0.01, 1, 0.01)) > shape2.SetColor(chrono.ChColor(0.8, 0.5, 0.5)) > pend2.AddVisualShape(shape2) > > # 4. Revolute joint between ground and pend1 at origin > joint1 = chrono.ChLinkRevolute() > frame1 = chrono.ChFramed(chrono.ChVector3d(0, 0, 0)) > joint1.Initialize(ground, pend1, frame1) > sys.Add(joint1) > > # 5. Revolute joint between pend1 and pend2 at (0, -1, 0) > joint2 = chrono.ChLinkRevolute() > frame2 = chrono.ChFramed(chrono.ChVector3d(0, -1, 0)) > joint2.Initialize(pend1, pend2, frame2) > sys.Add(joint2) > > # 6. Visualization setup > vis = chronoirr.ChVisualSystemIrrlicht() > vis.AttachSystem(sys) > vis.SetWindowSize(1024, 768) > vis.SetWindowTitle("Double Pendulum") > vis.Initialize() > vis.AddSkyBox() > vis.AddCamera(chrono.ChVector3d(0.5, 1.5, 1.0)) # Camera looking in 3D > vis.AddTypicalLights() > > # Simulation loop > while vis.Run(): > vis.BeginScene() > vis.Render() > vis.EndScene() > sys.DoStepDynamics(0.005) > -- You received this message because you are subscribed to the Google Groups "ProjectChrono" group. To unsubscribe from this group and stop receiving emails from it, send an email to projectchrono+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/projectchrono/b409bcbb-f8d4-4536-a16f-6fdeeec7d776n%40googlegroups.com.