故障排除¶
本节列出了使用 FCI 时可能发生的一系列可能发生的错误的解决方案
提示
机器人随附手册的故障排除页面中提供了更多帮助。
由于不连续或 communication_constraints_violation
导致运动停止¶
如果后续时间步中的命令值之间的差异太大,则运动会因不连续性错误而停止,例如 joint_motion_generator_velocity_discontinuity
。查看命令值是否不超过 限制。
如果您发送给机器人的代码命令实际上发生跳变,或者也可能因为网络数据包丢失而导致出现不连续性。这也是 communication_constraints_violation
错误的原因。如果在使用提供的示例时仍然出现问题,则问题很可能与整体通信质量有关。为确保最佳性能,请检查以下内容:
- 所有源代码都经过优化 (
-DCMAKE_BUILD_TYPE=Release
)编译。如果您从 ROS 存储库安装libfranka
并安装franka_ros
这些项目,则情况已经如此(即已优化)。但是,您自己编写的源代码也需要进行优化编译- 将您的 PC 直接连接到 Control,无需使用任何中间开关。 网络设置说明 描述了如何做到这一点。
- 通过执行 网络带宽、延迟和抖动测试 来验证您的网络连接。
franka::Robot
用RealtimeConfig::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
命令直接验证当前的调控器。
运行 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 版本。