Skip to content

Commit 8868f87

Browse files
committed
Merge tag 'v3.7.0' into topic/merging-v3.7.0
Release of version 3.7.0.
2 parents 7ed1c81 + c51d923 commit 8868f87

File tree

18 files changed

+5061
-5250
lines changed

18 files changed

+5061
-5250
lines changed

.github/workflows/linux.yml

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,21 @@ on:
66
- doc/**
77
- .gitlab-ci.yml
88
- .gitignore
9-
- '*.md'
9+
- '**.md'
1010
- CITATION.*
1111
- COPYING.LESSER
1212
- colcon.pkg
1313
- .pre-commit-config.yaml
14-
- CHANGELOG.md
15-
- development/*.md
1614
pull_request:
1715
paths-ignore:
1816
- doc/**
1917
- .gitlab-ci.yml
2018
- .gitignore
21-
- '*.md'
19+
- '**.md'
2220
- CITATION.*
2321
- COPYING.LESSER
2422
- colcon.pkg
2523
- .pre-commit-config.yaml
26-
- CHANGELOG.md
27-
- development/*.md
2824
concurrency:
2925
group: ${{ github.workflow }}-${{ github.ref }}
3026
cancel-in-progress: true
@@ -36,7 +32,7 @@ jobs:
3632
container: ${{ matrix.container }}
3733
strategy:
3834
matrix:
39-
container: ['ubuntu:20.04', 'ubuntu:22.04', 'ubuntu:24.04']
35+
container: ['ubuntu:22.04', 'ubuntu:24.04']
4036

4137
env:
4238
CCACHE_BASEDIR: ${GITHUB_WORKSPACE}
@@ -211,8 +207,7 @@ jobs:
211207
212208
- name: Display ccache statistics
213209
run: |
214-
# TODO: Add -v option when we drop ubuntu-20.04
215-
ccache -s
210+
ccache -sv
216211
217212
check:
218213
if: always()

.github/workflows/macos-linux-windows-pixi.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,21 @@ on:
88
- doc/**
99
- .gitlab-ci.yml
1010
- .gitignore
11-
- '*.md'
11+
- '**.md'
1212
- CITATION.*
1313
- COPYING.LESSER
1414
- colcon.pkg
1515
- .pre-commit-config.yaml
16-
- CHANGELOG.md
17-
- development/*.md
1816
pull_request:
1917
paths-ignore:
2018
- doc/**
2119
- .gitlab-ci.yml
2220
- .gitignore
23-
- '*.md'
21+
- '**.md'
2422
- CITATION.*
2523
- COPYING.LESSER
2624
- colcon.pkg
2725
- .pre-commit-config.yaml
28-
- CHANGELOG.md
29-
- development/*.md
3026
concurrency:
3127
group: ${{ github.workflow }}-${{ github.ref }}
3228
cancel-in-progress: true

.github/workflows/nix.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ on:
66
- doc/**
77
- .gitlab-ci.yml
88
- .gitignore
9-
- '*.md'
9+
- '**.md'
1010
- CITATION.*
1111
- COPYING.LESSER
1212
- .pre-commit-config.yaml
13-
- CHANGELOG.md
14-
1513
jobs:
1614
nix:
1715
runs-on: "${{ matrix.os }}-latest"

.github/workflows/ros_ci.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,25 +10,21 @@ on:
1010
- doc/**
1111
- .gitlab-ci.yml
1212
- .gitignore
13-
- '*.md'
13+
- '**.md'
1414
- CITATION.*
1515
- COPYING.LESSER
1616
- colcon.pkg
1717
- .pre-commit-config.yaml
18-
- CHANGELOG.md
19-
- development/*.md
2018
pull_request:
2119
paths-ignore:
2220
- doc/**
2321
- .gitlab-ci.yml
2422
- .gitignore
25-
- '*.md'
23+
- '**.md'
2624
- CITATION.*
2725
- COPYING.LESSER
2826
- colcon.pkg
2927
- .pre-commit-config.yaml
30-
- CHANGELOG.md
31-
- development/*.md
3228
concurrency:
3329
group: ${{ github.workflow }}-${{ github.ref }}
3430
cancel-in-progress: true

CHANGELOG.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
1515
- Added joint method `lieGroup` that returns the Lie group instance associated to a joint. This allows performing some operations (e.g. `integrate`...) individually.
1616
- Added model method `lieGroup` that returns the Lie group instance associated to the model. It is a Cartesian product of multiple Lie groups. It allows combination of the model Lie group with other Lie groups.
1717

18+
## [3.7.0] - 2025-05-21
19+
20+
### Changed
21+
- Change the default branch to `devel` ([#2666](https://github.com/stack-of-tasks/pinocchio/pull/2666))
22+
- Implement `captureImage` for Panda3D visualizer for video recording ([#2668](https://github.com/stack-of-tasks/pinocchio/pull/2668))
23+
- Drop Ubuntu 20.04 support ([#2680](https://github.com/stack-of-tasks/pinocchio/pull/2680))
24+
1825
## [3.6.0] - 2025-04-28
1926

2027
### Fixed
@@ -1158,7 +1165,8 @@ The model can either be parsed from a URDF format or be created by appendending
11581165
• Fixed (concatenation of two consecutive bodies)
11591166

11601167

1161-
[Unreleased]: https://github.com/stack-of-tasks/pinocchio/compare/v3.6.0...HEAD
1168+
[Unreleased]: https://github.com/stack-of-tasks/pinocchio/compare/v3.7.0...HEAD
1169+
[3.7.0]: https://github.com/stack-of-tasks/pinocchio/compare/v3.6.0...v3.7.0
11621170
[3.6.0]: https://github.com/stack-of-tasks/pinocchio/compare/v3.5.0...v3.6.0
11631171
[3.5.0]: https://github.com/stack-of-tasks/pinocchio/compare/v3.4.0...v3.5.0
11641172
[3.4.0]: https://github.com/stack-of-tasks/pinocchio/compare/v3.3.1...v3.4.0

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ authors:
1717
given-names: Guilhem
1818
- family-names: Budhiraja
1919
given-names: Rohan
20-
version: 3.6.0
21-
date-released: "2025-04-28"
20+
version: 3.7.0
21+
date-released: "2025-05-21"
2222
license: BSD-2-Clause
2323
repository-code: "https://github.com/stack-of-tasks/pinocchio"

README.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
<p align="center">
2-
<img src="https://raw.githubusercontent.com/stack-of-tasks/pinocchio/master/doc/images/pinocchio-logo-large.png" width="800" alt="Pinocchio Logo" align="center"/>
2+
<img src="https://raw.githubusercontent.com/stack-of-tasks/pinocchio/devel/doc/images/pinocchio-logo-large.png" width="800" alt="Pinocchio Logo" align="center"/>
33
</p>
44

55
<p align="center">
66
<a href="https://opensource.org/licenses/BSD-2-Clause"><img src="https://img.shields.io/badge/License-BSD%202--Clause-green.svg" alt="License"/></a>
7-
<a href="https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/"><img src="https://img.shields.io/badge/docs-online-brightgreen" alt="Documentation"/></a>
8-
<a href="http://projects.laas.fr/gepetto/doc/stack-of-tasks/pinocchio/master/coverage/"><img src="https://gepgitlab.laas.fr/stack-of-tasks/pinocchio/badges/master/coverage.svg?job=doc-coverage" alt="Coverage Report"/></a>
7+
<a href="https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/devel/doxygen-html/"><img src="https://img.shields.io/badge/docs-online-brightgreen" alt="Documentation"/></a>
8+
<a href="http://projects.laas.fr/gepetto/doc/stack-of-tasks/pinocchio/devel/coverage/"><img src="https://gepgitlab.laas.fr/stack-of-tasks/pinocchio/badges/devel/coverage.svg?job=doc-coverage" alt="Coverage Report"/></a>
99
<a href="https://anaconda.org/conda-forge/pinocchio"><img src="https://img.shields.io/conda/dn/conda-forge/pinocchio.svg" alt="Conda Downloads"/></a>
1010
<a href="https://anaconda.org/conda-forge/pinocchio"><img src="https://img.shields.io/conda/vn/conda-forge/pinocchio.svg" alt="Conda Version"/></a>
1111
<a href="https://badge.fury.io/py/pin"><img src="https://badge.fury.io/py/pin.svg" alt="PyPI version" height="20"></a>
12-
<a href="https://badge.fury.io/py/pin"><img src="https://results.pre-commit.ci/badge/github/stack-of-tasks/pinocchio/master.svg" alt="pre-commit.ci status" height="20"></a>
12+
<a href="https://badge.fury.io/py/pin"><img src="https://results.pre-commit.ci/badge/github/stack-of-tasks/pinocchio/devel.svg" alt="pre-commit.ci status" height="20"></a>
1313
<br>
14-
<!--<a href="https://gitlab.laas.fr/stack-of-tasks/pinocchio"><img src="https://gitlab.laas.fr/stack-of-tasks/pinocchio/badges/master/pipeline.svg" alt="Pipeline Status"></a>-->
14+
<!--<a href="https://gitlab.laas.fr/stack-of-tasks/pinocchio"><img src="https://gitlab.laas.fr/stack-of-tasks/pinocchio/badges/devel/pipeline.svg" alt="Pipeline Status"></a>-->
1515

1616
</p>
1717

@@ -27,7 +27,7 @@ It is built upon Eigen for linear algebra and FCL for collision detection. **Pin
2727

2828
**Pinocchio** is now at the heart of various robotics software as [Crocoddyl](https://github.com/loco-3d/crocoddyl/tree/devel), an open-source and efficient Differential Dynamic Programming solver for robotics, the [Stack-of-Tasks](http://stack-of-tasks.github.io), an open-source and versatile hierarchical controller framework or the [Humanoid Path Planner](https://humanoid-path-planner.github.io/hpp-doc), open-source software for Motion and Manipulation Planning.
2929

30-
If you want to learn more about **Pinocchio** internal behaviors and main features, we invite you to read the related [paper](https://hal-laas.archives-ouvertes.fr/hal-01866228) and the online [documentation](https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/).
30+
If you want to learn more about **Pinocchio** internal behaviors and main features, we invite you to read the related [paper](https://hal-laas.archives-ouvertes.fr/hal-01866228) and the online [documentation](https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/devel/doxygen-html/).
3131

3232
If you want to dive into **Pinocchio** directly, only one single line is sufficient (assuming you have Conda):
3333

@@ -102,17 +102,17 @@ or via pip (currently only available on Linux):
102102

103103
## Documentation
104104

105-
The online **Pinocchio** documentation of the last release is available [here](https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/). A cheat sheet pdf with the main functions and algorithms can be found [here](https://github.com/stack-of-tasks/pinocchio/blob/master/doc/pinocchio_cheat_sheet.pdf).
105+
The online **Pinocchio** documentation of the last release is available [here](https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/devel/doxygen-html/). A cheat sheet pdf with the main functions and algorithms can be found [here](https://github.com/stack-of-tasks/pinocchio/blob/devel/doc/pinocchio_cheat_sheet.pdf).
106106

107107
## Examples
108108

109-
In the [examples](https://github.com/stack-of-tasks/pinocchio/tree/master/examples) directory, we provide some basic examples of using Pinocchio in Python.
110-
Additional examples introducing **Pinocchio** are also available in the [documentation](https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/md_doc_d-practical-exercises_intro.html).
109+
In the [examples](https://github.com/stack-of-tasks/pinocchio/tree/devel/examples) directory, we provide some basic examples of using Pinocchio in Python.
110+
Additional examples introducing **Pinocchio** are also available in the [documentation](https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/devel/doxygen-html/md_doc_d-practical-exercises_intro.html).
111111

112112
## Tutorials
113113

114114
**Pinocchio** comes with a large bunch of tutorials aiming at introducing the basic tools for robot control.
115-
Tutorial and training documents are listed [here](https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/master/doxygen-html/index.html#OverviewConclu).
115+
Tutorial and training documents are listed [here](https://gepettoweb.laas.fr/doc/stack-of-tasks/pinocchio/devel/doxygen-html/index.html#OverviewConclu).
116116
You can also consider the interactive Jupyter notebook [set of tutorials](https://github.com/ymontmarin/_tps_robotique) developed by [Nicolas Mansard](https://gepettoweb.laas.fr/index.php/Members/NicolasMansard) and [Yann de Mont-Marin](https://github.com/ymontmarin).
117117

118118
## Pinocchio continuous integrations
@@ -130,7 +130,7 @@ You can also consider the interactive Jupyter notebook [set of tutorials](https:
130130
</tr><tr><td> CI on Windows via Conda </td>
131131
<td><a href="https://github.com/stack-of-tasks/pinocchio/actions/workflows/windows-conda.yml"><img alt="windows" src="https://github.com/stack-of-tasks/pinocchio/actions/workflows/windows-conda.yml/badge.svg?branch=devel" /></a></td>
132132
</tr><tr><td> CI on Linux via Robotpkg </td>
133-
<td><img src="https://gitlab.laas.fr/stack-of-tasks/pinocchio/badges/master/pipeline.svg" alt="Pipeline Status"></td>
133+
<td><img src="https://gitlab.laas.fr/stack-of-tasks/pinocchio/badges/devel/pipeline.svg" alt="Pipeline Status"></td>
134134
</tr>
135135
</table>
136136
</p>
@@ -140,7 +140,7 @@ You can also consider the interactive Jupyter notebook [set of tutorials](https:
140140
**Pinocchio** exploits, at best, the sparsity induced by the kinematic tree of robotics systems. Thanks to modern programming language paradigms, **Pinocchio** can unroll most of the computations directly at compile time, allowing to achieve impressive performances for an extensive range of robots, as illustrated by the plot below, obtained on a standard laptop equipped with an Intel Core i7 CPU @ 2.4 GHz.
141141

142142
<p align="center">
143-
<img src="https://raw.githubusercontent.com/stack-of-tasks/pinocchio/master/doc/images/pinocchio-performances.png" width="600" alt="Pinocchio Logo" align="center"/>
143+
<img src="https://raw.githubusercontent.com/stack-of-tasks/pinocchio/devel/doc/images/pinocchio-performances.png" width="600" alt="Pinocchio Logo" align="center"/>
144144
</p>
145145

146146
For other benchmarks, and mainly the capacity of Pinocchio to exploit, at best, your CPU capacities using advanced code generation techniques, we refer to the technical [paper](https://hal-laas.archives-ouvertes.fr/hal-01866228).
@@ -149,7 +149,7 @@ In addition, the [introspection](https://github.com/rbd-benchmarks/rbd-benchmark
149149
## Ongoing developments
150150

151151
If you want to follow the current developments, you can refer to the [devel branch](https://github.com/stack-of-tasks/pinocchio/tree/devel).
152-
The [master branch](https://github.com/stack-of-tasks/pinocchio/tree/master/) only contains the latest release. Any new Pull Request should be submitted on the [devel branch](https://github.com/stack-of-tasks/pinocchio/tree/devel/).
152+
The [devel branch](https://github.com/stack-of-tasks/pinocchio/tree/devel/) only contains the latest release. Any new Pull Request should be submitted on the [devel branch](https://github.com/stack-of-tasks/pinocchio/tree/devel/).
153153

154154
## Installation
155155

@@ -204,7 +204,7 @@ Please note that we always advise including the `pinocchio/fwd.hpp` header as th
204204
- [Panda3d](https://github.com/ikalevatykh/panda3d_viewer): supporting visualization in Python and which can be embedded inside any browser.
205205
- [RViz](https://github.com/ros-visualization/rviz): supporting visualization in Python and which can interact with other ROS packages.
206206

207-
Many external viewers can also be integrated. For more information, see the example [here](https://github.com/stack-of-tasks/pinocchio/blob/master/bindings/python/pinocchio/visualize/base_visualizer.py).
207+
Many external viewers can also be integrated. For more information, see the example [here](https://github.com/stack-of-tasks/pinocchio/blob/devel/bindings/python/pinocchio/visualize/base_visualizer.py).
208208

209209
## Citing Pinocchio
210210

bindings/python/pinocchio/shortcuts.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55

66
## In this file, some shortcuts are provided ##
77

8-
# TODO: Remove when 20.04 is not supported
9-
from __future__ import annotations
10-
118
from . import WITH_HPP_FCL, WITH_HPP_FCL_BINDINGS
129
from . import pinocchio_pywrap_default as pin
1310

bindings/python/pinocchio/visualize/meshcat_visualizer.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
# TODO: Remove when 20.04 is not supported
1+
# TODO: Remove when py39 is dropped
2+
# This allow to use new Optional syntax
23
from __future__ import annotations
34

45
import warnings
56
from pathlib import Path
6-
from typing import ClassVar
7+
from typing import ClassVar, Union
78

89
import numpy as np
910

@@ -26,8 +27,8 @@
2627
import xml.etree.ElementTree as Et
2728
from typing import Any
2829

29-
# TODO: Remove quote when 20.04 is not supported
30-
MsgType = "dict[str, Union[str, bytes, bool, float, 'MsgType']]"
30+
# TODO: Use Union syntax when py39 is dropped
31+
MsgType = dict[str, Union[str, bytes, bool, float, "MsgType"]]
3132

3233
try:
3334
import hppfcl

bindings/python/pinocchio/visualize/panda3d_visualizer.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class Panda3dVisualizer(BaseVisualizer):
1919
A Pinocchio display using panda3d engine.
2020
"""
2121

22-
def initViewer(self, viewer=None, load_model=False): # pylint: disable=arguments-differ
22+
def initViewer(self, viewer=None, load_model=False, open=True): # pylint: disable=arguments-differ
2323
"""Init the viewer by attaching to / creating a GUI viewer."""
2424
self.visual_group = None
2525
self.collision_group = None
@@ -30,7 +30,12 @@ def initViewer(self, viewer=None, load_model=False): # pylint: disable=argument
3030
from panda3d_viewer import Viewer as Panda3dViewer
3131

3232
if viewer is None:
33-
self.viewer = Panda3dViewer(window_title="python-pinocchio")
33+
if not open:
34+
self.viewer = Panda3dViewer(
35+
window_title="python-pinocchio", window_type="offscreen"
36+
)
37+
else:
38+
self.viewer = Panda3dViewer(window_title="python-pinocchio")
3439

3540
if load_model:
3641
self.loadViewerModel(group_name=self.model.name)
@@ -140,7 +145,10 @@ def setCameraPose(self, pose: np.ndarray):
140145
raise NotImplementedError()
141146

142147
def captureImage(self, w=None, h=None):
143-
raise NotImplementedError()
148+
rgb = self.viewer.get_screenshot(requested_format="RGB")
149+
if rgb is None:
150+
raise RuntimeError("Failed to capture image from viewer")
151+
return rgb
144152

145153
def disableCameraControl(self):
146154
raise NotImplementedError()

0 commit comments

Comments
 (0)