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
|
23 | 33 | RPT Flag | 1 | Repetition/Reservation flag bit | It must be set to 0, indicating a reservation |
24-30 | 32-26 | Reservation | 7 | Reservation time | Reservation time. It must be long enough to at least cover the transmission time of the cargo bits |
31-39 | 25-17 | Station Identifier | 9 | Station identifier of sender | It can take value 0..511 |
40-43 | 16-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-53 | 12- 3 | Depth | 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- 0 | Number 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 Contacts | BpTC 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_relwhere
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 |