Skip to content

Ball joint export fails: code expects a CSYS constraint, but Creo's native Ball connection only allows Point alignment #160

Description

@PAyush15

Description

Hello, I'm trying to export an assembly that contains a Ball joint, but I cannot get it
to export successfully. There appears to be a mismatch between what creo2urdf expects
and what Creo's native Ball connection actually allows.

In ElementTreeManager.cpp, ball/spherical joints look for a coordinate-system
constraint:

cpp
else if (joint.type == JointType::Fixed || joint.type == JointType::Spherical)
{
    joint.datum_name = getConstraintDatum(feat,
        pfcComponentConstraintType::pfcASM_CONSTRAINT_CSYS,   // expects a CSYS
        pfcModelItemType::pfcITEM_COORD_SYS);
}

However, in Creo Parametric, the native Ball connection type only accepts a
Point alignment constraint — the UI does not let me select a coordinate system
(CSYS) for a Ball connection. Only points are accepted. So getConstraintDatum
returns an empty datum name, the joint center is not found, and export fails.

The export aborts. iDynTreeErrors.txt contains:

[ERROR] URDFModelExport: Impossible to convert joint spherical_rev_ball_joint_test_x
to a URDF joint without moving the link frame of link
spherical_fake_ball_joint_test_link1 , because the axis origin is
-0.271569 -0.0777232 -0.25458 the axis direction is x 1 y 2.77556e-17 z 4.16334e-17
and the distance between the axis and (0,0,0) is 0.26618
[ERROR] URDFFromModel: Failed to generate URDF string from processed model
My reading: because no CSYS constraint is found, the spherical joint center defaults
to the parent link origin instead of the actual ball center. When the ball joint is
expanded into three orthogonal revolute joints, the axes no longer intersect the fake
link frame origins, so iDynTree cannot write a valid URDF.

Could you please provide a working example assembly that contains a ball joint?

The examples/ folder currently has revolute, prismatic, and fixed joint examples
(2bars), but no ball joint example. A minimal reference assembly + YAML/CSV showing
the correct way to set up a ball joint in Creo would resolve a lot of ambiguity —
specifically:

Which Creo connection type should be used (native "Ball", "User Defined", etc.)?
Does the joint require a named CSYS on each part at the ball center, and if so,
how is that CSYS attached to the connection (since the native Ball type only accepts
points)?
Where exactly must the CSYS/point origin be placed relative to the geometry?

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions