Support and feedback
Information, documentation, and discussions related
to UAVCAN are available via the official website at
uavcan.org.
UAVCAN is a standard open to everyone, and it will al-
ways remain this way. No licensing or approval of any
kind is necessary for its implementation, distribution, or
use.
This work is licensed under the Creative Commons At-
tribution 4.0 International License. To view a copy of
this license, visit http://creativecommons.org/licenses/
by/4.0/ or send a letter to Creative Commons, PO Box
1866, Mountain View, CA 94042, USA.
and triply modular
redundant
Features:
License
Specification v1.0
Revision 2019-01-28
Overview
UAVCAN is an open lightweight protocol designed for re-
liable communication in aerospace and robotic applica-
tions via robust vehicle bus networks.
D RAFT
• Democratic network – no bus master, no single point
of failure.
• Publish/subscribe
exchange semantics.
• Efficient exchange of large data structures with auto-
matic decomposition and reassembly.
• Lightweight, deterministic, easy to implement, and
easy to validate.
• Suitable for deeply embedded, resource constrained,
hard real-time systems.
• Supports dual
transports.
• Supports high-precision network-wide time synchro-
nization.
• The
reference
implementations in popular programming languages
are free, open source, and available for commercial use
(MIT license).
and request/response
(RPC1)
specification and high quality
1Remote procedure call.
© 2015–2019 UAVCAN Development Team
Support & feedback: uavcan.org
Disclaimer of warranty
Limitation of liability
NOTE WELL: This Specification is provided on an “AS
IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, express or implied, including, without
limitation, any warranties or conditions of TITLE,
NON-INFRINGEMENT,
or
FITNESS FOR A PARTICULAR PURPOSE.
MERCHANTABILITY,
indirect, special,
In no event and under no legal theory, whether in tort
(including negligence), contract, or otherwise, unless
required by applicable law (such as deliberate and
grossly negligent acts) or agreed to in writing, shall
any author of this Specification be liable for damages,
including any direct,
incidental, or
consequential damages of any character arising from,
out of, or in connection with the Specification or the
implementation, deployment, or other use of
the
Specification (including but not limited to damages for
loss of goodwill, work stoppage, equipment failure or
malfunction, injuries to persons, or any and all other
commercial damages or losses), even if such author has
been advised of the possibility of such damages.
D RAFT
© 2015–2019 UAVCAN Development Team
Support & feedback: uavcan.org
.
.
.
5.2
6.5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.1
6.2
6.3
6.4
.
.
.
2.3
3.1
.
.
3.2.1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2.1.1
2.1.2
2.1.3
Capabilities .
3.2 Grammar .
3.3.1
3.3.2
3.3.3
3.3.4
3.3.5
3.3.6
.
.
.
.
1
1
1
2
3.3 Data serialization .
2.2 Message publication .
2.2.1
Service invocation .
3.4 Data type compatibility and versioning
Architecture .
3.1.1
3.1.2
3.1.3
Table of contents
1 Introduction .
.
1.5
set .
.
Referenced sources
.
.
.
2.1 Main principles.
2 Basic concepts .
2
.
2
.
4
.
4
.
4
.
4
.
6
.
6
.
6
.
6
.
8
.
8
.
8
.
8
.
.
9
. 10
.
10
. 12
12
.
13
.
13
.
13
.
.
13
.
14
. 14
14
.
15
.
.
17
.
17
. 20
. 21
. 21
21
.
22
.
22
.
23
.
.
24
. 24
24
.
25
.
25
.
.
27
. 28
28
.
.
28
.
.
.
.
.
.
.
.
.
Communication .
Data types
.
.
High-level functions .
.
.
.
.
1.1 Document conventions .
.
.
1.2 Design principles .
1.3
.
.
.
1.4 Maintenance of the standard data type
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Anonymous message publication .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Data structure description language .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
General principles
.
Data types and namespaces .
.
File hierarchy .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Formal definition.
.
.
.
General principles
Scalar values .
.
.
Nested data structures
.
Fixed size arrays .
Dynamic arrays
.
.
.
.
.
Unions
Application-level functions.
.
5.2.1
5.2.2
.
5.2.3
5.2.4
5.2.5
5.2.6
5.2.7
5.2.8
5.2.9
5.2.10
5.2.11
5.2.12
5.2.13
D RAFT
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
HandleIncomingPacket .
.
.
OutgoingPacket
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
NodeIDAllocationData .
.
NodeIDAllocationDataMTU8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Node initialization .
.
.
.
Node heartbeat
.
.
.
.
Generic node information .
.
Bus data flow monitoring
.
.
Network-wide time synchronization
.
Primitive types and physical quantities .
.
.
Remote file system interface .
.
.
.
.
.
Generic node commands
.
.
.
.
.
Node software update
.
.
Register interface .
.
.
.
.
.
.
Diagnostics and event logging .
.
Plug-and-play nodes .
.
.
.
Internet/LAN forwarding interface .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
GetSynchronizationMasterInfo .
.
Synchronization .
.
.
.
SynchronizedAmbiguousTimestamp
SynchronizedTimestamp
.
.
.
.
.
TimeSystem .
.
.
.
6.10 uavcan.primitive .
.
.
.
.
Empty .
.
.
.
String .
.
Unstructured .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 List of standard data types .
.
uavcan.diagnostic .
.
.
6.1.1
Record
.
6.1.2
.
Severity
.
.
uavcan.file .
.
.
GetInfo
6.2.1
.
.
List
6.2.2
.
.
.
Modify
6.2.3
.
6.2.4
Read .
.
.
.
Write .
6.2.5
.
.
Error .
6.2.6
6.2.7
.
Path .
.
uavcan.internet.udp .
6.3.1
6.3.2
uavcan.node.
6.4.1
6.4.2
6.4.3
.
6.4.4
.
6.4.5
.
6.4.6
.
6.4.7
uavcan.node.port .
GetInfo
6.5.1
.
GetStatistics .
6.5.2
.
.
List
6.5.3
.
ID .
6.5.4
.
ServiceID .
6.5.5
.
.
SubjectID .
6.5.6
uavcan.pnp .
.
.
6.6.1
6.6.2
uavcan.pnp.cluster
AppendEntries
6.7.1
Discovery .
6.7.2
.
RequestVote .
6.7.3
.
6.7.4
Entry .
.
.
uavcan.register .
Access.
.
.
6.8.1
List
.
.
.
6.8.2
.
.
Name .
6.8.3
Value .
6.8.4
.
.
uavcan.time .
.
.
6.9.1
6.9.2
6.9.3
6.9.4
6.9.5
3.4.1
3.4.2
3.4.3
3.4.4
Conventions and recommendations
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Transfer ID comparison .
State variables
.
.
State update in a redundant interface
configuration .
.
State update in a non-redundant inter-
face configuration
.
CAN bus transport layer specification .
.
4.4.1
4.4.2
.
.
4.4.3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Transfer ID computation.
.
.
Single frame transfers
Multi-frame transfers
.
.
Redundant interface support
.
.
.
.
Core concepts .
4.1.1
.
4.1.2
4.1.3
4.1.4
4.1.5
Transfer emission .
4.2.1
4.2.2
4.2.3
4.2.4
Transfer reception .
4.3.1
4.3.2
4.3.3
.
.
.
.
.
ExecuteCommand
.
GetInfo
.
GetTransportStatistics
.
Heartbeat .
.
ID .
.
.
IOStatistics
Version
.
.
.
.
.
.
.
.
.
.
.
CAN ID structure .
.
CAN frame data .
Software design considerations .
.
.
.
Identifier distribution
.
.
Coordinate frames
.
.
.
Rotation representation .
Matrix representation
.
.
Physical quantity representation
.
Application-level conventions .
.
5.1.1
5.1.2
.
.
5.1.3
5.1.4
.
5.1.5
.
.
.
.
.
6.11 uavcan.primitive.array .
.
.
.
Bit .
.
Integer8 .
Integer16 .
.
.
Transfer
.
Message publication .
.
Service invocation
.
Transfer priority .
Transfer descriptor
.
.
.
.
Rationale .
.
Bit compatibility .
.
Semantic compatibility .
.
Data type versioning .
.
.
.
32
. 33
33
.
.
35
.
37
. 40
. 41
41
.
.
41
42
.
42
.
.
43
4.1
4.2
4.3
4.4
5 Application layer .
4 Transport layer .
6.10.1
6.10.2
6.10.3
6.11.1
6.11.2
6.11.3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
30
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.6
6.7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.8
6.9
4.3.4
.
.
.
.
.
.
3.5
.
5.1
2019-01-28 Specification v1.0
.
.
.
. 44
44
.
.
44
45
.
46
.
46
.
47
.
.
49
49
.
49
.
50
.
50
.
.
50
.
51
. 52
. 55
.
55
.
55
. 56
56
.
56
.
57
.
.
57
58
.
58
.
.
58
. 59
.
59
.
60
. 62
62
.
.
63
63
.
64
.
65
.
65
.
.
65
. 65
65
.
66
.
66
.
67
.
.
67
.
67
. 68
68
.
.
70
. 71
71
.
72
.
72
.
.
72
. 74
74
.
75
.
75
.
.
75
. 77
77
.
77
.
79
.
.
79
.
80
. 81
81
.
.
81
.
81
. 81
81
.
81
.
.
82
iii
© 2015–2019 UAVCAN Development Team
Support & feedback: uavcan.org
Specification v1.0 2019-01-28
.
7.2 Hardware design recommendations.
Non-uniform transport redundancy
Bus power supply.
.
7.2.1
7.2.2
.
.
.
.
.
.
.
. 100
. 100
. 100
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.15.1
6.15.2
6.14.1
6.14.2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Scalar .
Vector3
6.16 uavcan.si.duration
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.16.1
.
6.16.2 WideScalar
Scalar .
.
.
.
Quaternion .
Scalar .
.
.
6.13.1
6.13.2
.
.
6.14 uavcan.si.angle .
Scalar .
Vector3
Bit .
.
Integer8 .
Integer16 .
Integer32 .
Integer64 .
Natural8 .
Natural16 .
Natural32 .
Natural64 .
.
.
.
6.11.4
6.11.5
6.11.6
6.11.7
6.11.8
6.11.9
6.11.10 Real16.
6.11.11 Real32.
6.11.12 Real64.
Integer32 .
Integer64 .
Natural8 .
Natural16 .
Natural32 .
Natural64 .
.
.
.
6.12.1
6.12.2
6.12.3
6.12.4
6.12.5
6.12.6
6.12.7
6.12.8
6.12.9
6.12.10 Real16.
6.12.11 Real32.
6.12.12 Real64.
.
.
.
.
.
.
.
.
.
6.12 uavcan.primitive.scalar .
.
.
.
.
.
.
.
.
.
.
.
.
6.13 uavcan.si.acceleration .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.15 uavcan.si.angular_velocity .
.
.
.
.
.
6.17 uavcan.si.electric_charge .
.
6.18 uavcan.si.electric_current .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.21 uavcan.si.magnetic_field_strength .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
CAN bus physical layer specification .
.
7.1.1
7.1.2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.29 uavcan.si.volumetric_flow_rate .
.
.
.
6.19 uavcan.si.energy .
.
6.20 uavcan.si.length .
.
6.20.1
6.20.2
.
6.20.3 WideVector3 .
.
.
6.22 uavcan.si.mass .
.
6.23 uavcan.si.power
.
.
.
.
.
.
.
6.24 uavcan.si.pressure.
.
.
.
.
.
.
.
.
.
6.25 uavcan.si.temperature .
.
.
.
.
.
.
.
.
.
6.26 uavcan.si.velocity .
.
.
6.27 uavcan.si.voltage .
.
6.28 uavcan.si.volume .
.
D RAFT
82
.
82
.
82
.
82
.
82
.
83
.
83
.
83
.
.
83
. 83
83
.
83
.
.
84
84
.
84
.
84
.
84
.
.
84
84
.
85
.
85
.
.
85
. 85
85
.
.
85
. 85
85
.
.
86
. 86
86
.
.
86
. 86
86
.
.
86
. 86
.
86
. 87
.
87
. 87
.
87
. 87
87
.
87
.
.
87
. 88
.
88
.
88
. 88
.
88
. 88
.
88
. 88
.
88
. 89
.
89
. 89
89
.
.
89
. 89
.
89
. 89
.
89
. 90
.
90
. 91
. 92
92
.
.
99
Physical connector specification
.
CAN bus physical layer parameters .
Scalar .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Scalar .
Vector3
Scalar .
Vector3
Scalar .
Vector3
6.21.1
6.21.2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.26.1
6.26.2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6.24.1
Scalar .
6.25.1
Scalar .
6.27.1
Scalar .
6.28.1
Scalar .
6.17.1
Scalar .
6.18.1
Scalar .
6.19.1
Scalar .
6.22.1
Scalar .
6.23.1
Scalar .
.
.
.
.
.
.
.
.
.
.
.
.
6.29.1
.
.
.
.
.
.
7 Physical layer .
7.1
iv
Support & feedback: uavcan.org
© 2015–2019 UAVCAN Development Team
List of tables
2019-01-28 Specification v1.0
2.1 Data type taxonomy .
2.2
2.3
.
.
Published message properties .
.
Service request/response properties .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3.1 Notation used in the formal grammar definition.
.
3.2
.
3.3
3.4
.
Scalar value serialization.
.
Variable-size data type compatibility example
Complex bit compatibility examples.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
6.1
.
Common transfer properties
.
Service request transfer properties
.
Service response transfer properties .
Transfer CRC algorithm parameters .
Transfer reception state variables .
.
CAN ID fields for message transfers .
CAN ID fields for service transfers
.
CAN transfer priority level mapping .
.
Tail byte structure .
Port identifier distribution .
.
Index of the nested namespace “uavcan.node.port”
Index of the nested namespace “uavcan.time”
.
Index of the nested namespace “uavcan.si”
.
.
Index of the nested namespace “uavcan.primitive” .
.
Index of the nested namespace “uavcan.file” .
.
Index of the nested namespace “uavcan.register”
.
Index of the nested namespace “uavcan.pnp”
.
.
Index of the nested namespace “uavcan.internet” .
.
.
4.1
.
.
4.2
.
.
4.3
.
.
4.4
.
.
4.5
.
.
4.6
.
.
4.7
.
.
4.8
.
4.9
.
4.10 CAN frame data segments for single-frame transfers
.
4.11 CAN frame data segments for multi-frame transfers (except the last CAN frame of the transfer) .
4.12 CAN frame data segments for multi-frame transfers (the last CAN frame of the transfer)
.
D RAFT
Index of the root namespace “uavcan” .
Standard CAN connector types
7.1
.
7.2 UAVCAN D-Sub connector pinout
7.3 UAVCAN M8 connector pinout
.
7.4 UAVCAN Micro connector pinout.
7.5
Standard CAN 2.0 PHY parameters
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
6
7
. 10
. 13
. 16
. 17
. 22
. 23
. 23
. 26
. 29
. 33
. 33
. 34
. 35
. 36
. 36
. 36
. 41
. 46
. 47
. 48
. 49
. 49
. 50
. 51
. 51
. 53
. 92
. 93
. 95
. 97
. 99
© 2015–2019 UAVCAN Development Team
Support & feedback: uavcan.org
v
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
9
.
9
.
. 10
. 13
. 33
. 41
. 94
. 94
. 96
. 96
. 98
. 98
. 100
. 100
. 101
Specification v1.0 2019-01-28
List of figures
2.1 UAVCAN architectural diagram.
.
.
.
3.1 Data type name structure.
.
3.2 Data type definition file name structure.
.
3.3 DSDL directory structure example.
3.4 DSDL serialization example.
.
.
.
.
.
.
.
.
.
4.1
5.1
CAN ID structure .
.
.
.
.
.
.
.
Coordinate frame conventions.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7.1 UAVCAN D-Sub device connector example.
.
.
7.2 UAVCAN D-Sub cable connector example.
.
7.3 UAVCAN M8 connector pair example.
.
7.4 UAVCAN M8 assembled connector pair example.
.
7.5 UAVCAN Micro right-angle connectors with a twisted pair patch cable connected.
.
7.6 UAVCAN Micro CAN bus termination plug.
7.7 Non-uniform transport redundancy..
.
.
.
7.8
7.9
.
.
.
.
.
Simplified conceptual power sinking node design schematic.
.
Simplified conceptual power sourcing node design schematic. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
D RAFT
vi
Support & feedback: uavcan.org
© 2015–2019 UAVCAN Development Team
2019-01-28 Specification v1.0
1
Introduction
UAVCAN is a lightweight protocol designed to provide a highly reliable communication method for
aerospace and robotic applications via robust vehicle bus networks.
This is a non-normative chapter covering the basic concepts that govern development and maintenance
of the specification.
1.1
1
2
1.2
# This is a source code listing.
print(’Hello world!’)
It is assumed that a byte always contains eight bits.
Design principles
Democratic network — There will be no master node. All nodes in the network will have the same com-
munication rights; there must be no single point of failure.
Code listings are formatted as shown below. All such code is distributed under the same license as this
specification, unless specifically stated otherwise.
Document conventions
Non-normative text, examples, recommendations, and elaborations that do not directly participate in the
definition of the protocol are contained in footnotes2 or highlighted sections as shown below.
Non-normative sections such as examples are enclosed in shaded boxes like this.
D RAFT
Facilitation of functional safety — A system designer relying on UAVCAN will have the necessary guar-
antees and tools at their disposal to analyze the system and ensure its correct behavior.
High-level communication abstractions — The protocol will support publish/subscribe and remote
procedure call communication semantics with statically defined and statically verified data types
(schema). The data types used for communication will be defined in a clear, platform-agnostic way that
can be easily understood by machines, including humans.
Facilitation of cross-vendor interoperability — UAVCAN will be a common foundation that different
vendors can build upon to maximize interoperability of their equipment. UAVCAN will provide a generic
set of standard application-agnostic communication data types.
Well-defined generic high-level functions — UAVCAN will define standard services and messages for
common high-level functions, such as network discovery, node configuration, node software update,
node status monitoring3, network-wide time synchronization, plug-and-play node support, etc.
Atomic data abstractions — Nodes must be provided with a simple way of exchanging large data struc-
tures that exceed the capacity of a single transport frame4. UAVCAN should perform automatic data de-
composition and reassembly at the protocol level, hiding the related complexity from the application.
High throughput, low latency, determinism — UAVCAN will add a very low overhead to the underlying
transport protocol, which will ensure high throughput and low latency, rendering the protocol well-suited
for hard real-time applications.
Support for redundant interfaces and redundant nodes — UAVCAN must be suitable for use in applica-
tions that require modular redundancy.
Simple logic, low computational requirements — UAVCAN targets a wide variety of embedded systems,
from high-performance on-board computers to extremely resource-constrained microcontrollers. It will
be inexpensive to support in terms of computing power and engineering hours, and advanced features
can be implemented incrementally as needed.
2This is a footnote.
3Which naturally grows into a vehicle-wide health monitoring solution.
4A transport frame is an atomic transmission unit defined by the underlying transport protocol. For example, a CAN frame.
1. Introduction
1/101
Specification v1.0 2019-01-28
Support for various transport protocols — UAVCAN will be usable with different transports. The stan-
dard must be capable of accommodating other transport protocols in the future.
Open specification and reference implementations — The UAVCAN specification will always be open
and free to use for everyone; the reference implementations will be distributed under the terms of the
permissive MIT License or released into the public domain.
1.3
Capabilities
UAVCAN-based networks can accommodate up to 128 nodes on the same logical bus.
UAVCAN supports an unlimited number of data types, which can be defined by the specification (such
definitions are called “standard data types”) or by others for private use or for public release (in which
case they are said to be “application-specific” or “vendor-specific”). There can be up to 256 major versions
of a data type, and up to 256 minor versions per major version. More information is provided in chapter 3.
UAVCAN supports 65536 message subject identifiers for publish/subscribe exchanges, 512 service identi-
fiers for remote procedure call exchanges, and at least 8 anonymous message subject identifiers for certain
special features such as plug-and-play support. A small subset of these identifiers is reserved for the core
standard and for publicly released vendor-specific types. More information is provided in chapter 5.
UAVCAN supports at least5 eight distinct communication priority levels, defined in section 4.1.4. Within
each priority level different types of transfers, messages, and services are prioritized in a well-defined,
deterministic manner.
The list of transport protocols supported by UAVCAN is provided in chapter 4. Non-redundant, doubly-
redundant and triply-redundant transports are supported. More information on the physical layer and
standardized physical connectivity options is provided in chapter 7.
D RAFT
Maintenance of the standard data type set
The UAVCAN maintainers are charged with advancing the standard data type set based on input from
adopters. This feedback is gathered via the official discussion forum6 which is open to the general public.
The set of standard data type definitions7 is an integral part of the specification; however, there is only
a small set of required data types needed to implement the protocol. A larger set of optional data types
are defined to create a standardized data exchange environment supporting the interoperability of COTS8
equipment manufactured by different vendors. See chapter 5 for more information.
Within the same major version of the specification, the set of regulated data type definitions can be mod-
ified only in the following ways:
• A new data type can be added, as long as it doesn’t conflict with any of the existing data types.
• An existing data type can be modified, as long as its version number is updated accordingly and all
backward compatibility guarantees are respected.
• An existing data type or a particular major version of it can be declared deprecated.
• Once declared deprecated, the data type will be maintained for at least two more years. After this
period, its regulated port ID (if defined) may be reused for an incompatible data type definition. The
maintainers will be striving to postpone the reuse of regulated port identifiers as much as possible in
order to minimize the possibility of unintended conflicts.
• Deprecation will be indicated in the DSDL definition and announced via the discussion forum.
A link to the repository containing the set of default DSDL definitions can be found on the official website9.
Referenced sources
The UAVCAN specification contains references to the following sources:
1.4
1.5
• CiA 801 — Application note — Automatic bit rate detection.
• CiA 103 — Intrinsically safe capable physical layer.
• CiA 303 — Recommendation — Part 1: Cabling and connector pin assignment.
• IEEE 754 — Standard for binary floating-point arithmetic.
5Depending on the transport protocol.
6Please refer to uavcan.org.
7The data structure description language (DSDL) and related concepts are described in section 3.
8Commercial off-the-shelf equipment.
9uavcan.org
2/101
1. Introduction