Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
We can see the camera frame and the world frame. There is a grid of points from
which we know the world coordinates. If we know the location and orientation of
the camera in the world, we can easily compute the location of the points on
the image.
"""
print(__doc__)
import numpy as np
import matplotlib.pyplot as plt
from pytransform3d.rotations import matrix_from_euler_xyz
from pytransform3d.transformations import transform_from, plot_transform
from pytransform3d.camera import make_world_grid, world2image
cam2world = transform_from(matrix_from_euler_xyz([np.pi - 1, 0.2, 0.2]),
[0.2, -1, 0.5])
focal_length = 0.0036
sensor_size = (0.00367, 0.00274)
image_size = (640, 480)
world_grid = make_world_grid()
image_grid = world2image(world_grid, cam2world, sensor_size, image_size,
focal_length)
plt.figure(figsize=(12, 5))
ax = plt.subplot(121, projection="3d")
ax.view_init(elev=30, azim=-70)
ax.set_xlim((-1, 1))
ax.set_ylim((-1, 1))
ax.set_zlim((-1, 1))
ax.set_xlabel("X")
def _on_slide(self, dim, step):
"""Slot: slider position changed."""
pose = self._internal_repr(self.A2B)
v = self._slider_pos_to_pos(dim, step)
pose[dim] = v
self.A2B = transform_from(matrix_from_euler_xyz(
pose[3:]), pose[:3])
self.spinboxes[dim].setValue(v)
self.frameChanged.emit()
def _on_pos_edited(self, dim, pos):
"""Slot: value in spinbox changed."""
pose = self._internal_repr(self.A2B)
pose[dim] = pos
self.A2B = transform_from(matrix_from_euler_xyz(
pose[3:]), pose[:3])
for i in range(6):
pos = self._pos_to_slider_pos(i, pose[i])
with _block_signals(self.sliders[i]) as slider:
slider.setValue(pos)
self.frameChanged.emit()
"""Parse transformation."""
origin = entry.find("origin")
translation = np.zeros(3)
rotation = np.eye(3)
if origin is not None:
if origin.has_attr("xyz"):
translation = np.fromstring(origin["xyz"], sep=" ")
if origin.has_attr("rpy"):
roll_pitch_yaw = np.fromstring(origin["rpy"], sep=" ")
# URDF and KDL use the active convention for rotation matrices.
# To convert the defined rotation to the passive convention we
# must invert (transpose) the matrix. For more details on how
# the URDF parser handles the conversion from Euler angles,
# see this blog post:
# https://orbitalstation.wordpress.com/tag/quaternion/
rotation = matrix_from_euler_xyz(roll_pitch_yaw).T
return transform_from(rotation, translation)
import numpy as np
import matplotlib.pyplot as plt
from pytransform3d.rotations import (random_quaternion, matrix_from_euler_xyz,
q_id)
from pytransform3d.transformations import transform_from_pq, transform_from
from pytransform3d.transform_manager import TransformManager
random_state = np.random.RandomState(0)
ee2robot = transform_from_pq(
np.hstack((np.array([0.4, -0.3, 0.5]), random_quaternion(random_state))))
cam2robot = transform_from_pq(
np.hstack((np.array([0.0, 0.0, 0.8]), q_id)))
object2cam = transform_from(
matrix_from_euler_xyz(np.array([0.0, 0.0, 0.5])), np.array([0.5, 0.1, 0.1]))
tm = TransformManager()
tm.add_transform("end-effector", "robot", ee2robot)
tm.add_transform("camera", "robot", cam2robot)
tm.add_transform("object", "camera", object2cam)
ee2object = tm.get_transform("end-effector", "object")
ax = tm.plot_frames_in("robot", s=0.1)
ax.set_xlim((-0.25, 0.75))
ax.set_ylim((-0.5, 0.5))
ax.set_zlim((0.0, 1.0))
plt.show()
from pytransform3d.rotations import matrix_from_euler_xyz
tm = TransformManager()
tm.add_transform(
"tree", "world",
transform_from(
matrix_from_euler_xyz([0, 0.5, 0]),
[0, 0, 0.5]
)
)
tm.add_transform(
"car", "world",
transform_from(
matrix_from_euler_xyz([0.5, 0, 0]),
[0.5, 0, 0]
)
)
te = TransformEditor(tm, "world", s=0.3)
te.show()
print("tree to world:")
print(te.transform_manager.get_transform("tree", "world"))