Moro 0.5.0 Release Notes

Moro 0.5.0 expands the library from symbolic robot modeling and position inverse kinematics into a broader teaching-oriented workflow for differential kinematics, local capability analysis, full-pose IK, trajectories, numerical dynamics, simulation, and sampled workspace analysis.

Highlights

Orientation and transformations

0.5.0 completes the accepted orientation-tooling foundation with:

  • proper-Euler and Tait-Bryan sequence support;

  • quaternion conversions using scalar-first ordering;

  • rotation-vector conversions;

  • vex();

  • descriptive is_rotation_matrix() and is_homogeneous_transform() predicates.

The legacy predicates is_SO3(), is_SE3(), isrot(), and ishtm() remain temporarily available and emit DeprecationWarning.

Differential kinematics and local capability

The new moro.differential_kinematics module provides:

  • task Jacobian selection;

  • Cartesian velocity propagation;

  • pseudoinverse and damped-least-squares velocity IK;

  • singular values;

  • numerical rank;

  • condition number;

  • singularity detection;

  • Yoshikawa manipulability.

The canonical geometric-twist ordering is:

(vx, vy, vz, wx, wy, wz)

Full-pose inverse kinematics

solve_pose_ik() extends numerical IK to homogeneous-transform targets while preserving the existing position-only IK APIs.

CCD remains intentionally position-only in 0.5.0.

Trajectory generation

The new moro.trajectory module provides linear, cubic, and quintic point-to-point trajectories in:

  • joint space;

  • Cartesian position space.

Time-series arrays follow the time-major convention:

(N, dof)

and Cartesian position arrays use:

(N, 3)

including planar cases.

Numerical dynamics and simulation

The new moro.dynamics module provides:

  • inverse_dynamics();

  • forward_dynamics();

  • state_derivative();

  • simulate();

  • DynamicsSolution.

Simulation uses SciPy solve_ivp and supports zero, constant, time-varying, and state-feedback generalized-force inputs.

Workspace sampling

The new moro.workspace module provides reproducible sampled reachable-workspace analysis with:

  • finite joint-space domains;

  • local NumPy RNG seeding;

  • symbolic parameter substitution;

  • preserved configuration/point correspondence;

  • Matplotlib point-cloud visualization through plot_workspace().

Workspace samples are uniform in joint coordinates, not Cartesian space.

Important migration: dynamic_model()

Moro 0.5.0 intentionally changes the meaning of:

robot.dynamic_model()

In 0.4.x it returned per-joint Euler-Lagrange equations.

In 0.5.0 it returns the standard matrix manipulator equation:

M(q) qdd + C(q, qd) qd + G(q) = tau

Code that relied on the old behavior should migrate to:

robot.euler_lagrange_equations()

The old matrix-form helper remains temporarily available as:

robot.dynamic_model_matrix_form()

but is deprecated and will emit DeprecationWarning.

Transformation predicate migration

Prefer:

from moro.transformations import (
    is_rotation_matrix,
    is_homogeneous_transform,
)

over the legacy utility names:

is_SO3()
is_SE3()
isrot()
ishtm()

The legacy wrappers preserve their Boolean return contract during the deprecation period.

Python and dependencies

Moro 0.5.x supports Python 3.11 and newer.

The main runtime dependencies are:

  • SymPy;

  • NumPy;

  • Matplotlib;

  • SciPy.

SciPy is now required because numerical time integration is a core 0.5.0 capability.

Package API policy

New 0.5.0 capabilities are primarily module-oriented. Existing root imports remain intentionally compact.

Recommended imports include:

from moro.differential_kinematics import solve_velocity_ik
from moro.inverse_kinematics import solve_pose_ik
from moro.trajectory import joint_trajectory
from moro.dynamics import simulate
from moro.workspace import sample_workspace
from moro.visualization import plot_workspace

Scope intentionally deferred

Moro 0.5.0 does not add general motion planning, collision-aware IK, pose trajectories, SLERP trajectory interpolation, constrained/contact dynamics, controller classes, exact analytical workspace boundaries, or manipulability-colored workspace maps.