# 5. Cyphal interface

This page is about Cyphal related details such as interface, supported features, registers, configuration and usage examples and software versions. For general information please refer 1. General, for hardware-related details, including the connection example scheme, please refer to the Hardware page: L1 GPS NEO-M8, L1/L2 RTK GPS ZED-F9P or Magnetometer RM3100.

# 5.1. Cyphal interface

This node interacts with the following data types:

Common for any node

Type Message
1 pub uavcan.node.Heartbeat (opens new window)
2 RPC-service uavcan.node.GetInfo (opens new window)
3 RPC-service uavcan.node.ExecuteCommand (opens new window)
4 RPC-service uavcan.register.List (opens new window)
5 RPC-service uavcan.register.Access (opens new window)
6 pub (since hardware v3) uavcan.node.port.List (opens new window)

Here ExecuteCommand supports COMMAND_RESTART, COMMAND_FACTORY_RESET and COMMAND_STORE_PERSISTENT_STATES.

Circuit status service

Like any other RaccoonLab node, this node also supports the Circuit status service. It uses the following subjects:

Type Message Topic name
1 pub uavcan.si.sample.voltage.Scalar.1.0 5v
2 pub uavcan.si.sample.voltage.Scalar.1.0 vin
3 pub uavcan.si.sample.temperature.Scalar.1.0 dev_temp

GNSS service

Type Message Topic name
1 publisher reg.udral.physics.kinematics.geodetic.PointStateVarTs.0.1 (opens new window) point (geodetic position and velocity)
2 publisher uavcan.si.sample.angle.Scalar (opens new window) yaw (not supported yet)
3 publisher uavcan.primitive.scalar.Integer16 sats
4 publisher uavcan.primitive.scalar.Integer16 status
5 publisher uavcan.primitive.scalar.Integer16 pdop

Barometer service

Type Message Topic name
1 publisher uavcan.si.sample.pressure.Scalar.1.0 press
2 publisher uavcan.si.sample.temperature.Scalar.1.0 temp

Magnetometer service

Type Message Topic name
1 publisher uavcan.si.sample.magnetic_field_strength.Vector3.1.0 mag

# 5.2. Cyphal Registers

Parameter name Note Description
0 id reboot required Node ID
1 uavcan.pub.baro.press.id Port identifier
2 uavcan.pub.baro.press.type persistent uavcan.si.sample.pressure.Scalar.1.0
3 uavcan.pub.baro.temp.id Port identifier
4 uavcan.pub.baro.temp.type persistent uavcan.si.sample.temperature.Scalar.1.0
5 uavcan.pub.gps.point.id Port identifier
6 uavcan.pub.gps.point.type persistent reg.udral.physics.kinematics.geodetic.PointStateVarTs.0.1
7 uavcan.pub.gps.yaw.id Port identifier
8 uavcan.pub.gps.yaw.type persistent uavcan.si.sample.angle.Scalar.1.0
9 uavcan.pub.gps.sats.id Port identifier
10 uavcan.pub.gps.sats.type persistent uavcan.primitive.scalar.Integer16.1.0
11 uavcan.pub.gps.status.id Port identifier
12 uavcan.pub.gps.status.type persistent uavcan.primitive.scalar.Integer16.1.0
13 uavcan.pub.gps.pdop.id Port identifier
14 uavcan.pub.gps.pdop.type persistent uavcan.primitive.scalar.Integer16.1.0
15 uavcan.pub.mag.id Port identifier
16 uavcan.pub.mag.type persistent uavcan.si.sample.magnetic_field_strength.Vector3.1.0
17 uavcan.pub.crct.5v.id Port identifier
18 uavcan.pub.crct.5v.type persistent uavcan.si.sample.voltage.Scalar.1.0
19 uavcan.pub.crct.vin.id Port identifier
20 uavcan.pub.crct.vin.type persistent uavcan.si.sample.voltage.Scalar.1.0
21 uavcan.pub.crct.temp.id Port identifier
22 uavcan.pub.crct.temp.type persistent uavcan.si.sample.temperature.Scalar.1.0
23 gps_self_test bool Enable or disable self test (in this mode the device sends fake referenced coordinates)
24 name reboot required Node custom name

You can get the list of registers, read and write them using Yakut (opens new window) cli or Yukon (opens new window) gui.

# 5.3. Getting started (bench test)

Before mounting on a real vehicle, especially when using the node for the first time, it is recommended to test the node and perform configuration on a bench using Yakut (opens new window) cli or Yukon (opens new window) gui.

The following checklist allows you to test most of the features and configure the most important parameters.

Step 1. Connect the device. The node should blink with blue color

The simplest connection scheme just for bench testing and configuration is shown below.

bench_test

Here, the gnss_mag_baro node is connected with a CAN sniffer via JST-GH 4 connector. The sniffer is connected to PC via USB and power the node.

Alternatively, in a vehicle you may want to connect the node via Molex CAN connector.

Step 2. Configure the environment

Typically you need to:

  1. Configure all required environment variables
  2. Compile DSDL based on public regulated data types
  3. Create SLCAN based on CAN sniffer

Please refer to the Yakut and Yukon documentations to understand how to do it.

Step 3. Monitor the node

Let's say, you have a correctly connected Cyphal node to a CAN sniffer.

The node state might be visualized using Yakut. Run y mon to see the node. The possible command output is:

y_mon

Alternatively, you can use Yukon. An example of the Monitor window is shown below:

yukon_monitor

Step 4. Configure GNSS

For gnss you need to configure the following ports: gps.point, gps.sats, gps.status and gps.pdop.

You can subscribe to the sensor:

yukon_subscription

Step 5. Configure Magnetometer

For magnetometer you need to configure the following ports: mag.

You can subscribe to the sensor:

yukon_subscription

Step 6. Configure Barometer

For magnetometer you need to configure the following ports: baro.press, baro.temp.

You can subscribe to the sensor:

yukon_subscription

(optional) Step 7. Configure Circuit Status

For Circuit Status you need to configure the following ports: crct.5v, crct.temp and crct.vin.

You can subscribe to the sensor:

yukon_circuit_status_sub

# 5.4. Ardupilot integration

Ardupilot doesn't officially support Cyphal. It is expected to use the custom cyphal branch of ardupilot (opens new window).

1. GPS configuration

At least the following Ardupilot parameters should be configured:

Parameter Value Description
GPS_TYPE 26 means Cyphal

The following Ardupilot Cyphal registers should have the same port identifiers as GPS:

Register Type
uavcan.sub.gps.point.id reg.udral.physics.kinematics.geodetic.PointStateVarTs.0.1
uavcan.sub.gps.sats.id uavcan.primitive.scalar.Integer16.1.0
uavcan.sub.gps.status.id uavcan.primitive.scalar.Integer16.1.0
uavcan.sub.gps.pdop.id uavcan.primitive.scalar.Integer16.1.0

It is recommended to verify the correctness of the configuration with Yukon as shown below:

2. Magnetometer configuration

The following Ardupilot Cyphal registers should have the same port identifiers as Magnetometer:

Register Type
uavcan.sub.mag.id uavcan.si.sample.magnetic_field_strength.Vector3.1.0

3. Barometer configuration

The following Ardupilot Cyphal registers should have the same port identifiers as Barometer:

Register Type
uavcan.sub.baro.pres.id uavcan.si.sample.pressure.Scalar.1.0
uavcan.sub.baro.temp.id uavcan.si.sample.temperature.Scalar.1.0

4. Verification

ardupilot

# 5.5. PX4 integration

PX4 support is a "work in progress". It doesn't officilly support GNSS, magnetomer or barometer. It is expected to use the branch with few additional features (opens new window).

1. GNSS configuration

To enable GNSS you should configure the following PX4 Cyphal ports: udral.gps.0, udral.gps.pdop.0, udral.gps.sats.0 and udral.gps.status.0.

2. Magnetometer

To enable magnetometer, you should configure the following PX4 Cyphal ports: udral.mag.0.

On the picture below the first instance is related to Cyphal magnetometer.

px_listener_mag

3. Barometer

To enable magnetometer and barometer, you should configure the following PX4 Cyphal registers: udral.baro.0.

# 5.6. Software versions

GNSS L1/L2 ZED-F9P:

Version Date Description
v1.3 coming soon (opens new window) Apr, 2023 First release for ZED-F9P. Fix port.List issue, add diagnostic.Record.

GNSS L1 NEO-M8:

Version Date Description
v1.2.14_b4e042b (opens new window) Feb 23, 2023 Add Barometer and external RGB LED, add port.List, add hardware version, extend git hash length to 64 bit, few fixes. Knows issues: port.List sometimes is not correct.
v1.1.3_5fe78e3 (opens new window) Dec 01, 2022 Fix mag scaling (use teslas instead of gausses)
v1.0.5_1d52004 (opens new window) Oct 31, 2022 Improve gps accuracy
v1.0.1_47a71fd (opens new window) Oct 23, 2022 Initial version