adam.core

Contents

adam.core#

Submodules#

Classes#

Representations

Enum where members are also (and must be) ints

RBDAlgorithms

This is a small class that implements Rigid body algorithms retrieving robot quantities, for Floating Base systems - as humanoid robots.

SpatialMath

Class implementing the main geometric functions used for computing rigid-body algorithm

Package Contents#

class adam.core.Representations[source]#

Bases: enum.IntEnum

Enum where members are also (and must be) ints

BODY_FIXED_REPRESENTATION#
MIXED_REPRESENTATION#
class adam.core.RBDAlgorithms(model: adam.model.Model, math: adam.core.spatial_math.SpatialMath)[source]#

This is a small class that implements Rigid body algorithms retrieving robot quantities, for Floating Base systems - as humanoid robots.

model#
NDoF#
math#
frame_velocity_representation#
set_frame_velocity_representation(representation: adam.core.constants.Representations)[source]#

Sets the frame velocity representation

Parameters:

representation (str) – The representation of the frame velocity

crba(base_transform: numpy.typing.ArrayLike, joint_positions: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
This function computes the Composite Rigid body algorithm (Roy Featherstone) that computes the Mass Matrix.

The algorithm is complemented with Orin’s modifications computing the Centroidal Momentum Matrix

Parameters:
  • base_transform (npt.ArrayLike) – The homogenous transform from base to world frame

  • joint_positions (npt.ArrayLike) – The joints position

Returns:

Mass Matrix Jcm (npt.ArrayLike): Centroidal Momentum Matrix

Return type:

M (npt.ArrayLike)

forward_kinematics(frame, base_transform: numpy.typing.ArrayLike, joint_positions: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#

Computes the forward kinematics relative to the specified frame

Parameters:
  • frame (str) – The frame to which the fk will be computed

  • base_transform (npt.ArrayLike) – The homogenous transform from base to world frame

  • joint_positions (npt.ArrayLike) – The joints position

Returns:

The fk represented as Homogenous transformation matrix

Return type:

I_H_L (npt.ArrayLike)

joints_jacobian(frame: str, joint_positions: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#

Returns the Jacobian relative to the specified frame

Parameters:
  • frame (str) – The frame to which the jacobian will be computed

  • base_transform (npt.ArrayLike) – The homogenous transform from base to world frame

  • joint_positions (npt.ArrayLike) – The joints position

Returns:

The Joints Jacobian relative to the frame

Return type:

J (npt.ArrayLike)

jacobian(frame: str, base_transform: numpy.typing.ArrayLike, joint_positions: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
relative_jacobian(frame: str, joint_positions: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#

Returns the Jacobian between the root link and a specified frame :param frame: The tip of the chain :type frame: str :param joint_positions: The joints position :type joint_positions: npt.ArrayLike

Returns:

The 6 x NDoF Jacobian between the root and the frame

Return type:

J (npt.ArrayLike)

jacobian_dot(frame: str, base_transform: numpy.typing.ArrayLike, joint_positions: numpy.typing.ArrayLike, base_velocity: numpy.typing.ArrayLike, joint_velocities: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#

Returns the Jacobian derivative relative to the specified frame

Parameters:
  • frame (str) – The frame to which the jacobian will be computed

  • base_transform (npt.ArrayLike) – The homogenous transform from base to world frame

  • joint_positions (npt.ArrayLike) – The joints position

  • base_velocity (npt.ArrayLike) – The base velocity

  • joint_velocities (npt.ArrayLike) – The joints velocity

Returns:

The Jacobian derivative relative to the frame

Return type:

J_dot (npt.ArrayLike)

CoM_position(base_transform: numpy.typing.ArrayLike, joint_positions: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#

Returns the CoM position

Parameters:
  • base_transform (T) – The homogenous transform from base to world frame

  • joint_positions (T) – The joints position

Returns:

The CoM position

Return type:

com (T)

CoM_jacobian(base_transform: numpy.typing.ArrayLike, joint_positions: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#

Returns the center of mass (CoM) Jacobian using the centroidal momentum matrix.

Parameters:
  • base_transform (T) – The homogenous transform from base to world frame

  • joint_positions (T) – The joints position

Returns:

The CoM Jacobian

Return type:

J_com (T)

get_total_mass()[source]#

Returns the total mass of the robot

Returns:

The total mass

Return type:

mass

rnea(base_transform: numpy.typing.ArrayLike, joint_positions: numpy.typing.ArrayLike, base_velocity: numpy.typing.ArrayLike, joint_velocities: numpy.typing.ArrayLike, g: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#

Implementation of reduced Recursive Newton-Euler algorithm (no acceleration and external forces). For now used to compute the bias force term

Parameters:
  • frame (str) – The frame to which the jacobian will be computed

  • base_transform (T) – The homogenous transform from base to world frame

  • joint_positions (T) – The joints position

  • base_velocity (T) – The base velocity

  • joint_velocities (T) – The joints velocity

  • g (T) – The 6D gravity acceleration

Returns:

generalized force variables

Return type:

tau (T)

abstractmethod aba()[source]#
class adam.core.SpatialMath(factory: ArrayLikeFactory)[source]#

Class implementing the main geometric functions used for computing rigid-body algorithm

Parameters:

ArrayLike – abstract class describing a generic Array wrapper. It needs to be implemented for every data type

_factory#
property factory: ArrayLikeFactory#
abstractmethod vertcat(x: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

x (npt.ArrayLike) – elements

Returns:

vertical concatenation of elements x

Return type:

npt.ArrayLike

abstractmethod horzcat(x: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

x (npt.ArrayLike) – elements

Returns:

horizontal concatenation of elements x

Return type:

npt.ArrayLike

abstractmethod mtimes(x: numpy.typing.ArrayLike, y: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
abstractmethod sin(x: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

x (npt.ArrayLike) – angle value

Returns:

sin value of x

Return type:

npt.ArrayLike

abstractmethod cos(x: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

x (npt.ArrayLike) – angle value

Returns:

cos value of angle x

Return type:

npt.ArrayLike

abstractmethod skew(x)[source]#
R_from_axis_angle(axis: numpy.typing.ArrayLike, q: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • axis (npt.ArrayLike) – axis vector

  • q (npt.ArrayLike) – angle value

Returns:

rotation matrix from axis-angle representation

Return type:

npt.ArrayLike

Rx(q: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

q (npt.ArrayLike) – angle value

Returns:

rotation matrix around x axis

Return type:

npt.ArrayLike

Ry(q: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

q (npt.ArrayLike) – angle value

Returns:

rotation matrix around y axis

Return type:

npt.ArrayLike

Rz(q: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

q (npt.ArrayLike) – angle value

Returns:

rotation matrix around z axis

Return type:

npt.ArrayLike

H_revolute_joint(xyz: numpy.typing.ArrayLike, rpy: numpy.typing.ArrayLike, axis: numpy.typing.ArrayLike, q: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • xyz (npt.ArrayLike) – joint origin in the urdf

  • rpy (npt.ArrayLike) – joint orientation in the urdf

  • axis (npt.ArrayLike) – joint axis in the urdf

  • q (npt.ArrayLike) – joint angle value

Returns:

Homogeneous transform

Return type:

npt.ArrayLike

H_prismatic_joint(xyz: numpy.typing.ArrayLike, rpy: numpy.typing.ArrayLike, axis: numpy.typing.ArrayLike, q: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • xyz (npt.ArrayLike) – joint origin in the urdf

  • rpy (npt.ArrayLike) – joint orientation in the urdf

  • axis (npt.ArrayLike) – joint axis in the urdf

  • q (npt.ArrayLike) – joint angle value

Returns:

Homogeneous transform

Return type:

npt.ArrayLike

H_from_Pos_RPY(xyz: numpy.typing.ArrayLike, rpy: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • xyz (npt.ArrayLike) – translation vector

  • rpy (npt.ArrayLike) – rotation as rpy angles

Returns:

Homegeneous transform

Return type:

npt.ArrayLike

R_from_RPY(rpy: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

rpy (npt.ArrayLike) – rotation as rpy angles

Returns:

Rotation matrix

Return type:

npt.ArrayLike

X_revolute_joint(xyz: numpy.typing.ArrayLike, rpy: numpy.typing.ArrayLike, axis: numpy.typing.ArrayLike, q: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • xyz (npt.ArrayLike) – joint origin in the urdf

  • rpy (npt.ArrayLike) – joint orientation in the urdf

  • axis (npt.ArrayLike) – joint axis in the urdf

  • q (npt.ArrayLike) – joint angle value

Returns:

Spatial transform of a revolute joint given its rotation angle

Return type:

npt.ArrayLike

X_prismatic_joint(xyz: numpy.typing.ArrayLike, rpy: numpy.typing.ArrayLike, axis: numpy.typing.ArrayLike, q: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • xyz (npt.ArrayLike) – joint origin in the urdf

  • rpy (npt.ArrayLike) – joint orientation in the urdf

  • axis (npt.ArrayLike) – joint axis in the urdf

  • q (npt.ArrayLike) – joint angle value

Returns:

Spatial transform of a prismatic joint given its increment

Return type:

npt.ArrayLike

X_fixed_joint(xyz: numpy.typing.ArrayLike, rpy: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • xyz (npt.ArrayLike) – joint origin in the urdf

  • rpy (npt.ArrayLike) – joint orientation in the urdf

Returns:

Spatial transform of a fixed joint

Return type:

npt.ArrayLike

spatial_transform(R: numpy.typing.ArrayLike, p: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • R (npt.ArrayLike) – Rotation matrix

  • p (npt.ArrayLike) – translation vector

Returns:

spatial transform

Return type:

npt.ArrayLike

spatial_inertia(I: numpy.typing.ArrayLike, mass: numpy.typing.ArrayLike, c: numpy.typing.ArrayLike, rpy: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • I (npt.ArrayLike) – inertia values from urdf

  • mass (npt.ArrayLike) – mass value from urdf

  • c (npt.ArrayLike) – origin of the link from urdf

  • rpy (npt.ArrayLike) – orientation of the link from the urdf

Returns:

the 6x6 inertia matrix expressed at the origin of the link (with rotation)

Return type:

npt.ArrayLike

spatial_inertial_with_parameters(I, mass, c, rpy)[source]#
Parameters:
  • I (npt.ArrayLike) – inertia values parametric

  • mass (npt.ArrayLike) – mass value parametric

  • c (npt.ArrayLike) – origin of the link parametric

  • rpy (npt.ArrayLike) – orientation of the link from urdf

Returns:

the 6x6 inertia matrix parametric expressed at the origin of the link (with rotation)

Return type:

npt.ArrayLike

spatial_skew(v: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

v (npt.ArrayLike) – 6D vector

Returns:

spatial skew matrix

Return type:

npt.ArrayLike

spatial_skew_star(v: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

v (npt.ArrayLike) – 6D vector

Returns:

negative spatial skew matrix traspose

Return type:

npt.ArrayLike

adjoint(H: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

H (npt.ArrayLike) – Homogeneous transform

Returns:

adjoint matrix

Return type:

npt.ArrayLike

adjoint_derivative(H: numpy.typing.ArrayLike, v: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • H (npt.ArrayLike) – Homogeneous transform

  • v (npt.ArrayLike) – 6D twist

Returns:

adjoint matrix derivative

Return type:

npt.ArrayLike

adjoint_inverse(H: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

H (npt.ArrayLike) – Homogeneous transform

Returns:

adjoint matrix

Return type:

npt.ArrayLike

adjoint_inverse_derivative(H: numpy.typing.ArrayLike, v: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • H (npt.ArrayLike) – Homogeneous transform

  • v (npt.ArrayLike) – 6D twist

Returns:

adjoint matrix derivative

Return type:

npt.ArrayLike

adjoint_mixed(H: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

H (npt.ArrayLike) – Homogeneous transform

Returns:

adjoint matrix

Return type:

npt.ArrayLike

adjoint_mixed_inverse(H: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

H (npt.ArrayLike) – Homogeneous transform

Returns:

adjoint matrix

Return type:

npt.ArrayLike

adjoint_mixed_derivative(H: numpy.typing.ArrayLike, v: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • H (npt.ArrayLike) – Homogeneous transform

  • v (npt.ArrayLike) – 6D twist

Returns:

adjoint matrix derivative

Return type:

npt.ArrayLike

adjoint_mixed_inverse_derivative(H: numpy.typing.ArrayLike, v: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:
  • H (npt.ArrayLike) – Homogeneous transform

  • v (npt.ArrayLike) – 6D twist

Returns:

adjoint matrix derivative

Return type:

npt.ArrayLike

homogeneous_inverse(H: numpy.typing.ArrayLike) numpy.typing.ArrayLike[source]#
Parameters:

H (npt.ArrayLike) – Homogeneous transform

Returns:

inverse of the homogeneous transform

Return type:

npt.ArrayLike