Thanks for your feedback,
I build Body 1 using these below code.
import pychrono.core as chrono
import pychrono.irrlicht as chronoirr
sys = chrono.ChSystemNSC()
sys.SetGravitationalAcceleration(chrono.ChVector3d(0, 0, 0))
pivot = chrono.ChVector3d(0,13.692,0)
arm1_end_point = chrono.ChVector3d(0, 0, 0)
arm2_end_point = chrono.ChVector3d(-12.74020788, -11.66873729, 0)
body = chrono.ChBodyAuxRef()
body.SetFixed(False)
body.SetMass(1)
body.SetInertiaXX(chrono.ChVector3d(1,1,1))
body.SetPos(pivot)
sys.AddBody(body)
cylinder = chrono.ChVisualShapeCylinder(0.81823296, 0.1)
cylinder.SetVisible(True)
chframecyl = chrono.ChFramed(arm2_end_point, chrono.QUNIT)
body.AddVisualShape(cylinder, chframecyl)
arm1 = chrono.ChLineSegment(pivot, arm1_end_point)
arm2 = chrono.ChLineSegment(pivot, arm2_end_point)
arm1_visual = chrono.ChVisualShapeLine()
arm1_visual.SetColor(chrono.ChColor(0.1, 0.9, 0.1))
arm1_visual.SetLineGeometry(chrono.ChLineSegment(pivot, arm1_end_point))
arm2_visual = chrono.ChVisualShapeLine()
arm2_visual.SetColor(chrono.ChColor(0.1, 0.9, 0.1))
arm2_visual.SetLineGeometry(chrono.ChLineSegment(pivot, arm2_end_point))
body.AddVisualShape(arm1_visual)
body.AddVisualShape(arm2_visual)
vis = chronoirr.ChVisualSystemIrrlicht()
vis.AttachSystem(sys)
vis.SetWindowSize(1024, 768)
vis.SetWindowTitle('Test')
vis.Initialize()
vis.AddSkyBox()
vis.AddCamera(chrono.ChVector3d(1.0, 0.0, 20))
vis.AddTypicalLights()
vis.EnableAbsCoordsysDrawing(True)
vis.EnableLinkFrameDrawing(True)
while vis.Run():
vis.BeginScene()
vis.Render()
vis.EndScene()
sys.DoStepDynamics(5e-3)
On Friday, 3 October 2025 at 1:07:36 pm UTC+5:30 Radu Serban wrote:
> A couple of comments:
>
>
>
> Siddharth – I suggest you start by carefully looking through the Chrono
> documentation (in particular this) and through the many demos we provide.
> You seem to have a few misunderstanding (e.g., use of visual shapes to
> define collision geometry). Understand what geometry means in the context
> of a multibody model (for collision and for visualization – they do not
> have to, and often are not, the same). For instance, I would model your
> problem with a single collision shape per body: the blue circle for body
> 1, the yellow circle for body 3, and the purple arc and line segment for
> body 3 are the only relevant geometry. You do not need to have geometry to
> apply an external force to a body or to connect that body to another one
> through a joint.
>
>
>
> Alvaro – while your suggestion of starting simple is very often a good
> approach, in this case I believe the contact is integral to the problem
> dynamics. A model based on kinematic joints would be of little use. And
> “updating prismatic joints to contacts” is not a simple change; it
> practically means remodeling everything from scratch.
>
>
>
> While Chrono always works in 3D, we do support line contacts in 2D,
> provided the mechanism is correctly kinematically constrained to evolve in
> a plane. You define such 2D collision geometry as a collection of circle
> arcs and line segments – precisely what you need here. Look at
> demo_MBS_collision_2D
> <https://github.com/projectchrono/chrono/blob/main/src/demos/mbs/demo_MBS_collision_2d.cpp>
>
> for an example.
>
>
>
> --Radu
>
>
>
> *From:* [email protected] <[email protected]> *On
> Behalf Of *alvaro diaz
> *Sent:* Tuesday, September 30, 2025 10:43 PM
> *To:* ProjectChrono <[email protected]>
> *Subject:* Re: [chrono] Help Needed to create the Mechanism
>
>
>
> Hello Siddharth,
>
>
>
> I am bit confused because you don't want to use a mesh but you don't want
> to use basic geometry. I guess you can use ChVisualShapeLine /
> ChVisualShapeSegment and ChVisualShapeLineStrip / ChVisualShapePolyline
> although I haven't used those myself.
>
> My recommended approach is to use prismatic joints instead of contacts to
> begin with, and once you have the model running change both prismatic
> joints to contacts or just one of them depending on your mechanism i guess.
> It sounds to me that you want to learn pyChrono while doing this project.
> If that is the case subdivide into simpler steps:
>
>
>
> 1 - Solve problem without contacts (use prismatic joints instead) and
> without geometry (use CGs and sliding planes for the prismatic joints).
> This will setup your revolut joints, springs and forces.
>
>
>
> 2 - Update one to include your geometries. This gets you a nicer
> visualization.
>
>
>
> 3- Update prismatic joints to contacts. Then you would have your desired
> goal.
>
>
>
> Note: you may have to add preloading for the torsion springs if you want
> to assist the motion.
>
>
>
> Hope it helps
>
> El martes, 30 de septiembre de 2025 a las 12:24:29 UTC-6,
> [email protected] escribió:
>
> Hi Alvaro,
>
> I’m not an MBD specialist, so I’d appreciate your advice.
>
> I need to model a system *without detailed body shapes*, but I still need
> to handle *collision/contact* and detect *slippage*.
>
> - *Body 1* is always trying to rotate *CCW* due to a constant *100 N
> load*, but its motion is resisted by *Body 2*.
> - A *linear pull* is applied to *Body 3*; this force is transferred to
> *Body
> 2*, causing Body 2 to try to rotate *CCW*.
> - During this continuous pull, I need to track the *force in the
> pulling direction* up to the moment when *slip occurs between Body 1
> and Body 2*.
> - *Body 1* has a *torsional spring (CCW)* that helps it rotate CCW
> more easily.
> - *Body 2* has a *torsional spring (CW)* that keeps it in its initial
> position after slippage occurs.
>
> How can I model this kind of force transfer and slip detection *without
> using basic geometry*?
> Any guidance or recommended approach would really help me kick-start this
> project.
>
> Thank You
>
> Regards,
> SIDDHARTH L
>
>
> On Tuesday, 30 September 2025 at 8:22:45 pm UTC+5:30 [email protected]
> wrote:
>
> Hello! I am not a developer but hopefully I can help to get you started.
>
>
>
> 1- If you are interested in the mechanism motion and not any deformation
> (FEA), you don't need any shape or geometry. You can work with the CGs of
> each body and the location of the joints (roughly).
>
>
>
> 2- You can work with the mechanism out of the gravity and plane and
> therefore set "g" to zero. However, you need the bodies mass (for
> displacement DOFs) and Inertia (Rotation DOFs). There can be coupling but
> rule of thumb that works. PyChrono sets default values for mass and inertia
> to 1.
>
>
>
> 3- Your model has six bodies unless the angles where you have the rotation
> arrows are fixed. If these angles are not fixed, each circular arrow is a
> REVOLUT constraint, the Yellow ball is a PRISMATIC constraint, and the blue
> ball is also a PRISMATIC constraint if the surface is planar, good first
> approximation, or a CONTACT if not, which can be more involved. My
> recommendation is that you start with PRISMATIC and get the model to run
> and then you change to contact. Note: I am assuming that the balls are
> fixed with the bar.
>
>
>
> 4- Apply a body load to body 1, where if the load is always to the right,
> specify that the load_vector is global (local_load=False).
>
>
>
> 5- Apply a motor to set an angular speed or translational speed to
> whatever value (30mm/s in your case).
>
>
>
> 6- How to measure your reaction force: no idea there on how to
> specifically access it from Chrono. If you were to model it yourself is
> basically the Lagrange multiplier associated to the velocity constraint.
>
>
>
> 7- Set your simulation to run until there is no contact or until you reach
> the limit of the prismatic constrain for the approximated approach (use 99%
> of the limit to be safe).
>
>
>
> 8- Comments on optimization: assuming parametric optimization, you can
> modify the lengths, mass, Inertia and CG locations which is roughly a
> combination of density and geometric properties. I am assuming you'll use
> some gradient free optimization as computing sensitivities here is not
> possible with the current state of the code (as far as I know). You don't
> have a lot of design variables so probably genetic algorithms work just
> fine.
>
>
>
> Hope that helps
>
> El martes, 30 de septiembre de 2025 a las 5:11:07 UTC-6,
> [email protected] escribió:
>
> I’m working on a *design optimization algorithm*.
> I don’t have any CAD geometry — instead, I want to *generate 2D planar
> mechanisms* using basic shapes such as circles, lines, and arcs
> (optionally with thickness). I don’t intend to create any full CAD models.
>
> I need to check whether the mechanism works as expected *when an external
> force is applied at a point*. The simulation should run *without
> considering the body’s own inertia or gravity* — I only want to account
> for the *moment generated by the external force and contact friction*.
>
> I plan to create the shapes in *PyChrono* programmatically, using
> parameters such as points, arm length, and circle radius.
>
> On Tuesday, 30 September 2025 at 11:59:59 am UTC+5:30 Siddharth L wrote:
>
> Dear Sir,
>
> I currently do not have access to SolidWorks. My present goal is to
> generate a basic planar mechanism, and I would appreciate your guidance on
> the best approach to start.
>
> For example, if I need to create one body composed of three basic shapes,
> should I model it as three separate bodies or use the *VisualShape *method?
> Similarly, for linkages, would it be better to use * EasyBox *or
> *LinkSegment*?
>
> Could you kindly provide a quick overview of the most suitable methods or
> components to use for this purpose? I would like to try implementing an
> initial-level code based on your suggestions.
>
> Thank you for your time and support.
>
> On Tuesday, 30 September 2025 at 3:06:19 am UTC+5:30 Dan Negrut wrote:
>
> A good start would probably be to use the Solidworks to PyChrono pipeline.
>
> Not that you have to, but it could give you a jump start.
>
> Dan
>
> ---------------------------------------------
>
> Bernard A. and Frances M. Weideman Professor
>
> NVIDIA CUDA Fellow
>
> Department of Mechanical Engineering
>
> Department of Computer Science
>
> University of Wisconsin - Madison
>
> 4150ME, 1513 University Avenue
>
> Madison, WI 53706-1572
>
> 608 772 0914 <(608)%20772-0914>
>
> http://sbel.wisc.edu/
>
> http://projectchrono.org/
> <https://urldefense.com/v3/__http:/projectchrono.org/__;!!Mak6IKo!NlqTU6jYJtx600PzKwrdBmICVWHNR2gEBU4BRt-xCW9RW5-pBlHMPVbqU6h_Kpfugvs5dcteICLyyuo8$>
>
>
> ---------------------------------------------
>
>
>
> *From:* [email protected] <[email protected]> *On
> Behalf Of *Siddharth L
> *Sent:* Monday, September 29, 2025 7:22 AM
> *To:* ProjectChrono <[email protected]>
> *Subject:* [chrono] Help Needed to create the Mechanism
>
>
>
> I want to model a mechanism (see attached image) with the following setup:
>
> - *Body 1* and * Body 2* are in contact, and *Body 3* is an arm
> connected to the mechanism.
> - I want to *pull the end of Body 3 at a constant speed of 30 mm/s*.
> - While pulling, I need to *track the force (magnitude and direction)
> at the pulling point* until *Body 1 and Body 2 slip* relative to each
> other.
> - A constant *100 N force* is applied to Body 1, trying to rotate it
> counterclockwise (CCW).
>
> Could you guide me on how to *create the basic shapes for these bodies*
> in PyChrono and how to *simulate this pulling motion and measure the
> reaction force*?
>
>
>
> --
> 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/52f2d3e4-42f7-42c7-beb5-5e42c7b30d40n%40googlegroups.com
>
> <https://urldefense.com/v3/__https:/groups.google.com/d/msgid/projectchrono/52f2d3e4-42f7-42c7-beb5-5e42c7b30d40n*40googlegroups.com?utm_medium=email&utm_source=footer__;JQ!!Mak6IKo!KyCQHUEKrTdDDkGXfCVvr8AhY2nZIovjo0DEy4dwkIK18o0Dw7IFkmv3QmbgwP39p-O0VjI12BAwwOIGWrY8-w$>
> .
>
> --
> 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/0173d398-5a4c-4bab-9814-2558ae4a52b2n%40googlegroups.com
>
> <https://urldefense.com/v3/__https:/groups.google.com/d/msgid/projectchrono/0173d398-5a4c-4bab-9814-2558ae4a52b2n*40googlegroups.com?utm_medium=email&utm_source=footer__;JQ!!Mak6IKo!NlqTU6jYJtx600PzKwrdBmICVWHNR2gEBU4BRt-xCW9RW5-pBlHMPVbqU6h_Kpfugvs5dcteII6bd6RO$>
> .
>
--
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/7241f972-4958-4b2e-aa6f-bd59ea322accn%40googlegroups.com.