故障排除

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

提示

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

由于 “Invalid Signature(无效签名)” 无法引导实时内核

当成功安装实时内核并尝试启动它时,可能会遇到 Linux 根本无法启动的情况。当将 Ubuntu 与 Windows 一起安装(例如双启动项)时,可能会发生这种情况。通常,UEFI 引导加载程序将激活 Secure Boot(安全启动),这将不允许加载未签名的实时内核。

最简单的解决方案是在引导加载程序中 禁用 “Secure Boot(安全引导)”。这在很大程度上取决于系统,但通常可以在引导过程中按 F2、F3、F12 或 DEL 键进入引导加载程序。

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

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

  • 使用系统版本为 4.2.0 或更高版本的机器人需要启用 FCI 模式。为此,请打开 Desk -> 展开侧栏中的菜单 -> 按下 ‘Activate FCI’。有关单点控制 (SPoC) 的更多信息,请参见机器人随附的手册。

  • 工作站直接连接到 Control,而不是 Arm 的 LAN 端口(请参阅 网络)。

  • 可以从工作站访问机器人(请参阅 机器人无法访问)。

  • FCI 特性文件已安装在机器人上(请参阅 “Settings -> System -> Installed Features”)。如果没有此特性,请安装它。如果需要获取该特性,请联系 support@franka.de 并提供控制器的序列号。

由于 discontinuities(不连续)或 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-noetic-libfranka 软件包或从源码安装了 libfranka,则可以使用以下命令执行测试:

source /opt/ros/noetic/setup.sh # only needed when installed with ROS
communication_test <fci-ip>

如果不想在系统范围内安装 libfranka,可以从源代码编译 libfrka 之后,在 build 文件夹中执行以下命令

./examples/communication_test <fci-ip>

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

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

运行 libfranka 可执行文件失败,并提示 “command rejected due to activated safety function!(由于激活了安全功能,命令被拒绝!)”或 “command preempted due to activated safety function!(由于激活了安全功能,命令被抢占!)”。

当 Watchman(Desk 网页的安全配置器区域)中定义的安全功能处于活动状态时,会发生此错误。例如,可能有一个主动安全功能将机器人的速度限制为 0.2m/s。由于使用 FCI 时无法保证这一点,因此机器人不会移动。但是,仍然可以读取机器人状态。要再次对机器人下达动作指令,需要禁用安全功能或删除 Watchman 中相应的安全规则。