Acceleration 3DOF — Robotics/Equations Of Motion
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#
| Fact | Value |
|---|---|
| registered type | Robotics/Equations_Of_Motion/Acceleration_3DOF |
| family | Robotics/Equations_Of_Motion |
| solver environment class | ICoreBlock_0_Robotics_1_Equations_Of_Motion_2_Acceleration_3DOF |
| source | src/ICoreBlocks/ICoreBlockLibrary/Blocks/Robotics/Equations_Of_Motion/Acceleration_3DOF/ICoreBlock_0_Robotics_1_Equations_Of_Motion_2_Acceleration_3DOF.cpp |
| header | src/ICoreBlocks/ICoreBlockLibrary/Blocks/Robotics/Equations_Of_Motion/Acceleration_3DOF/ICoreBlock_0_Robotics_1_Equations_Of_Motion_2_Acceleration_3DOF.h |
| default size on canvas | 130 × 150 px |
| ports at insert | 7 in, 2 out |
| code generators implemented | Python, MATLAB, Java, Rust, C, C++, VHDL, Verilog, SystemVerilog, PLC Structured Text |
Ports#
| # | Direction | Signal type | Description label |
|---|---|---|---|
| 1 | in | ICoreDouble | theta |
| 2 | in | ICoreDouble | q |
| 3 | in | ICoreDouble | Vb |
| 4 | in | ICoreDouble | g |
| 5 | in | ICoreDouble | mass |
| 6 | in | ICoreDouble | Fx |
| 7 | in | ICoreDouble | Fz |
| 8 | out | ICoreDouble | Abb |
| 9 | out | ICoreDouble | Abe |
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 variable | Default | Simulink parameter |
|---|---|---|
Units | Metric (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.
Simulink bridge#
| support | Support::Both |
| Simulink path | aerolib3dof2/3DOF Acceleration |
| port-count rule | PortsParam::None |
SampleTime parameter | no — the counterpart defines none; the rate stays on the ICore side |
| always set | mtype = Fixed, axes = Body, vre_flag = off |
| ICore config | Simulink parameter | Value translation |
|---|---|---|
Units | units | Metric (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:
B0every 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