Ubuntu 20.04 连接真实 Franka Emika Panda:配置网口、使用 Desk、解锁机械臂并测试 libfranka 与 franka_ros

前言

本文记录如何在已经配置完成的 Ubuntu 20.04 + ROS Noetic + PREEMPT_RT + libfranka 0.8.0 + franka_ros 0.8.0 环境中,连接真实的 Franka Emika Panda 机械臂,并完成以下工作:

1. 正确连接电脑、Franka Control 和机械臂
2. 为电脑有线网卡配置静态 IP
3. 检查电脑与 Franka 的网络连通性
4. 打开 Franka Desk 管理页面
5. 了解机械臂锁定、解锁、FCI 和常见状态颜色
6. 检查 FCI 功能是否安装并激活
7. 运行 libfranka 的只读状态程序
8. 运行 communication_test 测试实时通信质量
9. 按安全顺序测试 libfranka 官方示例
10. 启动 franka_ros 并读取真机状态
11. 测试 franka_ros 官方示例控制器
12. 处理常见网络、Desk、版本和控制错误

本文是整个 Franka 真机环境搭建系列的第四篇。

推荐阅读顺序:

第一篇:
Ubuntu 20.04 安装 5.15.209-rt96 PREEMPT_RT 实时内核

第二篇:
Ubuntu 20.04 安装 ROS Noetic

第三篇:
Ubuntu 20.04 + ROS Noetic 源码安装
libfranka 0.8.0 和 franka_ros 0.8.0

第四篇:
连接真实 Franka、配置 Desk、测试 libfranka 和 franka_ros

本文以 Franka Emika Panda 为例,使用的网络配置为:

电脑有线网卡:192.168.1.102/24
Franka Control:192.168.1.110
电脑有线接口:enp4s0
libfranka:0.8.0
franka_ros:0.8.0
ROS:Noetic
工作空间:~/catkin_franka

不同实验室的 Franka IP 和电脑网卡名称可能不同,使用时必须替换成自己的实际配置。

Franka 官方文档建议控制电脑与 Franka Control 直接连接,并明确要求将控制电脑连接到 Control 控制柜的 LAN 口,而不是机械臂底座上的网络口。电脑和 Control 必须位于同一网段,并使用不同的 IP 地址。


一、开始前的安全提醒

真实机械臂不同于仿真。

任何控制程序都可能造成机械臂快速运动、碰撞、夹伤人员或损坏末端工具。

在运行任何会运动的示例之前,必须确认:

1. 机械臂牢固安装在稳定底座上
2. Franka Control 与机械臂之间的专用线缆连接牢固
3. 末端夹爪、工具和传感器安装牢固
4. 机械臂运动范围内没有人员
5. 桌面、支架和相机不会与机械臂发生碰撞
6. 急停或安全停止装置处于随手可以操作的位置
7. 第一次测试时降低速度,并安排一人观察机械臂
8. 不要在机械臂旁边低头操作电脑
9. 不要让衣服、电线、头发或身体进入机械臂关节附近
10. 不要在不理解程序运动范围时直接执行控制示例

Franka 官方要求机械臂安装在不会倾覆的稳定底座上,并提醒控制前检查 Arm 与 Control 之间的电缆。官方文档还特别说明,外部 activation device 可以让 Arm 与 Control 断开并保持当前位置,但它本身并不等同于完整意义上的急停装置,应遵循随机器人提供的安全手册配置真正的安全停止措施。

本文把示例分为:

A. 只读程序:不主动控制机械臂运动
B. 通信测试:不同版本可能会控制机械臂运动
C. 运动程序:一定可能控制机械臂运动
D. 力控程序:需要接触环境,风险更高

一定按照本文给出的顺序逐步测试,不要上来就执行力控、笛卡尔阻抗或高速速度控制示例。


二、确认前面三篇教程已经完成

2.1 检查实时内核

uname -r

本文示例输出:

5.15.209-rt96-yjw

检查实时标志:

cat /sys/kernel/realtime

应输出:

1

检查 PREEMPT_RT:

grep CONFIG_PREEMPT_RT \
"/boot/config-$(uname -r)"

应输出:

CONFIG_PREEMPT_RT=y

2.2 检查实时权限

groups

应包含:

realtime

检查实时优先级:

ulimit -r

应输出:

99

检查内存锁定:

ulimit -l

应输出:

unlimited

2.3 检查 ROS

echo "$ROS_DISTRO"
rosversion -d
which roscore
which catkin_make

应输出类似:

noetic
noetic
/opt/ros/noetic/bin/roscore
/opt/ros/noetic/bin/catkin_make

2.4 检查 libfranka 版本

cd ~/catkin_franka/libfranka
git describe --tags --exact-match

应输出:

0.8.0

检查通信测试程序:

find ~/catkin_franka/libfranka/build \
-type f \
-name communication_test \
-print

应看到:

/home/用户名/catkin_franka/libfranka/build/examples/communication_test

2.5 检查 franka_ros 版本

cd ~/catkin_franka/src/franka_ros
git describe --tags --exact-match

应输出:

0.8.0

加载环境:

source /opt/ros/noetic/setup.bash
source ~/catkin_franka/devel/setup.bash

检查 ROS 包:

rospack find franka_control
rospack find franka_hw
rospack find franka_description

都应返回对应的源码路径。


三、认识 Franka 的网络连接结构

Franka 系统一般包括:

Arm
机械臂本体

Control
机械臂控制柜

Workstation
安装 Ubuntu、libfranka 和 ROS 的控制电脑

进行 FCI 控制时,网络结构应为:

Ubuntu 控制电脑
        │
        │ 普通千兆网线
        │
Franka Control 控制柜 LAN 口
        │
        │ Franka 专用连接线
        │
Franka Arm 机械臂

电脑网线必须连接到:

Franka Control 控制柜上的 LAN 口

不要连接到:

机械臂底座上的网络口

机械臂底座上的网络口主要用于机器人内部网络或特定的管理场景,不是常规 FCI 控制电脑应连接的端口。Franka 官方明确建议 FCI 控制电脑直接连接 Control 的 LAN 口,并建议避免经过交换机,以减少延迟和抖动。


四、准备网线

推荐使用普通千兆以太网网线:

Cat5e
Cat6
Cat6A

网线两端通常都是标准 RJ45 网口。

连接方法:

网线一端 → Ubuntu 电脑的有线网口
网线另一端 → Franka Control 控制柜的 LAN 口

如果笔记本没有 RJ45 网口,可以使用:

USB 3.0 转千兆网口
USB-C 转千兆网口
Thunderbolt 转千兆网口

但是正式进行 1 kHz 实时控制时,优先使用电脑主板自带的 PCIe 有线网卡。

部分低质量 USB 网卡的延迟和抖动较大,普通 ping 能通并不代表适合实时控制。


五、启动 Franka 系统

不同 Franka 系统版本的外观和启动步骤可能略有差异。

一般启动顺序为:

1. 确认 Arm 与 Control 专用电缆连接牢固
2. 确认末端工具安装牢固
3. 确认安全停止装置处于正常状态
4. 打开 Franka Control 电源
5. 等待控制系统完成启动
6. 观察机械臂状态灯和 Desk 页面

不要在 Control 正在启动过程中频繁断电。

如果系统刚刚开机,Desk 网页可能需要一段时间才能访问。


六、确认电脑有线网卡名称

在 Ubuntu 中执行:

nmcli device status

可能看到:

DEVICE        TYPE      STATE       CONNECTION
wlo1          wifi      已连接      手机热点
enp4s0        ethernet  已断开      --
lo            loopback  未托管      --

其中:

wlo1

是 Wi-Fi 网卡。

enp4s0

是有线网卡。

不同电脑的有线网卡名称可能是:

enp4s0
enp3s0
eno1
enx001122334455
eth0

后续命令中的:

enp4s0

必须替换成自己的实际有线网卡名称。

可以执行:

ip -br link

查看全部接口:

lo       UNKNOWN
enp4s0   UP
wlo1     UP

七、检查网线物理连接

本文假设有线接口为:

WIRED_IF=enp4s0

检查网卡链路:

sudo ethtool "$WIRED_IF" \
| grep -E "Speed|Duplex|Link detected"

正常应看到:

Speed: 1000Mb/s
Duplex: Full
Link detected: yes

含义为:

Speed: 1000Mb/s
千兆连接

Duplex: Full
全双工

Link detected: yes
网线物理链路已经建立

如果显示:

Link detected: no

优先检查:

1. Franka Control 是否已经开机
2. 网线是否插紧
3. 是否插到了 Control 的正确 LAN 口
4. 网线是否损坏
5. USB 转网口是否被系统识别

此时不要继续配置软件。


八、理解电脑 IP 与 Franka IP 的关系

本文使用:

电脑:192.168.1.102/24
Franka:192.168.1.110/24

其中:

/24

代表子网掩码:

255.255.255.0

两台设备的前三段相同:

192.168.1.xxx

所以它们位于同一网段,可以通过网线直接通信。

但是两台设备的最后一段必须不同:

电脑:102
Franka:110

不能把电脑也设置成:

192.168.1.110

否则会与 Franka 产生 IP 冲突。

正确关系:

电脑的 IP 是电脑在这条网线上的地址
Franka 的 IP 是 Franka Control 的地址

在浏览器中访问:

https://192.168.1.110

表示电脑从:

192.168.1.102

向 Franka:

192.168.1.110

发送网页请求。

Franka 官方示例使用 172.16.0.1/24172.16.0.2/24,但这不是唯一可用的地址。只要电脑和 Franka 位于同一个子网、地址不重复,并且路由正确,就可以通信。


九、为电脑配置 Franka 专用静态 IP

先定义变量:

WIRED_IF=enp4s0
PC_IP=192.168.1.102/24
FRANKA_IP=192.168.1.110

检查:

echo "$WIRED_IF"
echo "$PC_IP"
echo "$FRANKA_IP"

9.1 删除旧的 Franka 连接

如果以前已经创建过同名连接:

sudo nmcli connection delete franka \
2>/dev/null || true

查看已有连接:

nmcli connection show

如果有:

有线连接 1

并且它正在一直“获取 IP”,可以先断开:

sudo nmcli connection down \
"有线连接 1" \
2>/dev/null || true

没有必要删除所有有线连接,只需避免同一个网卡同时被多个配置争用。

9.2 创建静态连接

执行:

sudo nmcli connection add \
type ethernet \
ifname "$WIRED_IF" \
con-name franka \
ipv4.method manual \
ipv4.addresses "$PC_IP" \
ipv4.gateway "" \
ipv4.dns "" \
ipv4.never-default yes \
ipv6.method disabled \
connection.autoconnect yes

参数含义:

ipv4.method manual
使用静态 IPv4

ipv4.addresses 192.168.1.102/24
设置电脑有线网卡地址

ipv4.gateway ""
不为 Franka 专用网络设置网关

ipv4.dns ""
不使用 Franka 网络提供 DNS

ipv4.never-default yes
不要让 Franka 网线抢走默认互联网路由

ipv6.method disabled
该直连网络不使用 IPv6

connection.autoconnect yes
插上网线后自动启用

这样可以实现:

Wi-Fi 继续负责上网
有线网卡只负责连接 Franka

9.3 启用连接

sudo nmcli connection up franka

正常应显示连接已成功激活。


十、验证静态 IP 配置

查看设备状态:

nmcli device status

应看到:

enp4s0  ethernet  已连接  franka

查看电脑有线 IP:

ip -br addr show "$WIRED_IF"

应看到:

enp4s0  UP  192.168.1.102/24

查看详细配置:

nmcli connection show franka

检查默认路由:

ip route

正常情况下:

默认互联网路由仍然走 Wi-Fi
192.168.1.0/24 走 enp4s0

检查访问 Franka 时走哪张网卡:

ip route get "$FRANKA_IP"

正确输出类似:

192.168.1.110 dev enp4s0 src 192.168.1.102

其中:

dev enp4s0

表示数据通过有线网卡发送。

src 192.168.1.102

表示电脑使用这个地址与 Franka 通信。


十一、普通 ping 测试

执行:

ping -c 5 "$FRANKA_IP"

正常输出类似:

64 字节,来自 192.168.1.110:
时间=0.2 毫秒

最后应看到:

0% packet loss

如果能够 ping 通,说明:

网线物理连接正常
电脑静态 IP 正常
Franka IP 正确
基础网络路由正常

如果 ping 不通,执行:

ip -br addr show "$WIRED_IF"
ip route get "$FRANKA_IP"

sudo ethtool "$WIRED_IF" \
| grep -E "Speed|Duplex|Link detected"

还可以查看邻居表:

ip neigh show dev "$WIRED_IF"

十二、打开 Franka Desk

在浏览器地址栏输入:

https://192.168.1.110

注意是:

https://

而不是只输入:

192.168.1.110

Franka Desk 使用本地 HTTPS 服务,浏览器可能提示:

您的连接不是私密连接
证书不受信任
NET::ERR_CERT_AUTHORITY_INVALID

这是因为 Franka 使用局域网自签名证书。

在确认 IP 确实是自己实验室的 Franka 后,可以选择:

高级
继续访问 192.168.1.110

也可以在终端测试 Desk 服务:

curl -kI \
--connect-timeout 5 \
"https://$FRANKA_IP"

如果返回:

HTTP/1.1 200
HTTP/1.1 302

或其他 HTTP 响应头,说明 Desk 服务正在运行。

Franka 官方文档确认 Desk 可以通过 https://<fci-ip> 访问,并提醒浏览器可能显示证书警告。


十三、登录 Franka Desk

进入 Desk 后,使用实验室分配的账号登录。

常见账号权限可能包括:

Operator
普通操作权限

Administrator
管理员权限

具体权限名称随系统版本而变化。

如果不知道密码:

不要自行恢复出厂设置
不要随意重置管理员密码
不要修改网络配置和系统版本

应先联系:

实验室老师
设备管理员
上一位使用该机械臂的同学

因为 Desk 中可能保存:

机械臂系统配置
末端工具参数
碰撞阈值
网络地址
FCI 许可证
实验室应用程序

十四、检查 FCI 功能是否已经安装

在 Desk 中寻找:

Settings
→ System
→ Installed Features

检查是否存在:

Franka Control Interface
FCI

如果 FCI 没有安装,libfrankafranka_ros 无法通过 FCI 控制机器人。

Franka 官方文档要求在 Desk 的系统设置中确认 FCI Feature 已安装。较新的机器人系统还需要在 Desk 中手动点击 Activate FCI;如果系统版本较旧,界面中可能没有完全相同的按钮,应以当前 Desk 显示和随机器人提供的手册为准。


十五、理解 Franka 的锁定和解锁

15.1 锁定状态

当机械臂锁定时:

关节制动器处于锁定状态
机械臂不能由 FCI 程序控制运动
无法正常启动 libfranka 运动控制

此时 Desk 中可能显示:

Locked
Brakes locked
Robot locked

15.2 解锁状态

解锁后:

关节制动器释放
机械臂进入可用状态
可以进行手动引导或接收 FCI 控制命令

注意:

解锁并不代表机械臂正在运动,但意味着机械臂已经具备运动条件。

因此,点击解锁前必须先清空机械臂周围空间。


十六、在 Desk 中解锁 Franka

不同系统版本的按钮名称和页面布局可能不同,一般步骤如下:

1. 确认 Control 已完成启动
2. 确认 Arm 与 Control 连接正常
3. 确认安全装置已经释放
4. 登录 Franka Desk
5. 如果 Desk 显示错误,先阅读错误原因
6. 清除允许恢复的错误
7. 点击 Unlock、Open Brakes 或 Release Brakes
8. 等待关节制动器依次释放
9. 检查 Desk 是否显示 Ready
10. 检查机械臂状态灯是否进入可用状态

在较新的系统中,还需要:

展开 Desk 侧边菜单
点击 Activate FCI

对于较老的 Franka Emika Panda 系统,FCI 激活后可能弹出一个确认窗口,并暂时禁止其他 Desk 操作。进行 FCI 控制期间,该窗口可能需要保持打开。官方文档明确要求:机械臂制动器已释放、activation device 已释放,并且蓝色状态灯亮起时,机器人处于 FCI 准备状态。


十七、Franka 常见状态颜色说明

不同年份、系统版本、硬件代次和 Desk 版本的灯光逻辑可能不同。

因此:

Desk 中显示的状态文字和错误信息,应当优先于单纯根据颜色判断。

常见颜色可以按下面方式理解。

17.1 蓝色

通常表示机械臂已解锁并处于 Ready 状态
可以准备运行 FCI 控制程序

对于本文而言,蓝色是最重要的就绪标志。

Franka 官方 FCI 文档明确指出,在机械臂制动器解锁、activation device 释放后,蓝色 LED 表示机器人已经准备好进行 FCI 操作。

17.2 白色或灰白色

常见含义:

系统已经通电
机械臂处于空闲或锁定状态
制动器可能尚未释放
尚未进入 FCI Ready

此时应查看 Desk 是否显示:

Locked
Brakes locked
Not ready

不能只凭白灯直接运行控制程序。

17.3 黄色或橙色

不同版本中可能表示:

状态正在切换
手动引导或交互状态
警告状态
等待用户确认
安全功能或模式切换尚未完成

看到黄色或橙色时,先查看 Desk 顶部状态栏、弹窗和错误列表。

不要把黄色简单理解成“可以运行”。

17.4 红色

通常表示:

错误
Reflex
安全停止
碰撞保护触发
控制程序异常终止
需要人工处理

此时不要反复点击解锁,也不要立即重新运行控制程序。

应先查看 Desk 中的具体错误信息。

17.5 闪烁状态

闪烁通常意味着:

正在启动
正在切换状态
等待用户操作
错误需要确认
安全状态正在变化

机械臂状态灯如果持续闪烁,应先在 Desk 中确认原因。

17.6 最稳妥的判断方式

运行 FCI 程序前,同时满足:

Desk 无未处理错误
机械臂制动器已经释放
FCI 功能已安装
需要时已经点击 Activate FCI
Desk 显示 Ready
机械臂为蓝色就绪状态
网络 ping 正常
没有其他程序占用机械臂

颜色只能作为辅助判断,不能代替 Desk 中的状态和错误信息。


十八、检查是否进入 FCI 模式

如果 Desk 中存在:

Activate FCI

点击后,界面可能弹出:

FCI mode active

或类似提示。

在 FCI 模式中:

Desk 的部分操作会被暂时禁用
机械臂控制权交给外部 FCI 客户端
libfranka 或 franka_ros 可以连接

如果程序报:

Connection timeout

但 ping 正常,优先检查:

FCI 是否已激活
FCI Feature 是否已安装
制动器是否已释放
是否连接到了 Control 的正确 LAN 口

官方排障文档将以上几项列为 Connection timeout 的主要检查内容。


十九、进行高频 ping 测试

普通 ping 只能证明基础网络可以通信。

FCI 以较高频率进行实时通信,因此还需要测试高频网络负载。

执行:

sudo ping "$FRANKA_IP" \
-i 0.001 \
-D \
-c 10000 \
-s 1200 \
| tee ~/franka_ping.log

参数含义:

-i 0.001
每 1 毫秒发送一个数据包

-D
在每个返回数据包前记录时间戳

-c 10000
发送 10000 个数据包

-s 1200
数据负载为 1200 字节

测试完成后查看:

tail -n 5 ~/franka_ping.log

重点看:

packet loss
min
avg
max
mdev

理想状态:

0% 丢包
平均延迟稳定
最大延迟没有频繁出现明显尖峰

Franka 官方使用同样的 1 ms、1200 字节 ping 测试模拟 FCI 级网络负载,并指出网络往返时间与控制循环执行时间之和需要保持在 1 ms 内。

可以连续运行三次:

for N in 1 2 3
do
    sudo ping "$FRANKA_IP" \
    -i 0.001 \
    -D \
    -c 10000 \
    -s 1200 \
    | tee "$HOME/franka_ping_$N.log"
done

查看:

for N in 1 2 3
do
    echo "===== Test $N ====="
    tail -n 3 "$HOME/franka_ping_$N.log"
done

二十、检查网卡错误计数

测试前记录:

ip -s link show "$WIRED_IF"

查看驱动:

sudo ethtool -i "$WIRED_IF"

查看统计:

sudo ethtool -S "$WIRED_IF" \
| grep -Ei \
"rx_errors|tx_errors|crc|fifo|missed|drop|collision|aborted|underrun"

完成高频 ping 后再次检查。

如果错误计数不断增长,可能存在:

网线质量问题
网卡驱动问题
USB 网卡性能问题
网口接触不良
硬件流控或节能配置问题

在得到原始测试结果前,不建议立即修改 EEE、offload、IRQ 和网卡驱动。

先保留原始基线,再决定是否优化。


二十一、准备测试 libfranka

加载环境:

source /opt/ros/noetic/setup.bash
source ~/catkin_franka/devel/setup.bash

定义 Franka IP:

FRANKA_IP=192.168.1.110

检查实时环境:

uname -r
cat /sys/kernel/realtime
groups
ulimit -r
ulimit -l

应看到:

实时内核正确
/sys/kernel/realtime = 1
groups 包含 realtime
ulimit -r = 99
ulimit -l = unlimited

检查版本:

cd ~/catkin_franka/libfranka
git describe --tags --exact-match

应输出:

0.8.0

进入示例目录:

cd ~/catkin_franka/libfranka/build/examples

查看所有已编译程序:

find . \
-maxdepth 1 \
-type f \
-executable \
-printf '%f\n' \
| sort

不同版本的程序列表可能略有不同。


二十二、先运行只读程序 echo_robot_state

22.1 程序作用

echo_robot_state 用于:

连接 Franka
读取当前机器人状态
将状态打印到终端
不主动发送运动轨迹

它通常是最适合作为第一个真机测试的程序。

Franka 官方也建议在网络和 FCI 配置完成后,先运行 echo_robot_state 验证连接并读取当前机器人状态。

22.2 运行

cd ~/catkin_franka/libfranka/build

./examples/echo_robot_state "$FRANKA_IP" \
2>&1 | tee ~/echo_robot_state.log

或者:

cd ~/catkin_franka/libfranka/build/examples

./echo_robot_state "$FRANKA_IP" \
2>&1 | tee ~/echo_robot_state.log

正常情况下会输出大量状态,例如:

q
dq
tau_J
O_T_EE
O_F_ext_hat_K
robot_mode
current_errors
last_motion_errors

其中:

q
七个关节角

dq
七个关节速度

tau_J
测得的关节力矩

O_T_EE
末端在基坐标系下的齐次变换矩阵

O_F_ext_hat_K
估计的外部笛卡尔力和力矩

robot_mode
机器人当前模式

如果程序持续打印,可以按:

Ctrl + C

退出。


二十三、运行 print_joint_poses

先检查程序是否存在:

test -x \
~/catkin_franka/libfranka/build/examples/print_joint_poses \
&& echo "print_joint_poses exists"

如果存在:

cd ~/catkin_franka/libfranka/build/examples

./print_joint_poses "$FRANKA_IP"

该程序通常用于读取当前关节位置或辅助记录姿态。

如果当前版本的程序需要其他参数,先不继续执行,查看:

./print_joint_poses

让程序显示用法。


二十四、运行 communication_test

24.1 安全提醒

虽然 communication_test 的主要目的是测试 UDP 通信质量,但不同版本的实现可能会先将机械臂移动到指定姿态或执行测试运动。

因此:

一律将 communication_test 当作“可能会控制机械臂运动”的程序。

运行前必须:

机械臂周围没有人员
桌面没有障碍物
相机、支架和线缆不会被碰撞
末端工具牢固
Desk 中无错误
机械臂已解锁
FCI 已激活
急停或安全停止装置可随时操作

24.2 运行

cd ~/catkin_franka/libfranka/build/examples

执行:

./communication_test "$FRANKA_IP" \
2>&1 | tee ~/communication_test_080.log

如果程序要求:

Press Enter to continue

先再次确认机械臂周围空间,再按回车。

Franka 官方将 communication_test 作为比 ping 更深入的 UDP 通信性能测试,可以从本地构建目录运行 ./examples/communication_test <fci-ip>

24.3 查看结果

测试完成后:

tail -n 40 \
~/communication_test_080.log

重点检查:

是否出现异常
是否发生 lost robot states
通信成功率是否接近 100%
是否出现 UDP receive timeout
是否出现 communication_constraints_violation
是否出现网络丢包提示

通信成功率越接近 100% 越好。

不要只根据一次测试下结论,建议连续测试三次。

for N in 1 2 3
do
    echo "===== communication_test $N ====="

    ./communication_test "$FRANKA_IP" \
    2>&1 \
    | tee "$HOME/communication_test_$N.log"
done

注意:每一轮都可能触发运动,不能无人值守循环运行。


二十五、communication_test 失败时检查什么

25.1 Connection timeout

检查:

Franka IP 是否正确
网线是否连接到 Control LAN 口
Desk 是否能打开
机械臂是否已经解锁
FCI Feature 是否安装
FCI 模式是否激活
是否有其他程序已经连接机器人

25.2 UDP receive: Timeout

查看防火墙:

sudo iptables -L

查看 Ubuntu 防火墙:

sudo ufw status

不要在不了解实验室网络安全要求时永久关闭全部防火墙。

可以先确认防火墙是否阻止 Franka 直连 UDP 流量。官方文档也将防火墙列为 UDP receive: Timeout 的检查项。

25.3 Incompatible Library Version

如果出现:

Incompatible Library Version

表示:

libfranka 客户端版本
与
Franka Control 的服务器版本

不兼容。

本文固定使用:

libfranka 0.8.0

是因为实验室机械臂系统要求该版本。

不要看到错误后直接升级到最新版,否则可能破坏实验室既有环境。官方排障文档建议根据报错中显示的服务器版本,选择与机器人系统兼容的 libfranka 版本。

25.4 communication_constraints_violation

可能原因:

网络丢包
延迟尖峰
CPU 调度延迟
未使用实时内核
使用交换机或低性能 USB 网卡
程序没有使用 Release 编译
CPU 省电策略导致唤醒延迟
控制命令本身不连续

Franka 官方指出,即使控制代码本身没有明显跳变,网络丢包也可能造成 communication_constraints_violation;建议使用电脑直连 Control、Release 模式编译、实时内核和网络性能测试。


二十六、按安全顺序测试 libfranka 运动示例

先列出实际存在的程序:

cd ~/catkin_franka/libfranka/build/examples

find . \
-maxdepth 1 \
-type f \
-executable \
-printf '%f\n' \
| sort

本文不假设所有版本都具有完全相同的示例。

只运行当前目录中真实存在的程序。

推荐顺序:

1. echo_robot_state
2. print_joint_poses
3. communication_test
4. generate_joint_position_motion
5. generate_cartesian_pose_motion
6. joint_impedance_control
7. cartesian_impedance_control
8. joint velocity / Cartesian velocity
9. force_control
10. gripper 示例

越靠后的程序风险通常越高。


二十七、测试关节位置运动示例

先检查:

test -x ./generate_joint_position_motion \
&& echo "exists"

如果存在,运行:

./generate_joint_position_motion "$FRANKA_IP"

该程序可能:

先让机械臂运动到初始姿态
然后执行关节位置轨迹

运行前必须确认整个运动范围没有障碍物。

如果程序要求按回车确认,不要在没有观察机械臂的情况下直接按回车。

测试完成后,不要立即连续运行下一个程序。

先观察:

机械臂是否稳定
是否出现错误
网络是否丢包
Desk 是否进入 Reflex
关节是否接近限位

二十八、测试笛卡尔位置运动示例

检查:

test -x ./generate_cartesian_pose_motion \
&& echo "exists"

运行:

./generate_cartesian_pose_motion "$FRANKA_IP"

该程序可能让机械臂末端沿笛卡尔轨迹运动。

特别注意:

末端相机
夹爪
超声探头
长工具
桌面
支架

可能扩大实际碰撞范围。

机械臂模型中的法兰位置安全,并不代表安装的末端工具一定安全。


二十九、测试 joint_point_to_point_motion

该程序可能需要额外的七个目标关节角。

不要直接复制网上的关节角。

先查看用法:

./joint_point_to_point_motion

或者查看源码中的提示:

grep -n "Usage" \
~/catkin_franka/libfranka/examples/joint_point_to_point_motion.cpp

只有在理解:

七个目标关节角
机械臂当前姿态
关节限位
运动路径
周围障碍物

后,再按照程序显示的参数格式运行。

不建议把它作为第一次运动测试。


三十、测试关节阻抗控制

检查:

test -x ./joint_impedance_control \
&& echo "exists"

运行:

./joint_impedance_control "$FRANKA_IP"

关节阻抗控制会根据关节位置误差和速度误差计算控制力矩。

运行时:

不要拉扯机械臂
不要触碰关节缝隙
不要突然施加强冲击

第一次测试只观察机械臂是否稳定执行官方示例。


三十一、测试笛卡尔阻抗控制

检查:

test -x ./cartesian_impedance_control \
&& echo "exists"

运行:

./cartesian_impedance_control "$FRANKA_IP"

该程序通常会在笛卡尔空间控制末端位姿,并使用阻抗方式响应外部作用。

不要因为“阻抗控制比较柔顺”就认为它没有风险。

如果刚度较高或姿态误差较大,机械臂仍可能产生较大的运动和接触力。


三十二、速度控制示例

可能存在:

generate_joint_velocity_motion
generate_cartesian_velocity_motion

检查:

ls generate_*velocity* 2>/dev/null

运行关节速度示例:

./generate_joint_velocity_motion "$FRANKA_IP"

运行笛卡尔速度示例:

./generate_cartesian_velocity_motion "$FRANKA_IP"

速度控制比位置读取和状态读取风险更高。

运行前应确认:

程序会运行多长时间
速度幅值是多少
会向哪个方向运动
是否自动停止

不理解源代码时,不建议将速度示例作为第一个运动程序。


三十三、力控示例不要作为首次测试

如果存在:

force_control

先查看源码:

sed -n '1,240p' \
~/catkin_franka/libfranka/examples/force_control.cpp

力控程序可能需要:

稳定的接触平面
正确的末端工具
正确的负载参数
正确的力方向
明确的目标力

如果在自由空间运行接触力控制,程序可能产生意料之外的运动。

因此:

没有准备好受控接触环境时,不要运行 force_control。


三十四、测试夹爪程序

如果已经安装 Franka Hand,可以检查:

find ~/catkin_franka/libfranka/build/examples \
-maxdepth 1 \
-type f \
-executable \
| grep -E "grasp|gripper"

可能存在:

grasp_object

先查看用法:

./grasp_object

不要猜测参数。

一般夹爪程序可能需要:

Franka IP
目标宽度
夹持速度
夹持力
物体宽度容差

运行前确认:

夹爪中没有手指
物体不会飞出
夹持力不会损坏物体
夹爪与机械臂通信正常

三十五、停止 libfranka 程序

程序正常运行时可以按:

Ctrl + C

终止。

终止后观察:

机械臂是否停止
Desk 是否出现错误
机械臂是否仍处于 FCI 模式
是否需要退出 FCI
是否需要重新解锁

不要直接关闭 Franka Control 电源来停止普通测试程序。

如果出现异常运动,应使用实验室配置的安全停止措施。


三十六、准备测试 franka_ros

加载环境:

source /opt/ros/noetic/setup.bash
source ~/catkin_franka/devel/setup.bash

检查:

echo "$ROS_DISTRO"
echo "$ROS_PACKAGE_PATH"

rospack find franka_control
rospack find franka_example_controllers

应返回:

noetic
/home/用户名/catkin_franka/src/...

定义 IP:

FRANKA_IP=192.168.1.110

确保之前的 libfranka 示例已经退出。

同一时间不要让:

libfranka 示例
franka_control
franka_ros 示例控制器
FrankaPy
其他控制节点

同时抢占同一台机械臂。


三十七、查看 franka_control 启动参数

执行:

roslaunch franka_control \
franka_control.launch \
--args

也可以直接查看 launch 文件:

grep -n "<arg" \
~/catkin_franka/src/franka_ros/franka_control/launch/franka_control.launch

不同版本可能包含:

robot_ip
load_gripper
arm_id
robot
joint_names

本文使用的是较老的:

franka_ros 0.8.0

因此不要盲目照抄最新版文档中的全部参数。

以本地 0.8.0 launch 文件实际显示的参数为准。


三十八、启动 franka_control

如果暂时不测试夹爪:

roslaunch franka_control \
franka_control.launch \
robot_ip:="$FRANKA_IP" \
load_gripper:=false

如果确认安装了 Franka Hand:

roslaunch franka_control \
franka_control.launch \
robot_ip:="$FRANKA_IP" \
load_gripper:=true

如果本地 launch 文件还要求:

arm_id

可以根据实际参数增加:

arm_id:=panda

不要在 --args 没显示该参数时随意添加。

franka_control_nodefranka_ros 中连接机器人硬件的 ROS Control 节点。官方文档说明,启动 franka_control.launch 后还会启动状态控制器,发布机器人状态、外部力、关节状态和可视化需要的坐标变换。


三十九、检查 franka_ros 是否连接成功

保持 franka_control 终端运行。

打开第二个终端:

source ~/.bashrc

检查 ROS Master:

rosnode list

查看 Franka 节点:

rosnode list \
| grep -E "franka|controller"

查看话题:

rostopic list \
| grep -E "franka|joint"

常见话题可能包括:

/franka_state_controller/franka_states
/franka_state_controller/joint_states
/joint_states

四十、读取一次机器人状态

执行:

rostopic echo -n 1 \
/franka_state_controller/franka_states

如果可以输出大量状态数据,说明:

franka_control 已经连接机器人
libfranka 通信正常
FrankaStateController 正常运行
ROS 可以读取真机状态

查看关节状态:

rostopic echo -n 1 \
/joint_states

查看状态发布频率:

rostopic hz \
/franka_state_controller/franka_states

注意:

ROS 话题发布频率
不一定等于底层 FCI 的 1 kHz 控制频率

状态控制器可能以配置的较低频率向 ROS 发布消息。


四十一、查看已加载控制器

执行:

rosservice call \
/controller_manager/list_controllers

应看到类似:

franka_state_controller

其状态可能是:

running

也可以执行:

rosparam list \
| grep franka

查看已加载参数。


四十二、单独启动 franka_control 时机械臂会不会运动

通常:

只启动 franka_control
和 franka_state_controller

主要用于连接硬件和读取状态,不会主动执行明显的轨迹运动。

但是连接真机时依然必须:

清空工作空间
保持安全装置可用
观察 Desk 状态

因为:

加载错误控制器
恢复之前的控制器
错误的参数文件
其他 ROS 节点

都可能改变实际行为。


四十三、停止独立的 franka_control

在运行:

roslaunch franka_control franka_control.launch

的终端按:

Ctrl + C

等待节点完全退出。

再检查:

rosnode list

确保控制节点已经消失。

在运行官方示例控制器前,必须先停止独立启动的 franka_control,因为示例 launch 文件通常会自行启动硬件控制节点。


四十四、查看 franka_ros 官方示例

列出本地 0.8.0 实际提供的 launch 文件:

find \
~/catkin_franka/src/franka_ros/franka_example_controllers/launch \
-maxdepth 1 \
-type f \
-name "*.launch" \
-printf '%f\n' \
| sort

可能看到:

joint_impedance_example_controller.launch
cartesian_impedance_example_controller.launch
joint_position_example_controller.launch
joint_velocity_example_controller.launch
cartesian_pose_example_controller.launch
cartesian_velocity_example_controller.launch
model_example_controller.launch
force_example_controller.launch

具体列表以本机实际输出为准。

Franka 官方说明,franka_example_controllers 中包含一组 ROS 示例控制器,每个示例通常带有独立 launch 文件,用于启动控制器并进行可视化。


四十五、先查看示例启动参数

例如查看关节阻抗控制器:

roslaunch franka_example_controllers \
joint_impedance_example_controller.launch \
--args

也可以查看源码:

grep -n "<arg" \
~/catkin_franka/src/franka_ros/franka_example_controllers/launch/joint_impedance_example_controller.launch

确认是否存在:

robot_ip
load_gripper
arm_id
robot

再运行。


四十六、测试 joint_impedance_example_controller

46.1 安全检查

运行前:

停止之前的 franka_control
机械臂周围无障碍物
末端工具牢固
Desk 无错误
机械臂已解锁
FCI 已激活

46.2 启动

对于常见的 franka_ros 0.8.0 配置,可以尝试:

roslaunch franka_example_controllers \
joint_impedance_example_controller.launch \
robot_ip:="$FRANKA_IP" \
load_gripper:=false

如果本地 launch 文件要求其他参数,按照 --args 输出补充。

官方文档给出的同类命令也是通过 robot_ipload_gripper 启动关节阻抗示例;不同版本可能另外增加机器人型号参数,因此本文以本地 0.8.0 文件为最终依据。


四十七、测试 model_example_controller

如果本地存在:

model_example_controller.launch

先查看参数:

roslaunch franka_example_controllers \
model_example_controller.launch \
--args

再运行:

roslaunch franka_example_controllers \
model_example_controller.launch \
robot_ip:="$FRANKA_IP" \
load_gripper:=false

该示例主要用于演示机器人动力学模型接口。

仍然要按真机控制程序进行安全防护。


四十八、测试 cartesian_pose_example_controller

如果存在:

cartesian_pose_example_controller.launch

运行:

roslaunch franka_example_controllers \
cartesian_pose_example_controller.launch \
robot_ip:="$FRANKA_IP" \
load_gripper:=false

该示例可能控制末端执行笛卡尔轨迹。

运行前检查:

末端工具长度
相机位置
桌面高度
机器人底座位置
可达空间
线缆拖拽

四十九、测试 cartesian_impedance_example_controller

如果存在:

cartesian_impedance_example_controller.launch

运行:

roslaunch franka_example_controllers \
cartesian_impedance_example_controller.launch \
robot_ip:="$FRANKA_IP" \
load_gripper:=false

该控制器可能允许通过动态参数调整笛卡尔刚度。

不要在不了解参数含义时随意将刚度提高到很大。


五十、速度与力控 ROS 示例

以下程序不建议作为第一次真机测试:

joint_velocity_example_controller
cartesian_velocity_example_controller
force_example_controller

原因:

速度程序可能持续运动
力控程序可能需要稳定接触
错误的方向或参数可能导致碰撞

运行前必须先阅读对应的:

.launch
.yaml
.cpp

例如:

sed -n '1,260p' \
~/catkin_franka/src/franka_ros/franka_example_controllers/src/force_example_controller.cpp

没有理解代码前不要运行。


五十一、出现 Reflex 后如何恢复

如果机械臂碰撞、控制异常或触发安全阈值,可能进入:

Reflex mode

先停止当前控制程序。

检查 Desk 中的错误信息。

如果 franka_control_node 仍然运行,可以使用官方错误恢复 Action:

rostopic pub -1 \
/franka_control/error_recovery/goal \
franka_msgs/ErrorRecoveryActionGoal \
"{}"

官方 franka_control 文档提供了该错误恢复方式。恢复后,节点可能重新启动之前运行的控制器,因此执行前必须确认机械臂周围安全。

如果恢复失败:

停止全部控制节点
回到 Desk 查看错误
确认没有物理碰撞
确认关节未处于异常位置
按照 Desk 提示处理
重新解锁
重新激活 FCI

不要连续反复发送 error recovery。


五十二、出现安全功能拒绝命令

可能看到:

command rejected due to activated safety function

或者:

command preempted due to activated safety function

这通常说明:

Watchman 或其他安全规则限制了运动
速度限制被触发
工作空间限制被触发
安全配置不允许当前 FCI 命令

不要直接删除全部安全规则。

应联系设备管理员,确认实验室的安全配置和当前任务是否允许修改。官方文档也指出,这类错误是安全规则阻止了 FCI 运动命令。


五十三、同一时间只能有一个主要控制程序

常见冲突场景:

communication_test 还在运行
同时启动 franka_control

franka_control 已经运行
又启动一个示例 controller launch

FrankaPy 后台服务仍占用机械臂
又运行 libfranka 官方示例

另一个实验室电脑正在连接同一台 Franka

出现连接失败时检查:

ps aux \
| grep -E \
"communication_test|franka_control|franka|roslaunch" \
| grep -v grep

查看 ROS 节点:

rosnode list

不需要的程序应先正常退出。


五十四、程序退出后 Desk 仍无法操作

有些系统进入 FCI 模式后,Desk 的其他功能会被暂时禁用。

处理顺序:

1. Ctrl+C 停止控制程序
2. 等待 ROS 或 libfranka 客户端完全断开
3. 回到 Desk
4. 点击 Exit FCI、Deactivate FCI 或关闭 FCI 弹窗
5. 必要时重新锁定机械臂
6. 再进行 Desk 操作

不同系统版本按钮名称不同。

不要在程序仍占用机器人时强行切换 Desk 模式。


五十五、Wi-Fi 和 Franka 网线能否同时使用

可以。

例如:

wlo1:
连接手机热点或校园网,负责访问互联网

enp4s0:
静态地址 192.168.1.102,负责连接 Franka

检查:

nmcli device status

可能看到:

wlo1    wifi      已连接  手机热点
enp4s0  ethernet  已连接  franka

访问网页时走 Wi-Fi。

访问:

192.168.1.110

时走有线网卡。

检查:

ip route get 192.168.1.110

只要显示:

dev enp4s0 src 192.168.1.102

就是正确的。


五十六、为什么不能用 Wi-Fi 控制 Franka

即使 Franka 和电脑在同一个无线网络中,Wi-Fi 仍可能存在:

随机延迟
干扰
重传
漫游
功率管理
网络拥塞
共享信道
瞬时丢包

这些问题对普通网页影响不大,但会影响 1 kHz 实时控制。

正式控制应使用:

电脑有线网卡
直接连接
Franka Control LAN

官方文档建议直接连接,并指出交换机、低性能网卡和非实时系统都会增加实时控制延迟。


五十七、1 kHz 控制循环中不要做什么

自己编写 libfranka 控制器时,不要在 1 kHz 循环中:

频繁 print
sleep
读取大文件
加载神经网络
调用网络接口
动态申请大量内存
创建 vector
打开相机
执行点云重建
运行复杂规划器
等待其他线程锁

应该:

在循环外加载模型
预分配内存
使用固定长度 std::array
将视觉和规划放到其他线程或其他电脑
只在循环内执行确定性控制计算

Franka 官方文档明确提醒,1 kHz 控制循环中不要加载模型、阻塞休眠、每周期打印或动态分配内存。


五十八、建议的完整真机测试顺序

第一次完成环境搭建后,建议严格按照下面顺序测试:

第 1 步:
确认实时内核、realtime 权限和 NVIDIA 正常

第 2 步:
将电脑网线连接到 Franka Control LAN

第 3 步:
配置电脑静态 IP

第 4 步:
普通 ping 测试

第 5 步:
打开 Desk

第 6 步:
确认 FCI Feature 已安装

第 7 步:
解除安全停止并解锁制动器

第 8 步:
确认 Desk Ready 和蓝色状态

第 9 步:
激活 FCI

第 10 步:
运行 echo_robot_state

第 11 步:
运行高频 ping

第 12 步:
运行 communication_test

第 13 步:
启动 franka_control,只读取状态

第 14 步:
检查 /franka_state_controller/franka_states

第 15 步:
运行最简单的官方位置示例

第 16 步:
测试阻抗控制示例

第 17 步:
最后再考虑速度控制和力控

任何一步失败,都先停在该步处理。

不要跳过基础测试,直接运行自己的论文控制器。


五十九、建议保存完整测试日志

创建日志目录:

mkdir -p ~/franka_test_logs

保存系统信息:

{
    echo "===== Kernel ====="
    uname -a
    cat /sys/kernel/realtime
    groups
    ulimit -r
    ulimit -l

    echo "===== Network ====="
    nmcli device status
    ip -br addr
    ip route get 192.168.1.110

    echo "===== libfranka ====="
    cd ~/catkin_franka/libfranka
    git describe --tags --exact-match

    echo "===== franka_ros ====="
    cd ~/catkin_franka/src/franka_ros
    git describe --tags --exact-match
} > ~/franka_test_logs/system_info.txt

保存普通 ping:

ping -c 100 \
192.168.1.110 \
| tee ~/franka_test_logs/ping_basic.log

保存高频 ping:

sudo ping 192.168.1.110 \
-i 0.001 \
-D \
-c 10000 \
-s 1200 \
| tee ~/franka_test_logs/ping_1khz.log

保存 communication_test:

cd ~/catkin_franka/libfranka/build/examples

./communication_test 192.168.1.110 \
2>&1 \
| tee ~/franka_test_logs/communication_test.log

这些日志后续可以用于:

比较不同电脑
比较不同实时内核
比较不同网卡
判断丢包
分析论文实验异常

六十、最终一键检查

FRANKA_IP=192.168.1.110
WIRED_IF=enp4s0

执行:

echo "===== 实时系统 ====="
uname -r
cat /sys/kernel/realtime
groups
ulimit -r
ulimit -l

echo "===== ROS ====="
echo "$ROS_DISTRO"
rosversion -d

echo "===== libfranka ====="
cd ~/catkin_franka/libfranka
git describe --tags --exact-match
find build/examples \
-maxdepth 1 \
-type f \
-name communication_test \
-print

echo "===== franka_ros ====="
cd ~/catkin_franka/src/franka_ros
git describe --tags --exact-match

echo "===== 网卡 ====="
nmcli device status
ip -br addr show "$WIRED_IF"

sudo ethtool "$WIRED_IF" \
| grep -E "Speed|Duplex|Link detected"

echo "===== 路由 ====="
ip route get "$FRANKA_IP"

echo "===== Franka 网络 ====="
ping -c 3 "$FRANKA_IP"

echo "===== Desk ====="
curl -kI \
--connect-timeout 5 \
"https://$FRANKA_IP"

理想结果:

实时内核正确
/sys/kernel/realtime = 1
用户属于 realtime
ulimit -r = 99
ulimit -l = unlimited

ROS = noetic
libfranka = 0.8.0
franka_ros = 0.8.0

有线网卡 = 已连接
电脑有线 IP = 192.168.1.102/24
链路速度 = 1000Mb/s
双工模式 = Full
Link detected = yes

访问 Franka 走 enp4s0
Franka ping = 0% 丢包
Desk HTTPS 有响应

六十一、常见问题总结

问题 1:有线网卡一直显示“正在获取 IP”

原因:

网卡正在等待 DHCP
但 Franka 直连网络不会自动给电脑分配地址

解决:

sudo nmcli connection add \
type ethernet \
ifname enp4s0 \
con-name franka \
ipv4.method manual \
ipv4.addresses 192.168.1.102/24 \
ipv4.gateway "" \
ipv4.dns "" \
ipv4.never-default yes \
ipv6.method disabled

然后:

sudo nmcli connection up franka

问题 2:Link detected 是 yes,但电脑没有 IP

查看:

ip -br addr show enp4s0

如果只显示:

enp4s0 UP

没有 192.168.1.102/24,说明静态 IP 没有正确应用。

重新启动连接:

sudo nmcli connection down franka
sudo nmcli connection up franka

问题 3:ping 不通

检查:

ip -br addr show enp4s0
ip route get 192.168.1.110

sudo ethtool enp4s0 \
| grep -E "Speed|Duplex|Link detected"

确认:

电脑 IP 与 Franka 同网段
电脑与 Franka IP 不相同
网线插在 Control LAN
Franka Control 已启动

问题 4:ping 通,但 Desk 打不开

尝试:

https://192.168.1.110

而不是:

http://192.168.1.110

检查:

curl -kI \
--connect-timeout 5 \
https://192.168.1.110

如果 Control 刚开机,等待系统完成启动。

问题 5:浏览器提示证书错误

这是局域网自签名证书的常见提示。

确认地址是实验室 Franka 后:

高级
继续访问

问题 6:Desk 可以打开,但 libfranka 连接超时

检查:

机械臂是否解锁
FCI Feature 是否安装
FCI 是否激活
是否连接到了 Control LAN
是否有其他程序占用机器人

问题 7:机械臂不是蓝色

不要直接运行控制程序。

先看 Desk 中:

是否锁定
是否有错误
是否等待确认
是否处于 Reflex
是否未激活 FCI

问题 8:程序报 Incompatible Library Version

不要直接升级或降级机器人系统。

先确认实验室要求的版本,并检查:

cd ~/catkin_franka/libfranka
git describe --tags --exact-match

本文要求:

0.8.0

问题 9:franka_control 启动失败

检查:

source /opt/ros/noetic/setup.bash
source ~/catkin_franka/devel/setup.bash

rospack find franka_control

再查看:

roslaunch franka_control \
franka_control.launch \
--args

问题 10:运行示例后机械臂进入 Reflex

立即停止控制程序。

检查 Desk 错误。

确认没有物理碰撞后,再使用 Desk 或 ROS error recovery。

不要反复重新启动同一个程序。


六十二、测试完成后的安全退出顺序

实验结束后建议:

1. 停止运动控制程序
2. 等待机械臂完全停止
3. 检查终端无残留控制节点
4. 必要时退出 FCI 模式
5. 在 Desk 中锁定机械臂制动器
6. 保存实验日志
7. 整理末端工具和线缆
8. 按实验室规定关闭 Franka Control
9. 最后断开网线

检查残留程序:

ps aux \
| grep -E \
"franka|communication_test|roslaunch" \
| grep -v grep

检查 ROS:

rosnode list

不要在机械臂仍运动时退出网络或直接关闭电脑。


六十三、总结

本文完成了:

1. 认识 Franka Arm、Control 与电脑的连接关系
2. 将电脑连接到 Franka Control LAN
3. 找到 Ubuntu 有线网卡名称
4. 配置电脑静态 IP
5. 保留 Wi-Fi 作为互联网连接
6. 检查网线千兆全双工链路
7. 普通 ping 测试
8. 高频 1 ms ping 测试
9. 打开 Franka Desk
10. 检查 FCI Feature
11. 解锁 Franka 制动器
12. 理解常见状态颜色
13. 激活 FCI 模式
14. 运行 echo_robot_state
15. 运行 communication_test
16. 测试 libfranka 官方位置和阻抗示例
17. 启动 franka_control
18. 读取 franka_states 和 joint_states
19. 查看 ROS 控制器
20. 测试 franka_ros 官方示例控制器
21. 进行 Reflex 错误恢复
22. 处理常见网络、版本和安全错误

最终网络配置:

电脑:192.168.1.102/24
Franka:192.168.1.110
接口:enp4s0
连接方式:电脑直连 Franka Control LAN

最终软件环境:

Ubuntu 20.04
ROS Noetic
PREEMPT_RT 5.15.209-rt96
libfranka 0.8.0
franka_ros 0.8.0

最终验证顺序:

ping
→ Desk
→ 解锁
→ 蓝色 Ready
→ Activate FCI
→ echo_robot_state
→ 高频 ping
→ communication_test
→ franka_control
→ franka_states
→ 官方运动示例
→ 自己的控制算法

至此,Ubuntu 20.04 控制电脑已经可以连接真实 Franka Emika Panda,并完成 libfranka 和 franka_ros 的基础真机测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啵啵鱼爱吃小猫咪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值