Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Support for Parsing MJCF equality/connect Tag for Closed Chains #2413

Merged
merged 10 commits into from
Sep 22, 2024

Conversation

lvjonok
Copy link
Contributor

@lvjonok lvjonok commented Sep 11, 2024

Hello Pinocchio Team,

While working with the buildModel function, I noticed that when an SDF description is passed, it directly produces a vector of RigidConstraintModels. However, the mjcf format, which also supports closed-chain descriptions, currently does not parse the equality/connect tag.

To address this, I have added a draft implementation to enable parsing of the equality/connect tag in the mjcf format. I believe this enhancement will ease the work for people who use it.

Please feel free to review the draft implementation and share your feedback on its applicability to the Pinocchio library. I look forward to your comments!

Best regards,
Lev Kozlov

Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👋 Hi,
This is a reminder message to assign an extra build label to this Pull Request if needed.
By default, this PR will be build with minimal build options (URDF support and Python bindings)
The possible extra labels are:

  • build_collision (build Pinocchio with coal support)
  • build_casadi (build Pinocchio with CasADi support)
  • build_autodiff (build Pinocchio with CppAD support)
  • build_codegen (build Pinocchio with CppADCodeGen support)
  • build_extra (build Pinocchio with extra algorithms)
  • build_mpfr (build Pinocchio with Boost.Multiprecision support)
  • build_sdf (build Pinocchio with SDF parser)
  • build_accelerate (build Pinocchio with APPLE Accelerate framework support)
  • build_all (build Pinocchio with ALL the options stated above)

Thanks.
The Pinocchio development team.

@jcarpent
Copy link
Contributor

Thanks @lvjonok for sharing this effort with the community. Indeed, at the time being, we only support limited features of MJCF format and we are looking for external contributions to enhance it.

We give some feedback to you in the next following days to enhance your contribution.

Thanks again for contributing to Pinocchio,
Best,

Justin

@jcarpent jcarpent force-pushed the feature/parse-mjcf-equality branch 3 times, most recently from bba49c4 to 323dc8f Compare September 22, 2024 17:05
@jcarpent
Copy link
Contributor

@lvjonok It seems the current parsing is not deterministic according to the current issue on the mjcf.cpp test.
Do you know why?

@jcarpent
Copy link
Contributor

@lvjonok It seems the current parsing is not deterministic according to the current issue on the mjcf.cpp test. Do you know why?

I found the issue, related to the use of unordered_map, which is system dependant.

@jcarpent jcarpent force-pushed the feature/parse-mjcf-equality branch from e4ab01a to 4775bfa Compare September 22, 2024 19:26
@jcarpent jcarpent assigned jcarpent and unassigned jorisv Sep 22, 2024
@jcarpent jcarpent merged commit 57a0dcc into stack-of-tasks:devel Sep 22, 2024
20 of 21 checks passed
nim65s added a commit to nim65s/robotpkg that referenced this pull request Nov 8, 2024
    ## [3.3.0] - 2024-11-06

    ### Added

    - Default visualizer can be changed with `PINOCCHIO_VIEWER` environment variable stack-of-tasks/pinocchio#2419
    - Add more Python and C++ examples related to inverse kinematics with 3d tasks stack-of-tasks/pinocchio#2428
    - Add parsing of equality/connect tag for closed-loop chains for MJCF format stack-of-tasks/pinocchio#2413
    - Add compatibility with NumPy 2 `__array__` API stack-of-tasks/pinocchio#2436
    - Added argument to let users decide of root joint name when parsing models (urdf, mjcf, sdf) stack-of-tasks/pinocchio#2402
    - Allow use of `pathlib.Path | str` for paths in python bindings stack-of-tasks/pinocchio#2431
    - Add Pseudo inertia and Log-cholesky parametrization stack-of-tasks/pinocchio#2296
    - Add Pixi support stack-of-tasks/pinocchio#2459

    ### Fixed
    - Fix linkage of Boost.Serialization on Windows stack-of-tasks/pinocchio#2400
    - Fix mjcf parser appending of inertias at root joint stack-of-tasks/pinocchio#2403
    - Fix unit tests with GCC 13.3 stack-of-tasks/pinocchio#2416)
    - Fix class abstract error for Rviz viewer stack-of-tasks/pinocchio#2425
    - Fix compilation issue with MSCV and C++17 stack-of-tasks/pinocchio#2437
    - Fix `pinocchio-test-py-robot_wrapper` when building with SDF and collision support stack-of-tasks/pinocchio#2437
    - Fix crash when calling `Inertia::FromDynamicParameters` in Python with wrong vector size stack-of-tasks/pinocchio#2296
    - Fix `examples/cassie-simulation.py` and `examples/talos-simulation.py` stack-of-tasks/pinocchio#2443
    - Fix build with CppAd 2024 stack-of-tasks/pinocchio#2459
    - Fix `pinocchio-test-cpp-mjcf` unittest with Boost 1.86 stack-of-tasks/pinocchio#2459
    - Fix `pinocchio-test-cpp-constraint-variants` uninitialized values stack-of-tasks/pinocchio#2459
    - Fix mixing library symbols between Pinocchio scalar bindings stack-of-tasks/pinocchio#2459
    - Fix bug for get{Joint,Frame}JacobianTimeVariation stack-of-tasks/pinocchio#2466

    ### Changed

    - Modernize python code base with ruff stack-of-tasks/pinocchio#2418
    - Does not create a root_joint frame from parsed models (urdf, mjcf and sdf) when no root joint is provided stack-of-tasks/pinocchio#2402
nim65s added a commit to nim65s/robotpkg that referenced this pull request Nov 21, 2024
    ## [3.3.0] - 2024-11-06

    ### Added

    - Default visualizer can be changed with `PINOCCHIO_VIEWER` environment variable stack-of-tasks/pinocchio#2419
    - Add more Python and C++ examples related to inverse kinematics with 3d tasks stack-of-tasks/pinocchio#2428
    - Add parsing of equality/connect tag for closed-loop chains for MJCF format stack-of-tasks/pinocchio#2413
    - Add compatibility with NumPy 2 `__array__` API stack-of-tasks/pinocchio#2436
    - Added argument to let users decide of root joint name when parsing models (urdf, mjcf, sdf) stack-of-tasks/pinocchio#2402
    - Allow use of `pathlib.Path | str` for paths in python bindings stack-of-tasks/pinocchio#2431
    - Add Pseudo inertia and Log-cholesky parametrization stack-of-tasks/pinocchio#2296
    - Add Pixi support stack-of-tasks/pinocchio#2459

    ### Fixed
    - Fix linkage of Boost.Serialization on Windows stack-of-tasks/pinocchio#2400
    - Fix mjcf parser appending of inertias at root joint stack-of-tasks/pinocchio#2403
    - Fix unit tests with GCC 13.3 stack-of-tasks/pinocchio#2416)
    - Fix class abstract error for Rviz viewer stack-of-tasks/pinocchio#2425
    - Fix compilation issue with MSCV and C++17 stack-of-tasks/pinocchio#2437
    - Fix `pinocchio-test-py-robot_wrapper` when building with SDF and collision support stack-of-tasks/pinocchio#2437
    - Fix crash when calling `Inertia::FromDynamicParameters` in Python with wrong vector size stack-of-tasks/pinocchio#2296
    - Fix `examples/cassie-simulation.py` and `examples/talos-simulation.py` stack-of-tasks/pinocchio#2443
    - Fix build with CppAd 2024 stack-of-tasks/pinocchio#2459
    - Fix `pinocchio-test-cpp-mjcf` unittest with Boost 1.86 stack-of-tasks/pinocchio#2459
    - Fix `pinocchio-test-cpp-constraint-variants` uninitialized values stack-of-tasks/pinocchio#2459
    - Fix mixing library symbols between Pinocchio scalar bindings stack-of-tasks/pinocchio#2459
    - Fix bug for get{Joint,Frame}JacobianTimeVariation stack-of-tasks/pinocchio#2466

    ### Changed

    - Modernize python code base with ruff stack-of-tasks/pinocchio#2418
    - Does not create a root_joint frame from parsed models (urdf, mjcf and sdf) when no root joint is provided stack-of-tasks/pinocchio#2402
nim65s added a commit to nim65s/robotpkg that referenced this pull request Dec 6, 2024
    ## [3.3.0] - 2024-11-06

    ### Added

    - Default visualizer can be changed with `PINOCCHIO_VIEWER` environment variable stack-of-tasks/pinocchio#2419
    - Add more Python and C++ examples related to inverse kinematics with 3d tasks stack-of-tasks/pinocchio#2428
    - Add parsing of equality/connect tag for closed-loop chains for MJCF format stack-of-tasks/pinocchio#2413
    - Add compatibility with NumPy 2 `__array__` API stack-of-tasks/pinocchio#2436
    - Added argument to let users decide of root joint name when parsing models (urdf, mjcf, sdf) stack-of-tasks/pinocchio#2402
    - Allow use of `pathlib.Path | str` for paths in python bindings stack-of-tasks/pinocchio#2431
    - Add Pseudo inertia and Log-cholesky parametrization stack-of-tasks/pinocchio#2296
    - Add Pixi support stack-of-tasks/pinocchio#2459

    ### Fixed
    - Fix linkage of Boost.Serialization on Windows stack-of-tasks/pinocchio#2400
    - Fix mjcf parser appending of inertias at root joint stack-of-tasks/pinocchio#2403
    - Fix unit tests with GCC 13.3 stack-of-tasks/pinocchio#2416)
    - Fix class abstract error for Rviz viewer stack-of-tasks/pinocchio#2425
    - Fix compilation issue with MSCV and C++17 stack-of-tasks/pinocchio#2437
    - Fix `pinocchio-test-py-robot_wrapper` when building with SDF and collision support stack-of-tasks/pinocchio#2437
    - Fix crash when calling `Inertia::FromDynamicParameters` in Python with wrong vector size stack-of-tasks/pinocchio#2296
    - Fix `examples/cassie-simulation.py` and `examples/talos-simulation.py` stack-of-tasks/pinocchio#2443
    - Fix build with CppAd 2024 stack-of-tasks/pinocchio#2459
    - Fix `pinocchio-test-cpp-mjcf` unittest with Boost 1.86 stack-of-tasks/pinocchio#2459
    - Fix `pinocchio-test-cpp-constraint-variants` uninitialized values stack-of-tasks/pinocchio#2459
    - Fix mixing library symbols between Pinocchio scalar bindings stack-of-tasks/pinocchio#2459
    - Fix bug for get{Joint,Frame}JacobianTimeVariation stack-of-tasks/pinocchio#2466

    ### Changed

    - Modernize python code base with ruff stack-of-tasks/pinocchio#2418
    - Does not create a root_joint frame from parsed models (urdf, mjcf and sdf) when no root joint is provided stack-of-tasks/pinocchio#2402
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants