Skip to content

Commit 8c0d8f0

Browse files
authored
Merge pull request #2419 from nim65s/viewers
configurable default visualizer
2 parents bf2c469 + 3534b7d commit 8c0d8f0

File tree

5 files changed

+70
-4
lines changed

5 files changed

+70
-4
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
66

77
## [Unreleased]
88

9+
### Added
10+
11+
- Default visualizer can be changed with `PINOCCHIO_VIEWER` environment variable ([#2419](https://github.com/stack-of-tasks/pinocchio/pull/2419))
12+
913
### Fixed
1014
- Fix linkage of Boost.Serialization on Windows ([#2400](https://github.com/stack-of-tasks/pinocchio/pull/2400))
1115
- Fix mjcf parser appending of inertias at root joint ([#2403](https://github.com/stack-of-tasks/pinocchio/pull/2403))

bindings/python/CMakeLists.txt

+8-2
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,14 @@ if(BUILD_PYTHON_INTERFACE)
224224

225225
# --- INSTALL VISUALIZATION SCRIPTS
226226
install_python_files(
227-
MODULE visualize FILES __init__.py base_visualizer.py gepetto_visualizer.py
228-
meshcat_visualizer.py panda3d_visualizer.py rviz_visualizer.py)
227+
MODULE visualize
228+
FILES __init__.py
229+
base_visualizer.py
230+
gepetto_visualizer.py
231+
meshcat_visualizer.py
232+
panda3d_visualizer.py
233+
rviz_visualizer.py
234+
visualizers.py)
229235

230236
# --- STUBS --- #
231237
if(GENERATE_PYTHON_STUBS)

bindings/python/pinocchio/robot_wrapper.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -413,14 +413,14 @@ def initViewer(self, share_data=True, *args, **kwargs):
413413
"""Init the viewer"""
414414
# Set viewer to use to MeshCat.
415415
if self.viz is None:
416-
from .visualize import MeshcatVisualizer
416+
from .visualize import Visualizer
417417

418418
data, collision_data, visual_data = None, None, None
419419
if share_data:
420420
data = self.data
421421
collision_data = self.collision_data
422422
visual_data = self.visual_data
423-
self.viz = MeshcatVisualizer(
423+
self.viz = Visualizer.default()(
424424
self.model,
425425
self.collision_model,
426426
self.visual_model,

bindings/python/pinocchio/visualize/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
from .meshcat_visualizer import MeshcatVisualizer
55
from .panda3d_visualizer import Panda3dVisualizer
66
from .rviz_visualizer import RVizVisualizer
7+
from .visualizers import Visualizer
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from enum import Enum
2+
from importlib.util import find_spec
3+
from os import environ
4+
5+
from .base_visualizer import BaseVisualizer
6+
from .gepetto_visualizer import GepettoVisualizer
7+
from .meshcat_visualizer import MeshcatVisualizer
8+
from .panda3d_visualizer import Panda3dVisualizer
9+
from .rviz_visualizer import RVizVisualizer
10+
11+
12+
class Visualizer(Enum):
13+
BASE = BaseVisualizer
14+
GEPETTO = GepettoVisualizer
15+
MESHCAT = MeshcatVisualizer
16+
PANDA3D = Panda3dVisualizer
17+
RVIZ = RVizVisualizer
18+
19+
@classmethod
20+
def default(cls):
21+
"""
22+
Allow user to choose their prefered viewer with eg.
23+
export PINOCCHIO_VIEWER=RVIZ.
24+
25+
Otherwise, try to find one which is installed.
26+
"""
27+
# Allow user to define which viewer they want
28+
if "PINOCCHIO_VIEWER" in environ:
29+
selected = environ["PINOCCHIO_VIEWER"].upper()
30+
if hasattr(cls, selected):
31+
return getattr(cls, selected).value
32+
err = (
33+
f"The visualizer '{selected}' is not available.\n"
34+
"Please set PINOCCHIO_VIEWER to something installed among:\n"
35+
"- meshcat\n"
36+
"- gepetto-viewer\n"
37+
"- panda3d\n"
38+
"- rviz\n"
39+
)
40+
raise ImportError(err)
41+
42+
# Otherwise, use the first available
43+
for v in ["meshcat", "gepetto", "panda3d_viewer", "rviz"]:
44+
if find_spec(v) is not None:
45+
return getattr(cls, v.replace("_viewer", "").upper()).value
46+
47+
err = (
48+
"No visualizer could be found.\n"
49+
"Please install one of those:\n"
50+
"- meshcat\n"
51+
"- gepetto-viewer\n"
52+
"- panda3d\n"
53+
"- rviz\n"
54+
)
55+
raise ImportError(err)

0 commit comments

Comments
 (0)