Skip to content

Quaternion handling is too tight to Biorbd #1037

@Ipuch

Description

@Ipuch

The method below assumes the names of the dof include "QuatW" to handle quaternions properly in a model. We may need more abstraction if we want to handle other kind of simulators or enforce how ǹame_dofs̀ works.

    @staticmethod
    def _get_kinematics_based_names(nlp, var_type: str) -> list[str]:
        """
        To modify the names of the variables added to the plots if there is quaternions

        Parameters
        ----------
        nlp: NonLinearProgram
            A reference to the phase
        var_type: str
            A string that refers to the decision variable such as (q, qdot, qddot, tau, etc...)

        Returns
        ----------
        new_name: list[str]
            The list of str to display on figures
        """
        idx = nlp.phase_mapping.to_first.map_idx if nlp.phase_mapping else range(nlp.model.nb_q)

        if nlp.model.nb_quaternions == 0:
            new_names = [nlp.model.name_dofs[i] for i in idx]
        else:
            new_names = []
            for i in nlp.phase_mapping.to_first.map_idx:
                if nlp.model.name_dofs[i][-4:-1] == "Rot" or nlp.model.name_dofs[i][-6:-1] == "Trans":
                    new_names += [nlp.model.name_dofs[i]]
                else:
                    if nlp.model.name_dofs[i][-5:] != "QuatW" and nlp.model.name_dofs[i] != "GlenoHumeral_3":
                        if var_type == "qdot":
                            new_names += [nlp.model.name_dofs[i][:-5] + "omega" + nlp.model.name_dofs[i][-1]]
                        elif var_type == "qddot":
                            new_names += [nlp.model.name_dofs[i][:-5] + "omegadot" + nlp.model.name_dofs[i][-1]]
                        elif var_type == "qdddot":
                            new_names += [nlp.model.name_dofs[i][:-5] + "omegaddot" + nlp.model.name_dofs[i][-1]]
                        elif var_type == "tau" or var_type == "taudot":
                            new_names += [nlp.model.name_dofs[i]]

        return new_names

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions