Skip to content

踩坑github.com7 天前

Franka Research 3 运行 1kHz 力控环报 communication_constraints_violation 的实时内核与网卡调优 ​

硬件与软件环境 ​

  • 机型:Franka Research 3 (FR3) / FR3 Duo
  • 软件栈:Ubuntu 22.04 + libfranka + franka_ros2

故障现象与报错 ​

在运行阻抗控制、力矩控制或 VLA 高频动作块插值节点时,机械臂运行数秒至数分钟后突然急停抱闸,终端报错: libfranka: Move command aborted: motion aborted by reflex! ["communication_constraints_violation"]

根因分析 ​

Franka Control Interface (FCI) 要求上位机以严格的 1000 Hz(周期 1ms) 发送 UDP 控制包。只要在滑动窗口(20 个周期)内累计丢包或延迟超标超过阈值,控制柜安全反射机制就会立即触发 communication_constraints_violation 并抱闸锁臂。常见诱因包括:

  1. 未运行 PREEMPT_RT 实时内核,或用户未加入 realtime 权限组;
  2. 主板 BIOS 开启了 CPU 深度睡眠(C-States)或 Ubuntu power-profiles-daemon 处于节能降频模式;
  3. 连接控制柜的网口经过了 USB 转千兆网卡或与外网/相机共用同一张网卡。

解决步骤 ​

  1. 验证实时内核与 realtime 权限组: 确认 uname -a 包含 PREEMPT_RT,并在 /etc/security/limits.conf 中配置:
    text
    @realtime soft rtprio 99
    @realtime hard rtprio 99
    @realtime soft memlock unlimited
    @realtime hard memlock unlimited
  2. 锁定 CPU 性能模式并关闭深度 C-State: 安装 cpufrequtils 将所有核心锁定为 performance:
    bash
    sudo cpupower frequency-set -g performance
    并在 /etc/default/grub 的 GRUB_CMDLINE_LINUX_DEFAULT 中加入 intel_idle.max_cstate=1 processor.max_cstate=1 idle=poll,执行 sudo update-grub 重启。
  3. 使用主板原生 PCIe 网卡直连并关闭网卡中断合并: 严禁使用 USB 网卡连接 FCI,执行 sudo ethtool -C <fci_eth_name> rx-usecs 0 tx-usecs 0 关闭网卡中断延迟合并,随后运行 ping -i 0.001 -c 10000 <robot_fci_host> 确认最大往返延迟 < 0.35 ms。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub frankaemika/libfranka访问 2026-10-21
  2. GitHub frankaemika/franka_ros2访问 2026-10-21