# 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: ```text (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: ```text (N, dof) ``` and Cartesian position arrays use: ```text (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: ```python 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: ```text M(q) qdd + C(q, qd) qd + G(q) = tau ``` Code that relied on the old behavior should migrate to: ```python robot.euler_lagrange_equations() ``` The old matrix-form helper remains temporarily available as: ```python robot.dynamic_model_matrix_form() ``` but is deprecated and will emit `DeprecationWarning`. ## Transformation predicate migration Prefer: ```python from moro.transformations import ( is_rotation_matrix, is_homogeneous_transform, ) ``` over the legacy utility names: ```text 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: ```python 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.