Generated reference › Acceleration 3DOF — Robotics/Equations Of Motion
kind: generated#block#robotics-equations-of-motion

Acceleration 3DOF — Robotics/Equations Of Motion

a

Robotics/Equations_Of_Motion/Acceleration_3DOF · 7 input / 2 output port(s) at insert · exports to Python, MATLAB, Java, Rust, C, C++, VHDL, Verilog, SystemVerilog, PLC Structured Text

Description#

The block's own DESCRIPTION_HTML, rendered verbatim — the same text the config dialog's info panel and the library navigator show. Fix a wrong sentence in the block's .cpp (R-D9), never here.

Acceleration 3DOF

Robotics / Equations Of Motion

The accelerations of a longitudinal rigid body of fixed mass, in body axes, from its forces, mass, the gravity, the pitch attitude θ, the pitch rate q and the body velocity [u; w]:

  • Abe = [Fx; Fz]/m + g·[−sin θ; cos θ] – the acceleration with respect to the earth frame.
  • Abb = Abe + q·[−w; u] – the body-fixed accelerations, i.e. u' and w', which add the rotating-frame term.

It is the acceleration half of EOM 3DOF Body Axes, which carries the states and has no acceleration output.

Ports

  • theta – the pitch attitude θ in radians, a scalar [1,1].
  • q – the pitch rate in rad/s, a scalar [1,1].
  • Vb – the body velocity [u; w], [2,1].
  • g – the gravitational acceleration, a scalar [1,1].
  • mass – the mass m, a nonzero scalar [1,1].
  • Fx – the force along the body x axis, a scalar [1,1].
  • Fz – the force along the body z axis, a scalar [1,1].
  • Abb – the body-fixed accelerations [u'; w'], [2,1].
  • Abe – the accelerations with respect to the earth frame, in body axes, [2,1].

Parameters

  • Units – the unit system:
    • Metric (MKS) – the default.
    • English (Velocity in ft/s) – the same arithmetic as Metric.
    • English (Velocity in kts) – Vb in knots against accelerations in ft/s²: Vb is scaled by 1852/(3600·0.3048), a knot in ft/s, before the rotating-frame term, so only Abb moves.
  • Sampling Time (s) – zero or less inherits the solver's rate; a positive value runs the block at that period.

Code export

All ten targets: Python, MATLAB, Java, Rust, C, C++, VHDL, Verilog, SystemVerilog and PLC Structured Text: four sums of products per sample, with the velocity scale folded to a constant.

The three HDL targets are simulation-only real arithmetic, quantized at the port: a sine of a port and a division by one have no Q16.16 form. The cores simulate correctly and are not offered as synthesizable.

Simulink bridge

Import and export, mapped to Aerospace Blockset's aerolib3dof2/3DOF Acceleration: Units → units, 1:1 and therefore lossless. Always emitted with mtype = Fixed, axes = Body and vre_flag off: each of those moves that block's port list, and this block has one. "Sampling Time (s)" does not cross: the Simulink block defines no SampleTime.

Notes

  • Stateless and algebraic: both outputs depend on this sample's inputs only.
  • The mass divides, so it must not be zero.

Code facts#

FactValue
registered typeRobotics/Equations_Of_Motion/Acceleration_3DOF
familyRobotics/Equations_Of_Motion
solver environment classICoreBlock_0_Robotics_1_Equations_Of_Motion_2_Acceleration_3DOF
sourcesrc/ICoreBlocks/ICoreBlockLibrary/Blocks/Robotics/Equations_Of_Motion/Acceleration_3DOF/ICoreBlock_0_Robotics_1_Equations_Of_Motion_2_Acceleration_3DOF.cpp
headersrc/ICoreBlocks/ICoreBlockLibrary/Blocks/Robotics/Equations_Of_Motion/Acceleration_3DOF/ICoreBlock_0_Robotics_1_Equations_Of_Motion_2_Acceleration_3DOF.h
default size on canvas130 × 150 px
ports at insert7 in, 2 out
code generators implementedPython, MATLAB, Java, Rust, C, C++, VHDL, Verilog, SystemVerilog, PLC Structured Text

Ports#

#DirectionSignal typeDescription label
1inICoreDoubletheta
2inICoreDoubleq
3inICoreDoubleVb
4inICoreDoubleg
5inICoreDoublemass
6inICoreDoubleFx
7inICoreDoubleFz
8outICoreDoubleAbb
9outICoreDoubleAbe

Ports the constructor creates. A block whose port list changes with its configuration adds or removes ports at load time; the count above is the one a freshly inserted block has.

Configuration variables#

Config variableDefaultSimulink parameter
UnitsMetric (MKS)%~%English (Velocity in ft/s)%~%English (Velo…units

Every block also carries Sampling Time (s) from ICoreBlockSolverEnvironment: zero or less inherits the solver's rate, a positive value runs the block at that period.

supportSupport::Both
Simulink pathaerolib3dof2/3DOF Acceleration
port-count rulePortsParam::None
SampleTime parameterno — the counterpart defines none; the rate stays on the ICore side
always setmtype = Fixed, axes = Body, vre_flag = off
ICore configSimulink parameterValue translation
UnitsunitsMetric (MKS) → Metric (MKS), English (Velocity in ft/s) → English (Velocity in ft/s), English (Velocity in kts) → English (Velocity in kts)

Caveat (shown to the user): aerolib3dof2/3DOF Acceleration has NO SampleTime parameter (verified against the R2026a block dialog). mtype, axes and vre_flag are pinned because each moves that block's port list

Catalog contract: src/ICoreBlocks/ICoreCoder/ICoreCommandSystem/SimulinkBridge/ICoreSimulinkBlockCatalog.h

Description vs code#

The checker has a blind spot here — it could not resolve something (a grouped port bullet, a computed config name), which is reported and never counted as a pass. A reader has to settle it:

  • B0 every stimulus in the sample errored — cross-checks skipped

The verdict above is tools/docs/check_block_descriptions.py (P7.1), which compares LISTS. It cannot read a sentence: "stateless" on a block with a state, an initial-value semantic the recursion does not implement, a "not synthesizable" caveat the HDL banner contradicts. That is the agent audit (P7.3) on BLOCK_DESCRIPTION_AUDIT.md, and this tool's green is not a substitute for one.

File banner (developer view)#

The top comment of the block's .cpp — the maths, the realization and the export strategy, addressed to whoever changes it. It must not contradict the description above (P7.5).

3DOF Acceleration — body-axis accelerations of a longitudinal rigid body Abe = [Fx; Fz] ./ m + g * [-sin(theta); cos(theta)] (w.r.t. the earth frame) Abb = q * [-w; u] * k + Abe (body-fixed, k = unit scale)

⚠ MEASURED AGAINST R2026a BEFORE ANY OF IT WAS WRITTEN. The masked subsystem at mtype = Fixed, axes = Body is exactly that: Total Force (Mux[Fx, Fz], the fuel/Vre arm grounded), Divide by the mass port, a Gravity subsystem Mux[-sin, cos] .* gravity, and Acceleration (Body) = Matrix Gain [0 -1; 1 0] on Vb, times q, plus that sum -- reproduced to the last digit at both unit settings. What the measurement settled:

  • SEVEN inputs in the order theta, q, Vb, gravity, mass, Fx, Fz -- gravity and mass are PORTS

here, not parameters, unlike on the 3dof blocks.

  • "English (Velocity in kts)" scales Vb by a knot in ft/s, 1852/(3600*0.3048), before the

cross term and moves Abb ONLY; Metric and ft/s are byte-identical. Exactly Acceleration 6DOF's rule, and the same constant spelled the same way.

  • mtype, axes and vre_flag each MOVE the port list; all three are pinned (fixedParams).

Algebraic and stateless. HDL is SIMULATION-ONLY real: a sine of a port has no Q16.16 form.

Sample results#

No stimulus produced a sampled output in this rig — Invalid input size at Acceleration 3DOF block: ICore Blocks/Home/Acceleration 3DOF. That is a fact about the single-block rig, not a verdict on the block: an offline batch fit, a block whose output only appears at onSolverFinish, or one that needs a driven environment cannot be exercised alone.

Category unsampled · sample time 0.1 · 60 steps · commit 7a143da00 · produced by docsSample --out <folder> --blocks EOM_3DOF_Body_Axes EOM_3DOF_Wind_Axes Point_Mass_Longitudinal Point_Mass_Coordinated_Flight Acceleration_3DOF --steps 60

Sample data: docs/generated/samples/Robotics__Equations_Of_Motion__Acceleration_3DOF.json