Ship Steering Model

Source Notebook

A Norrbin model of a ship's steering dynamics

Details

Symbolic systems model suitable for analysis, control design, simulation, and deployment.

Examples

Basic Examples (2) 

Retrieve the model:

In[1]:=
ResourceData[\!\(\*
TagBox["\"\<Ship Steering Model\>\"",
#& ,
BoxID -> "ResourceTag-Ship Steering Model-Input",
AutoDelete->True]\)]
Out[1]=

The annotation:

In[2]:=
ResourceData[\!\(\*
TagBox["\"\<Ship Steering Model\>\"",
#& ,
BoxID -> "ResourceTag-Ship Steering Model-Input",
AutoDelete->True]\), "Annotation"]
Out[2]=

Scope & Additional Elements (4) 

Available content elements:

In[3]:=
\!\(\*
TagBox[
RowBox[{"ResourceObject", "[", "\"\<Ship Steering Model\>\"", "]"}],
#& ,
BoxID -> "ResourceTag-Ship Steering Model-Input",
AutoDelete->True]\)["ContentElements"]
Out[3]=

The available model types:

In[4]:=
ResourceData[\!\(\*
TagBox["\"\<Ship Steering Model\>\"",
#& ,
BoxID -> "ResourceTag-Ship Steering Model-Input",
AutoDelete->True]\), "Annotation"]
Out[4]=

The operating point:

In[5]:=
ResourceData[\!\(\*
TagBox["\"\<Ship Steering Model\>\"",
#& ,
BoxID -> "ResourceTag-Ship Steering Model-Input",
AutoDelete->True]\), "OperatingPoint"]
Out[5]=

The parameters:

In[6]:=
ResourceData[\!\(\*
TagBox["\"\<Ship Steering Model\>\"",
#& ,
BoxID -> "ResourceTag-Ship Steering Model-Input",
AutoDelete->True]\), "Parameters"]
Out[6]=

Analysis (6) 

The model and its parameters:

In[7]:=
{asys, pars} = Table[ResourceData[\!\(\*
TagBox["\"\<Ship Steering Model\>\"",
#& ,
BoxID -> "ResourceTag-Ship Steering Model-Input",
AutoDelete->True]\), elems], {elems, {"AffineStateSpaceModel", "Parameters"}}]
Out[7]=
A control law that steers the ship from 0° to 20° in 30 seconds and constant yaw rate:
In[8]:=
fb = AsymptoticOutputTracker[asys, 20 Degree t/30, {-2, -3}]
Out[8]=
The closed-loop system:
In[9]:=
csys = SystemsModelStateFeedbackConnect[asys, fb] // Simplify
Out[9]=
The ship is steered as expected:
In[10]:=
OutputResponse[csys /. pars, 0, {t, 0, 30}];
Plot[%/Degree, {t, 0, 30}, GridLines -> {{30}, {20}}]
Out[11]=
The rudder deflection for various hull lengths:
In[12]:=
sr = Thread[{Subscript[\[FormalX], 1][t], Subscript[\[FormalX], 2][t]} -> StateResponse[csys, 0, t]];
Table[fb /. DeleteCases[pars, Rule[l, _]] /. \[Psi][t] -> 20^° t/30 /. sr, {l, Range[30, 60, 6]}] // Flatten;
In[13]:=
Plot[%, {t, 0, 1}, PlotLegends -> Range[30, 60, 6], PlotRange -> All]
Out[13]=
The rudder deflection for various ship speeds:
In[14]:=
Table[fb /. DeleteCases[pars, Rule[v, _]] /. \[Psi][t] -> 20^° t/30 /. sr, {v, Range[8, 3, -1]}] // Flatten;
Plot[%, {t, 0, 1}, PlotLegends -> Range[8, 3, -1], PlotRange -> All]
Out[15]=

Suba Thomas, "Ship Steering Model" from the Wolfram Data Repository (2025)  

Data Resource History

Source Metadata

Publisher Information