300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Ubuntu18.04+ROS melodic 控制UR5机器人(持续更新)

Ubuntu18.04+ROS melodic 控制UR5机器人(持续更新)

时间:2022-01-05 20:37:24

相关推荐

Ubuntu18.04+ROS melodic 控制UR5机器人(持续更新)

目录

0 前言1 前置准备工作1.1 环境配置1.1.1 使用虚拟机安装Ubuntu系统1.1.2 ROS melodic安装1.2 工作空间配置1.2.1 创建工作空间1.2.2 导入Github仓库并更新依赖包1.2.3 编译、激活、启动2 仿真环境2.1 Rivz可视化界面2.2 基于Python的轨迹规划2.2.1 Unbuntu环境下的IDE安装2.2.2 配置Pycharm项目2.2.3 使用Python脚本在仿真环境中控制UR5机器人3. UR5实体机器人驱动过程3.1 安装步骤3.2 避坑指南3.2.1 关于IP地址3.2.2 关于机器人的参数标定问题3.2.3 关于rviz启动界面空白及机械臂拖拽控制的问题4. 后记X. 插播项X.1 Ubuntu安装中文输入法X.2 Ubuntu修改分辨率1920x1080pX.3 虚拟机与主机之间的复制粘贴问题X.4 虚拟机与主机之间共享文件的问题

0 前言

(.08)最近又有新活了。。要用ROS框架开发UR5机器人,这里综合万能的CSDN大佬们的帖子持续记录一下我的开发和学习历程,供大家也供自己日后参考。

(.12)断更好久了回来维护一下,前两个月都在忙组里别的项目,最近重新开始弄UR5机器人这个项目了,近阶段主要将会完成脚本控制仿真环境的机器人和ROS系统与实体UR5机器人的通讯,还有一些机器人运行的数据接口需要学习一下,嗯就是这样。

1 前置准备工作

1.1 环境配置

刚打开ROS官网页面的时候我那叫一个懵逼啊,别人家的系统版本都叫1.0,2.0这种,ROS偏不,人家叫kinetic、melodic、noetic,我当时顶着满脑袋的问号随便找了一个Ubuntu+ROS+UR机器人关键词的帖子就按着人家的操作开始装了,后来才发现这玩意好像是和Ubuntu系统的版本对应的,总结放这儿了:

以我当前对ROS浅薄的了解,似乎Melodic和Kinetic版本在GitHub上对应的资源更丰富,大家可按需取用。

1.1.1 使用虚拟机安装Ubuntu系统

作为电脑小辣鸡的我实在是配置双系统无能,还是乖乖装虚拟机。。这一步在CSDN上随手一搜就能搜到很多教程,我用的是这篇:Windows 10上如何安装ubuntu虚拟机。直接按照帖子一步步操作就行了,值得注意的一点是虚拟机的内存和硬盘大小的分配,文章里都选的默认值:1G内存和10G硬盘,我还寻思Ubuntu系统这么资源友好的吗?结果后面装ROS的时候直接卡的妈都不认识了。

所以这里记录一下虚拟机的内存和硬盘的扩容方式,因为虚拟机说到底用的还是笔记本自己的内存和硬盘资源,所以扩容的时候性能也别拉太满,比如我的笔记本加了内存条之后一共32G的内存,分给虚拟8G+25G的硬盘。内存扩容很简单,直接在虚拟机的设置界面配置就行,如图:

在虚拟机关机情况下可以直接拖那个条来扩容。顺便,我还把旁边的处理器从1个调成了2个,小提一下性能。

硬盘的扩容就比较复杂了,扩容成功案例可以参考这篇帖子:Oracle VM VirtualBox 虚拟硬盘扩容(Linux)不过我的VirtualBox版本跟他不太一样,所以在第一步分配空间的操作上是直接在windows系统的CMD里面完成的:

使用管理员权限打开CMD切换到VirtualBox的安装目录下,找一个叫VBoxManage的东西,然后输入以下命令:

D:\Program Files (x86)\VirtualBox>VBoxManage modifyhd "D:\VirtualBox VMS\Ubuntu_cym\Ubuntu_cym.vdi" --resize 25000

其中双引号里面替换成虚拟硬盘vdi文件的绝对路径 ,resize后面输入需要的硬盘容量大小,这一步只是物理扩容,扩容完后会发现虚拟机的存储那一栏写着“容量多少,已分配多少”,接下来还需要在虚拟机的控制台里调整分区大小,这个 跟着那篇参考帖子从第二步开始做就行。

1.1.2 ROS melodic安装

终于把Ubuntu系统搞定了,现在开始装ROS。这里推荐这篇文章如何使用ROS控制真实UR5机器人。可以参考里面ROS的安装部分,安装主要分以下几步:

去Ubuntu的软件配置库里面把图中的几个选项勾上,点桌面左下角那个软件列表就能找到这个。我参考的这篇帖子里面用了一个阿里的镜像源去导入ros的包,要是有vpn可以直接挂到ros官网上的源文件。

设置sourcelist,也就是导入ros的源文件,如果设置镜像源的话可以用参考帖子里的那两句命令,如果直接翻墙的话可以用下面这两句话:

$ sudo sh -c 'echo "deb http"///ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'$ sudo apt-key adv --keyserver 'hkp://:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

开始安装,跟新包–>然后安装

$ sudo apt update$ sudo apt install ros-melodic-desktop-full

这一步要等挺久的,可以去吃个饭喝杯茶或者最小化虚拟机去打打游戏啥的

配置环境变量,这样就不用每打开一次控制台就要执行一次source那句话了,和windows里面的环境变量差不多意思

$ echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc$ source ~/.bashrc

安装依赖包

$ sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential$ sudo apt install python-rosdep$ sudo rosdep init$ rosdep update

这里最后一句update语句必须挂vpn才能执行,不过根据我参考的那篇帖子,不能更新问题也不是很大(暂时来看)。到这里,ros的环境就安装完毕了,接下来需要创建一个工作空间。

1.2 工作空间配置

先贴一下参考的帖子Ubuntu18.04+ROSmelodic配置UR机器人,这块我其实还有一点混乱,感觉不同的帖子导入的 Github项目都不一样,现在处于,能打开Rivz环境就行的阶段。。后面再研究吧

1.2.1 创建工作空间

这步对应到windows里面就是创建一个新文件夹,嗯

$ mkdir -p ~/catkin_ws/src$ cd catkin_ws/src

1.2.2 导入Github仓库并更新依赖包

就是下载Github对应的项目到之前创建的那个src文件夹,然后刷新一下依赖

/12/13更新:根据ros官方的最新公告,若需要使用项目控制真实的UR机器人,需要使用唯一得到ur官方支持的ur_robot_driver(不是ur_driver也不是ur_modern_driver)具体的GitHub项目地址和克隆方法补充在这章的最后(注意下载的时候需要创建新的工作空间)

$ git clone -b melodic-devel /ros-industrial/universal_robot.git$ cd ~/catkin_ws/$ rosdep update$ rosdep install --rosdistro melodic --ignore-src --from-paths src

记得update的时候翻一下墙

# clone the driver$ git clone /UniversalRobots/Universal_Robots_ROS_Driver.git src/Universal_Robots_ROS_Driver# clone fork of the description to use the calibration feature # -b表示下载分支$ git clone -b calibration_devel /fmauch/universal_robot.git src/fmauch_universal_robot# install dependencies$ sudo apt update -qq # -qq 不输出信息,错误除外$ rosdep update$ rosdep install --from-path src --ignore-src -y #-y 表示[yes/no]的问题选择yes# build the workspace$ catkin_make# ————————————————# 版权声明:本文为CSDN博主「zxxRobot」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# 原文链接:/zxxxiazai/article/details/103568577

1.2.3 编译、激活、启动

$ catkin_make$ source ~/catkin_ws/devel/setup.bash$ roslaunch ur5_moveit_config demo.launch

这个工作空间相当于创建了一个项目,demo文件是Rivz环境下的项目入口,进去之后是这样的:

2 仿真环境

项目搭完之后先不急着控制实际机器人(楼下实验室坐着实在太难受了真的不想下去。。),熟悉一下Rivz环境再说。

2.1 Rivz可视化界面

进去之后先熟悉了一下基本的操作,鼠标左键旋转视角、右键缩放、中键平移,然后拖着机器人末端那个球球就能让它动。根据官方文档,绿色图像是机器人的初始位置、橙色图像是机器人的目标位置,点一下plan可以看它的轨迹,Plan & Execute可以让机器人移动到目标位置。

这里再贴一下重启之后打开工作环境的步骤(Linux系统真是令人头秃):

$ roscore # 启动ros$ cd ~/catkin_ws/ # 进入工作环境对应的文件夹$ rosdep update # 更新依赖包$ catkin_make # 编译工作环境$ source ~/catkin_ws/devel/setup.bash # 启动工作环境$ roslaunch ur5_moveit_config demo.launch # 启动rivz$ roslaunch ur_gazebo ur5.launch # 启动gazebo可视化仿真环境

2.2 基于Python的轨迹规划

2.2.1 Unbuntu环境下的IDE安装

由于我之前在windows里用的都是Pycharm来编译Python程序,这里在Ubuntu里也还是用Pycharm。直接去Jetbrains官网下载Linux环境的社区版Pycharm就行。Pycharm Community Linux下载

下载完解压之后能看到一个官方的安装指南文档叫Install-Linux-tar.txt, 这里贴一下原文,后面我会把关键步骤翻译一下。

将下载的压缩文件放到你希望安装Pycharm的目录下,并在此目录中解压文件;应用可以通过控制台打开,在控制台中cd进入"{安装目录}/bin" 然后输入./pycharm.sh即可启动pycharm。(其实解压完之后重启一下系统,让后点左下角那个所有应用程序的键,就能看到pycharm的图表,点一下打开也是可以的,如图);[可选地]可以将Pycharm的安装目录添加到环境变量中,这样就能在控制台中在任意目录下启动Pycharm;[可选地]调整JVM堆的大小[可选地]改变"config"和”system“文件的目录(最后这两个我都没操作,用默认的就行)

2.2.2 配置Pycharm项目

装完IDE之后我先用ROS官方的教学项目rospy_tutorials测试了一下Python程序与ROS系统的关联方式。这里推荐一个CSDN上的资源,里面的教学很全面也很细致,我的配置过程也基本参考这个资源文档:ROS与Python入门教程

首先创建一个新的工作空间

$ mkdir -p ~/catkin_ws2/src # 源目录,因为之前搭ur5环境的时候用了catkin_ws,这里换个名字$ cd ~/catkin_ws2/src$ catkin_init_workspace # 初始化工作空间$ cd ~/catkin_ws2$ catkin_make # 首次编译$ echo "source~/catkin_ws2/devel/setup.bash" >> ~/.bashrc # 使用工作空间

重新打开终端,进入工作空间并导入GitHub项目包(导入的时候记得翻墙,或者用国内镜像源)

$ cd~/catkin_ws2/src$ git clone /ros/ros_tutorials.git$ ls

OK这里工作空间就配置完了,接下来在Pycharm中创建新项目:

启动Pycharm,创建新项目,这里在选择项目编译器的时候记得选Python2.7,这个在之前装ROS-melodic-full的时候肯定有安装,没有的话就去官网上下载一下,安装目录在/usr/bin/python2.7导入 rospy_tutorials 包,使之成为 PyCharm 的 python 工程。点击 Open Directory 按钮,在弹出的

对话框中选择 ~/catkin_ws2/src/ros_tutorials/rospy_tutorials/ 路径后来在项目编译过程中我遇到了找不到相关python包的情况,这是由于初始安装的python2.7不包含ros的相关包目录导致的,这里提供解决办法:解决pycharm无法导入rospy

点击File->Settings->Project->Python Interpreter,点开那个下拉菜单之后选show all,然后添加下面这个路径:/opt/ros/melodic/lib/python2.7/dist-packages

正常来说到这里就可以直接运行项目中的.py文件了,我测试的是001_talker_listener中的talker.py,在运行过程中遇到了日志无法写入的问题,提供解决方法:ROS使用rospy.loginfo()出现“WARNING: cannot load logging configuration file, logging is disabled”的解决方案

文档中所述的vim打开config文件的方案也可用 sudo gedit python_logging.conf来替代。

在conf文件配置完毕之后运行又提示找不到logging.log文件,根据报错提示进入路径:/home/user(主机名)/catkin_ws2/ros_tutorials/rospy_tutorials,在此目录下创建logging.log文件就ok了。

2.2.3 使用Python脚本在仿真环境中控制UR5机器人

这一块主要想完成的是通过Python脚本,代替Rviz当中的拖动和点击的模式去控制仿真环境的里的机器人,主要分为示教系统(主要用于测试路径规划算法的稳定性和后期试验的调试),以及最终的后台控制脚本。在此期间我也学习了一些和脚本逻辑相关的,ROS工作空间中的重要文件,如URDF、SRDF文件的定义和编写,以及机器人运动学中的路径规划、轨迹规划算法和它们在ROS框架下的集成方式,这里挖个坑,有空另起一篇文章整理一下(挖坑…)。

CSDN上用python写UR5控制文章的脚本其实不少,这块开发过程中我参考了很多帖子,现总结如下:

上一段写的Pycharm编译环境其实重新创建了一个工作空间,没法和当前的模型空间关联起来,所以这里重新写一下python脚本关联模型空间的方案,参考此贴ros用Python程序控制moveit机器人运动-正向运动学(一)。脚本与模型的关联分为以下几步:

1.1 在catkin_ws->src中创建一个新文件夹

1.2 把要执行的脚本放进这个文件夹,或者在cmd中进入文件夹,并用以下命令创建空脚本

cym@cym-VirtualBox:~/catkin_ws/src/TestPythonRoute$ gedit XXX.py

1.3 将程序设置为可执行的程序(如图)(啊这里为什么不能缩进。。我好难受)

1.4 执行脚本

$ roslaunch ur5_moveit_config demo.launch$ rosrun TestPythonRoute script.py # run后面第一个是src下的文件夹名,第二个是脚本文件名

不过这样的话就只能脱离IDE,以txt形式编辑脚本,当前还没有研究出要怎么调试代码,只能根据控制台里的报错信息去修改脚本。这里rosrun的命令需要在新的控制台中运行,输出信息的话用rospy.loginfo(“info”)或者print xxx都可以,报错信息也和python控制台一样。

关于脚本内容,主要包括初始化、路径定义、路径规划和执行四个部分。这里因为涉及到一些组里项目的内容,暂时不能把源码公开,可以先参考下面这个脚本,是来自官方文档的教程,实现了机器人按照末端坐标系点动的功能,亲测可直接运行。

#!/usr/bin/env python# use moveit_commander (the Python MoveIt user interfaces )import sysimport copyimport rospyimport moveit_commanderimport moveit_msgs.msgimport geometry_msgs.msgfrom math import piclass MoveGroupInteface(object):def __init__(self):super(MoveGroupInteface, self).__init__()######################### setup ############################moveit_commander.roscpp_initialize(sys.argv)rospy.init_node('ur_move_test_node', anonymous=True)self.robot = moveit_commander.RobotCommander()self.scene = moveit_commander.PlanningSceneInterface() # Not used in this tutorialgroup_name = "manipulator" # group_name can be find in ur5_moveit_config/config/ur5.srdfself.move_group_commander = moveit_commander.MoveGroupCommander(group_name)self.display_trajectory_publisher = rospy.Publisher('/move_group/display_planned_path',moveit_msgs.msg.DisplayTrajectory,queue_size=20)################ Getting Basic Information ######################self.planning_frame = self.move_group_commander.get_planning_frame()print "============ Planning frame: %s" % self.planning_frameself.eef_link = self.move_group_commander.get_end_effector_link()print "============ End effector link: %s" % self.eef_linkself.group_names = self.robot.get_group_names()print "============ Available Planning Groups:", self.robot.get_group_names()print "============ Printing robot state:"print self.robot.get_current_state() # getprint ""def plan_cartesian_path(self, scale=1):waypoints = []wpose = self.move_group_commander.get_current_pose().posewpose.position.z -= scale * 0.1 # First move up (z)waypoints.append(copy.deepcopy(wpose))wpose.position.x += scale * 0.1 # Second move forward/backwards in (x)waypoints.append(copy.deepcopy(wpose))wpose.position.y += scale * 0.1 # Third move sideways (y)waypoints.append(copy.deepcopy(wpose)) # We want the Cartesian path to be interpolated at a resolution of 1 cm# which is why we will specify 0.01 as the eef_step in Cartesian# translation. We will disable the jump threshold by setting it to 0.0,# ignoring the check for infeasible jumps in joint space, which is sufficient# for this tutorial.(plan, fraction) = pute_cartesian_path(waypoints, # waypoints to follow0.01,# eef_step 0.0) # jump_threshold # Note: We are just planning, not asking move_group to actually move the robot yet:print "=========== Planning completed, Cartesian path is saved============="return plan, fractiondef execute_plan(self, plan):## Use execute if you would like the robot to follow## the plan that has already been computed:self.move_group_commander.execute(plan, wait=True)print "----------------------------------------------------------"print "Welcome to the MoveIt MoveGroup Python Interface Tutorial"print "----------------------------------------------------------"print "Press Ctrl-D to exit at any time"print ""print "============ Press `Enter` to begin the tutorial by setting up the moveit_commander ..."raw_input()tutorial = MoveGroupInteface()print "============ Press `Enter` to plan and display a Cartesian path ..."raw_input()cartesian_plan, fraction = tutorial.plan_cartesian_path()print "============ Press `Enter` to execute a saved path ..."raw_input()tutorial.execute_plan(cartesian_plan)print "============ Press `Enter` to go back ..."raw_input()cartesian_plan, fraction = tutorial.plan_cartesian_path(scale=-1)tutorial.execute_plan(cartesian_plan)

这里有两个遗留问题:

a. 在直接赋值末端坐标时,如果坐标值距离当前坐标过远,路径规划的结果往往会不理想(非常鬼畜的到处乱窜)

b. 由于当前对ur5可达空间数值上的模糊,导致给坐标时经常给到规划失败的点,这一块需要末端坐标范围明确一下

3. UR5实体机器人驱动过程

至此,所有仿真环境下部署任务已经全部完成,最后一步是把ROS连上实体UR5机器人,这一章节我主要参考了两篇帖子,里面详细介绍了示教器上的系统配置流程,我也会在后续列出我所有的踩坑过程。

3.1 安装步骤

这两篇帖子(都可以,基本流程都差不多)详述了使用ROS控制真实的UR5机器人的过程,照着做基本就能跑通,具体过程就不详述了。

Jetson AGX Xavier避坑指南(四)—— ubuntu18.04 ros-melodic 安装 ur_robot_driver,驱动真实的 ur5 机器人

如何使用ROS控制真实UR5机器人

3.2 避坑指南

3.2.1 关于IP地址

对于装了虚拟机的我来说,这是配置过程中最大的一个坑。我的虚拟机的网卡接入方式默认是这样的:

默认使用的是第一项”网络地址转换(NAT)“。这时候使用ifconfig命令查看虚拟机的IP地址会发现,默认的IP不是我们所需要的192.168.1.xx这样的格式,这时候就需要修改一下网络接入的模式和静态IP。

如图所示,选择桥接网卡一项,然后在系统设置里修改IP地址为静态IP(具体过程看图)。

(.01.18更新) 今天调系统的时候突然发现Ubuntu连不上网了 记录一个关于vm virtualbox+ubuntu虚拟机联网的帖子(最后发现是网络中心给我们楼更新网络之后默认网关变了,着实无语。。)

Virtualbox 虚拟机 Ubuntu 无线上网设置

3.2.2 关于机器人的参数标定问题

参数标定的过程指的是将实体机器人的出场标定参数导入到ROS工作空间的yaml配置文件中,以保证ROS控制下的实体机器人运动过程末端执行器的位置精度。在官方教程中,标定不是必要过程,但若不进行标定,会使末端执行器的位置出现厘米级的偏差,同时会导致ROS启动报错(不影响后续程序的执行),具体报错内容如下:

The calibration parameters of the connected robot don’t match the ones from the given kinematics config file. Please be aware that this can lead to critical inaccuracies of tcp positions. Use the ur_calibration tool to extract the correct calibration from the robot and pass that into the description. See [/UniversalRobots/Universal_Robots_ROS_Driver#extract-calibration-information] for details.

官方最新版本的Universal_Robots_ROS_Driver提供了ur_calibration功能包来完成实体机器人标定参数提取和写入的要求,具体操作方式如下:

roslaunch ur_calibration calibration_correction.launch robot_ip:=RobotIP \target_filename:="${HOME}/ur5/src/fmauch_universal_robot/ur_description/config/ur5_calibration.yaml"

完成标定后重启launch文件,就可以通过rviz或者moveit控制台操作实体ur5机器人了。

3.2.3 关于rviz启动界面空白及机械臂拖拽控制的问题

在ROS连接实体机器人的过程中,我一共看了大概有三五个帖子,所有的帖子到最后一步都是:启动launch文件、启动rviz,好啦!你可以操作你的实体ur5机器人啦!我就不一样了:启动launch文件、启动rivz,界面上一…片…空…白。

这一手虚空控制给我直接干懵了,但是仿真模型打开是完全没有问题的,我猜想应该是默认配置的原因。所以聪明的我又重开了仿真环境下的demo,发现有三个地方需要进行手动修改,如图:

连接实体后,默认的fix frame会报错,点一下那个下拉菜单选择world就行。连接实体后,打开的rviz默认没有添加MotionPlanning组件,这就是为什么我上来看到的是一个空的窗口,点击Displays下面那个Add按钮然后添加组件就能看到机械臂了。添加机械臂后会发现末端执行器那个位置一上来没法拖动,这是因为Planning Group没有设置对,在MotionPlanning组件里把Planning Group设置为manipulator,就能正常拖动机械臂,并同步控制实体ur5机器人了!

4. 后记

(.01.10)此贴旨在完成ROS系统的部署及实体ur5机器人的连接与基本实时控制,现在从虚拟机的部署到ros的配置到硬件的连接已全部完成,撒花!★,°:.☆( ̄▽ ̄)/$:.°★。断断续续整了半年终于完成了,后续会根据配置上或操作上的更新持续维护此贴。

同时我会根据我的毕设进度开几个新坑:

机器人学相关知识,奈何当年专业课是水完的还得重新整理…这一块主要基于ur5展开,包括DH参数,运动学与动力学知识,机器人路径规划及轨迹规划等。关于ROS的硬件接口,在下载ROS_Driver的时候我初步看了一下Git上ur5官方驱动的整体框架,发现ROS-Industrial这块的硬件驱动逻辑在CSDN上被研究的还是比较少的,后续可能会贴一些自己对相关源码的解读。关于数字孪生。主要整理一下数字孪生相关概念、文献、以及一些基于当前数字孪生主流框架的思考,特别是在孪生系统应用层面的相关逻辑。

最后的最后,贴一个大佬的博客网址,里面有很多基于ROS的全栈开发项目和机器人相关知识讲解:古月居-博客。

X. 插播项

插播项里面将会记录一些与项目关系不大,但在环境配置中有较大辅助作用的内容,主要是虚拟机Ubuntu系统下的一些人性化操作(人性化…)

X.1 Ubuntu安装中文输入法

嗯这是个挺久远的事情了。。当时用的帖子没收藏,这里贴一个看起来差不多的,我记得装的时候是有碰到bug的,主要是那个Language Support里面的input method找不到fcitx选项,当时应该是又搜了一下装上fcitx的。有问题的朋友可在评论区讨论。

Ubuntu 安装包安装搜狗输入法

X.2 Ubuntu修改分辨率1920x1080p

Ubuntu系统的默认分辨率竟然不带1920x1080p…好吧这里找了个不错的帖子跟着设置了一下。

Ubuntu 分辨率设置 1920*1080

X.3 虚拟机与主机之间的复制粘贴问题

这个对于我这种一个笔记本走天下的人来说还是蛮重要的,毕竟代码跑在虚拟机里,检索编辑啥的都在本机Win系统下。需要配置的朋友跟着下面这个帖子做就行了。

Virtualbox和主机共享粘贴板

X.4 虚拟机与主机之间共享文件的问题

我使用的VMware能够在虚拟机的设置过程中创建共享文件夹,具体步骤参考此贴:VMware虚拟机与主机共享文件夹

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。