Skip to content

[Issue] Intermittent LowState Missing Causing Damping Mode During Workstation Deployment #226

Description

@Ticotico410

Hi,

I am encountering an intermittent LowState message loss issue when running SONIC's workstation-side C++ deployment (g1_deploy_onnx_ref). When the issue occurs, the safety logic is triggered and the robot switches to damping mode.

Setup

The deployment runs on an external workstation connected to the robot LAN. The DDS communication uses the robot network interface (e.g., enp4s0).
The tested input modes include:

  • ZMQ manager input (planner mode)
  • PICO-based whole-body teleoperation
    The image and hand services are running on the robot PC2 side. The overall system layout is similar to our previous teleoperation stack.

Observed Behavior
The issue happens intermittently and is not tied to a specific input mode. I have observed the same behavior in both planner mode (through ZMQ manager) and PICO whole-body teleoperation. This issue appears as long as the workstation-side C++ deployment process (g1_deploy_onnx_ref) is running. When the issue occurs, the deployment reports that LowState is missing or stale. The LowState age exceeds the configured timeout threshold, which triggers the safety handling path in g1_deploy_onnx_ref.cpp, causing the robot to switch into damping mode.

Additional Observations
The issue does not appear to be directly correlated with a specific teleoperation mode switch. A separate onboard FSM-based teleoperation and recording pipeline, using the same robot LAN and similar image/hand services, does not reproduce this LowState-loss and damping behavior. The main difference is that the workstation-side deployment runs an external high-frequency (~500 Hz) LowCmd publishing loop.

Questions
Has anyone encountered intermittent LowState dropout when running an offboard deployment setup (workstation to robot PC1 communication with rt/lowstate and rt/lowcmd at around 500 Hz)?

Are there any recommended checks or configurations for this issue, such as DDS NIC/IRQ affinity, CycloneDDS configuration, subscriber queue depth, CPU isolation or priority settings for the command writer thread, or possible interference from other DDS clients (e.g., audio/hand services) sharing the same network interface?

Are there any recommended timeout adjustments or mitigation strategies before moving the control loop fully onboard?

I can provide additional logs if needed, including LowState dropout timestamps, NIC statistics (ifconfig output), DDS configuration, and CPU/thread scheduling information.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions