"""
===============
Pose Trajectory
===============

Plotting pose trajectories with pytransform3d is easy.
"""
print(__doc__)

import numpy as np
import matplotlib.pyplot as plt
from pytransform3d.rotations import q_id, quaternion_slerp
from pytransform3d.trajectories import plot_trajectory

n_steps = 100
P = np.empty((n_steps, 7))
P[:, 0] = np.cos(np.linspace(-2 * np.pi, 2 * np.pi, n_steps))
P[:, 1] = np.sin(np.linspace(-2 * np.pi, 2 * np.pi, n_steps))
P[:, 2] = np.linspace(-1, 1, n_steps)
q_end = np.array([0.0, 0.0, np.sqrt(0.5), np.sqrt(0.5)])
P[:, 3:] = np.vstack(
    [quaternion_slerp(q_id, q_end, t) for t in np.linspace(0, 1, n_steps)])

ax = plot_trajectory(P=P, s=0.3, lw=2, c="k")
plt.show()
Ejemplo n.º 2
0
"""
===============
Pose Trajectory
===============

Plotting pose trajectories with pytransform3d is easy.
"""
print(__doc__)

import numpy as np
import matplotlib.pyplot as plt
from pytransform3d.rotations import q_id, quaternion_slerp
from pytransform3d.trajectories import plot_trajectory

n_steps = 100
P = np.empty((n_steps, 7))
P[:, 0] = np.linspace(-0.8, 0.8, n_steps)**2
P[:, 1] = np.linspace(-0.8, 0.8, n_steps)**2
P[:, 2] = np.linspace(-0.8, 0.8, n_steps)
q_end = np.array([0.0, 0.0, np.sqrt(0.5), np.sqrt(0.5)])
P[:, 3:] = np.vstack(
    [quaternion_slerp(q_id, q_end, t) for t in np.linspace(0, 1, n_steps)])

plot_trajectory(P=P, s=0.1, lw=1, c="k")
plt.show()
Ejemplo n.º 3
0
    data_dir = os.path.join(search_path, BASE_DIR)

intrinsic_matrix = np.loadtxt(os.path.join(data_dir,
                                           "reconstruction_camera_matrix.csv"),
                              delimiter=",")

P = np.loadtxt(os.path.join(data_dir, "reconstruction_odometry.csv"),
               delimiter=",",
               skiprows=1)
for t in range(len(P)):
    P[t, 3:] = pr.quaternion_wxyz_from_xyzw(P[t, 3:])
cam2world_trajectory = ptr.transforms_from_pqs(P)

plt.figure(figsize=(5, 5))
ax = pt.plot_transform(s=0.3)
ax = ptr.plot_trajectory(ax, P=P, s=0.1, n_frames=10)

image_size = np.array([1920, 1440])

key_frames_indices = np.linspace(0, len(P) - 1, 10, dtype=int)
colors = cycle("rgb")
for i, c in zip(key_frames_indices, colors):
    pc.plot_camera(ax,
                   intrinsic_matrix,
                   cam2world_trajectory[i],
                   sensor_size=image_size,
                   virtual_image_distance=0.2,
                   c=c)

pos_min = np.min(P[:, :3], axis=0)
pos_max = np.max(P[:, :3], axis=0)
Ejemplo n.º 4
0
q_start = quaternion_from_matrix(R1.dot(R2_start))
q_end = quaternion_from_matrix(R1.dot(R2_end))

Y = np.zeros((len(T), 7))
Y[:, 0] = radius * np.cos(np.deg2rad(90) - end_angle * sigmoid)
Y[:, 2] = radius * np.sin(np.deg2rad(90) - end_angle * sigmoid)
if end_angle > np.pi:
    q_end *= -1.0
Y[:, 3:] = (1.0 - T)[:, np.newaxis] * q_start + T[:, np.newaxis] * q_end

Y_slerp = np.zeros((len(T), 7))
Y_slerp[:, 0] = 0.7 * radius * np.cos(np.deg2rad(90) - end_angle * sigmoid)
Y_slerp[:, 2] = 0.7 * radius * np.sin(np.deg2rad(90) - end_angle * sigmoid)
for i, t in enumerate(T):
    Y_slerp[i, 3:] = quaternion_slerp(q_start, q_end, t)

ax = plot_trajectory(P=Y[:, :7],
                     show_direction=False,
                     n_frames=40,
                     s=0.05,
                     ax_s=0.7)
ax = plot_trajectory(P=Y_slerp[:, :7],
                     show_direction=False,
                     n_frames=40,
                     s=0.05,
                     ax=ax)
ax.text(0.1, 0, 0, "SLERP")
ax.text(0.4, 0, 0.6, "Naive linear interpolation")
ax.view_init(elev=10, azim=90)
plt.show()
Ejemplo n.º 5
0
"""
===============
Pose Trajectory
===============

Plotting pose trajectories with pytransform3d is easy.
"""
print(__doc__)

import numpy as np
import matplotlib.pyplot as plt
from pytransform3d.batch_rotations import quaternion_slerp_batch
from pytransform3d.rotations import q_id
from pytransform3d.trajectories import plot_trajectory

n_steps = 100000
P = np.empty((n_steps, 7))
P[:, 0] = np.cos(np.linspace(-2 * np.pi, 2 * np.pi, n_steps))
P[:, 1] = np.sin(np.linspace(-2 * np.pi, 2 * np.pi, n_steps))
P[:, 2] = np.linspace(-1, 1, n_steps)
q_end = np.array([0.0, 0.0, np.sqrt(0.5), np.sqrt(0.5)])
P[:, 3:] = quaternion_slerp_batch(q_id, q_end, np.linspace(0, 1, n_steps))

ax = plot_trajectory(P=P,
                     s=0.3,
                     n_frames=100,
                     normalize_quaternions=False,
                     lw=2,
                     c="k")
plt.show()