通过PC驱动真实UR10e机械臂(ROS)

记录一下通过ROS+Moveit控制机械臂运动的过程

对于85夹爪目前查到的博客都说很难通过ROS直接驱动连接在UR工控箱内的夹爪,现有的ROS控制多是将夹爪数据线直接接到PC上通过USB串口进行通信。

然而实验室的夹爪根本没有USB线(╯‵□′)╯︵┻━┻。

目录

一、UR机器人本体设置

1.安装External Control

2.配置网络

 3.其余配置

二、虚拟机设置

 三、ROS+Moveit实现机械臂运动

四、杂谈


一、UR机器人本体设置

1.安装External Control

可以直接在GitHub的tag下下载externalcontrol-1.0.5.urcap的文件,拷贝到UR工控箱上的U盘里。之后点击示教器右上角的三条线进入设置,在URCap下点击+号添加刚才拷贝的文件,重启工控机即可。

 之后进入“安装设置”->URCap->External Control可以看到已经加载的插件,会有一个HOST IP地址和Custom port,其中IP地址用于ROS,port不用管,默认即可。

2.配置网络

根据External Control 的IP地址配置UR的网络IP用于之后与PC网络连接。在设置->系统->网络下设置网络为静态地址,IP为192.168.56.2,子网掩码为255.255.255.0。

 3.其余配置

将PC与UR控制箱用网线连接,在示教器中编写一个UR程序用于启动External Control,稍后ROS控制机器人时需要启动该程序。

二、虚拟机设置

我用的是VMware Workstation 16 PRO Ubuntu 18.04 ROS melodic 版本。

设置Ubuntu的网络,点击右上角网络符号,设置一个新的静态网络,在IPv4下设置IP为之前External Control提供的IP地址即192.168.56.1,设置子网掩码为255.255.255.0.

虚拟机网络设置为桥接模式,复制主机ip,如果还是ping不通,断开wifi再试,好了之后可以再连接wifi,这样主机还能上网。

 设置好之后可以尝试ping一下UR的网络ip:192.168.56.2,如果一切正常终端会出现下图说明UR和虚拟机之间的网络通信已经OK了,接下来就可以通过官方的包控制机械臂了

 三、ROS+Moveit实现机械臂运动

 首先需要在一个ROS的工作空间中下载两个功能包:Universal_Robots_ROS_Driveruniversal_robot,下载完成之后编译,在source一下就行了。第一个包是用于ROS和真实机械臂通信的,第二个包有机械臂的Moveit配置,这里用官方的就可以实现运动了。

之后按照这个顺序依次启动ROS节点和机械臂程序即可。其中第一个roslaunch中的ip地址填写自己UR机器人上设置的地址。

# 启动机器人
1.roslaunch ur_robot_driver ur10e_bringup.launch robot_ip:=192.168.56.2

2.示教器启动URCaps External control程序

# 启动moveit节点
3.roslaunch ur10e_moveit_config moveit_planning_execution.launch limited:=true

# 启动rviz
4.roslaunch ur10e_moveit_config moveit_rviz.launch config:=true

在机ur上启动程序后终端会输出,之后就可以运行Moveit和rviz了。

Robot connected to reverse interface. Ready to receive control commands.

通过rviz中的MotionPlanning模块,拖动机械臂末端的小圆球给定末端位置在Plan&Execute即可控制机械臂运动。当然我们也可以通过python程序控制moveit进而控制机械臂运动,这里我贴出一个简单的例程,具体就是实现拿到当前基于基座的位姿后z轴下降0.1m。

#! /usr/bin/env python
import sys
import rospy
import moveit_commander
import geometry_msgs
import tf

 
moveit_commander.roscpp_initializer.roscpp_initialize(sys.argv)
rospy.init_node('move_group_grasp', anonymous=True)
robot = moveit_commander.robot.RobotCommander()

arm_group = moveit_commander.move_group.MoveGroupCommander("manipulator")

arm_group.set_goal_joint_tolerance(0.001)
arm_group.set_max_acceleration_scaling_factor(0.5)
arm_group.set_max_velocity_scaling_factor(0.5)

arm_group.set_pose_reference_frame('base_link')
end_effector_link = arm_group.get_end_effector_link()

print(end_effector_link)
#hand_group.set_named_target("close")
#plan = hand_group.go()

print("Point 1")

pose_target = arm_group.get_current_pose().pose
print(pose_target.position.x,pose_target.position.y,pose_target.position.z)

# Block point
pose_target.position.x = pose_target.position.x
pose_target.position.y = pose_target.position.y
pose_target.position.z = pose_target.position.z-0.1

arm_group.set_pose_target(pose_target)
arm_group.go(wait=True)

rospy.sleep(5)
moveit_commander.roscpp_initializer.roscpp_shutdown()

四、杂谈

相比于仿真,控制实体机械臂反而更容易了,参考了诸多博主的博客之后也是比较轻松的实现了功能。过程中经历的坑有:1.没有接网线妄图直接控制,当然ping不通了。。。2.示教器上没有运行URCaps程序,导致程序运行了但是机械臂没动静。。。考虑后续机械臂要装在车上,打开示教器运行程序这一步是不是有点不太好实现🤔。

下一篇将实现socket进行通信,就可以摆脱这一切了~ 

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值