Skip to main content

This library provides primitives for dealing with scene and robot geometry

Project description

Overview

geometry.py provides primitives for dealing with scene and robot geometry.

Main Concepts

Geometrical types

  • Pose: The 6D position and orientation of a body. Construction methods:
Pose(position=[x, y, z], quaternion=[w, i, j, k])
Pose.from_hmat(homogeneous_matrix)
Pose.from_poseuler(poseuler=[x,y,z, p,r,w], ordering="XYZ")
  • Wrench and WrenchStamped 6D force-torque.
  • Twist and TwistStamped 6D velocity.
  • Accel and AccelStamped 6D acceleration.

For debugging and visualization, Pose and PoseStamped objects can be constructed with a name parameter.

Frames and Stamped types

All quantities here come in plain and 'Stamped' varieties. A stamped quantity (E.g. TwistStamped) is always defined as a plain type (E.g. Twist) with respect to a frame. A frame is something that can be evaluated to a world-pose -- either a PoseStamped or a Grounding. A grounding is optional (i.e. can use None to indicate world-frame). This library supports different grounding back-ends, e.g. mujoco-elements or observation-dicts.

For example, the pose of a plug in a robot gripper could be expressed as a PoseStamped with a combination of the Pose of the gripper in world frame and the pose of the plug with respect to the gripper.

A frame for a stamped quantity can be:

  • Another stamped quantity,
  • A "grounding" (a user chosen type).
  • A user supplied Physics instance must be able to provide the world Pose of a grounding. The library defined MujocoPhysics does this for mjcf.Element instances.
  • None, in which case, world frame is assumed.

Therefore in the above example, the first quantity might come from a mujoco model (possibly synchronized with the real world), and the second quantity might be known a priori or estimated by vision.

gripper_in_world = PoseStamped(pose=None, frame=synced_gripper_mjcf_body)
plug_in_gripper = Pose(...)  # From vision pose model.
plug_pose = PoseStamped(plug_in_gripper, frame=gripper_in_world)

(A more realistic example would have the pose of the plug in the camera frame then either having the camera in the kinematic tree of the robot (attached to the robot) or having it and the robot in world frame)

Then the pose of the plug in the world frame can be calculated as:

plug_in_world: Pose = plug_pose.get_world_pose()

Immutability

All types in geometry.py are immutable. You can create modified copies of existing values with the replace and with_* methods. replace is similar in spirit to collections.namedtuple._replace, these methods return new objects.

PoseStamped

This is the stamped version of a Pose.

  • Its frame hierarchy can be flattened with to_world, which returns a PoseStamped in world frame.
  • The Pose relative to another frame is returned from get_relative_pose.
  • The Pose relative to the world frame is returned from get_world_pose.

So, in the case of a gripper in camera frame which is not attached to the robot, we could to_world() either the gripper or plug PoseStamped, giving a new frame and then calculate thier relative pose (plug relative to robot) with get_relative_pose.

HybridPoseStamped

A PoseStamped where the position or orientation can be overriden. This is useful to express the idea of (for example) the position of the gripper with world orientation to allow for more intuitive operator control of the gripper.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

dm_robotics_geometry-0.5.0-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

File details

Details for the file dm_robotics_geometry-0.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for dm_robotics_geometry-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a7a56b5d2987f11042f385cf79e30dfe277a38d8d25b7d617ae101cb4bd8ad28
MD5 935bf74c67653c82667d5756b1b1b969
BLAKE2b-256 78e9a7b42cf2e4a1c3377028eb33cc87a904a7a1d577bc07b2768b9ded0cc456

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page