故障排除

本节列出了使用 FCI 时可能发生的一系列可能发生的错误的解决方案

提示

机器人随附手册的故障排除页面中提供了更多帮助。

运行 libfranka 可执行文件失败并显示连接超时 “Connection timeout”

如果 libfranka 根本无法连接到机器人,则会出现此错误。请检查:

  • 使用系统版本为 4.2.0 或更高版本的机器人需要启用 FCI 模式。为此,请打开 Desk -> 展开侧栏中的菜单 -> 按 ‘Activate FCI’。有关单点控制 (SPoC) 的更多信息,请参见机器人随附的手册。
  • 您的工作站直接连接到 Control,而不是 Arm 的 LAN 端口(请参阅 网络)。
  • 可以从您的工作站访问机器人(请参阅 机器人无法访问)。
  • FCI 特性功能文件安装在机器人上(参见”Settings -> System> Installed Features”)。

由于不连续或 communication_constraints_violation 导致运动停止

如果后续时间步中的命令值之间的差异太大,则运动会因不连续性错误而停止,例如 joint_motion_generator_velocity_discontinuity。查看命令值是否不超过 限制

如果您发送给机器人的代码命令实际上发生跳变,或者也可能因为网络数据包丢失而导致出现不连续性。这也是 communication_constraints_violation 错误的原因。如果在使用提供的示例时仍然出现问题,则问题很可能与整体通信质量有关。为确保最佳性能,请检查以下内容:

  • 所有源代码都经过优化 (-DCMAKE_BUILD_TYPE=Release)编译。如果您从 ROS 存储库安装 libfranka 并安装 franka_ros 这些项目,则情况已经如此(即已优化)。但是,您自己编写的源代码也需要进行优化编译
  • 将您的 PC 直接连接到 Control,无需使用任何中间开关。 网络设置说明 描述了如何做到这一点。
  • 通过执行 网络带宽、延迟和抖动测试 来验证您的网络连接。
  • franka::RobotRealtimeConfig::kEnforce 实例化。如果没有 RealtimeConfig 在构造函数中被明确指定,则这是默认值 。
  • 省电功能被禁用(CPU 频率缩放、省电模式、笔记本电脑使用电池供电、BIOS 省电功能等)。请参阅 禁用 CPU 频率缩放

禁用 CPU 频率缩放

CPU 通常配置为在轻负载下使用较低的工作频率,以节省电力。我们建议禁用此功能,因为它会在使用 libfranka 时导致高延迟. 要检查和修改省电模式,请安装 cpufrequtils 软件包:

sudo apt install cpufrequtils

运行 cpufreq-info 来查看可用的调控器 “governors” 和当前的CPU频率。下面是一个示例输出:

$ cpufreq-info
...
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 0.97 ms.
  hardware limits: 400 MHz - 3.00 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 400 MHz and 3.00 GHz.
                  The governor "powersave" may decide which speed to use
                  within this range.
  current CPU frequency is 500 MHz.
...

在此示例中,最大频率为 3 GHz,但由于节电策略,当前频率为 500 Mhz。在这种情况下,我们可以通过将调控器设置为性能模式来受益。

要使用 Ubuntu GUI 更改此设置,请安装该 indicator-cpufreq 软件包。Unity 用户界面顶部栏中(即屏幕顶部)的小部件应允许您设置当前策略。

要使用终端更改此设置,请执行以下命令:

sudo systemctl disable ondemand
sudo systemctl enable cpufrequtils
sudo sh -c 'echo "GOVERNOR=performance" > /etc/default/cpufrequtils'
sudo systemctl daemon-reload && sudo systemctl restart cpufrequtils

他们将禁用 ondemand CPU 缩放守护进程,创建一个 /etc/default/cpufrequtils 配置文件,然后重新启动 cpufrequtils 服务。

启用 performance 调控器后,cpufreq-info 结果为:

$ cpufreq-info
...
analyzing CPU 0:
  driver: intel_pstate
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 0.97 ms.
  hardware limits: 400 MHz - 3.00 GHz
  available cpufreq governors: performance, powersave
  current policy: frequency should be within 400 MHz and 3.00 GHz.
                  The governor "performance" may decide which speed to use
                  within this range.
  current CPU frequency is 2.83 GHz.
...

现在示例输出显示 CPU 频率接近最大频率。您也可以使用 cpufreq-info -p 命令直接验证当前的调控器。

机器人无法访问

尝试使用以下命令 ping 机器人:

ping <fci-ip>

如果此命令失败,则机器人未正确连接到网络,或者在设置阶段未正确分配 IP 地址。请根据您的机器人随附文件设置网络。

运行 libfranka 可执行文件失败并显示 “UDP receive: Timeout”

如果无法通过 libfranka 接收机器人状态,则会发生此错误。请检查您工作站的防火墙是否阻止传入的 UDP 数据包(请看 sudo iptables -L)。

网络带宽、延迟和抖动测试

为了评估您(可能的)控制 PC 的网络性能,我们开发了两个测试。第一个是 ping 测试,无需在系统上安装 libfranka 或 franka_ros 即可执行。如果您的系统通过了第一次 ping 测试,您可以运行高级 UDP 网络性能分析。

简单的 ping 测试

以下命令将模拟网络负载,相当于机器人由 FCI 控制的场景:

sudo ping <fci-ip> -i 0.001 -D -c 10000 -s 1200

示例输出:

PING <fci-ip> 1200(1228) bytes of data.
[1500982522.977579] 1208 bytes from <fci-ip>: icmp_seq=1 ttl=64 time=0.279 ms
[1500982522.978423] 1208 bytes from <fci-ip>: icmp_seq=2 ttl=64 time=0.224 ms
[1500982522.979434] 1208 bytes from <fci-ip>: icmp_seq=3 ttl=64 time=0.196 ms
[1500982522.980482] 1208 bytes from <fci-ip>: icmp_seq=4 ttl=64 time=0.243 ms
....
[1500982533.034267] 1208 bytes from <fci-ip>: icmp_seq=9999 ttl=64 time=0.236 ms
[1500982533.035211] 1208 bytes from <fci-ip>: icmp_seq=10000 ttl=64 time=0.203 ms

--- <fci-ip> ping statistics ---
10000 packets transmitted, 10000 received, 0% packet loss, time 10057ms
rtt min/avg/max/mdev = 0.147/0.240/0.502/0.038 ms

示例结果显示平均往返时间为 0.24 毫秒,最大往返时间为 0.5 毫秒。标准偏差 mdev 约为 0.04 毫秒。如 网络要求部分 所述,必须保证往返时间和运动生成器或控制回路的执行时间之和 小于 1 ms。如果在一个周期内违反此约束,则 FCI 会丢弃接收到的数据包。

如果即使使用直接连接,往返时间也很长,请考虑为您的工作站 PC 购买单独的高性能 PCI-Express 网卡。查看您的网卡是否有专用驱动程序,这些驱动程序通常会提供更好的性能。最后,CPU 也可能是网络性能的限制因素。

高级网络性能分析

communication_test 可执行文件,它是部分 libfranka 自0.5版本之后自带的例子,其执行的控制回路,提供关于丢失机器人状态反馈以及控制命令的成功率的最大值,最小值和平均值

如果您安装了该 ros-kinetic-libfranka 软件包,则可以使用以下命令执行测试:

rosrun libfranka communication_test <fci-ip>

要在 libfranka 从源代码编译后运行测试,请执行:

./examples/communication_test <fci-ip>

运行 libfranka 可执行文件失败并显示 “Incompatible Library Version”

当你的 libfranka 版本与机器人的系统版本不兼容时,就会发生这种情况。该错误包含机器人的服务器版本。你可以使用该编号 为您的机器人选择正确的 libfranka 版本