ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂

干货在后面部分,前面不想看的可以直接跳到后面的正题

前言

0.1自己对于学习的一点感受和看法

ROS学习了两个月,自己想把学习的整个过程跟大家分享一下,让每一个对ROS完全没听过的人,甚至对于编程、计算机、通信方面的知识一点也不了解的人(其实笔者就是这样的人,这些方面能力很差)也能够用ROS的moveit工具控制真实机械臂运动。由于文字表达程度有限,后续还会出一个视频教程,敬请期待!

笔者为什么会有这方面的感受呢?因为笔者本科是机械设计专业,对于编程、计算机、通信方面的知识一点也不了解,来到硕士研究生阶段,碰到这些东西,根本不知道如何去学习,包括我现在写这篇博客的时候,还是不会编程、对于计算机知识了解还是少之又少。平时学习的时候找不到方向,每次在网上找论文、资料,这些东西要么是写的很简单,各个专业的人都能读懂,就跟读故事一样,或者这些东西要么是写的很专业,其他专业的人根本看不懂,所以缺乏了很多中间资料,平时请教别人也很困难,你请教很多专业学生,他们都会用一些专业词汇来跟你解释,而你不懂这些专业词汇,你根本就还是不明白。学习了这么久,网上也找到了很多资料,发现还是有很多老师讲的课程或者写的博客啥的都非常适合大众化学习,笔者也非常敬佩这些学者和老师,是用心在传道授业解惑,在此也对他们表示感谢,比如古月居胡春旭老师,还有网易云课堂上可以找到的极客编程老师,都是非常热心的老师,如果人人都能够分享自己的学习心得,整个学术氛围都会变得很好,当然,你能够分享你的学习过程,其实也是对所学知识的一个整合和记录的过程,对自己对他人都有帮助,互利共赢,岂不快哉!

前面说到知识的整合和记录,这个非常重要,知识爆炸的时代,我们没日没夜的学习,收获的都是碎片化的知识,很少能够静下心来对知识进行整合和记录,说白了也就是将知识连接起来,连成网络,这样在自己脑海中的印象深刻,还能够灵活加以运用。网上有一段话,专家和普通学者的区别其实就是前者脑袋中的知识已经体系化、网络化,但是很多学生、学者的知识体系还缺乏体系化。所以适当将知识与知识之间建立连接,多多思考,学而不思则罔,思而不学则殆,古人的智慧真是高大,包括“温故而知新”是一样的,学习一个知识,第一遍你会无意识忽略一些信息,但是第二遍,第三遍,甚至第四五遍学习,你会在原有知识基础上去学,你会有新的发现和收获,不信的话你去试试看。

知识的整合最好是绘制思维导图,思维导图层层嵌套,除了用笔在纸上画之外,还可以借助于计算机软件,X-mind、百度脑图等,前段时间用国产WPS居然也有了思维导图,现在思维导图的运用真是一个大趋势,信息量越多,导图越火。

0.2ROS已经实现的功能

经过了两个月的ROS学习,最近终于能够使用ROS实现真实UR5机器人的控制了,也就是采用ROS的moveit这一机械臂规划工具来跟真实机械臂连接,最后实现在电脑界面上拖动虚拟机械臂模型,点击“规划”,moveit自动规划出一条轨迹,然后点击“执行”,电脑上的机械臂模型和真实机械臂模型几乎同步完成动作。

仅仅用文字很难将整个过程说明白,但是我会尽最大努力讲明白,如果有不懂的可以给我发邮件[email protected],我能解答就解答,不能解答也可以互相讨论,可以我了解的所有相关的资料推荐给你。

当然,本教程也可能会有不足之处,望大家也能提出批评指正。

一、前期需要了解的知识和准备的东西

如果想实现用moveit驱动UR机器人,如果直接装软件、跑程序肯定也行,但是你不了解整个过程的整体体系,有时候碰到问题了也不知道如何解决,所以有必要还是了解一下比较好。

(1)先简单了解一下ROS,可以参照我的博客:
ROS简介-从零开始讲解ROS(适合超零基础阅读)

(2)准备一台电脑,笔记本台式机都可以,如果你上面安装了Windows系统,你就继续在上面安装一个Ubuntu系统,因为ROS这个开源平台需要在Ubuntu系统上运行,安装方法可以参照笔者的博客:Windows7上安装Ubuntu双系统

(3)安装ROS,注意与Ubuntu版本对应,版本的话可以自己百度了解,我安装的Ubuntu是16.04版本,ROS是安装的kinetic版本,安装ROS可以参照ROS wiki(ROS维基百科)上面的教程来安装,上面有关于安装完整版、依赖、设置环境变量,大家都一一照做,就可以开始了解ROS了。

(4)学习ROS的资源很多。
初学者:上面所说的ROS wiki上面的初学者教程、古月居博主等众多博主的博客、视频教程等;
进阶者:如果要继续开发,那必须了解很多新的知识,关于ROS moveit的,也就是机械臂运动规划的,可以看ROS moveit的官网教程、《ROS by example》等。此外,计算机原理、汇编语言、C语言、C++、数据结构与算法、网络技术等都需要了解。

二、实现步骤和过程

(原参考链接https://blog.csdn.net/fcc_bd_stars/article/details/78150729)

2.1下载UR机器人相关的各种功能包

这个包好下载,大家可以参照ROS wiki上的网址http://wiki.ros.org/universal_robot?distro=kinetic
跟着这个网址上面的安装步骤在终端界面输入命令进行安装,终端界面的打开方式是在桌面空白处鼠标右键“打开终端”。

2.2 下载UR机器人规划功能包

这个包是额外下载的,跟上面那个不一样,这个包直接用这个百度云链接下载,一步到位https://pan.baidu.com/s/1WEBBFrBhrMgbBbxVUExFOg,下载之后解压,可以先放在桌面,当然,也可以用下面的方法进行下载:

步骤(1):打开网址https://github.com/ros-industrial/universal_robot,然后出现如下界面:
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第1张图片
注意红色箭头所指之处,选择kinetic devel版本的包,然后点击黄色箭头所指的clone or download,然后就开始下载,如果下载的比较慢,建议,然后下载,比如用蓝灯软件。下载之后解压,如下图所示:
在这里插入图片描述

打开看一下,有如下文件夹,其实也是这样一个大的功能包下面一个个小的功能包:
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第2张图片
我们注意到,这里面有一个小功能包名字叫做ur_driver,这个包专门用来配置实体机器人这端的控制器参数等文件的,但是这个功能包只适用于UR机器人控制器版本3.0以下的,3.0版本及以上的不适用,大家可以在UR机器人示教器上找到相关的版本号,所以针对更新的控制器版本,我们需要一个更加新的ur_driver包,当然,这个包github上很多大神也已经写好了,只不过名字叫ur_modern_driver,我们还是需要下载,接下来步骤二就是下载这个。

步骤(2):在https://github.com/ros-industrial/ur_modern_driver/tree/kinetic-devel上下载ur_modern_driver功能包,如下图,跟上一步骤一样,还是需要选择kinetic devel版本的包,然后点击黄色箭头所指的clone or download,然后就开始下载,这个包很小,下载很快。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第3张图片
下载好之后解压,然后将第二步下载的包里面的ur_driver替换掉,也就是把原来的删除,现在下的这个放进去,就成了下图,注意,文件夹的名字都无所谓,并不是说非要叫ur_modern_driver。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第4张图片

2.3 新建工作空间,编译工作空间,设置环境变量

在电脑的根目录下,也就是Home目录下,新建一个工作空间,其实也就是新建一个文件夹,可以直接鼠标右键新建一个文件夹,取个名字,如下图,笔者电脑里面建立了三个工作空间,一个叫“catkin_ws”,一个叫“catkin_ws2”,还有一个叫catkin_ws3,本次教程我也主要在第三个工作空间“catkin_ws3”下进行操作,至于为什么取这样的名字,是因为想跟世界上学习ROS的人尽量统一命名规则,你也可以随便取。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第5张图片

打开所建立的工作空间,我这里是catkin_ws3文件夹,在里面建一个新文件夹,叫“src”,待会把2.2中下载的UR机器人规划功能包就要放到里面,(2.1中下载的跟UR相关的功能包系统自动放到了ROS安装的目录下面,笔者电脑上的目录位置是/opt/ros/kinetic/share/)。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第6张图片

在工作空间的目录,我这里是catkin_ws3文件夹里面,鼠标右键点击“打开终端”,出现如下所示黑乎乎的一个界面,输入“catkin_make”,回车。这句命令的意思是对新建的工作空间进行编译,让它真正意义上成为一个工作空间。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第7张图片

回车之后,工作空间很快编译好了,黑乎乎的界面输出了一大堆日志信息,然后我们发现,这时的工作空间文件夹里面,除了我们建立的src文件夹,还多出了两个别的文件夹,至于这两个文件夹是干嘛用的,大家可以看笔者的博客:ROS简介-从零开始讲解ROS(适合超零基础阅读)。后续笔者出了视频教程也会具体讲解。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第8张图片

接下来在这个终端输入如下命令,大家不要完全复制粘贴,注意,里面的“zq”是笔者的计算机的名字,大家换成自己的,也就是大家在安装Ubuntu的时候设置的计算机名字,实在不知道的,可以看终端那个黑乎乎的界面,如下图,每次大家输入命令的时候,最前面就有大家的计算机名字。然后,大家看到“zq”后面是“catkin_ws3”,这个是我前面说过的,我建立的工作空间名字,大家换成自己的。改好之后就可以按回车了,整个这个命令是设置环境变量,至于什么是环境变量和为什么要设置环境变量,大家可以看笔者写的博客:ROS环境变量的设置。

echo "source /home/zq/catkin_ws3/devel/setup.bash" >> ~/.bashrc

ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第9张图片

环境变量命令回车之后不会输出任何日志信息,如下图。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第10张图片

接下来大家打开工作空间文件夹下的src文件夹,里面有一个cmakelist文件,这个文件大家先不管,如果大家想知道是什么,也可以看笔者的博客:ROS简介-从零开始讲解ROS(适合超零基础阅读)。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第11张图片

将之前2.2中下载好的功能包放到这个文件夹中,如下图所示。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第12张图片

按后退键回到catkin_ws3文件夹中,也就是我们的工作空间文件夹下。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第13张图片

在之前的终端中输入“catkin_make”,回车,这是第二次编译工作空间,为什么还需要编译呢?因为你在这个工作空间下加入了新的功能包。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第14张图片

如下图,笔者已经编译好了,终端界面中显示了100%,编译花了接近一分钟,但是你们大概率不可能编译成功,因为,我的Ubuntu、ROS已经用了几个月了,该装的包都已经装了,所以,这里没有提示错误信息,但是你们如果是刚开始用ROS,那估计很难编译成功,下面一个步骤给大家提供一些额外的功能包让大家安装。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第15张图片

2.4 (编译错误的需要执行此步骤)下载额外功能包

关掉之前的终端,在桌面空白处点击鼠标右键选择“打开终端”(大家注意了,之前的那个终端是在工作空间文件夹下鼠标右键打开的,现在我是在桌面鼠标右键打开的,这两种方法不一样,针对的目录不一样,大家注意细节,后续如果我不额外说在哪里点击鼠标右键,大家就默认终端是在桌面打开的

第一种方法

非万能方法:(解决效率高,出错率高)
(1)下载安装moveit功能包
在终端中输入如下信息,可完全复制粘贴(当然,前提是你的ros是kinetic版本,不是的话就把kinetic替换成你的版本名字)。然后回车,等待安装成功即可。

sudo apt-get install ros-kinetic-moveit

(2)下载安装gazebo-ros-control功能包
在终端中输入如下信息,可完全复制粘贴(当然,前提是你的ros是kinetic版本,不是的话就把kinetic替换成你的版本名字)。然后回车,等待安装成功即可。

sudo apt-get install ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-ros-control

(3)下载安装industrial功能包
在终端中输入如下信息,可完全复制粘贴(当然,前提是你的ros是kinetic版本,不是的话就把kinetic替换成你的版本名字)。然后回车,等待安装成功即可。

sudo apt-get install ros-kinetic-industrial-core

安装了上面三个功能包,再次执行2.3步骤中最后一步编译工作,大概率会编译成功。

第二种方法

万能方法:(解决效率低)
因为笔者记忆力有限,上述三个功能包安装了也不能完全保证大家能够把所有缺失的包都安装上,但是终端界面,也就是这个黑乎乎的界面只要出错就会输出日志信息,大家可以好好参考这个信息,进行错误的排除,这个方法是万能的,虽然时间要的比较长。

ROS有一个安装命令是:sudo apt-get install
假如我缺少一个包,包的名字是A,你就可以打开终端,输入上面的命令,在install后面打一个空格,输入A,也就是输入sudo apt-get install A,然后回车,就可以安装功能包A。下面结合笔者遇到的问题举一个栗子,大家可以先浏览笔者的博客:ROS工作空间编译的时候出现类似于Could_not_find_a_package_configuration_file _provided _by该如何解决若是出现了像这一串英文,英文的意思大家也应该都知道,意思大致为:不能找到一个由某某某提供的功能包,也就需要安装这个功能包。

这个问题实在是不能解决的可以留言,笔者第一时间回复。

2.5设置电脑端静态IP

如下图所示是笔者使用的UR机器人的网络设置界面,可以看到机器人的IP地址,子网掩码,网关以及DNS服务器地址,我们在自己的电脑端一样需要设置这些东西,让电脑和机器人处于同一局域网内。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第16张图片

在设置之前使用网线将机器人和电脑连接起来,如果你是台式机,那就不能联网了,此时该怎么办呢?答案是买一个外置USB无线网卡,笔者同样有写相关的博客:Linux Ubuntu系统台式电脑安装外置USB无线网卡驱动(以net-core磊科NW392无线网卡为例)

然后点击界面右上方的网络标志,如图所示选择下方的有线连接,点击右边的编辑。ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第17张图片
在弹出的界面中依次添加上述的四个信息,注意IP地址不是跟机器人一样的,笔者这边机器人的IP地址是192.168.1.10,那为了使电脑跟它处于一个局域网下,只需要将最后一个小数点后面的那个设置得不一样即可,我设置成了192.168.1.11,如下图所示。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第18张图片
点击右下角的“路由”,弹出如下界面,勾选“仅将此连接用于相对应的网络上的资源”,然后退出。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第19张图片
开启机器人,等到网络符号那里提示连接成功,即表示网络设置成功了。

2.6运行程序

最后到了激动人心的时候了。
在工作空间文件夹下打开终端,跟本教程2.3中打开终端的位置一模一样,然后输入:

roslaunch ur_modern_driver ur5_bringup.launch limited:=true robot_ip:=192.168.1.10 use_lowbandwidth_trajectory_follower:=true

再在工作空间文件夹下打开一个新的终端输入:

roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch limited:=true

再在工作空间文件夹下打开第三个终端输入:

roslaunch ur5_moveit_config moveit_rviz.launch config:=true

三个命令的输入顺序不可变换,如果你的机器人是ur3或者ur10,那需要相应把命令中的数字改成相对应的数字,命令输入完成后,这时开启了一个界面,界面的名字叫做rviz,运行界面右方就是机器人显示界面,应该和实际机器人当前姿态一样。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第20张图片

在rviz界面将机器人拖拽到一个安全的位置,然后大家看到界面左下角的界面,也就是motion planning,选择planning界面,也就是下图中的界面,然后点击plan按钮ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第21张图片
大家可以看到rviz界面中规划出了一个从机器人当前位置到我们拖拽的位置的一个轨迹,然后,我们按execute,rviz界面的机器人和实际机器人都会按照moveit规划的轨迹运动。

如果大家嫌弃机器人运行太慢可以打开如下文件,文件路径大家可以通过下图上部分的路径框得到。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第22张图片

打开文件,调节如下的参数,当然,这个参数最好不要超过0.008,否则会太危险。
ROS下使用moveit控制UR机械臂,moveit驱动真实机械臂_第23张图片

好了,这便是笔者两个月以来学习ROS的最新成果,与大家分享,也希望路过的大神能够指导

三、结语

笔者在这里有几点困惑,也希望路过的大神、同学能够给出解答,感谢:
1.终端中可以不断通过话题,比如joint_state输出关节信息,但是这些信息如何输出为ext文本?
2.我在控制UR机器人的时候如何通过修改文件以及修改程序来实现对机器人的关节力矩的实时监测并且输出数据呢?
3.一个没有学习过编程的如何通过修改ompl路径规划库来进行自己的算法设计呢?

祝大家学习进步!

你可能感兴趣的:(ROS学习与实践)