Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]
Messages
Services
Plugins
Recent questions tagged autoware_redundancy_adapi_switcher at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]
Messages
Services
Plugins
Recent questions tagged autoware_redundancy_adapi_switcher at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]
Messages
Services
Plugins
Recent questions tagged autoware_redundancy_adapi_switcher at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]
Messages
Services
Plugins
Recent questions tagged autoware_redundancy_adapi_switcher at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]
Messages
Services
Plugins
Recent questions tagged autoware_redundancy_adapi_switcher at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]
Messages
Services
Plugins
Recent questions tagged autoware_redundancy_adapi_switcher at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]
Messages
Services
Plugins
Recent questions tagged autoware_redundancy_adapi_switcher at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]
Messages
Services
Plugins
Recent questions tagged autoware_redundancy_adapi_switcher at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]
Messages
Services
Plugins
Recent questions tagged autoware_redundancy_adapi_switcher at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-08 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Tetsuhiro Kawaguchi
- Makoto Kurihara
Authors
autoware_redundancy_adapi_switcher
Overview
This package gates adapi messages (MrmState, DiagGraphStatus, DiagGraphStruct) output by each ECU in a Main ECU / Sub ECU redundant configuration, based on the content of active_control_unit.
Rather than “switching” outputs, the node passes through messages from the currently active ECU and discards messages from the inactive ECU. One instance runs on each ECU, and each instance independently determines whether it is the active output master.
This package also manages the launch file for the Sub ECU adapi container (HeartbeatNode, DiagnosticsNode, FailSafeNode).
Architecture
active_control_unit
│
┌─────────────┴─────────────┐
▼ ▼
[Main ECU] [Sub ECU]
RedundancyAdapiSwitcher RedundancyAdapiSwitcher
(is_main_ecu=true) (is_main_ecu=false)
│ │
is_active? ──Yes──▶ publish is_active? ──Yes──▶ publish
──No──▶ discard ──No──▶ discard
│ │
▼ ▼
MrmState MrmState
DiagStatus →→→ DiagStatus (downstream)
DiagStruct DiagStruct
An instance becomes the output master when its own ECU ID is present in active_control_unit.ids.
Gating Logic
active_control_unit.ids content |
Behavior |
|---|---|
| Main ECU ID only | Main ECU instance publishes. Sub is silenced. |
| Sub ECU ID only | Sub ECU instance publishes. Main is silenced. |
| Both ECU IDs | Current master is kept (treated as a transitional state). |
| Empty list | All instances block their output (output_blocked). |
| Neither ECU ID | This ECU is assumed faulty and blocks its own output. Whether the other ECU becomes the output master is not guaranteed by this node. |
DiagGraphStruct handling
DiagGraphStruct uses a transient_local QoS. To ensure late-joining subscribers receive the latest structure after a master switch, the most recently received struct is buffered internally and re-published together with the next DiagGraphStatus.
Node: redundancy_adapi_switcher
Parameters
| Parameter | Type | Description |
|---|---|---|
is_main_ecu |
bool |
Whether this instance runs on the Main ECU |
main_ecu_id |
uint8 |
Main ECU ID (matched against active_control_unit.ids) |
sub_ecu_id |
uint8 |
Sub ECU ID (matched against active_control_unit.ids) |
Subscriptions
| Topic | Type | QoS | Description |
|---|---|---|---|
~/input/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | MRM state from this ECU |
~/input/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Diagnostic status from this ECU |
~/input/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Diagnostic graph structure from this ECU |
~/input/active_control_unit |
tier4_system_msgs/ActiveControlUnit |
Reliable, depth 1, transient_local | Active ECU information |
Publications
| Topic | Type | QoS | Description |
|---|---|---|---|
~/output/mrm_state |
autoware_adapi_v1_msgs/MrmState |
Reliable, depth 5 | Gated MRM state |
~/output/diag/status |
tier4_system_msgs/DiagGraphStatus |
Reliable, depth 5 | Gated diagnostic status |
~/output/diag/struct |
tier4_system_msgs/DiagGraphStruct |
Reliable, depth 1, transient_local | Gated diagnostic graph structure |
Launch Files
redundancy_adapi_switcher.launch.xml
Launches the RedundancyAdapiSwitcher node.
| Argument | Default | Description |
|---|---|---|
is_main_ecu |
true |
Identifies this instance as Main or Sub ECU |
input_mrm_state |
/ecu/system/fail_safe/mrm_state |
Input MRM state topic |
input_diag_status |
/diagnostics_graph/status/merge |
Input diagnostic status topic |
input_diag_struct |
/diagnostics_graph/struct/merge |
Input diagnostic graph structure topic |
input_active_control_unit |
/system/redundancy/active_control_unit |
Active control unit topic |
output_mrm_state |
/system/fail_safe/mrm_state |
Output MRM state topic |
output_diag_status |
/diagnostics_graph/status |
Output diagnostic status topic |
output_diag_struct |
/diagnostics_graph/struct |
Output diagnostic graph structure topic |
sub_default_adapi.launch.xml
File truncated at 100 lines see the full file
Changelog for package autoware_redundancy_adapi_switcher
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_redundancy_adapi_switcher): apply agnocast redundancy adapi switcher (#13415)
- refactor(autoware_redundancy_adapi_switcher): migrate to agnocast_wrapper::Node
* refactor(autoware_redundancy_adapi_switcher): preload the Agnocast heaphook in the launch file Include agnocast_env.launch.xml and set LD_PRELOAD on the node so that launching this file with ENABLE_AGNOCAST=1 runs the node with the heaphook. ---------
-
feat(autoware_redundancy_adapi_switcher): add redundancy adapi switcher node (#12700)
- feat: add node
- fix: node exec
- style(pre-commit): autofix
- fix: refactor
* docs(autoware_redundancy_adapi_switcher): clarify Neither ECU ID behavior in README The README claimed the other ECU becomes the output master when neither ECU ID is active, but this node cannot guarantee that. Its own behavior is to block its own output in this case. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Ryohsuke Mitsudome, Tetsuhiro Kawaguchi
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/redundancy_adapi_switcher.launch.xml
-
- is_main_ecu [default: true]
- input_diag_status [default: /diagnostics_graph/status/merge]
- input_diag_struct [default: /diagnostics_graph/struct/merge]
- input_mrm_state [default: /ecu/system/fail_safe/mrm_state]
- input_active_control_unit [default: /system/redundancy/active_control_unit]
- output_mrm_state [default: /system/fail_safe/mrm_state]
- output_diag_status [default: /diagnostics_graph/status]
- output_diag_struct [default: /diagnostics_graph/struct]
- launch/sub_default_adapi.launch.xml
-
- config [default: $(find-pkg-share autoware_default_adapi_universe)/config/default_adapi.param.yaml]
- use_agnocast [default: $(env ENABLE_AGNOCAST 0)]