实验室买来一台 franka 机械臂,近日都在忙于机械臂的上位机环境配置,参考了官方的配置文档以及网上一些大佬的博客,现做一些总结。
Franka 官方配置文档:https://frankaemika.github.io/docs/installation_linux.html
FrankaEmika_Panda 环境配置:https://www.jianshu.com/p/664b4cf76606
Franka 官方文档给出了 Linux 和 Windows 的配置方案,但在实验室里我们常用的实验环境是 Linux 系统,所以在 Windows 系统的配置方案就没有亲自去实践,此处不再介绍。
1. 硬件条件
- Ubuntu 16.04 系统
- Ros kinetic
- Moveit
2. 安装Ros功能包
两种方式安装:二进制包安装,源码安装
2.1 二进制包安装
sudo apt-get install ros-kinetic-libfranka ros-kinetic-franka-ros
终端中一道命令即可解决,方便快捷,但是这些功能包全部安装到根目录下:/opt/ros/kinetic/share
该目录下存有很多 Ros 相关的文件,查看、使用起来很不方便,日后使用容易造成混乱。
本人也是通过源码安装方式失败才尝试此种方法,但安装成功后,有些文件找不到,最后还是重新肝源码安装。
2.2 源码安装
开始之前,若尝试过上边的二进制包安装方式,一定要执行一下命令:
sudo apt remove "*franka*" //删除跟franka 相关的文件
防止后面的编译冲突
2.2.1 安装编译 libfranka
建议新建一个工作空间,放置跟 franka 相关的文件
mkdir -p ~/catkin_franka/src
cd ~/catkin_franka/src
catkin_init_workspace
cd ~/catkin_franka
source devel/setup.bash //建议添加到 ./bsahrc 文件中
# 1.安装依赖
sudo apt install build-essential cmake git libpoco-dev libeigen3-dev# 2.选择位置下载保存 libfranka
cd ~/catkin_franka
git clone --recursive https://github.com/frankaemika/libfranka //默认下载最新版本# 3.编译安装
cd libfranka
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
- 可能出现连不上
https://github.com
的情况,可在网址前面加上https://ghproxy.com/
。 - 下载也可能下到的是不完整的版本,common文件夹是空的,需要手动下载common文件夹,替换原来的空common文件夹。
- 执行这一步
cmake -DCMAKE_BUILD_TYPE=Release ..
时,也可能出现timeout
的情况,可在libfranka/cmake/GoogleTest-CMakeLists.txt.in
文件中加入如下内容
注意:一定要编成
release
版,否则,后期可能存在通讯问题,libfanka
因为通讯频率不够,接不上 FCI ,出现机械臂动不了的情况
至此,libfranka
已经编译完成。
2.2.2 安装编译 franka_ros
# 1.选择位置下载保存 franka_ros
cd ~/catkin_franka/src
git clone --recursive https://github.com/frankaemika/franka_ros //默认下载最新版本# 2.下载安装依赖
rosdep install --from-paths src --ignore-src --rosdistro kinetic -y --skip-keys libfranka#All required rosdeps installed successfully# 3.编译安装
catkin_make -DCMAKE_BUILD_TYPE=Release -DFranka_DIR:PATH=/path/to/libfranka/build
source devel/setup.sh
-
在下载安装依赖那一步可能会出现
rosdep
失败的情况 ,这可能是我在安装 ROS 时忽略了rosdep update
失败的后果,隔壁的师兄刚装的新系统,这一步就直接执行成功了。出现这种失败的情况,终端中会报出相应的错误原因,提示缺少什么,记得其中有一个panda_moveit_config
,还有其他几个包(combined_robot_hw、gazebo_ros_control),可直接手动安装sudo apt-get install ros-kinetic-panda-moveit-config
-
panda_moveit_config
包也可以git 一下,放在franka_ros
包里,这种方式方便以后的代码查看 -
git clone https://github.com/ros-planning/panda_moveit_config.git
-
在编译安装之前,提前看一下下载下来的
franka_ros
包里是不是还有一个franka_ros
包,这个包与上一层的包名重复,要把里层的franka_ros
包移除,才能编译成功 -
PATH=/path/to/libfranka/build
这一命令不要傻乎乎的直接执行,需要换成自己的libfranka/build
的路径,如果按照我的安装思路走下来的,此处换成PATH=~/catkin_franka/libfranka/build
即可 -
我在编译安装的时候还出现了 gazebo 版本过低的错误,为省事,直接将
franka_gazebo
包也移除了,后期若在 gazebo 中建模,还需升级一下 -
source devel/setup.sh
若是在之前建立工作空间时,已写入./bsahrc
文件中,可忽略此步 -
以上方法还是不能通过的话,还有一个比较麻烦的方法,挨个编译功能包,缺少依赖安装相应依赖
–catkin_make -DCATKIN_WHITELIST_PACKAGES="包名"
3. 安装实时内核
与一般机器人不同的是,Franka 机械臂需要实时内核,使用 libfranka
控制机械臂
3.1 首先,安装必要的依赖
sudo apt-get install build-essential bc curl ca-certificates fakeroot gnupg2 libssl-dev lsb-release libelf-dev bison flex
3.2 选择实时内核的版本
使用uname -r
可查看当前电脑使用的内核版本,一般不是实时内核,我们需要自行安装编译实时内核。
- Linux实时内核网址:https://www.kernel.org/pub/linux/kernel/projects/rt/
推荐使用与自己电脑当前内核最接近的内核版本,本人直接下载的是Franka 官方文档提供的 4.14.12-rt10
从网上了解,选择实时内核版本时,不必选择与自带内核号一致的版本,也可以安装对应的generic内核。有时候甚至可能出现在某一版本内核下编译出错,换一个内核却可以的情况,但自己也是道听途书,没有亲身经历,不怕麻烦的可以试试。
# 1.新建一个文件夹用于存储内核的相关文件
mkdir ~/kernel && cd ~/kernel# 2.下载kernel and patch
curl -SLO https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.12.tar.xz
curl -SLO https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.14.12.tar.sign
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.12-rt10.patch.xz
curl -SLO https://www.kernel.org/pub/linux/kernel/projects/rt/4.14/older/patch-4.14.12-rt10.patch.sign# 3.解压
xz -d linux-4.14.12.tar.xz
xz -d patch-4.14.12-rt10.patch.xz
- 下载 kernel 时,速度很慢,可以换网络试试,手机热点速度稍微快一点
走到这一步,Franka 官方文档中提到一个验证下载文件的完整性,尝试了几次,连不上 hkp://keys.gnupg.net 直接放弃验证,大胆相信下载文件是完整的。验证步骤在Franka 官方文档可见,此处不再赘述。
3.3 编译内核
# 1.提取源代码并应用补丁
tar xf linux-4.14.12.tar
cd linux-4.14.12
patch -p1 < ../patch-4.14.12-rt10.patch# 2.配置内核
make oldconfig
make oldconfig
会打开一个基于文本的配置菜单,当被问及抢占模型(Preemption Model)时,选择完全抢占内核(Fully Preemptible Kernel),保持其他设置为默认,按回车即可,待设置完成。
Preemption Model1. No Forced Preemption (Server) (PREEMPT_NONE)2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY)3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT__LL) (NEW)4. Preemptible Kernel (Basic RT) (PREEMPT_RTB) (NEW)> 5. Fully Preemptible Kernel (RT) (PREEMPT_RT_FULL) (NEW)
此时已经准备好编译内核,执行以下命令,根据自己电脑的 CPU 核数,调整 -j
后面的数字,保证每个 CPU 核都用上,节省时间。
fakeroot make -j4 deb-pkg
此时可以休息一会了,因为编译内核的过程很漫长,可以出去转转或者干点其他事。
待编译完成,在 kernel 文件夹里会多出几个.deb
包,就可以安装了。
sudo dpkg -i ../linux-headers-4.14.12-rt10_*.deb ../linux-image-4.14.12-rt10_*.deb
安装完成后,重启一下,在 grub 引导界面的 Ubuntu高级选项 里就有自己安装的实时内核了。
尝试直接进普通模式,如果可以正常进入则说明安装的挺好。如果进去黑屏了,也不用慌,还可以试试从 recovery 模式进去。遇到红色界面,按 enter ,看看能不能行。若是还不行,只能卸载内核,重新装了……
3.4 验证内核
进入安装的实时内核后,使用 uname -r
检查一下内核版本是否正确
若安装正确,在 /sys/kernel/realtime
文件里有一个 1 。
3.5 添加实时组许可
sudo addgroup realtime
sudo usermod -a -G realtime $(whoami)
$(whoami)
可以改成自己的用户名,不改也可以,不影响
修改 /etc/security/limits.conf
将以下限制添加到实时组,
sudo gedit /etc/security/limits.conf
# 限制内容
@realtime soft rtprio 99
@realtime soft priority 99
@realtime soft memlock 102400
@realtime hard rtprio 99
@realtime hard priority 99
@realtime hard memlock 102400
重启一下,配置过程就结束了。
4. 测试环境
配置得这么辛苦,还不是为了能让机械臂动起来,赶紧来测试一下吧!
在 libfranka/build/examples
路径下打开终端
运行
./communication_test 172.16.0.2
根据终端提示,按一下 enter
机械臂动了一下,跳出一串通讯信息,最后提示10000次姿态,丢了xx次,证明 libfranka
和 FCI 连上了
该路径下还有其他 build 好的例子,都可以尝试一下,指令结尾记得添加机械臂的 ip
试一试 franka_ros
roslaunch franka_example_controllers move_to_start.launch robot_ip:=172.16.0.2
会出现 RVIZ 界面,若报错,根据终端信息进行相应改错。
打开 RVIZ 界面,拖动 InteractiveMarkers ,机械臂立刻响应做出动作,终端不报错,环境搭建就没有太大问题。
终于配好环境,写好总结,长舒一口气,就看以后发挥了。