Skip to content

Commit

Permalink
Merge pull request #2419 from nim65s/viewers
Browse files Browse the repository at this point in the history
configurable default visualizer
  • Loading branch information
jcarpent authored Sep 16, 2024
2 parents bf2c469 + 3534b7d commit 8c0d8f0
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 4 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

## [Unreleased]

### Added

- Default visualizer can be changed with `PINOCCHIO_VIEWER` environment variable ([#2419](https://github.com/stack-of-tasks/pinocchio/pull/2419))

### Fixed
- Fix linkage of Boost.Serialization on Windows ([#2400](https://github.com/stack-of-tasks/pinocchio/pull/2400))
- Fix mjcf parser appending of inertias at root joint ([#2403](https://github.com/stack-of-tasks/pinocchio/pull/2403))
Expand Down
10 changes: 8 additions & 2 deletions bindings/python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -224,8 +224,14 @@ if(BUILD_PYTHON_INTERFACE)

# --- INSTALL VISUALIZATION SCRIPTS
install_python_files(
MODULE visualize FILES __init__.py base_visualizer.py gepetto_visualizer.py
meshcat_visualizer.py panda3d_visualizer.py rviz_visualizer.py)
MODULE visualize
FILES __init__.py
base_visualizer.py
gepetto_visualizer.py
meshcat_visualizer.py
panda3d_visualizer.py
rviz_visualizer.py
visualizers.py)

# --- STUBS --- #
if(GENERATE_PYTHON_STUBS)
Expand Down
4 changes: 2 additions & 2 deletions bindings/python/pinocchio/robot_wrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -413,14 +413,14 @@ def initViewer(self, share_data=True, *args, **kwargs):
"""Init the viewer"""
# Set viewer to use to MeshCat.
if self.viz is None:
from .visualize import MeshcatVisualizer
from .visualize import Visualizer

data, collision_data, visual_data = None, None, None
if share_data:
data = self.data
collision_data = self.collision_data
visual_data = self.visual_data
self.viz = MeshcatVisualizer(
self.viz = Visualizer.default()(
self.model,
self.collision_model,
self.visual_model,
Expand Down
1 change: 1 addition & 0 deletions bindings/python/pinocchio/visualize/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
from .meshcat_visualizer import MeshcatVisualizer
from .panda3d_visualizer import Panda3dVisualizer
from .rviz_visualizer import RVizVisualizer
from .visualizers import Visualizer
55 changes: 55 additions & 0 deletions bindings/python/pinocchio/visualize/visualizers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
from enum import Enum
from importlib.util import find_spec
from os import environ

from .base_visualizer import BaseVisualizer
from .gepetto_visualizer import GepettoVisualizer
from .meshcat_visualizer import MeshcatVisualizer
from .panda3d_visualizer import Panda3dVisualizer
from .rviz_visualizer import RVizVisualizer


class Visualizer(Enum):
BASE = BaseVisualizer
GEPETTO = GepettoVisualizer
MESHCAT = MeshcatVisualizer
PANDA3D = Panda3dVisualizer
RVIZ = RVizVisualizer

@classmethod
def default(cls):
"""
Allow user to choose their prefered viewer with eg.
export PINOCCHIO_VIEWER=RVIZ.
Otherwise, try to find one which is installed.
"""
# Allow user to define which viewer they want
if "PINOCCHIO_VIEWER" in environ:
selected = environ["PINOCCHIO_VIEWER"].upper()
if hasattr(cls, selected):
return getattr(cls, selected).value
err = (
f"The visualizer '{selected}' is not available.\n"
"Please set PINOCCHIO_VIEWER to something installed among:\n"
"- meshcat\n"
"- gepetto-viewer\n"
"- panda3d\n"
"- rviz\n"
)
raise ImportError(err)

# Otherwise, use the first available
for v in ["meshcat", "gepetto", "panda3d_viewer", "rviz"]:
if find_spec(v) is not None:
return getattr(cls, v.replace("_viewer", "").upper()).value

err = (
"No visualizer could be found.\n"
"Please install one of those:\n"
"- meshcat\n"
"- gepetto-viewer\n"
"- panda3d\n"
"- rviz\n"
)
raise ImportError(err)

0 comments on commit 8c0d8f0

Please sign in to comment.