Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
da4aab8
feat(joint-ellipsoid)
Oct 20, 2025
19c8016
refactor(joint-ellipsoid): extra methods for S and Sdot
Oct 23, 2025
1749dd9
feat(joint-ellipsoid): bindings, model graphs
Oct 23, 2025
44a57e3
feat(joint-ellipsoid): extra utils for translations
Oct 29, 2025
ed8ed8a
tests(joint-ellipsoid): add composite test
Oct 29, 2025
1470087
tests(joint-ellipsoid): Sdot as finite difference
Nov 3, 2025
7842a92
test(joint-ellipsoid): model-graph
Nov 6, 2025
4f25192
docs(model-graphs)
Nov 6, 2025
2b5bf1d
clean(joint-ellipsoid): unused variables and warnings
Nov 6, 2025
52e649c
fix(joint-ellipsoid): binding python
Nov 6, 2025
e7017f8
feat(joint-ellipsoid): extra docs for binding + S available .
Nov 7, 2025
b3ecb1c
Add ellipsoid joint kinematics example script
LucasJoseph Nov 10, 2025
2d434e3
exemple(joint-ellipsoid)
Nov 10, 2025
6b93670
pre-commit
Nov 10, 2025
68ba51a
Update include/pinocchio/multibody/joint/joint-ellipsoid.hpp
Ipuch Nov 12, 2025
87fa8ef
refactor(joint-ellipsoid): remove useless typename
Ipuch Nov 12, 2025
45d8082
refactor(joint-ellipsoid): remove useless typenames
Ipuch Nov 12, 2025
a8a268e
refactor(joint-ellipsoid): remove useless typenames
Ipuch Nov 12, 2025
c10f6ef
feat(joint-ellipsoid): computeBiais
Nov 13, 2025
41c7661
Factorized data.M computation
LucasJoseph Nov 13, 2025
6e5d528
fix(joint-ellispoid) : compute_biais
Nov 13, 2025
f291077
refactor(joint-ellipsoid) : c instead of Sdot * qdot
Nov 13, 2025
b6bc476
Move ComputeTranslations and ComputeTranslationVelocities to tests
LucasJoseph Nov 13, 2025
78d171a
Moved computeTranslationAccelerations to tests
LucasJoseph Nov 13, 2025
60e901e
refactor(joint-ellipsoid) : Sdot computeMotionSubspaceDerivative in t…
Nov 13, 2025
e329f82
clean(joint-ellipsoid) no Sdot anymore.
Nov 13, 2025
ad98ad0
doc(joint-ellipsoid)
Nov 13, 2025
5f22bfd
tests(joint-ellipsoid): rnea vs aba isolated
Nov 13, 2025
a9504b5
docs(joint-ellipsoid): changelog and readme
Nov 13, 2025
c83ea11
precommit
Nov 13, 2025
535de5a
docs(joint-ellipsoid) - afeatures
Nov 13, 2025
4dcfbd3
Update include/pinocchio/multibody/joint/joint-ellipsoid.hpp
Ipuch Nov 19, 2025
2f6152a
Update bindings/python/parsers/graph/expose-edges.cpp
Ipuch Nov 19, 2025
9b955f7
review(@jorisv): docs and test
Nov 19, 2025
31ca230
scout(freeflyer docs)
Nov 19, 2025
ada9fb1
refactor(model-graph-algo): AddJointBetweenBodies
Nov 19, 2025
1d7b57e
doc(new joint): guide for developers.
Nov 26, 2025
f6b9890
doc: Fix doxygen doc parsing
jorisv Nov 26, 2025
d092321
core: Avoid cast build issue
jorisv Nov 26, 2025
4cba899
python: Remove redundant member definition
jorisv Nov 26, 2025
abe5d3c
lint: Run linter
jorisv Nov 26, 2025
36e708a
examples: Try to overcome a Windows encoding issue
jorisv Nov 27, 2025
d27d0ca
Revert "examples: Try to overcome a Windows encoding issue"
jorisv Nov 27, 2025
1f1c109
ci: Another try to fix greek letter output issue
jorisv Nov 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/macos-linux-windows-pixi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
# This is needed on Windows because ellipsoid-joint-kinematics.py output
# some utf8 char.
# More detail here: https://gist.github.com/NodeJSmith/e7e37f2d3f162456869f015f842bcf15
PYTHONIOENCODING: "utf8"

jobs:
pinocchio-pixi:
name: Standard - ${{ matrix.os }} - Env ${{ matrix.environment }} ${{ matrix.build_type }} ${{ matrix.compiler }}
Expand Down
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Add docker images ([#2776](https://github.com/stack-of-tasks/pinocchio/pull/2776))
- Add names to joints that are inside a composite joint ([#2786](https://github.com/stack-of-tasks/pinocchio/pull/2786))
- Add color support for robot meshes in Viser ([#2793](https://github.com/stack-of-tasks/pinocchio/pull/2793))
- Add Ellipsoid Joint (3-DOF surface constraint), get ready for biomechanics ([#2797](https://github.com/stack-of-tasks/pinocchio/pull/2797))

### Changed
- Python version update ([#2802](https://github.com/stack-of-tasks/pinocchio/pull/2802)):
Expand All @@ -35,7 +36,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
### Removed
- Remove CMake < 3.22 details ([#2790](https://github.com/stack-of-tasks/pinocchio/pull/2790))


## [3.8.0] - 2025-09-17

### Added
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,8 @@ In addition to the core dev team, the following people have also been involved i
- [Lev Kozlov](https://github.com/lvjonok): Kinetic and potential energy regressors
- [Simeon Nedelchev](https://github.com/simeon-ned): Pseudo inertia and Log-Cholesky parametrization
- [Alexy Legrand](https://www.linkedin.com/in/alexy-legrand-125889232/): Viser color bug fixes
- [Pierre Puchaud](https://github.com/ipuch): Ellipsoid Joint
- [Lucas Joseph](https://github.com/LucasJoseph): Ellipsoid Joint

If you have participated in the development of **Pinocchio**, please add your name and contribution to this list.

Expand Down
17 changes: 17 additions & 0 deletions bindings/python/parsers/graph/expose-edges.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ namespace pinocchio
const int JointSphericalZYX::nq;
const int JointSphericalZYX::nv;

const int JointEllipsoid::nq;
const int JointEllipsoid::nv;

const int JointTranslation::nq;
const int JointTranslation::nv;

Expand Down Expand Up @@ -111,6 +114,20 @@ namespace pinocchio
.def_readonly("nq", &JointSphericalZYX::nq, "Number of configuration variables.")
.def_readonly("nv", &JointSphericalZYX::nv, "Number of tangent variables.");

bp::class_<JointEllipsoid>(
"JointEllipsoid", "Represents an ellipsoidal joint.",
bp::init<>(bp::args("self"), "Default constructor."))
.def(bp::init<double, double, double>(
bp::args("self", "radius_a", "radius_b", "radius_c"), "Constructor with radii."))
.def_readwrite(
"radius_a", &JointEllipsoid::radius_a, "Semi-axis length in the x direction.")
.def_readwrite(
"radius_b", &JointEllipsoid::radius_b, "Semi-axis length in the y direction.")
.def_readwrite(
"radius_c", &JointEllipsoid::radius_c, "Semi-axis length in the z direction.")
.def_readonly("nq", &JointEllipsoid::nq, "Number of configuration variables.")
.def_readonly("nv", &JointEllipsoid::nv, "Number of tangent variables.");

bp::class_<JointTranslation>(
"JointTranslation", "Represents a translation joint.",
bp::init<>(bp::args("self"), "Default constructor."))
Expand Down
6 changes: 6 additions & 0 deletions doc/a-features/c-joints.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@ belongs to one of the following categories:
- **Revolute** joints, rotating around a fixed axis, either one of \f$X,Y,Z\f$ or a custom one;
- **Prismatic** joints, translating along any fixed axis, as in the revolute case;
- **Spherical** joints, free rotations in the 3D space;
- **Spherical ZYX** joints, free rotations parameterized by ZYX Euler angles;
- **Ellipsoid** joints, constraining motion to an ellipsoid surface with 3-DOF (2 rotations + 1 spin),
useful for biomechanics. The translation follows the ellipsoid surface \f$\left(\frac{x}{a}\right)^2 + \left(\frac{y}{b}\right)^2 + \left(\frac{z}{c}\right)^2 = 1\f$,
while the rotational part uses the normal direction of an equivalent sphere.
This approximation is exact only when \f$a = b = c\f$ (spherical case).
See Seth et al., "Minimal formulation of joint motion for biomechanisms," Nonlinear Dynamics 62(1):291-303, 2010.
- **Translation** joints, for free translations in the 3D space;
- **Planar** joints, for free movements in the 2D space;
- **Free-floating** joints, for free movements in the 3D space. Planar and free-floating joints are meant to be
Expand Down
Loading
Loading