Skip to content
< All Topics

Kinematization

Introduction

The kinematization solution aims to simplify the process of creating mechanisms using primitive geometries or convex geometries generated from 3D CAD models, without requiring the user to have a background in C#. It also enables the user to define the motion of each component.

All the new functionalities are available from the ribbon in the tab named Kinematization.

CAD Import

You can import 3D CAD models by clicking on the CAD/Convex button. This will open a dialog window where you can select the CAD file to import. Currently, the supported formats are Collada (.dae) and Standard Triangle Language (.stl).

Some remarks to be made about the import feature are:

  1. Imported CAD files will be serialized within the model.
  2. Every Assembly created through the CAD import is of type BodyAssembly.
  3. The performance can be affected by either a large number of geometries or the complexity given the mesh density.

When importing a Collada file, an additional window will appear, giving the user the option to split the 3D model into multiple parts. This allows the user to recreate the hierarchy specified in the file, resulting in the creation of multiple BodyAssembly objects in the scene.

    Hierarchy Modification

    Creation or modification of hierarchies can be performed using the following buttons:

    1. Attach: This method creates a parent-child relationship between the selected assemblies. The first assembly selected will be defined as the parent.
    2. Detach: This method breaks the parent-child relationship. The selected assembly will be detached from its parent.

    You can create a new empty Assembly by clicking on the Create button. This option allows you to create a blank Assembly that can serve as a container for building a new hierarchy.

    Convex Collider Geometry

    In a scene, the parts are composed of two main elements: visual mesh and collider geometry. The visual mesh is what the user sees all the time, while the collider geometry is used by the PhysX engine to detect collisions and apply forces.

    The BodyAssembly class has been modified to offer a more precise convex collider geometry that closely matches the visual mesh. This not only improves the fidelity of the collision detection but also speeds up the creation process.

    Convex collider geometries are created through a process called Cooking. This process has been modified to make a second attempt if the PhysX engine fails during the Cooking process due to the complexity of the geometry or a large number of vertices provided. On the second attempt, the vertices will be quantized using K-means clustering, which reduces the number of vertices by creating an approximation of the original model. If the PhysX engine fails again during the second attempt, a box collider geometry will be created.

    Body Assembly

    The BodyAssembly class has been specifically developed to work with the Kinematization solution. The following points describe the key characteristics and behaviors provided by the class.

    1. It provides polymorphism, allowing you to change its geometry to a primitive shape (box, cylinder, and sphere) or a convex shape (CAD file models).
    2. The behavior of the Body can vary depending on the selected dynamics
      • Bodiless: It is kinematic and has no collider
      • Rigid: It is kinematic and has a collider
      • Physics: It is dynamic, and its position and velocity are determined by the forces acting on it.
    3. Minimum position and velocity iterations improves the results of the PhysX engine solver for the current Body, when using physics joints.
    4. Collision allows you to enable or disable collision with other BodyAssembly objects in the scene, without destroying the collider.
    5. Gravity allows you to enable or disable the effect of gravity on the current Body
    6. Weight defines the density of the Body considering its volume

    Motion

    Body Assembly has been designed to be compatible with Kinematic Axis Assembly and Physics Joints. On the other hand, you can perform combination between Kinematic Axis and Physics Joints to create mechanisms.

    Kinematic Axis

    • It allows for the movement of single or multiple assemblies that have been attached to it.
    • It supports the attachment of Kinematic Axis assemblies to create serial or parallel kinematic chains.
    • It supports the attachment of Body Assembly objects which belong to a structure composed by joints and which Dynamics type is Rigid.
    • It provides only one degree of freedom.

    To simplify the motion assignment process, the user can select an assembly either from the scene or Solution Explorer and click on “Kinematic Axis”. This action will create a Kinematic Axis in the scene as the parent of the selected assembly, maintaining the same position and orientation. The same results can be achieved by selecting multiple assemblies before creating the Kinematic Axis. If no assembly is selected, a single Kinematic Axis will be added to the scene.

    The motion of the Kinematic Axis can be defined based on the drive type. By default, you have the option to use Position, Velocity, or Forward and Backward drives. If you need to use a custom drive, select the option Custom. Any class that inherits from the Electric or Positioner class will be added and displayed in the Custom Drive property.

    Passive Physics Joints

    A physics joint requires two BodyAssembly objects, and it defines the way bodies move relative to one another. The provided physics joint is of type D6 which is a highly configurable joint. It allows for the specification of individual degrees of freedom to either move freely or be locked.

    Joints can only be created through the Joint Editor Window, and are compatible only with BodyAssembly types. On the other hand, bodies cannot be Bodiless since the PhysX engine requires the collider geometries of the bodies.

    The Joint Editor Window allows the user to perform a quick configuration of the joint by enabling/disabling the degree of freedom. However, to get access to the full configuration of the joint, select the Physics Joint object in the Joint Editor Window, and the properties will be displayed in the Properties Window.

    The joint position and orientation are relative to the BodyAssembly, which has been set as the origin. The child position and orientation are relative to the joint origin. Besides, it is possible to change the geometry type even if the BodyAssembly is already connected to a physics joint. Experior automatically will reconstruct the joints connected to the body.

    No collision is presented between the BodyAssembly objects that are linked through the same physics joint. However, collision is present with external BodyAssembly objects or any other Assembly in the scene which has rigid parts. 

    Attachment of Assembly objects to BodyAssembly which already belong to a physics joint, is allowed. Nevertheless, the objects attached will not impact nor modify the motion of the joint since attached objects mimic the change of position and orientation.

    URDF Import

    1. When importing the Universal Robot Format (URDF) file, multiple Body and Kinematic Axis assemblies will be created based on the information specified in the file.
    2. Joints specified by URDF are constructed using Kinematic Axis assemblies.
    3. Unlike CAD import, URDF import allows to have BodyAssembly objects with custom colliders, regardless of the visual mesh geometry. This is possible if the collider information is provided by the URDF file.

    NOTE:

    • URDF import supports the same CAD formats mentioned for CAD import (.dae and .stl)
    • To maintain the specified hierarchy in the file, parent, joints, and child relations are kept.
    • When using Kinematic Axis assemblies as joints, the configuration applied to them based on the content of the file includes three aspects: Type, Axis, and Limits.

    Physics Joints Tips / Suggestions

    The following tips and suggestions are provided to improve the response of the PhysX engine and to have a more stable mechanism composed by passive physics joints.

    • Mass ratios above 10 are to be avoided, as the solver is not designed for high rigidity systems.
    • The bodies with higher mass will dominate the movement.
    • Setting the mass of the parts to the real value might not be the best way to set the parameter, depending on the mass ratios.
    • Setting a realistic center of masses can be useful to providing higher stability to a mechanism, as it will greatly influence how the joint affects the angular movement of the body.
    • The higher the solver iterations, the more “rigid” the joint will be (less flexible).
    • Position iterations will mainly provide the accuracy of slow-moving mechanisms.
    • Velocity iterations will improve the accuracy of high-speed movement.
    • Law of diminishing return applies for the last two points.
    • In some scenarios, gravity and collision could be disabled to improve the accuracy of the simulation, in the case that these interactions are not required for the specific simulation that is being done.

    Wrong Parameters

    Parametrized

    Demos