Siddharth, You cannot mix 2D and 3D collision shapes. If your mechanism is planar, all collision shapes must be 2D and lie in the same plane. I pushed a Python demo illustrating the use of 2D collision shapes. See demo_MBS_collision_2d.py<https://github.com/projectchrono/chrono/blob/main/src/demos/python/mbs/demo_MBS_collision_2d.py>.
--Radu P.S. Please post code with no background. The message below is difficult to read. From: [email protected] <[email protected]> On Behalf Of Siddharth L Sent: Tuesday, October 7, 2025 10:46 AM To: ProjectChrono <[email protected]> Subject: [chrono] 2D Collision not Working in Pychrono Hi All, I'm with simple two level MBD Mechanism, In that 2D Collision is not working. I not sure it due bug or, I'm not handling it properly. Kindly help me to resolve this issue. Code : ``` import pychrono.core as chrono import pychrono.irrlicht as chronoirr # --- SYSTEM & MATERIALS --- sys = chrono.ChSystemNSC() mat = chrono.ChContactMaterialNSC() sys.SetGravitationalAcceleration(chrono.ChVector3d(0, 0, 0)) # --- KEY REFERENCE POINTS (GENERIC NAMES) --- # BODY 1 (main rotating body) body1_pivot = chrono.ChVector3d(0, 13.692, 0) body1_armA_end = chrono.ChVector3d(0, -13.692, 0) body1_armB_end = chrono.ChVector3d(-12.74229169, -25.36073728, 0) # BODY 2 (secondary body) body2_pivot = chrono.ChVector3d(1.40186, -22.50787380, 0) body2_armA_end = chrono.ChVector3d(-11.27933961, 11.62809944, 0) body2_armB_end = chrono.ChVector3d(5.64177978, -19.92728796, 0) # --- STATIC REFERENCE BODY --- staticbody = chrono.ChBody() staticbody.SetFixed(True) staticbody.SetPos(chrono.ChVector3d(0, 0, 0)) sys.Add(staticbody) # --- BODY 1 SETUP --- body1_axis_sys = chrono.ChFramed(chrono.ChCoordsysd(body1_pivot, chrono.QUNIT)) body1 = chrono.ChBody() body1.SetPos(body1_axis_sys.GetPos()) body1.SetFixed(False) body1.SetMass(1) body1.SetInertiaXX(chrono.ChVector3d(1e3, 1e3, 1e3)) body1.EnableCollision(True) # Collision shape on BODY 1 (a small cylinder located at armB end) body1_contact_cyl = chrono.ChCollisionShapeCylinder(mat, 0.81823296, 0.1) body1.AddCollisionShape(body1_contact_cyl, chrono.ChFramed(body1_armB_end, chrono.QUNIT)) sys.Add(body1) # Visual cylinder at the same place body1_vis_cyl = chrono.ChVisualShapeCylinder(0.81823296, 0.1) body1.AddVisualShape(body1_vis_cyl, chrono.ChFramed(body1_armB_end, chrono.QUNIT)) # Visualize BODY 1 arms (lines from pivot-local origin to endpoints) local_body1_armA_end = chrono.ChVector3d(0, -13.692, 0) local_body1_armB_end = chrono.ChVector3d(-12.74229169, -25.36073728, 0) body1_armA_visual = chrono.ChVisualShapeLine() body1_armA_visual.SetColor(chrono.ChColor(0.1, 0.9, 0.1)) body1_armA_visual.SetLineGeometry(chrono.ChLineSegment(chrono.ChVector3d(0, 0, 0), local_body1_armA_end)) body1_armB_visual = chrono.ChVisualShapeLine() body1_armB_visual.SetColor(chrono.ChColor(0.1, 0.9, 0.1)) body1_armB_visual.SetLineGeometry(chrono.ChLineSegment(chrono.ChVector3d(0, 0, 0), local_body1_armB_end)) body1.AddVisualShape(body1_armA_visual) body1.AddVisualShape(body1_armB_visual) # Revolute joint for BODY 1 at body1_pivot body1_revolute = chrono.ChLinkLockRevolute() mframe = chrono.ChFramed(body1_pivot, chrono.QUNIT) body1_revolute.Initialize(body1, staticbody, mframe) sys.Add(body1_revolute) min_angle = 0 * chrono.CH_DEG_TO_RAD max_angle = 270 * chrono.CH_DEG_TO_RAD body1_revolute.LimitRz().SetActive(True) body1_revolute.LimitRz().SetMin(min_angle) body1_revolute.LimitRz().SetMax(max_angle) # Applied force/torque on BODY 1 body1_force = chrono.ChForce() body1.AddForce(body1_force) body1_force.SetMode(chrono.ChForce.FORCE) body1_force.SetDir(chrono.ChVector3d(1, 0, 0)) body1_force.SetVrelpoint(body1_armA_end) body1_force.SetMforce(5) # magnitude # --- BODY 2 SETUP --- body2 = chrono.ChBody() body2.SetPos(body2_pivot) # Center of mass body2.SetFixed(False) body2.SetInertiaXX(chrono.ChVector3d(1e3, 1e3, 1e3)) body2.EnableCollision(True) body2.SetMass(1) sys.AddBody(body2) # Revolute joint for BODY 2 at body2_pivot body2_revolute = chrono.ChLinkLockRevolute() mframe = chrono.ChFramed(body2_pivot, chrono.QUNIT) body2_revolute.Initialize(staticbody, body2, mframe) sys.Add(body2_revolute) min_angle = 90 * chrono.CH_DEG_TO_RAD max_angle = 180 * chrono.CH_DEG_TO_RAD body2_revolute.LimitRz().SetActive(True) body2_revolute.LimitRz().SetMin(min_angle) body2_revolute.LimitRz().SetMax(max_angle) # Contact material (for 2D arc + cylinder on body2) contact_mat = chrono.ChContactMaterialNSC() contact_mat.SetFriction(0.4) contact_mat.SetRestitution(0.1) # BODY 2: 2D arc shape (collision + visual) center = chrono.ChCoordsysd(chrono.ChVector3d(0, 0, 0)) radius = 17 angle_start = 134.128 * chrono.CH_DEG_TO_RAD angle_end = 142.532 * chrono.CH_DEG_TO_RAD arc = chrono.ChLineArc(center, radius, angle_start, angle_end, True) arc_shape = chrono.ChCollisionShapeArc2D(contact_mat, arc, radius) body2.AddCollisionShape(arc_shape) body2_arc_visual = chrono.ChVisualShapeLine() body2_arc_visual.SetColor(chrono.ChColor(0.9, 0.1, 0.1)) body2_arc_visual.SetLineGeometry(arc) body2.AddVisualShape(body2_arc_visual) # BODY 2 arms (visual) body2_armB_visual = chrono.ChVisualShapeLine() body2_armB_visual.SetColor(chrono.ChColor(0.1, 0.9, 0.1)) body2_armB_visual.SetLineGeometry(chrono.ChLineSegment(chrono.ChVector3d(0, 0, 0), body2_armB_end)) body2.AddVisualShape(body2_armB_visual) # BODY 2 cylinder contact + visual at armA end body2_contact_cyl = chrono.ChCollisionShapeCylinder(mat, 0.8, 0.1) body2.AddCollisionShape(body2_contact_cyl, chrono.ChFramed(body2_armA_end, chrono.QUNIT)) body2_vis_cyl = chrono.ChVisualShapeCylinder(0.81823296, 0.1) body2.AddVisualShape(body2_vis_cyl, chrono.ChFramed(body2_armA_end, chrono.QUNIT)) # Applied force/torque on BODY 2 body2_force = chrono.ChForce() body2.AddForce(body2_force) body2_force.SetMode(chrono.ChForce.FORCE) body2_force.SetDir(chrono.ChVector3d(1, 0, 0)) body2_force.SetVrelpoint(body2_armB_end) body2_force.SetMforce(5) # --- VISUALIZATION & SIMULATION LOOP --- vis = chronoirr.ChVisualSystemIrrlicht() vis.AttachSystem(sys) vis.SetWindowSize(1024, 768) vis.SetWindowTitle('Two-Body Mechanism ') vis.Initialize() # vis.SetBackgroundColor(chrono.ChColor(1, 1, 1)) vis.AddCamera(chrono.ChVector3d(0, 0, 60)) vis.AddTypicalLights() vis.EnableAbsCoordsysDrawing(True) vis.EnableLinkFrameDrawing(True) while vis.Run(): vis.BeginScene() vis.Render() vis.EndScene() sys.DoStepDynamics(1e-3) ``` -- 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 [email protected]<mailto:[email protected]>. To view this discussion visit https://groups.google.com/d/msgid/projectchrono/f1593e24-73e1-474b-b250-853b68e2c7a6n%40googlegroups.com<https://urldefense.com/v3/__https:/groups.google.com/d/msgid/projectchrono/f1593e24-73e1-474b-b250-853b68e2c7a6n*40googlegroups.com?utm_medium=email&utm_source=footer__;JQ!!Mak6IKo!N3zbzNnViotrNu9qWAWD1wy0fdELawnovJqvSHDxnvsUYOb3r26JQJUY_MqeQG3HXR45GgtrX6Kq5vImoL59dA$>. -- 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 [email protected]. To view this discussion visit https://groups.google.com/d/msgid/projectchrono/CH3PPF46CDC2185B44B2E5118D58BCD351BA7E1A%40CH3PPF46CDC2185.namprd06.prod.outlook.com.
