panda3d_visualizer.py
Go to the documentation of this file.
1 import warnings
2 
3 from .. import pinocchio_pywrap_default as pin
4 from ..utils import npToTuple
5 from .base_visualizer import BaseVisualizer
6 
7 import numpy as np
8 
9 try:
10  import hppfcl
11 
12  WITH_HPP_FCL_BINDINGS = True
13 except ImportError:
14  WITH_HPP_FCL_BINDINGS = False
15 
16 
18  """
19  A Pinocchio display using panda3d engine.
20  """
21 
22  def initViewer(self, viewer=None, load_model=False): # pylint: disable=arguments-differ
23  """Init the viewer by attaching to / creating a GUI viewer."""
24  self.visual_group = None
25  self.collision_group = None
26  self.display_visuals = False
27  self.display_collisions = False
28  self.viewer = viewer
29 
30  from panda3d_viewer import Viewer as Panda3dViewer
31 
32  if viewer is None:
33  self.viewer = Panda3dViewer(window_title="python-pinocchio")
34 
35  if load_model:
36  self.loadViewerModel(group_name=self.model.name)
37 
38  def loadViewerModel(self, group_name, color=None): # pylint: disable=arguments-differ
39  """Create a group of nodes displaying the robot meshes in the viewer."""
40  self.visual_group = group_name + "/visuals"
41  self.collision_group = group_name + "/collisions"
42 
43  self.viewer.append_group(self.visual_group)
44  self.viewer.append_group(self.collision_group)
45 
46  def append(root, obj):
47  geom = obj.geometry
48  if WITH_HPP_FCL_BINDINGS and isinstance(geom, hppfcl.ShapeBase):
49  # append a primitive geometry
50  if isinstance(geom, hppfcl.Capsule):
51  r, l = geom.radius, 2 * geom.halfLength
52  self.viewer.append_capsule(root, obj.name, r, l)
53  elif isinstance(geom, hppfcl.Cylinder):
54  r, l = geom.radius, 2 * geom.halfLength
55  self.viewer.append_cylinder(root, obj.name, r, l)
56  elif isinstance(geom, hppfcl.Box):
57  size = npToTuple(2.0 * geom.halfSide)
58  self.viewer.append_box(root, obj.name, size)
59  elif isinstance(geom, hppfcl.Sphere):
60  self.viewer.append_sphere(root, obj.name, geom.radius)
61  else:
62  msg = "Unsupported geometry type for %s (%s)" % (
63  obj.name,
64  type(geom),
65  )
66  warnings.warn(msg, category=UserWarning, stacklevel=2)
67  return
68  else:
69  # append a mesh
70  scale = npToTuple(obj.meshScale)
71  self.viewer.append_mesh(root, obj.name, obj.meshPath, scale)
72 
73  if obj.overrideMaterial:
74  rgba = npToTuple(obj.meshColor)
75  path = obj.meshTexturePath
76  self.viewer.set_material(root, obj.name, rgba, path)
77  elif color is not None:
78  self.viewer.set_material(root, obj.name, color)
79 
80  self.displayVisuals(False)
81  self.displayCollisions(False)
82 
83  for obj in self.visual_model.geometryObjects:
84  append(self.visual_group, obj)
85 
86  for obj in self.collision_model.geometryObjects:
87  append(self.collision_group, obj)
88 
89  self.displayVisuals(True)
90 
91  def getViewerNodeName(self, geometry_object, geometry_type):
92  """Return the name of the geometry object inside the viewer."""
93  if geometry_type is pin.GeometryType.VISUAL:
94  return self.visual_group + "/" + geometry_object.name
95  elif geometry_type is pin.GeometryType.COLLISION:
96  return self.collision_group + "/" + geometry_object.name
97 
98  def display(self, q=None):
99  """Display the robot at configuration q in the viewer by placing all the bodies."""
100  if q is not None:
101  pin.forwardKinematics(self.model, self.data, q)
102 
103  def move(group, model, data):
104  pin.updateGeometryPlacements(self.model, self.data, model, data)
105  name_pose_dict = {}
106  for obj in model.geometryObjects:
107  oMg = data.oMg[model.getGeometryId(obj.name)]
108  x, y, z, qx, qy, qz, qw = pin.SE3ToXYZQUATtuple(oMg)
109  name_pose_dict[obj.name] = (x, y, z), (qw, qx, qy, qz)
110  self.viewer.move_nodes(group, name_pose_dict)
111 
112  if self.display_visuals:
113  move(self.visual_group, self.visual_model, self.visual_data)
114 
115  if self.display_collisions:
116  move(self.collision_group, self.collision_model, self.collision_data)
117 
118  def displayCollisions(self, visibility):
119  """Set whether to display collision objects or not."""
120  self.viewer.show_group(self.collision_group, visibility)
121  self.display_collisions = visibility
122 
123  def displayVisuals(self, visibility):
124  """Set whether to display visual objects or not."""
125  self.viewer.show_group(self.visual_group, visibility)
126  self.display_visuals = visibility
127 
129  raise NotImplementedError()
130 
131  def setCameraTarget(self, target):
132  raise NotImplementedError()
133 
134  def setCameraPosition(self, position: np.ndarray):
135  raise NotImplementedError()
136 
137  def setCameraZoom(self, zoom: float):
138  raise NotImplementedError()
139 
140  def setCameraPose(self, pose: np.ndarray):
141  raise NotImplementedError()
142 
143  def captureImage(self, w=None, h=None):
144  raise NotImplementedError()
145 
147  raise NotImplementedError()
148 
150  raise NotImplementedError()
151 
152  def drawFrameVelocities(self, *args, **kwargs):
153  raise NotImplementedError()
154 
155 
156 __all__ = ["Panda3dVisualizer"]
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.captureImage
def captureImage(self, w=None, h=None)
Definition: panda3d_visualizer.py:143
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.setCameraTarget
def setCameraTarget(self, target)
Definition: panda3d_visualizer.py:131
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.viewer
viewer
Definition: panda3d_visualizer.py:28
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.displayVisuals
def displayVisuals(self, visibility)
Definition: panda3d_visualizer.py:123
pinocchio.visualize.base_visualizer.BaseVisualizer.displayCollisions
def displayCollisions(self, visibility)
Definition: base_visualizer.py:97
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.display
def display(self, q=None)
Definition: panda3d_visualizer.py:98
pinocchio.visualize.base_visualizer.BaseVisualizer.visual_model
visual_model
Definition: base_visualizer.py:34
pinocchio.visualize.base_visualizer.BaseVisualizer.collision_model
collision_model
Definition: base_visualizer.py:33
pinocchio.visualize.base_visualizer.BaseVisualizer.visual_data
visual_data
Definition: base_visualizer.py:51
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.display_visuals
display_visuals
Definition: panda3d_visualizer.py:26
pinocchio.visualize.base_visualizer.BaseVisualizer.data
data
Definition: base_visualizer.py:41
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.visual_group
visual_group
Definition: panda3d_visualizer.py:24
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.displayCollisions
def displayCollisions(self, visibility)
Definition: panda3d_visualizer.py:118
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.setBackgroundColor
def setBackgroundColor(self)
Definition: panda3d_visualizer.py:128
simulation-pendulum.type
type
Definition: simulation-pendulum.py:18
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.loadViewerModel
def loadViewerModel(self, group_name, color=None)
Definition: panda3d_visualizer.py:38
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.setCameraZoom
def setCameraZoom(self, float zoom)
Definition: panda3d_visualizer.py:137
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.collision_group
collision_group
Definition: panda3d_visualizer.py:25
pinocchio.visualize.base_visualizer.BaseVisualizer.displayVisuals
def displayVisuals(self, visibility)
Definition: base_visualizer.py:101
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.setCameraPose
def setCameraPose(self, np.ndarray pose)
Definition: panda3d_visualizer.py:140
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.drawFrameVelocities
def drawFrameVelocities(self, *args, **kwargs)
Definition: panda3d_visualizer.py:152
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.setCameraPosition
def setCameraPosition(self, np.ndarray position)
Definition: panda3d_visualizer.py:134
pinocchio.utils.npToTuple
def npToTuple(M)
Definition: bindings/python/pinocchio/utils.py:23
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.enableCameraControl
def enableCameraControl(self)
Definition: panda3d_visualizer.py:149
pinocchio.visualize.base_visualizer.BaseVisualizer.model
model
Definition: base_visualizer.py:32
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.disableCameraControl
def disableCameraControl(self)
Definition: panda3d_visualizer.py:146
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.display_collisions
display_collisions
Definition: panda3d_visualizer.py:27
pinocchio.visualize.base_visualizer.BaseVisualizer
Definition: base_visualizer.py:17
boost::fusion::append
result_of::push_front< V const, T >::type append(T const &t, V const &v)
Append the element T at the front of boost fusion vector V.
Definition: fusion.hpp:32
pinocchio.visualize.base_visualizer.BaseVisualizer.loadViewerModel
def loadViewerModel(self, *args, **kwargs)
Definition: base_visualizer.py:79
pinocchio.visualize.base_visualizer.BaseVisualizer.collision_data
collision_data
Definition: base_visualizer.py:46
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.initViewer
def initViewer(self, viewer=None, load_model=False)
Definition: panda3d_visualizer.py:22
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer
Definition: panda3d_visualizer.py:17
pinocchio.visualize.panda3d_visualizer.Panda3dVisualizer.getViewerNodeName
def getViewerNodeName(self, geometry_object, geometry_type)
Definition: panda3d_visualizer.py:91


pinocchio
Author(s):
autogenerated on Tue Jun 25 2024 02:42:40