Franka_ros从源码编译到机械臂联调:一个机器人工程师的踩坑笔记
作为一名在工业机器人领域摸爬滚打了多年的工程师,我接触过不少品牌的机械臂,但Franka Emika的Panda机械臂以其开源性、高精度和柔顺控制能力,始终在协作机器人领域占据着独特的位置。然而,将这台精密的设备与ROS(Robot Operating System)生态系统无缝对接,尤其是从源码开始构建整个控制栈,其过程远非官方文档中寥寥数语那般轻松。这更像是一场与编译环境、版本依赖、网络配置和实时内核的“搏斗”。如果你也正面对着一台崭新的Panda机械臂和一份官方指南感到无从下手,那么这篇笔记或许能为你照亮前路。我将以第一人称视角,详细记录从零开始,在Ubuntu 20.04 + ROS Noetic环境下,完成libfranka与franka_ros源码编译,并最终成功驱动机械臂的全过程。这不是一份简单的操作清单,而是一份融入了大量实际工程细节、报错分析与解决方案的实战指南,目标读者是那些已有ROS基础,但首次接触Franka平台的开发者。
1. 环境准备:版本对齐是成功的基石
在开始任何操作之前,我们必须明确一个核心原则:版本兼容性。Franka的软件栈对系统版本、ROS发行版以及自身库版本有着严格的要求。盲目安装最新版本往往是灾难的开始。
我使用的环境是:
- 操作系统: Ubuntu 20.04.6 LTS
- ROS发行版: Noetic Ninjemys (完整桌面版安装)
- 机械臂控制柜固件: 4.0.4 (可在机械臂示教器Desk界面查看)
- 目标libfranka版本: 0.8.0 (与ROS Noetic官方推荐匹配)
注意:根据官方文档,
libfranka0.8.0是支持ROS Noetic的最低版本。使用不匹配的版本(例如为ROS Melodic设计的0.7.x)将导致编译失败或运行时出现难以排查的链接错误。
1.1 系统依赖与工具链确认
首先,确保系统已安装必要的编译工具和ROS基础环境。如果你已经安装了ROS Noetic,可以跳过部分步骤。
# 更新软件包列表并升级现有软件
sudo apt update && sudo apt upgrade -y
# 安装编译必需工具
sudo apt install -y build-essential cmake git libpoco-dev libeigen3-dev
# 确认CMake版本(建议3.16+)
cmake --version
# 确认GCC版本(Ubuntu 20.04默认gcc-9,符合要求)
gcc --version
1.2 创建工作空间与源码获取
我习惯为不同的机器人平台创建独立的工作空间,以避免依赖污染。这里我们创建一个名为franka_ws的Catkin工作空间。
# 创建并进入工作空间
mkdir -p ~/franka_ws/src
cd ~/franka_ws
接下来是获取源码。这里有一个关键选择:二进制安装还是源码编译? 官方提供了两种方式。二进制安装 (sudo apt install ros-noetic-libfranka ros-noetic-franka-ros) 看似简单,但仓库中的版本可能滞后,且无法进行自定义修改。对于需要深入开发或使用特定版本的我来说,源码编译是唯一选择。
首先,我们需要编译核心库 libfranka。务必注意,在编译franka_ros之前,必须先成功编译并安装libfranka。
# 进入src目录,克隆libfranka源码(指定0.8.0版本)
cd src
git clone --recursive --branch 0.8.0 https://github.com/frankaemika/libfranka.git
cd libfranka
1.3 编译与安装libfranka
进入libfranka目录后,我们开始编译。这里我强烈建议先阅读README.md,但以下命令是经过验证的流程。
# 创建并进入构建目录
mkdir build && cd build
# 配置CMake。关闭测试以加快编译,设置构建类型为Release以获得优化性能。
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=OFF ..
执行cmake时,你可能会遇到一个关于pinocchio库的常见错误:
CMake Error at CMakeLists.txt:42 (find_package):
By not providing "Findpinocchio.cmake" in CMAKE_MODULE_PATH this project
has asked CMake to find a package configuration file provided by
"pinocchio", but CMake did not find one.
这是因为libfranka的某些示例或工具依赖pinocchio动力学库。对于基础的控制功能,这个依赖不是必须的。我们可以通过安装


410

被折叠的 条评论
为什么被折叠?



