Loading...
 

Class User Id: 002 Underwater AIS

Proposed Application Type specification for Class user i.d.= 002


Please refer to the forum Class User Id: 002 Underwater AIS - Forum

For a visual description of the JANUS Baseline Bit Allocation click here.

002 - 08


Version 0.4 (20230314)

The Automatic Identification System (AIS) is a status-reporting service used to broadcast identification and localisation information to nearby vessels. It is used as an automatic tracking system to avoid collisions between vessels operating at the sea surface. AIS is mandatory for vessels above 300 tons and all passenger ships, and is electively deployed by many smaller vessels. The objective of this service is to use JANUS to broadcast relevant AIS data from the surface to the submerged assets and vice versa. Given the bandwidth limitation, only a subset of the regular AIS fields is transmitted via JANUS (i.e., MMSI, Latitude, Longitude, Course over Ground/True Heading, Speed and Status), however two more fields have been added: Depth and Type. The goal behind the inclusion of these two extra fields is to extend the AIS functionality to the underwater domain. This way, all maritime assets in communication range, are provided with a more complete situational picture of their surroundings. This contributes to reducing the probability of accidents between surface and submerged manned and unmanned assets. The type values (i.e., AUV, ASV, moored buoy, etc.) have been defined according to the ones suggested by the NIAG SG190. Additionally, to reduce the overhead in the communication, multiple AIS contacts can be transmitted in one single JANUS message. Bit allocation tables for the Application Data Block (ADB) and CARGO are presented in the following sections.

This application includes cargo data, therefore, in order to be compliant with ANEP-87:
- the schedule flag bit (bit 6 of the JANUS baseline packet) must be set to 1;
- the RPT flag bit (bit 23 of the JANUS baseline packet or first bit of the ADB) must be set to 0, indicating reservation;
- the reservation bits (seven bits: 24-30 of the JANUS baseline packet or 2-8 of the ADB) contain the reservation time, which must be long enough to at least cover the transmission time of the cargo bits.

Application Data Block (ADB)


ADB bit allocation table (it is assumed that the schedule flag bit - bit 6 of the JANUS baseline packet - is set to 1):

JANUS Bits
ADB Field Bit #
Descriptor
Bits per Field
Description
Comments
2333 RPT Flag
1
Repetition/Reservation flag bit It must be set to 0, indicating a reservation
24-3032-26 Reservation
7
Reservation time Reservation time. It must be long enough to at least cover the transmission time of the cargo bits
31-3925-17 Station Identifier
9
Station identifier of sender It can take value 0..511
40-4316-13 Type
4
Mapped according to:
 0 = Nuclear submarine
 1 = AIP submarine
 2 = Conventional submarine
 3 = AUV
 4 = Ship
 5 = Airplane
 6 = UAV
 7 = USV
 8 = Buoy
 9 = Bottom node
15 = n.a.
Contact 1 Type.
44-5312- 3Depth
10
Mapped according to:
Code      Value [m]  Resolution [m]
-----------------------------------
   0             0
   1             1
   :             :               1
 699           699
 -----------------------------------
 700           700
 701           710
   :             :              10
 729           990
-----------------------------------
 730          1000
 731          1020
   :             :              20
 829          2980
-----------------------------------
 830          3000
 831          3025
   :             :              25
 949          5975
-----------------------------------
 950          6000
 951          6075
   :             :              75
1022         11400
1023          n.a.
-----------------------------------
Contact 1 Depth.
The Depth values are coded with a Piecewise Uniform Quantization, divided in 5 ranges with 1, 10, 20, 25 and 75 [m] quantization steps.
Mapping Rules
value_float is the actual Depth value in [m].
value_int is the bit pattern that codes the Depth value (written as an integer in decimal notation).
Integer to Depth [m] conversion:
For   0 ≤ value_int ≤  699 then value_float =    0 + (value_int -   0) *  1
For 700 ≤ value_int ≤  729 then value_float =  700 + (value_int - 700) * 10
For 730 ≤ value_int ≤  829 then value_float = 1000 + (value_int - 730) * 20
For 830 ≤ value_int ≤  949 then value_float = 3000 + (value_int - 830) * 25
For 950 ≤ value_int < 1023 then value_float = 6000 + (value_int - 950) * 75
For value_int = 1023 No Depth Available

Depth [m] to integer conversion:
For    0 ≤ value_float <   700 then value_int =   0 + floor( (value_float -    0) *  1 )
For  700 ≤ value_float <  1000 then value_int = 700 + floor( (value_float -  700) * 1/10)
For 1000 ≤ value_float <  3000 then value_int = 730 + floor( (value_float - 1000) * 1/20)
For 3000 ≤ value_float <  6000 then value_int = 830 + floor( (value_float - 3000) * 1/25)
For 6000 ≤ value_float ≤ 11400 then value_int = 950 + floor( (value_float - 6000) * 1/75)
54-56 2- 0Number of Extra Contacts (NoEC)
3
Mapped according to:
0 = 0 Extra Contacts
:
7 = 7 Extra Contacts 
A total of 8 contacts can be transmitted (Contact 1..8). Contact 1 is always transmitted.


Note: Only 26 bits of the 34 bits are used.

CARGO


CARGO bit allocation table:

CARGO Bits
Descriptor
Bits per Field
Description
Comments
1- 30 User ID
30
Maritime Mobile Service Identity (MMSI) number
Contact 1 User ID.
31- 54 Latitude
24
Latitude in 90/8388607 deg  increments (range +/-90 deg)
North = positive (as per 2's complement),
South = negative (as per 2's complement).
Contact 1 Latitude.
The value 8388608 (0x800000 in hexadecimal) is not defined as a Latitude value. Can be used to code an error condition.
(see Note 1)
55-79 Longitude
25
Longitude in 90/8388607 deg increments (range +/-180 deg)
East = positive (as per 2's complement),
West = negative (as per 2's complement).
Contact 1 Longitude.
The value 16777216 (0x1000000 in hexadecimal) is not defined as a Longitude value. Can be used to code an error condition.
(see Note 1)
80- 87 Speed
8
Mapped according to:
Code        Value [kn]  Resolution [kn]
---------------------------------------
   0              0.0
   1              0.1
   :              :              0.1
 199             19.9
---------------------------------------
 200             20
 201             21
   :              :              1
 249             69
---------------------------------------
 250             70
 251             75
 252             80              5
 253             85
---------------------------------------
 254           >= 86
 255            n.a.
---------------------------------------
Contact 1 Speed.
The Speed values are coded with a Piecewise Uniform Quantization, divided in 3 ranges with 0.1, 1 and 5 [kn] quantization steps.
Mapping Rules
value_float is the actual Speed value in [kn].
value_int is the bit pattern that codes the Speed value (written as an integer in decimal notation).
Integer to Speed [kn] conversion:
For   0 ≤ value_int ≤ 199 then value_float =  0 + (value_int-  0) * 0.1
For 200 ≤ value_int ≤ 249 then value_float = 20 + (value_int-200) * 1
For 250 ≤ value_int ≤ 253 then value_float = 70 + (value_int-250) * 5
For value_int = 254 value_float >= 86
For value_int = 255 No Speed Available

Float [kn] to integer conversion:
For  0 ≤ value_float < 20 then value_int =   0 + floor( (value_float- 0) * 10 )
For 20 ≤ value_float < 70 then value_int = 200 + floor( (value_float-20) *  1 )
For 70 ≤ value_float < 86 then value_int = 250 + floor( (value_float-70) * 1/5)
For value_float ≥ 86 value_int = 254

88- 96 CoG/True Heading
9
0..359.55 deg
(in 0.705 deg increments)
Mapped according to:
Code          Value [deg]
-------------------------
   0             0
   1             0.705
   :             :
 510           359.55
 511           n.a.
 -------------------------
Contact 1 Course over Ground (CoG) or True Heading (TH).
The CoG/TH values are coded with a Uniform Quantization.
Mapping Rules
value_float is the actual CoG/TH value in [deg].
value_int is the bit pattern that codes the CoG/TH value (written as an integer in decimal notation).
Integer to CoG/TH [deg] conversion:
value_float = value_int * 0.705
For value_int = 511 No CoG/TH Available

Float [deg] to integer conversion:
Round towards nearest integer (rounding halfway cases away from zero)
value_int = round(value_float/0.705)
Depending on the Status bits, this angle is CoG or TH.
True Heading when:
 1 = At anchor
 5 = Moored
 6 = Aground
 CoG for all other.
97-100 Navigational Status
4
Mapped according to:
 0 = Under way - using engine
 1 = At anchor
 2 = Not under command
 3 = Restricted manoeuvrability
 4 = Constrained by draught
 5 = Moored
 6 = Aground
 7 = Engaged in fishing
 8 = Under way - sailing
 9 = For future use
10 = For future use
11 = Power-driven vessel towing astern
12 = Power-driven vessel pushing ahead
13 = For future use
14 = AIS-SART
15 = Undefined/default
Contact 1 Status.
Data referring to Contact 2 starts here...
101-104 Type
4
(see Note 2) Contact 2 Type.
105-114 Depth
10
(see Note 2) Contact 2 Depth.
115-144 User ID
30
(see Note 2) Contact 2 MMSI number.
145-160 Latitude
16
(see Note 3) Contact 2 Latitude.
161-176 Longitude
16
(see Note 3) Contact 2 Longitude.
177-184 Speed
8
(see Note 2) Contact 2 Speed.
185-193 CoG/True Heading
9
(see Note 2) Contact 2 CoG/True Heading.
194-197 Status
4
(see Note 2) Contact 2 Status.
Data referring to Contact 3 starts here...
198-___
(NoEC-1) x BpSEC
Contact 3 (BpSEC bits)
..
Contact 8 (BpSEC bits)
(BpC-15)-
(BpC)
CRC16
16
CRC16
(X^16 + X^15 + X^2 + 1)
Full description of CRC16.
 
REMARK: The CRC will always be stored in the last two bytes of the cargo, preceded by bit padding as needed


Bits per Baseline              (BpB)  : 64 bit
Bits per Single Contact        (BpSC) : 30+24+25+8+9+4 = 100 bit (total CARGO bits for a single contact are 120 bit)
Bits per Single Extra Contact  (BpSEC): 30+4+2*16+10+8+9+4 = 97 [bit]
Bits per Total  Extra Contacts (BpTEC): BpTEC = NoEC x BpSEC [bit]
Bits per Total  Contacts       (BpTC) : BpTC = BpSC + BpTEC + 16 [bit]
Bits per CARGO                 (BpC)  : ceil(BpTC/8) x 8 [bit] (CARGO Size [bit])
Chips per CARGO                (CpC)  : 2 x (BpC + 8) [chip]
(after the convolutional encoder the units go from [bit] to [chip])

Total # of ContactsBpTC Size [bit]CARGO Size [byte]CARGO Size [chip]CARGO Duration [s]Total Tx Msg Duration [s]
1
116
15
256
1.600
2.700
2
213
27
448
2.800
3.900
3
310
39
640
4.000
5.100
4
407
51
832
5.200
6.300
5
504
63
1024
6.400
7.500
6
601
76
1232
7.700
8.800
7
698
88
1424
8.900
10.000
8
795
100
1616
10.100
11.200

Total Tx Msg Duration referes to the total duration of the transmitted message, including baseline and CARGO.
A JANUS Baseline message duration is 1.1 [s].

Note 1:
Latitude and Longitude are angles in decimal degrees: 1 deg = (pi/180) rad

Test Point 1:
Angle   Value        Binary and Hexadecimal        Unsigned Binary in Decimal Notation
--------------------------------------------------------------------------------------
Lat:     +44.098596  0b001111101011011111001111    4110287
                     0x3EB7CF
Lon:      +9.862522  0b0000011100000011011010110   919254
                     0x00E06D6

Test Point 2:
Angle   Value        Binary and Hexadecimal        Unsigned Binary in Decimal Notation
--------------------------------------------------------------------------------------
Lat:     +38.729201  0b001101110001010011011111    3609823
                     0x3714DF
Lon:      -9.190332  0b1111100101110110111100111   32697831
                     0x1F2EDE7

Note 2:
All fields are defined the same way as Contact 1, except for Latitude and Longitude (see Note 3).

Note 3:
The Latitude and Longitude of the extra contacts (Contacts 2 to 8), are coded with 16 bits (2's complement) with the same angular resolution (90/8388607 deg) of Contact 1, but are relative values. Contact 1 absolute coordinates are used as a local reference, from which Contacts 2 to 8 are defined relative to.
To save bits, only 16 bits are used to code the relative values of Latitude and Longitude. The angular range from Contact 1 provided by the 16 bit coding translates to a linear range of approximately [-21..21] nm in both North-South and East-West directions. For example, in order to recover the absolute Latitude of Contact 2, the following relation applies:
Lat_c2_abs = Lat_c1_abs + Lat_c2_rel
where
Lat_c1_abs: Latitude of Contact 1 (absolute Latitude value, 24 bits, 2's complement)
Lat_c2_abs: Latitude of Contact 2 (absolute Latitude value, 24 bits, 2's complement)
Lat_c2_rel: Delta (relative) value from Lat_c1, coded with 16 bits (2's complement)
The delta Latitude (relative) of Contact 2 can be obtained with:
Lat_c2_rel = Lat_c2_abs - Lat_c1_abs


Revision History
Date
Version
Description
Authors
2023/03 0.4 Correction to JANUS baseline packet fields, including schedule flag bit and reservation time. More information for the node identifier also included NATO STO CMRE
2022/08 0.3 Update on the cargo bits used for the CRC16 NATO STO CMRE
2019/02 0.2 Changes:
- Binary encoding of Lat./Long., Depth, Speed, CoG/True Heading data fields.
- Usage of both Application Data Block and CARGO for message data.
- CoG/True Heading data field content decided by the Status field value.
NATO STO CMRE
2017/10 0.1 Message format published in:
R. Petroccia, J. Alves and G. Zappa, "JANUS-Based Services for Operationally Relevant Underwater Applications," in IEEE Journal of Oceanic Engineering, vol. 42, no. 4, pp. 994-1006, Oct. 2017. doi: 10.1109/JOE.2017.2722018
NATO STO CMRE