robot_msgs

Aggregate

What aggregate(reference, runs) returns: the bias and the spread of N runs.

Full docstring
- `accuracy`: ``compare(reference, barycentre)`` on the grid: what a feed-forward could
  remove (ISO AP / AT).
- `repeatability`: a `Trajectory` over the grid; per instant ISO's RP = l̄ + 3·S_l, where
  ``l_i`` is run i's distance to the barycentre and ``S_l`` its sample standard deviation
  (ddof=1). Joints: channel ``positions`` ``(N, J)``, ``l = |x - b|`` per joint. Poses:
  channels ``position`` ``(N,)`` (``l = ‖p - b‖``) and ``rotation`` ``(N,)``
  (``l`` = angle of ``q_i ⊗ b⁻¹``).
- `metrics`: `ErrorStats` of the repeatability channels (``positions/<joint>``, ``position``,
  ``rotation``).
- `runs` and `coverage` (the fraction of the reference's duration that every run covers) say
  what the numbers are made of.
Import
from robot_msgs.compare import Aggregate
ROS 2no ROS equivalent

Fields

NameTypeDefault
accuracyComparisonrequired
repeatabilityTrajectoryrequired
metricsMapping[str, ErrorStats]{}
runsint0
coveragefloat1.0

Example

One instance from the package's own test catalog; the output is its real repr().

Aggregate(accuracy=Comparison(error=JointTrajectory(N=11, t=[0 … 1] s, header=Header(stamp=12.0, frame_id='base_link'), joint_names=('j1', 'j2', 'j3'), positions=float64[11×3]), metrics={'positions/j1': ErrorStats(n=11, rms=0.0049999999999999845, mean=-0.0049999999999999845, median=-0.0050000000000000044, std=6.383377409953155e-17, min=-0.0050000000000001155, max=-0.004999999999999893, max_abs=0.0050000000000001155, p95_abs=0.00500000000000006, final=-0.0050000000000000044, iae=0.004999999999999988, ise=2.4999999999999876e-05, itae=0.0025000000000000044), 'positions/j2': ErrorStats(n=11, rms=0.005000000000000007, mean=-0.005000000000000007, median=-0.0050000000000000044, std=4.800786852376917e-17, min=-0.0050000000000001155, max=-0.004999999999999893, max_abs=0.0050000000000001155, p95_abs=0.005000000000000074, final=-0.0050000000000000044, iae=0.005000000000000013, ise=2.5000000000000127e-05, itae=0.0025000000000000074), 'positions/j3': ErrorStats(n=11, rms=0.0050000000000000495, mean=-0.0050000000000000495, median=-0.0050000000000000044, std=5.22410784102598e-17, min=-0.0050000000000001155, max=-0.005000000000000001, max_abs=0.0050000000000001155, p95_abs=0.0050000000000001155, final=-0.0050000000000000044, iae=0.005000000000000054, ise=2.5000000000000543e-05, itae=0.002500000000000029)}, time_offset_s=0.0, dropped=0, coverage=1.0), repeatability=Trajectory(N=11, t=[0 … 1] s, channels={'positions': float64[11×3]}, header=Header(stamp=12.0, frame_id='base_link')), metrics={'positions/j1': ErrorStats(n=11, rms=0.005000000000000052, mean=0.005000000000000052, median=0.0050000000000000044, std=1.725033212525087e-16, min=0.004999999999999893, max=0.005000000000000475, max_abs=0.005000000000000475, p95_abs=0.005000000000000386, final=0.0050000000000000044, iae=0.0050000000000000626, ise=2.5000000000000618e-05, itae=0.002500000000000036), 'positions/j2': ErrorStats(n=11, rms=0.005000000000000031, mean=0.005000000000000031, median=0.0050000000000000044, std=9.366740131307095e-17, min=0.004999999999999893, max=0.005000000000000296, max_abs=0.005000000000000296, p95_abs=0.005000000000000187, final=0.0050000000000000044, iae=0.00500000000000004, ise=2.5000000000000398e-05, itae=0.0025000000000000165), 'positions/j3': ErrorStats(n=11, rms=0.005000000000000144, mean=0.005000000000000144, median=0.0050000000000000495, std=1.7860090452265964e-16, min=0.005000000000000001, max=0.005000000000000475, max_abs=0.005000000000000475, p95_abs=0.005000000000000475, final=0.0050000000000000044, iae=0.005000000000000157, ise=2.5000000000001573e-05, itae=0.002500000000000097)}, runs=2, coverage=1.0)
to_dict() as JSON
{
  "_type": "compare/Aggregate",
  "accuracy": {
    "_type": "compare/Comparison",
    "error": {
      "_type": "trajectory/JointTrajectory",
      "t": {
        "dtype": "<f8",
        "shape": [11],
        "data": [0.0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6000000000000001, 0.7000000000000001, 0.8, 0.9, 1.0]
      },
      "channels": {},
      "header": {
        "_type": "std/Header",
        "stamp": 12.0,
        "frame_id": "base_link",
        "meta": {}
      },
      "joint_names": ["j1", "j2", "j3"],
      "positions": {
        "dtype": "<f8",
        "shape": [11, 3],
        "data": [-0.004999999999999893, -0.004999999999999893, -0.0050000000000000044, -0.0050000000000000044, -0.0050000000000000044, -0.0050000000000000044, -0.004999999999999893, -0.005000000000000032, -0.0050000000000001155, -0.004999999999999893, -0.0050000000000000044, -0.00500000000000006, -0.0050000000000000044, -0.0050000000000001155, -0.0050000000000001155, -0.0050000000000000044, "… 17 more values"]
      },
      "velocities": null,
      "accelerations": null,
      "effort": null,
      "limits": null
    },
    "metrics": {
      "positions/j1": {
        "_type": "compare/ErrorStats",
        "n": 11,
        "rms": 0.0049999999999999845,
        "mean": -0.0049999999999999845,
        "median": -0.0050000000000000044,
        "std": 6.383377409953155e-17,
        "min": -0.0050000000000001155,
        "max": -0.004999999999999893,
        "max_abs": 0.0050000000000001155,
        "p95_abs": 0.00500000000000006,
        "final": -0.0050000000000000044,
        "iae": 0.004999999999999988,
        "ise": 2.4999999999999876e-05,
        "itae": 0.0025000000000000044
      },
      "positions/j2": {
        "_type": "compare/ErrorStats",
        "n": 11,
        "rms": 0.005000000000000007,
        "mean": -0.005000000000000007,
        "median": -0.0050000000000000044,
        "std": 4.800786852376917e-17,
        "min": -0.0050000000000001155,
        "max": -0.004999999999999893,
        "max_abs": 0.0050000000000001155,
        "p95_abs": 0.005000000000000074,
        "final": -0.0050000000000000044,
        "iae": 0.005000000000000013,
        "ise": 2.5000000000000127e-05,
        "itae": 0.0025000000000000074
      },
      "positions/j3": {
        "_type": "compare/ErrorStats",
        "n": 11,
        "rms": 0.0050000000000000495,
        "mean": -0.0050000000000000495,
        "median": -0.0050000000000000044,
        "std": 5.22410784102598e-17,
        "min": -0.0050000000000001155,
        "max": -0.005000000000000001,
        "max_abs": 0.0050000000000001155,
        "p95_abs": 0.0050000000000001155,
        "final": -0.0050000000000000044,
        "iae": 0.005000000000000054,
        "ise": 2.5000000000000543e-05,
        "itae": 0.002500000000000029
      }
    },
    "time_offset_s": 0.0,
    "dropped": 0,
    "coverage": 1.0
  },
  "repeatability": {
    "_type": "trajectory/Trajectory",
    "t": {
      "dtype": "<f8",
      "shape": [11],
      "data": [0.0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6000000000000001, 0.7000000000000001, 0.8, 0.9, 1.0]
    },
    "channels": {
      "positions": {
        "dtype": "<f8",
        "shape": [11, 3],
        "data": [0.004999999999999893, 0.004999999999999893, 0.0050000000000000044, 0.005000000000000296, 0.0050000000000000044, 0.0050000000000000495, 0.004999999999999893, 0.005000000000000077, 0.005000000000000296, 0.004999999999999893, 0.0050000000000000495, 0.00500000000000015, 0.005000000000000095, 0.005000000000000296, 0.0050000000000001155, 0.0050000000000000044, "… 17 more values"]
      }
    },
    "header": {
      "_type": "std/Header",
      "stamp": 12.0,
      "frame_id": "base_link",
      "meta": {}
    }
  },
  "metrics": {
    "positions/j1": {
      "_type": "compare/ErrorStats",
      "n": 11,
      "rms": 0.005000000000000052,
      "mean": 0.005000000000000052,
      "median": 0.0050000000000000044,
      "std": 1.725033212525087e-16,
      "min": 0.004999999999999893,
      "max": 0.005000000000000475,
      "max_abs": 0.005000000000000475,
      "p95_abs": 0.005000000000000386,
      "final": 0.0050000000000000044,
      "iae": 0.0050000000000000626,
      "ise": 2.5000000000000618e-05,
      "itae": 0.002500000000000036
    },
    "positions/j2": {
      "_type": "compare/ErrorStats",
      "n": 11,
      "rms": 0.005000000000000031,
      "mean": 0.005000000000000031,
      "median": 0.0050000000000000044,
      "std": 9.366740131307095e-17,
      "min": 0.004999999999999893,
      "max": 0.005000000000000296,
      "max_abs": 0.005000000000000296,
      "p95_abs": 0.005000000000000187,
      "final": 0.0050000000000000044,
      "iae": 0.00500000000000004,
      "ise": 2.5000000000000398e-05,
      "itae": 0.0025000000000000165
    },
    "positions/j3": {
      "_type": "compare/ErrorStats",
      "n": 11,
      "rms": 0.005000000000000144,
      "mean": 0.005000000000000144,
      "median": 0.0050000000000000495,
      "std": 1.7860090452265964e-16,
      "min": 0.005000000000000001,
      "max": 0.005000000000000475,
      "max_abs": 0.005000000000000475,
      "p95_abs": 0.005000000000000475,
      "final": 0.0050000000000000044,
      "iae": 0.005000000000000157,
      "ise": 2.5000000000001573e-05,
      "itae": 0.002500000000000097
    }
  },
  "runs": 2,
  "coverage": 1.0
}

Long arrays are cut after 16 values and say so with “…”.

Functions

Constructors

Classmethods and staticmethods: ways to build one.

from_dict

from Msg
from_dict(data: Mapping[str, Any]) -> M

No docstring.

Methods

Return new values; messages are never mutated.

replace

from Msg
replace(**changes: Any) -> M

A copy with some fields changed. Validation runs again.

to_dict

from Msg
to_dict() -> dict[str, Any]

JSON-safe dict with a "_type" key; arrays keep their dtype and shape.

Uses

Types its fields refer to.

Comparison ErrorStats Trajectory

robot_msgs 0.2.0 @ 22ec67fGitHub · MIT license · generated from the package, not written per type