目录
三、Universal_Robots_ROS2_Driver驱动下载
五、基于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提供的博客撰写平台真的好难用啊,之后尝试在某书上撰写文章,再迁移到这里发布。
最后,这是我第一次在互联网发表科研相关文章,所以想聊一些有关个人的。经历十几年的学习生涯,我相信很多朋友和我一样,习惯了一味地“输入”,却很少“输出”,总觉得自己不能发表一篇很棒的文章。经过这次,我觉得“输出”的意义很大,锻炼表达能力、整理思路、构建知识体系等等,又或许你的一篇文章可以帮助许多人节省大量时间。所以和我有类似状况的朋友们,希望你们也尝试着“输出”。