本文总结了笔者在学习使用Franka Panda机器人时的一些方法和经验总结。

文章目录

  • 从零开始
  • 软件安装
  • libfranka使用指南
    • 源码编译
    • HelloWorld
    • 机器人控制
    • 信息输出
    • 机器人模型库
    • 电爪控制
  • franka_ros使用指南
    • 源码编译
  • Moveit!
  • CoppeliaSim仿真
  • 其它参考

从零开始


准备:

  • 一台Franka Panda机器人(确定已购买科研包)。
  • 一台运行Linux系统的PC。
  • 一根尽可能好的以太网线。

基础知识:

  • 机器人学基础。
  • C++编程基础。
  • Linux操作系统基础。
  • ROS系统基础。

更多使用方法请参考FCI手册。

搭建好你的工作空间后,可以考虑先用机器人自带的Desk界面先试用一下。首先用以太网线连接工作站(台式机或笔记本,这里简称工作站)和机器人。注意Franka机器人有两个以太网口,一个在机器人底座上,一个在控制柜上。二者是不同的,但是都可以使用。

  • 如果连接到机器人底座,此时机器人是server模式,可以通过“robot.franka.de”访问desk。
  • 如果连接到控制柜,此时机器人是client模式,只能通过ip地址访问desk。

Desk的用法十分简单,此时不做介绍。

软件安装

强烈推荐使用Linux系统,这样可以省去很多麻烦。Franka编程一般时两种模式,即使用ROS或者直接调用API。这里假设两种方法全都需要。

笔者使用的操作系统是 Ubuntu 16.04 (64位)。

首先安装ROS
笔者安装的是 Kinetic Kame 版本。Franka官网其实也支持 Ubuntu 18.04 以及对应的ROS版本 Melodic Morenia。ROS的安装十分简单,ROS wiki中有详细叙述,此处从略。

安装franka_ros
有两种安装方式,即直接使用binary package安装和从source搭建。通常情况下前一种方式就足够了。

sudo apt-get install ros-kinetic-libfranka ros-kinetic-franka-ros

安心等待安装完即可,这个过程有点费时。

注意以上方法安装完成后,libfranka会被安装到ROS的目录下,且安装的不一定是最新版本。如果要使用最新版本,需要使用源码编译,下文中介绍libfranka和franka_ros时会提到。

编译real-time内核
使用Franka需要实时内核。这与一般的机器人如UR是有区别的。linux的实时内核的构建方法有多种,这里给出笔者的方法。更多方法请参考其它参考部分。

首先查看当前系统的Linux内核版本,方法是在终端输入:uname -r
随后终端会提示当前Linux内核的版本,笔者的是4.15.0-generic。注意这不是实时内核,我们需要自行安装编译实时内核。选择实时内核的版本没有什么推荐,自己选一个就好。可以安装多个内核并在高级启动时自行切换。

内核的安装编译方法可参考Franka FCI手册,但是该方法在网络连接不畅时极其慢,不推荐使用。笔者采用的是此文的方法。选择的内核版本是4.19.82-rt30。注意:选择实时内核版本时,不必选择与自带内核号一致的版本。也可以安装对应的generic内核,这是非必要的。有时候甚至可能出现在某一版本内核下编译出错,换一个内核却可以的情况。

编译过程非常费时,完成后需要调整默认的内核启动系统才能自行进入实时内核。对于没有安装双系统的用户PC启动时可能不会出现高级启动选项。解决方法是在启动PC并弹出品牌logo时狂按右边的shift键,随后黑屏时按住右边的shift键不放手。随后系统会进入高级启动选项。

注意:有些时候可能会无法进入所选内核,系统提示“vmlinuz-… invalid signiture”,解决方案是在BIOS里面关闭Secure boot功能。

系统启动后别忘了用uname -r或者uname -a检查内核是否已经正确切换到实时内核。

注意:内核是安装在系统的boot分区下的,因此务必保证该分区空间充足,如何希望保存两个内核( generic 和 rt 内核)的话,建议boot分区大于4G,以便后续内核更新不会出现问题。

禁用CPU节能策略
为了安全性和性能起见,建议配置完成后关闭系统的CPU频率调整功能。
首先安装工具cpufrquentiles:

sudo apt install cpufrequtils

完成后,运行cpufreq-info查看当前CPU状态,当前“governor”属性可能是“powersave”模式,我们需要将其修改为“performance”模式。

cpufreq-info

修改方法有多种,可以采用indicator-cpufreq工具在UI界面手动修改。也可通过指令修改,运行如下指令:

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

使用过程中遇到的其它问题可参考FCI手册中Troubleshooting栏目。

libfranka使用指南

如果只是单纯开环控制机器人,对反馈信号等没有要求,使用libfranka提供的C++ API是一种更方便的编程方法。该方法同样也适用于Windows系统。

为了节省页面,libfranka 的详细使用方法请参考此文。 本文中不做详细介绍,仅探讨基本思想。

源码编译

这里首先介绍下libfranka的源码安装编译方法,注意如果已经采用上述方法安装ros-kinetic-libfranka,那么此步骤可以跳过,libfranka已经被默认安装在ROS目录下(/opt/ros/kinetic/)。但是,如果想要安装最新版本的libfranka,必须采用源码编译,且在此之前必须删除之前安装的libfranka和franka_ros以防冲突。

sudo apt remove "*libfranka*"

第1步,删除完成后,首先安装依赖库:

sudo apt install build-essential cmake git libpoco-dev libeigen3-dev

第2步,找到一个合适的位置,从Github下载源码,并进入libfranka源文件夹:

git clone --recursive https://github.com/frankaemika/libfranka
cd libfranka

第3步,在源文件夹下创造一个名为build的路径,并在其中启动CMake编译:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .

HelloWorld

libfranka自带的例程对于理解libfrank非常有效,本节简单介绍下例程的使用方法。机器人上电后,首先通过浏览器进入Desk界面,此时机器人是锁定状态(黄色灯亮),在Desk界面接触锁定,进入准备运动模式(蓝色灯亮)。

以Linux系统(Ubuntu 16.04)为例,首先找到libfranka文件夹所在路径。如果读者是采用apt-get install安装的,那么去/opt/ros/kinetic/下找;如果读者采用源码编译,那么去保持源码的路径下找。

在libfranka路径下首先找到 examples 文件夹,该文件夹下保存了所有的示例C++代码。如要运行,在libfranka/build/examples/ 路径下已有生成的可执行文件。此时保持机器人控制柜与计算机工作站连接,且机器人处于准备运动模式(蓝色灯亮),执行如下指令:

./communication_test "172.16.0.2"

这里以通信测试为例,其它类似,注意第一个参数是机器人的IP地址。官方推荐使用机器人控制柜与计算机工作站连接,当然连接机器人底座亦可,只不过IP地址要换成hostname,笔者不曾尝试过。开始运行时例程会提示保持急停按钮在操作者手中,并按Enter继续。可以看到机器人运动到一个位姿,终端输出通信测试结果。

注意一个问题,遇到如下错误:

UDP receive: Timeout

除了FCI Feature没有安装、网络环境不好的原因外,有可能是防火墙问题。使用libfranka必须允许UDP packages。允许UDP packages的方法是:

sudo iptables -I INPUT -p udp -j ACCEPT

机器人控制

Franka机器人控制必须以实时(Real-Time)方式进行,如上图所示。libfranka中,定义了一个名为"franka"的命名空间,其中最重要的是“franka::Robot”类,该类用于与机器人通信(I/O)。libfranka提供多种控制信号输入模式,笛卡尔空间位置、速度,关节空间位置、速度,关节力矩。这些均由一个多态的“franka::Robot::control”方法实现。

控制算法主要通过回调函数实现,官方例程如下:

double time = 0.0;
auto control_callback = [&time](const franka::RobotState& robot_state,franka::Duration time_step) -> franka::JointPositions {time += time_step.toSec();  // Update time at the beginning of the callback.franka::JointPositions output = getJointPositions(time);if (time >= max_time) {// Return MotionFinished at the end of the trajectory.return franka::MotionFinished(output);}return output;
}

注意Franka机器人工作频率是1kHz,也就是说回调函数必须在1ms之内执行完成(注意这1ms指的是整个控制周期,包括通信部分,实际留给回调函数的通常不到300us)。回调函数有两个参数

  • franka::RobotState:结构体,内含机器人的各种状态,如关节角。
  • franka::Duration:类,毫秒级时间。

通过 franka::Duration 类对象的 toSec() 方法返回时间信息(double,通常是0.001)可以实现插值。上述例程的控制模式为 franka::JointPositions 。结束这个回调函数循环使用 franka::MotionFinished 该函数的输入参数是当前控制模式下最后一个控制指令(如例程中式 franka::JointPositions 类型变量),返回值也是也是该类型指令对象,只不过该指令对象的 motion_finished 属性被赋值为 true。

如下图所示,使用 franka::Robot::control 方法可以实现两类实时功能:

  1. 运动生成
  2. 机器人控制

libfranka提供4种类型的运动生成器,如下图所示:

具体操作及其它功能可参考官方文档及例程。

libfranka运动生成器和控制器的作用机理可参考下图:

控制机器人的信号实际上是带有下标d的信号(desired),用户可以实时获取该信号来检查信号被滤波或者是否有丢包现象。

信息输出

Franka 自带重力摩擦补偿机制。由于有关节力矩传感器,使得其零力控制性能相对于UR之类的机器人更加灵敏顺畅。打开示教模式(白色灯亮),用户可以通过机器人末端的Pilot实现拖动示教,并记录一些信息。libfranka中,机器人状态由 franka::RobotState 结构体管理,实时读取的频率也是1kHz,读取数据由 franka::Robot::read 函数管理。

franka::RobotState 结构体提供了丰富的信息,主要包括三类:

  • 关节空间信息:如关节角度、角速度、关节力矩、估计出的外部力矩、碰撞/接触状态等。
  • 笛卡尔空间信息:末端参数、末端位置、速度、估计出的外部扭矩等。
  • 接口信号:最后一个控制信号和期望信号等。

机器人模型库

模型库可以提供运动学与动力学参数,包括:

  • 前向运动学。
  • 雅可比矩阵。
  • 动力学参数:质量矩阵、科氏力和向心力向量、重力向量。

使用机器人模型库读者可以计算任意姿态下的参数,不必是机器人当前姿态下的参数。具体用法可参考例程。

电爪控制

Franka 自带的电爪可以做很多事情,使用非常方便。电爪的控制是非实时(blocking)的,如下图所示。

电爪的控制由 franka::Gripper 类管理。

franka_ros使用指南


franka_ros是基于libfranka开发的ROS套件,包含了libfranka的主要功能。

源码编译

如果读者已经按照第1节中使用apt-get安装完成franka_ros,可以跳过此步骤。注意,如果读者执行了上一节中libfranka源码编译过程,那么此时对于franka_ros需要重新源码编译。

第1步,找到一个合适的位置,建立catkin工作空间,这个过程与普通ROS工作空间的建立没什么区别:

mkdir -p catkin_ws/src
cd catkin_ws
source /opt/ros/kinetic/setup.sh
catkin_init_workspace src

第2步,从Github下载franka_ros:

git clone --recursive https://github.com/frankaemika/franka_ros src/franka_ros

第3步,安装依赖库:

rosdep install --from-paths src --ignore-src --rosdistro kinetic -y --skip-keys libfranka

第4步,采用catkin_make编译catkin工作空间,注意调整libfranka的路径:

catkin_make -DCMAKE_BUILD_TYPE=Release -DFranka_DIR:PATH=/path/to/libfranka/build
source devel/setup.sh

以上就是franka_ros的源码编译流程。具体使用本文中不做介绍。

Moveit!


使用Moveit规划控制Franka是非常的容易,因为Moveit官网教程就是用Franka作为例子进行讲解的。Moveit具体的安装、配置、使用方法官网教程十分详细,此处从略。

CoppeliaSim仿真


CoppeliaSim(原名:V-REP)是一个非常方便的开源仿真工具,其特性请参考官网。4.0.0版的CoppeliaSim自带Franka机器人的模型,非常方便。不过该模型没有带官方的电爪。

CoppeliaSim 的具体使用方法请参考其它文章。

其它参考

Emika Franka 官方资料

  • Franka Control Interface
  • libfranka - GitHub
  • libfranka - github io

如何构建实时内核

  • HOWTO; Install Real-Time Linux Kernel
  • Install RT Linux patch for Ubuntu - StackOverflow

从零开始玩转Franka Panda机器人相关推荐

  1. 从零开始搭建一个语音对话机器人

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] ♪ 点击上方绿标 收听从零开始搭建一个语音对话机器人 从零开始搭建一个语音对话机器人 目录 01-初心缘由 01-准备工作 02-语音机器 ...

  2. espeak 中文语音包_从零开始搭建一个语音对话机器人

    点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐] ♪ 点击上方绿标 收听从零开始搭建一个语音对话机器人 从零开始搭建一个语音对话机器人 目录 01-初心缘由 01-准备工作 02-语音机器 ...

  3. 从零开始玩转JMX(四)——Apache Commons Modeler Dynamic MBean

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  4. 探索Franka Emika 机器人丨Powertool和Franka world的作用

    Franka Emika Powertool (FE Powertool) 为轻型设计,现已投入大批量生产.它采用了最高级的机电一体化技术,装备有一百多个传感器.从系统到部件,每个环节的设计和开发始终 ...

  5. 从零开始玩rv1126core板(零)

    从零开始玩rv1126core板 欢迎大佬指导工作 Ubuntu虚拟机搭建 软件准备: 相关指令 rv1126开发工具使用 软件下载 欢迎大佬指导工作 雪薇c语言基础,linux系统操作指令基础,st ...

  6. 从零开始玩单反 相机参数之光圈/快门篇(转)

    开篇:光圈和快门是什么 <iframe style="padding: 5px 0px 5px 5px;" src="http://stat.zol.com.cn/ ...

  7. 【从零开始玩量化9】jqktrader:同花顺客户端自动化交易

    前情提要 在 [从零开始玩量化7]easyTrader: 自动化(程序化)交易利器 ,有朋友反应,easytrader连接同花顺客户端,存在问题,验证码等问题,导致API不能正常使用. 研究了一下,的 ...

  8. 【硬件设计】如何玩转智能窗帘机器人

    如何玩转智能窗帘机器人? 随着智能家居的深入拓展,智能窗帘凭借成熟的技术和产品,逐步成为了智能家居家庭中的标配,在家装智能化市场有很高的应用价值. 目前智能窗帘的产品主要以电动窗帘产品为主,该产品主要 ...

  9. ChatGPT提示词指令大全调教指南,6个网站让你轻松玩转AI聊天机器人!

    ChatGPT提示词大揭秘!6个网站让你轻松玩转AI聊天机器人! ChatGPT 的火热程度大家都看在眼里.很多人都想知道 : 要想用好 ChatGPT 需要什么 Prompt 提示词.提问模板 经常 ...

  10. 抓球球的机器人应该怎么玩_尖塔奇兵机器人怎么玩 机器人玩法及套路

    尖塔奇兵机器人是游戏三大职业之一,这个职业怎么才能玩的好呢,下面给大家介绍该职业的玩法和套路. 机器人玩法及套路 经过beta多次对机器人的调整,强度终于正常了,大概和猎***作难度和强度相当. 15 ...

最新文章

  1. hql 语法与详细解释转
  2. Netron开发快速上手(一):GraphControl,Shape,Connector和Connection
  3. JAVA中线程同步的方法(7种)汇总
  4. 全局统一返回结果包装信息
  5. 《每日一题》49. Group Anagrams 字母异位词分组
  6. 天池大赛, Storm
  7. GCPC2017 题解
  8. python_装饰器
  9. android java 指针,opencv android:向我的代码中添加cascade分类器后出现空指针异常
  10. Cmake参数详细介绍
  11. matlab画2fsk频谱,2fsk信号调制解调频谱的matlab仿真
  12. 三句话捋清楚java垃圾收集器
  13. mysql语句中出现中文的情况下,在java程序中不会有结果,也不会报错.
  14. 拓端tecdat|【视频】R语言广义相加模型(GAM)在电力负荷预测中的应用
  15. MIKE水动力笔记5_建立水动力模型
  16. html通过拼音首字母定位,javascript实现通过拼音首字母快速选择下拉列表
  17. endnote 参考文献加序号_求助endnote 中 文末的参考文献 序号中如何设置成带中括号的 [序号]...
  18. MATLAB中 / 和 \ 的区别
  19. 蓝凌ekp开发_蓝凌EKP在eclipse中启动报错
  20. skinsdog 狗网官网CSGO饰品皮肤开箱网站可直接取回

热门文章

  1. 2022-2028中国蛋白糖果市场现状研究分析与发展前景预测报告
  2. java报错root cause_[Filtered request failed.] with root cause java.io.OptionalDataException
  3. 【Python系列】eval 函数
  4. 阿里安全研究员路全:如何运用AI对抗“数据污染”?
  5. 我国嵌入式技术及应用现状分析
  6. leetcode1480.一维数组的动态和
  7. ACM Hrbeu OJ 1201 Simplest Task in Windows || ZOJ 2480
  8. DRF框架(十四)——过滤Filtering,排序
  9. 机票三字码,对应城市及机场一览表
  10. java 线程池超时_Java线程池停止超时任务