Universal_Robots_ROS2_Driver实现UR机械臂仿真控制(1)

目录

一、仿真环境搭建

二、UR机械臂驱动接口

三、Universal_Robots_ROS2_Driver驱动下载

四、UR_sim仿真器下载

4.1 UR_sim介绍

4.2 使用docker容器拉取UR_sim镜像

4.3 运行UR_sim仿真器

五、基于Universal_Robots_ROS2_Driver实现UR机械臂仿真控制

5.1 通过URSim simulator示教器控制机器人运动

5.2 基于Universal_Robots_ROS2_Driver实现UR机械臂仿真控制

参考资料

总结


一、仿真环境搭建

  • 虚拟机-VMware Workstation Pro 17
  • Linux环境-Ubuntu22.04
  • ROS2-humble
  • Docker(用来跑ur_sim仿真器)

因为是个人科研笔记,有需要的读者可以自行安装上述环境,请恕笔者此处惜墨不赘


二、UR机械臂驱动接口

Universal Robot机械臂驱动接口主要有以下几种:

Interface UrDriver port Robot port
Primary Interface ~ 30001
Secondary Interface ~ 30002
RTDE ~ 30004
Dashboard Server ~ 29999
ScriptSender 50002 ~
ReverseInterface 50001 ~

每种接口详情请点击链接查看,ur_robot_driver使用ReverseInterface接口


三、Universal_Robots_ROS2_Driver驱动下载

UR官方提供两种ur_robot_driver下载的方式:二进制包安装以及从源码构建。由于我们主要是作为使用者,这里采用二进制安装就可以,二进制安装只需要使用一条apt install命令,十分便捷。

sudo apt-get install ros-${ROS_DISTRO}-ur

四、UR_sim仿真器下载

4.1 UR_sim介绍

UR_sim是由UR官方提供的一种代替真实UR机械臂的离线仿真器,并且据官方描述ur_sim在功能上几乎可以做到完全代替真实机械臂。ur_sim必须在linux环境中运行,这里我们采用官方推荐的docker容器运行ur_sim。

4.2 使用docker容器拉取UR_sim镜像

这部分请参考下面这篇文章的解决方法部分:

彻底解决docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled 报错

完成上文“刷新更改并重新启动 Docker”步骤后:

调用docker pull命令应该可以从docker hub中成功拉取镜像

  • 拉取cb3系列机械臂命令
docker pull universalrobots/ursim_cb3
  • 拉取e系列机械臂命令
docker pull universalrobots/ursim_e-series

这里我放出docker hub上UR官方的访问链接,里面有关于cb3系列和e系列镜像的详细资料。

如果出现最后终端出现EOF说明下载失败,解决方案如下

【Docker】修改Docke上传/下载并发线程数(解决docker: unexpected EOF.)

如果下载完成,可以输入 docker images 命令测试是否下载成功,如果出现镜像,则下载成功。

4.3 运行UR_sim仿真器

为了便捷地运行UR_sim,官方提供一个脚本:

ros2 run ur_client_library start_ursim.sh -m <ur_type>

这里,你需要将 <ur_type> 替换为你想要启动的 UR 机器人的型号,比如 ur5、ur10 等,指定不同的机器人型号会启动相应的 UR 机器人仿真

成功运行后如下图所示:

复制终端输出的IP地址,并在浏览器中打开,即可通过novnc远程连接ur_sim,点击连接即可进入示教器界面如下图所示:

如果点击连接,出现失败的信息,可以尝试将虚拟机的代理关闭,在尝试打开。


五、基于Universal_Robots_ROS2_Driver实现UR机械臂仿真控制

官方原文:Apart from being used with a real robot, the ROS driver can be used with ros2_control’s mock hardware or the URSim simulator (which is equivalent from the driver’s perspective).

5.1 通过URSim simulator示教器控制机器人运动

这里我们先不展开基于Universal_Robots_ROS2_Driver实现UR机械臂仿真控制的实验,我们先尝试使用通过ursim示教器控制机器人运动,并使用ur_robot_driver将这种运动可视化。

首先运行ursim,并进入novnc端口

ros2 run ur_client_library start_ursim.sh -m <ur_type>

再运行ur_robot_dirver

ros2 launch ur_robot_driver ur_control.launch.py ur_type:=<ur_type> robot_ip:=192.168.56.101 launch_rviz:=true

 效果展示

通过URSim simulator示教器控制机器人运动


补充说明

通过抓包,我们可以看到192.168.56.101(ur_sim)使用的端口是30004,符合第二章中官方的驱动接口图。

5.2 基于Universal_Robots_ROS2_Driver实现UR机械臂仿真控制

首先运行ursim,并进入novnc端口

ros2 run ur_client_library start_ursim.sh -m <ur_type>

回忆第二章,ur_robot_driver使用的驱动接口是ExternalControl ProgramNode的ReverseInterface接口(Socket 50001),使用这种驱动需要在ur_sim仿真器上加载externalcontrol-1.0.5.urcap file,具体方法见此处链接

加载完成后command界面会显示如下信息,同时注意左下角要选择real robot,否则之后的运动控制ur_sim会报错。

确定信息后点击界面下方三角形的运行按键,ur_robot_driver终端会打印如下信息。

打开一个新的终端输入以下命令,启动MoveIt! node:

ros2 launch ur_moveit_config ur_moveit.launch.py ur_type:=<ur_type> launch_rviz:=true

之后就可以通过可视化的方式调用MoveIt中的命令完成机械臂仿真控制。


效果展示

UR机械臂仿真控制


补充说明

通过抓包,我们可以看到相比于之前192.168.56.1(ur_driver node)增加了端口50001,正好符合ReverseInterface接口,符合第二章中官方的驱动接口图。


参考资料

Universal Robots ROS 2 Documentation

Unbuntu22.4虚拟机-ROS2(ROS-humble) ur机器人仿真----讲述所有踩过的坑,一步到位

彻底解决docker:docker: Get https://registry-1.docker.io/v2/: net/http: request canceled 报错

【Docker】修改Docke上传/下载并发线程数(解决docker: unexpected EOF.)


总结

1.对于UR系列机械臂最好还是按照官方教程进行学习,这样能做到更加系统化地理解其架构。

2.吐槽一下:CSDN提供的博客撰写平台真的好难用啊,之后尝试在某书上撰写文章,再迁移到这里发布。

最后,这是我第一次在互联网发表科研相关文章,所以想聊一些有关个人的。经历十几年的学习生涯,我相信很多朋友和我一样,习惯了一味地“输入”,却很少“输出”,总觉得自己不能发表一篇很棒的文章。经过这次,我觉得“输出”的意义很大,锻炼表达能力、整理思路、构建知识体系等等,又或许你的一篇文章可以帮助许多人节省大量时间。所以和我有类似状况的朋友们,希望你们也尝试着“输出”。