前言
本文记录如何在 Ubuntu 20.04 + ROS Noetic 环境中,从源码安装:
libfranka 0.8.0
franka_ros 0.8.0
本文采用固定版本,而不是直接安装系统软件源中的最新版,适合机械臂系统明确要求使用 0.8.0 的情况。
libfranka 是用于连接和控制 Franka 研究型机械臂的 C++ 库,提供机器人状态读取、关节运动、笛卡尔运动、力矩控制等接口;franka_ros 则在 libfranka 基础上提供 ROS 驱动、硬件接口、控制器、机器人描述和可视化等功能。
本文安装完成后的目录结构为:
/home/用户名/catkin_franka/
├── libfranka/ # libfranka 0.8.0 源码及编译结果
├── src/
│ └── franka_ros/ # franka_ros 0.8.0 源码
├── build/ # catkin 编译目录
└── devel/ # catkin 开发环境
本文实测环境:
操作系统:Ubuntu 20.04
ROS版本:ROS Noetic
libfranka:0.8.0
franka_ros:0.8.0
机械臂:Franka Emika Panda
电脑有线IP:192.168.1.102
Franka IP:192.168.1.110
一、安装前提
开始本文之前,需要已经完成以下工作:
1. Ubuntu 20.04 已经安装完成
2. Wi-Fi 或有线网络可以正常联网
3. ROS Noetic 已经安装完成
4. rosdep 已经初始化并可以正常解析依赖
5. GitHub 可以正常访问
6. 机械臂要求使用 libfranka 0.8.0
如果尚未安装 ROS Noetic,应先完成 ROS Noetic 的安装,再继续本文。
二、确认 Ubuntu 和 ROS 环境
2.1 查看 Ubuntu 版本
lsb_release -a
应当包含:
Release: 20.04
Codename: focal
2.2 查看 ROS 版本
echo "$ROS_DISTRO"
应输出:
noetic
继续检查:
rosversion -d
应输出:
noetic
检查 ROS Core:
which roscore
应输出:
/opt/ros/noetic/bin/roscore
检查 catkin:
which catkin_make
应输出:
/opt/ros/noetic/bin/catkin_make
如果 ROS_DISTRO 为空,先加载 ROS 环境:
source /opt/ros/noetic/setup.bash
为了以后打开终端时自动加载 ROS,可以写入:
grep -qxF \
'source /opt/ros/noetic/setup.bash' \
~/.bashrc \
|| echo \
'source /opt/ros/noetic/setup.bash' \
>> ~/.bashrc
加载:
source ~/.bashrc
三、确认 rosdep 可以正常使用
执行:
rosdep resolve eigen
正常应输出:
#apt
libeigen3-dev
执行:
rosdep resolve roscpp
正常应输出:
#apt
ros-noetic-roscpp
如果这两个依赖都能解析,说明 rosdep 配置正常。
如果 rosdep 使用的是本地 rosdistro 数据源,不要删除:
~/rosdistro_local
因为 rosdep 的配置文件可能仍然引用该目录。
四、确认实时内核和实时权限
编译 libfranka 本身不强制要求实时内核,但真机控制通常建议使用 PREEMPT_RT 实时内核。
查看当前内核:
uname -r
查看内核是否启用完整实时抢占:
cat /sys/kernel/realtime
输出:
1
表示当前运行的是实时内核。
也可以检查:
grep CONFIG_PREEMPT_RT "/boot/config-$(uname -r)"
正常输出:
CONFIG_PREEMPT_RT=y
查看实时优先级:
ulimit -r
推荐输出:
99
查看可锁定内存:
ulimit -l
推荐输出:
unlimited
如果只是编译和查看源码,这一步暂时不满足也不影响安装;但连接真机并执行实时控制之前,建议完成实时内核和用户权限配置。
五、检查是否安装过二进制版本
源码安装前,应检查系统中是否通过 apt 安装过其他版本的 libfranka 或 franka_ros。
执行:
dpkg -l | grep -E "ros-noetic-(libfranka|franka-ros)"
如果没有输出,说明没有安装 ROS 二进制版本,可以继续。
如果出现:
ros-noetic-libfranka
ros-noetic-franka-ros
建议精确删除:
sudo apt remove -y \
ros-noetic-libfranka \
ros-noetic-franka-ros
删除后再次检查:
dpkg -l | grep -E "ros-noetic-(libfranka|franka-ros)"
不建议执行范围过大的命令:
sudo apt remove "*franka*"
因为它可能删除其他名称中带有 franka 的软件包。
六、安装基础编译依赖
更新软件源:
sudo apt update
安装基础编译工具和 libfranka 依赖:
sudo apt install -y \
build-essential \
cmake \
git \
pkg-config \
libpoco-dev \
libeigen3-dev \
libssl-dev \
python3-rosdep \
python3-catkin-tools \
python3-catkin-pkg
检查工具版本:
gcc --version
g++ --version
cmake --version
git --version
Ubuntu 20.04 默认通常使用:
GCC 9
CMake 3.16
Git 2.25
只要命令可以正常运行即可。
七、创建 Franka 专用 Catkin 工作空间
本文将所有 Franka 相关代码放在:
~/catkin_franka
创建工作空间:
mkdir -p ~/catkin_franka/src
加载 ROS:
source /opt/ros/noetic/setup.bash
进入源码目录:
cd ~/catkin_franka/src
初始化工作空间:
catkin_init_workspace
正常输出类似:
Creating symlink "/home/用户名/catkin_franka/src/CMakeLists.txt"
pointing to "/opt/ros/noetic/share/catkin/cmake/toplevel.cmake"
检查:
ls -l ~/catkin_franka/src/CMakeLists.txt
应当看到一个符号链接,例如:
CMakeLists.txt -> /opt/ros/noetic/share/catkin/cmake/toplevel.cmake
此时目录结构为:
~/catkin_franka/
└── src/
└── CMakeLists.txt
八、下载 libfranka 0.8.0
8.1 进入工作空间根目录
cd ~/catkin_franka
查看当前内容:
ls -lah
正常情况下只有:
src
8.2 下载固定版本
执行:
git clone \
--recursive \
--branch 0.8.0 \
--depth 1 \
https://github.com/frankaemika/libfranka.git
这里几个参数的作用是:
--recursive 同时下载子模块
--branch 0.8.0 固定检出 0.8.0 标签
--depth 1 只下载当前版本附近的历史,减少下载量
下载过程中会同时获取:
libfranka/common
子模块。
8.3 检查版本
进入目录:
cd ~/catkin_franka/libfranka
执行:
git describe --tags --exact-match
必须输出:
0.8.0
检查 Git 状态:
git status
可能会显示:
当前不在任何分支上。
无文件要提交,干净的工作区
或者英文:
HEAD detached at 0.8.0
nothing to commit, working tree clean
这是正常现象。
因为 0.8.0 是固定标签,不是开发分支,所以 Git 会进入 detached HEAD 状态,不影响编译和使用。
8.4 检查子模块
git submodule status
应看到:
common
以及对应的提交哈希。
为了确保子模块完整,再执行:
git submodule sync --recursive
git submodule update --init --recursive
检查 common 目录:
ls -lah ~/catkin_franka/libfranka/common
目录中应该有实际文件,不能是空目录。
九、编译 libfranka 0.8.0
9.1 创建独立构建目录
进入源码目录:
cd ~/catkin_franka/libfranka
删除可能存在的旧构建结果:
rm -rf build
重新创建:
mkdir build
cd build
9.2 使用 CMake 配置
执行:
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTS=OFF \
..
参数含义:
CMAKE_BUILD_TYPE=Release
使用发布模式编译,启用优化。
BUILD_TESTS=OFF
不编译 libfranka 自身的单元测试,减少不必要的测试依赖。
正常结束时应看到:
Configuring done
Generating done
Build files have been written to: /home/用户名/catkin_franka/libfranka/build
如果出现:
CMake Error
Configuring incomplete
不要继续执行编译,应先处理报错。
9.3 开始编译
执行:
cmake --build . -j8
其中:
-j8
表示同时使用 8 个编译任务。
如果电脑 CPU 和内存充足,也可以使用:
cmake --build . -j16
如果内存较小,可以改为:
cmake --build . -j4
编译成功后,进度会达到:
[100%]
十、验证 libfranka 编译结果
10.1 检查动态库
执行:
find ~/catkin_franka/libfranka/build \
-name "libfranka.so*" \
-print
正常应找到:
build/libfranka.so
build/libfranka.so.0.8
build/libfranka.so.0.8.0
实际路径类似:
/home/用户名/catkin_franka/libfranka/build/libfranka.so
10.2 检查 CMake 配置文件
执行:
find ~/catkin_franka/libfranka/build \
-name "FrankaConfig.cmake" \
-print
正常应找到:
/home/用户名/catkin_franka/libfranka/build/FrankaConfig.cmake
这个文件非常重要。
后续编译 franka_ros 时,将通过:
Franka_DIR
指向它所在的目录。
10.3 检查 communication_test
执行:
find ~/catkin_franka/libfranka/build \
-type f \
-name "communication_test" \
-print
正常应找到:
/home/用户名/catkin_franka/libfranka/build/examples/communication_test
communication_test 用于测试电脑与 Franka 控制器之间的实时通信质量。
10.4 再次确认版本
cd ~/catkin_franka/libfranka
git describe --tags --exact-match
必须仍然输出:
0.8.0
十一、是否需要执行 sudo make install
本文不执行:
sudo make install
原因是本文希望将 libfranka 0.8.0 保留在:
~/catkin_franka/libfranka/build
后续编译 franka_ros 时,直接通过:
-DFranka_DIR:PATH="$HOME/catkin_franka/libfranka/build"
指定本地版本。
这样做的优点是:
1. 不会把文件写入 /usr/local
2. 不容易与系统中的其他 libfranka 版本混淆
3. 后续切换或删除版本更方便
4. 可以明确确认 franka_ros 使用的是 0.8.0
十二、下载 franka_ros 0.8.0
12.1 进入 Catkin 源码目录
cd ~/catkin_franka/src
检查目录:
ls -lah
此时应该至少有:
CMakeLists.txt
12.2 下载固定版本
执行:
git clone \
--recursive \
--branch 0.8.0 \
--depth 1 \
https://github.com/frankaemika/franka_ros.git
下载完成后进入目录:
cd ~/catkin_franka/src/franka_ros
12.3 检查版本
git describe --tags --exact-match
必须输出:
0.8.0
检查状态:
git status
显示分离头指针状态是正常的。
12.4 检查子模块
执行:
git submodule sync --recursive
git submodule update --init --recursive
然后查看:
git submodule status
十三、不要删除 franka_ros 中的同名文件夹
下载完成后,可能会看到类似目录结构:
~/catkin_franka/src/franka_ros/
├── franka_control/
├── franka_description/
├── franka_example_controllers/
├── franka_gripper/
├── franka_hw/
├── franka_msgs/
├── franka_ros/
└── franka_visualization/
这里:
外层 franka_ros
是整个 Git 仓库。
里面的:
franka_ros/
可能是 ROS 元功能包。
不要因为外层和内层名字相同就删除内层目录。
可以用下面命令查看所有 ROS 包:
find ~/catkin_franka/src/franka_ros \
-maxdepth 2 \
-name package.xml \
-print
正常会看到多个 package.xml。
十四、使用 rosdep 安装 franka_ros 依赖
加载 ROS:
source /opt/ros/noetic/setup.bash
进入工作空间:
cd ~/catkin_franka
安装依赖:
rosdep install \
--from-paths src \
--ignore-src \
--rosdistro noetic \
-y \
--skip-keys libfranka
各参数含义:
--from-paths src
扫描 src 目录中的所有 ROS 功能包。
--ignore-src
如果依赖已经存在于当前源码工作空间中,不再从系统软件源安装。
--rosdistro noetic
按照 ROS Noetic 解析依赖。
-y
自动确认 apt 安装。
--skip-keys libfranka
跳过二进制 libfranka,使用本文手动编译的 libfranka 0.8.0。
其中最重要的是:
--skip-keys libfranka
否则 rosdep 可能尝试通过 apt 安装系统仓库中的另一个 libfranka 版本。
正常结束时应看到:
All required rosdeps installed successfully
十五、检查是否意外安装了二进制版本
执行:
dpkg -l | grep -E "ros-noetic-(libfranka|franka-ros)"
理想情况下没有输出。
如果意外安装了:
ros-noetic-libfranka
ros-noetic-franka-ros
可以删除:
sudo apt remove -y \
ros-noetic-libfranka \
ros-noetic-franka-ros
然后重新执行 rosdep,确保保留:
--skip-keys libfranka
十六、编译 franka_ros 0.8.0
16.1 检查 FrankaConfig.cmake
执行:
test -f \
~/catkin_franka/libfranka/build/FrankaConfig.cmake \
&& echo "FrankaConfig OK" \
|| find ~/catkin_franka/libfranka/build \
-name "FrankaConfig.cmake"
正常应输出:
FrankaConfig OK
或者显示实际文件路径。
16.2 清理旧的 Catkin 编译目录
进入工作空间:
cd ~/catkin_franka
如果以前编译失败过,建议清理:
rm -rf build devel
注意,这里删除的是:
~/catkin_franka/build
~/catkin_franka/devel
不要删除:
~/catkin_franka/libfranka/build
因为后者是刚刚编译好的 libfranka。
16.3 加载 ROS 环境
source /opt/ros/noetic/setup.bash
16.4 编译 franka_ros
执行:
catkin_make \
-j8 \
-DCMAKE_BUILD_TYPE=Release \
-DFranka_DIR:PATH="$HOME/catkin_franka/libfranka/build"
注意参数名称:
Franka_DIR
大小写必须正确。
路径必须指向:
~/catkin_franka/libfranka/build
不能写成:
~/catkin_franka/libfranka
因为 FrankaConfig.cmake 位于 build 目录中。
编译过程中会依次构建:
franka_msgs
franka_description
franka_hw
franka_control
franka_gripper
franka_example_controllers
franka_visualization
具体顺序可能有所不同。
成功时应看到:
[100%] Built target ...
并生成:
~/catkin_franka/build
~/catkin_franka/devel
检查:
ls -ld \
~/catkin_franka/build \
~/catkin_franka/devel
两个目录都应存在。
十七、配置 franka_ros 环境变量
将工作空间加入 ~/.bashrc:
grep -qxF \
'source ~/catkin_franka/devel/setup.bash' \
~/.bashrc \
|| echo \
'source ~/catkin_franka/devel/setup.bash' \
>> ~/.bashrc
加载:
source ~/.bashrc
检查:
echo "$ROS_DISTRO"
应输出:
noetic
查看 ROS 包路径:
echo "$ROS_PACKAGE_PATH"
应包含:
/home/用户名/catkin_franka/src
十八、验证 franka_ros 是否编译成功
18.1 检查核心功能包
rospack find franka_control
应返回:
/home/用户名/catkin_franka/src/franka_ros/franka_control
继续检查:
rospack find franka_hw
rospack find franka_description
rospack find franka_gripper
rospack find franka_example_controllers
都应返回对应目录。
18.2 查看全部 Franka ROS 包
rospack list | grep franka
应看到多个 Franka 相关包。
18.3 检查两个版本
检查 libfranka:
cd ~/catkin_franka/libfranka
git describe --tags --exact-match
应输出:
0.8.0
检查 franka_ros:
cd ~/catkin_franka/src/franka_ros
git describe --tags --exact-match
也应输出:
0.8.0
十九、最终目录结构
安装完成后,目录大致如下:
/home/用户名/catkin_franka/
├── build/
│ ├── franka_control/
│ ├── franka_description/
│ ├── franka_example_controllers/
│ ├── franka_gripper/
│ ├── franka_hw/
│ └── franka_msgs/
├── devel/
│ ├── include/
│ ├── lib/
│ ├── share/
│ └── setup.bash
├── libfranka/
│ ├── build/
│ │ ├── examples/
│ │ │ └── communication_test
│ │ ├── FrankaConfig.cmake
│ │ ├── libfranka.so
│ │ ├── libfranka.so.0.8
│ │ └── libfranka.so.0.8.0
│ ├── common/
│ ├── examples/
│ ├── include/
│ └── src/
└── src/
├── CMakeLists.txt
└── franka_ros/
├── franka_control/
├── franka_description/
├── franka_example_controllers/
├── franka_gripper/
├── franka_hw/
├── franka_msgs/
├── franka_ros/
└── franka_visualization/
二十、连接 Franka 机械臂
本文示例使用:
电脑有线网卡:192.168.1.102/24
Franka:192.168.1.110
电脑和 Franka 必须位于同一网段,但 IP 不能相同。
例如:
电脑: 192.168.1.102
Franka:192.168.1.110
20.1 查看网卡名称
nmcli device status
假设有线网卡名称为:
enp4s0
20.2 设置静态 IP
删除可能存在的旧连接:
sudo nmcli connection delete franka 2>/dev/null || true
创建 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 "" \
ipv6.method disabled
启用:
sudo nmcli connection up franka
检查:
ip -br addr show enp4s0
应看到:
enp4s0 UP 192.168.1.102/24
20.3 检查路由
ip route get 192.168.1.110
正常应看到:
192.168.1.110 dev enp4s0 src 192.168.1.102
20.4 测试通信
ping -c 5 192.168.1.110
理想结果:
0% packet loss
局域网直连延迟通常在毫秒以下。
二十一、打开 Franka Desk
浏览器输入:
https://192.168.1.110
如果浏览器提示证书不安全,可以选择:
高级
继续访问
这是因为 Franka Desk 使用局域网中的自签名证书。
在运行控制程序前,应确认:
1. Franka Control 已开机
2. 急停已经释放
3. 机械臂没有错误
4. 机械臂已经解锁
5. FCI 功能可用
6. 机械臂周围没有人员和障碍物
二十二、运行 communication_test
安全提醒
communication_test 可能控制机械臂运动。
运行前必须:
1. 清空机械臂工作空间
2. 确认末端工具安装牢固
3. 确认急停可用
4. 保持人员远离机械臂
5. 在 Franka Desk 中解除错误并解锁机器人
22.1 进入示例目录
cd ~/catkin_franka/libfranka/build/examples
检查程序:
ls -lh communication_test
22.2 检查实时权限
groups
ulimit -r
ulimit -l
推荐看到:
用户属于 realtime 组
ulimit -r = 99
ulimit -l = unlimited
22.3 运行测试
./communication_test 192.168.1.110 \
2>&1 | tee ~/communication_test_080.log
测试结束后查看:
tail -n 30 ~/communication_test_080.log
重点关注:
Control command success rate
lost robot states
网络测试不能只看普通 ping。真正能否稳定控制,还需要结合:
实时内核调度延迟
有线网卡性能
丢包情况
communication_test 结果
综合判断。
二十三、测试 franka_ros 是否可以连接真机
先加载环境:
source /opt/ros/noetic/setup.bash
source ~/catkin_franka/devel/setup.bash
查看 franka_control 的启动文件:
roscd franka_control
find launch -maxdepth 1 -type f -name "*.launch" -print
查看启动参数:
grep -n "<arg" \
~/catkin_franka/src/franka_ros/franka_control/launch/franka_control.launch
通常可以使用:
roslaunch franka_control franka_control.launch \
robot_ip:=192.168.1.110
不同版本的启动文件参数可能不同,因此建议先查看:
roslaunch franka_control franka_control.launch --args
如果该版本支持 load_gripper 参数,并且暂时不需要夹爪,可以根据实际启动文件设置:
roslaunch franka_control franka_control.launch \
robot_ip:=192.168.1.110 \
load_gripper:=false
不要直接添加启动文件中不存在的参数。
二十四、查看 Franka ROS 话题
启动 franka_control 后,打开另一个终端:
source ~/.bashrc
查看 Franka 相关话题:
rostopic list | grep franka
查看一次机器人状态:
rostopic echo -n 1 \
/franka_state_controller/franka_states
如果能够输出关节位置、速度、力矩、末端位姿等状态信息,说明 ROS 已经成功读取机械臂状态。
查看控制器:
rosservice call /controller_manager/list_controllers
也可以使用:
rostopic hz \
/franka_state_controller/franka_states
查看状态发布频率。
二十五、测试 ROS Master
单独验证 ROS 时,可以打开一个终端:
source ~/.bashrc
roscore
看到:
started core service [/rosout]
表示 ROS Master 正常。
再打开第二个终端:
source ~/.bashrc
rosnode list
应看到:
/rosout
测试完成后,在运行 roscore 的终端按:
Ctrl + C
退出。
二十六、常见问题
26.1 找不到 libfranka 标签 0.8.0
如果执行:
git describe --tags --exact-match
没有输出 0.8.0,检查:
cd ~/catkin_franka/libfranka
git tag -l | grep '^0\.8\.0$'
如果仓库不是使用 --branch 0.8.0 下载的,可以执行:
git fetch --all --tags
git checkout 0.8.0
git submodule update --init --recursive
然后重新创建 build 目录编译。
26.2 common 子模块为空
如果:
ls ~/catkin_franka/libfranka/common
发现目录为空,执行:
cd ~/catkin_franka/libfranka
git submodule sync --recursive
git submodule update --init --recursive
再次检查:
git submodule status
26.3 CMake 找不到 Eigen
如果出现与 Eigen3 有关的错误,执行:
sudo apt install -y libeigen3-dev
然后重新配置:
cd ~/catkin_franka/libfranka
rm -rf build
mkdir build
cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTS=OFF \
..
26.4 CMake 找不到 Poco
如果出现与 Poco 有关的错误,执行:
sudo apt install -y libpoco-dev
然后重新运行 CMake。
26.5 franka_ros 找不到 FrankaConfig.cmake
如果编译 franka_ros 时出现:
Could not find a package configuration file provided by "Franka"
先查找:
find ~/catkin_franka/libfranka/build \
-name "FrankaConfig.cmake" \
-print
如果文件存在,重新编译时明确指定:
cd ~/catkin_franka
catkin_make \
-j8 \
-DCMAKE_BUILD_TYPE=Release \
-DFranka_DIR:PATH="$HOME/catkin_franka/libfranka/build"
如果文件不存在,说明 libfranka 的 CMake 配置或编译没有成功,应先重新编译 libfranka。
26.6 rosdep 尝试安装其他版本的 libfranka
安装 franka_ros 依赖时必须使用:
--skip-keys libfranka
完整命令:
rosdep install \
--from-paths src \
--ignore-src \
--rosdistro noetic \
-y \
--skip-keys libfranka
26.7 rospack 找不到 franka_control
如果出现:
package 'franka_control' not found
先加载环境:
source /opt/ros/noetic/setup.bash
source ~/catkin_franka/devel/setup.bash
再执行:
rospack profile
rospack find franka_control
确认 ~/.bashrc 中存在:
source /opt/ros/noetic/setup.bash
source ~/catkin_franka/devel/setup.bash
检查:
grep -n \
"noetic/setup.bash\|catkin_franka/devel/setup.bash" \
~/.bashrc
26.8 找不到 libfranka.so
如果运行程序时出现:
error while loading shared libraries: libfranka.so
先执行:
export LD_LIBRARY_PATH="$HOME/catkin_franka/libfranka/build:$LD_LIBRARY_PATH"
重新运行程序。
如果确认这样可以解决,再写入 ~/.bashrc:
grep -qxF \
'export LD_LIBRARY_PATH=$HOME/catkin_franka/libfranka/build:$LD_LIBRARY_PATH' \
~/.bashrc \
|| echo \
'export LD_LIBRARY_PATH=$HOME/catkin_franka/libfranka/build:$LD_LIBRARY_PATH' \
>> ~/.bashrc
加载:
source ~/.bashrc
没有出现动态库错误时,不必主动添加这一项。
26.9 编译失败后如何重新编译 libfranka
只删除 libfranka 自己的构建目录:
cd ~/catkin_franka/libfranka
rm -rf build
mkdir build
cd build
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_TESTS=OFF \
..
cmake --build . -j8
26.10 编译失败后如何重新编译 franka_ros
删除 Catkin 构建结果:
cd ~/catkin_franka
rm -rf build devel
不要删除:
~/catkin_franka/libfranka/build
然后重新编译:
source /opt/ros/noetic/setup.bash
catkin_make \
-j8 \
-DCMAKE_BUILD_TYPE=Release \
-DFranka_DIR:PATH="$HOME/catkin_franka/libfranka/build"
26.11 无法打开 Franka Desk
先检查物理链路:
sudo ethtool enp4s0 | grep -E \
"Speed|Duplex|Link detected"
应看到:
Speed: 1000Mb/s
Duplex: Full
Link detected: yes
检查电脑 IP:
ip -br addr show enp4s0
检查路由:
ip route get 192.168.1.110
检查通信:
ping -c 5 192.168.1.110
能 ping 通后,在浏览器输入:
https://192.168.1.110
26.12 可以 ping 通,但控制程序无法连接
依次检查:
1. Franka Desk 中是否已解锁
2. 急停是否释放
3. 是否存在 Reflex 或其他错误
4. FCI 是否启用
5. 是否有其他程序占用了机器人控制连接
6. libfranka 版本是否与机械臂系统要求一致
7. 当前程序中的机器人 IP 是否正确
同一时间通常只能有一个程序占用机器人实时控制接口。
退出之前的控制程序后,再重新尝试。
二十七、完整检查命令
安装完成后,可以执行以下检查:
echo "===== 实时系统 ====="
uname -r
cat /sys/kernel/realtime 2>/dev/null || true
ulimit -r
ulimit -l
echo "===== ROS ====="
echo "$ROS_DISTRO"
rosversion -d
which roscore
which catkin_make
echo "===== libfranka ====="
cd ~/catkin_franka/libfranka
git describe --tags --exact-match
find build -name "libfranka.so*" -print
find build -name "FrankaConfig.cmake" -print
find build -name "communication_test" -print
echo "===== franka_ros ====="
cd ~/catkin_franka/src/franka_ros
git describe --tags --exact-match
echo "===== ROS packages ====="
source /opt/ros/noetic/setup.bash
source ~/catkin_franka/devel/setup.bash
rospack find franka_control
rospack find franka_hw
rospack find franka_description
echo "===== Franka 网络 ====="
ip route get 192.168.1.110
ping -c 3 192.168.1.110
理想结果:
ROS:Noetic
libfranka:0.8.0
franka_ros:0.8.0
libfranka.so:存在
FrankaConfig.cmake:存在
communication_test:存在
franka_control:ROS 可以找到
franka_hw:ROS 可以找到
Franka IP:可以 ping 通
二十八、安装完成后的备份建议
建议备份以下信息:
cd ~/catkin_franka/libfranka
git rev-parse HEAD
git describe --tags --exact-match
cd ~/catkin_franka/src/franka_ros
git rev-parse HEAD
git describe --tags --exact-match
可以保存到文本文件:
{
echo "===== libfranka ====="
cd ~/catkin_franka/libfranka
git describe --tags --exact-match
git rev-parse HEAD
echo "===== franka_ros ====="
cd ~/catkin_franka/src/franka_ros
git describe --tags --exact-match
git rev-parse HEAD
} > ~/franka_versions.txt
查看:
cat ~/franka_versions.txt
建议同时备份:
~/.bashrc
~/catkin_franka
实时内核安装包
网卡静态 IP 配置
机械臂 IP 地址
二十九、卸载方法
如果只想删除源码版本,先关闭所有 ROS 和 Franka 程序,然后执行:
rm -rf ~/catkin_franka
再从 ~/.bashrc 中删除:
source ~/catkin_franka/devel/setup.bash
如果曾经添加过动态库路径,也删除:
export LD_LIBRARY_PATH=$HOME/catkin_franka/libfranka/build:$LD_LIBRARY_PATH
然后重新加载:
source ~/.bashrc
如果没有执行过 sudo make install,删除工作空间即可,不需要清理 /usr/local。
三十、总结
本文完成了:
1. 检查 Ubuntu 20.04 和 ROS Noetic 环境
2. 创建 ~/catkin_franka 工作空间
3. 下载 libfranka 0.8.0
4. 初始化 common 子模块
5. 编译 libfranka 0.8.0
6. 检查 libfranka.so 和 FrankaConfig.cmake
7. 生成 communication_test
8. 下载 franka_ros 0.8.0
9. 使用 rosdep 安装 ROS 依赖
10. 跳过系统二进制 libfranka
11. 指定本地 Franka_DIR 编译 franka_ros
12. 配置 Catkin 环境变量
13. 检查 franka_control 和 franka_hw
14. 配置电脑与 Franka 的直连网络
15. 测试 communication_test
16. 使用 franka_ros 读取真机状态
最终目录:
~/catkin_franka/libfranka
~/catkin_franka/libfranka/build
~/catkin_franka/src/franka_ros
~/catkin_franka/build
~/catkin_franka/devel
最终版本:
libfranka 0.8.0
franka_ros 0.8.0
ROS Noetic
Ubuntu 20.04
最终验证:
cd ~/catkin_franka/libfranka
git describe --tags --exact-match
输出:
0.8.0
执行:
cd ~/catkin_franka/src/franka_ros
git describe --tags --exact-match
输出:
0.8.0
执行:
source ~/catkin_franka/devel/setup.bash
rospack find franka_control
能够返回 franka_control 的源码路径。
至此,Ubuntu 20.04 + ROS Noetic 环境下的 libfranka 0.8.0 和 franka_ros 0.8.0 已经完成源码安装。