5 from ..
import pinocchio_pywrap_default
as pin
6 from ..utils
import npToTuple
7 from .base_visualizer
import BaseVisualizer
12 WITH_HPP_FCL_BINDINGS =
True
14 WITH_HPP_FCL_BINDINGS =
False
19 A Pinocchio display using panda3d engine.
22 def initViewer(self, viewer=None, load_model=False, open=True):
23 """Init the viewer by attaching to / creating a GUI viewer."""
30 from panda3d_viewer
import Viewer
as Panda3dViewer
34 self.
viewer = Panda3dViewer(
35 window_title=
"python-pinocchio", window_type=
"offscreen"
38 self.
viewer = Panda3dViewer(window_title=
"python-pinocchio")
44 """Create a group of nodes displaying the robot meshes in the viewer."""
53 if WITH_HPP_FCL_BINDINGS
and isinstance(geom, hppfcl.ShapeBase):
55 if isinstance(geom, hppfcl.Capsule):
56 r, fl = geom.radius, 2 * geom.halfLength
57 self.
viewer.append_capsule(root, obj.name, r, fl)
58 elif isinstance(geom, hppfcl.Cylinder):
59 r, fl = geom.radius, 2 * geom.halfLength
60 self.
viewer.append_cylinder(root, obj.name, r, fl)
61 elif isinstance(geom, hppfcl.Box):
63 self.
viewer.append_box(root, obj.name, size)
64 elif isinstance(geom, hppfcl.Sphere):
65 self.
viewer.append_sphere(root, obj.name, geom.radius)
67 msg = f
"Unsupported geometry type for {obj.name} ({type(geom)})"
68 warnings.warn(msg, category=UserWarning, stacklevel=2)
73 self.
viewer.append_mesh(root, obj.name, obj.meshPath, scale)
75 if obj.overrideMaterial:
77 path = obj.meshTexturePath
78 self.
viewer.set_material(root, obj.name, rgba, path)
79 elif color
is not None:
80 self.
viewer.set_material(root, obj.name, color)
94 """Return the name of the geometry object inside the viewer."""
95 if geometry_type
is pin.GeometryType.VISUAL:
97 elif geometry_type
is pin.GeometryType.COLLISION:
102 Display the robot at configuration q in the viewer by placing all the bodies.
107 def move(group, model, data):
110 for obj
in model.geometryObjects:
111 oMg = data.oMg[model.getGeometryId(obj.name)]
112 x, y, z, qx, qy, qz, qw = pin.SE3ToXYZQUATtuple(oMg)
113 name_pose_dict[obj.name] = (x, y, z), (qw, qx, qy, qz)
114 self.
viewer.move_nodes(group, name_pose_dict)
123 """Set whether to display collision objects or not."""
128 """Set whether to display visual objects or not."""
133 raise NotImplementedError()
136 raise NotImplementedError()
139 raise NotImplementedError()
142 raise NotImplementedError()
145 raise NotImplementedError()
148 rgb = self.
viewer.get_screenshot(requested_format=
"RGB")
150 raise RuntimeError(
"Failed to capture image from viewer")
154 raise NotImplementedError()
157 raise NotImplementedError()
160 raise NotImplementedError()
163 __all__ = [
"Panda3dVisualizer"]