通过socket通讯控制ur机械臂

  • 1.socket客户端(连接机械臂)
  • 2.控制机械臂运动(发送控制指令)
  • 3. 实时

以前一直使用ros跟机械臂打交道,但在使用moveit控制机械臂运动的时候会出现一些卡顿现象,具体可参照这个网页,于是想通过ur指令直接来控制机械臂。

控制ur机械臂的指令有movel,movep,movej具体用处大家可以自己查查,这里我主要用的是movel,来控制机械臂的末端

1.socket客户端(连接机械臂)

HOST ='192.168.0.5'   //ur机械臂ip地址,根据自己实际情况修改
PORT = 30003           //端口,根据自己实际情况修改
ADDR = (HOST,PORT)
robot = socket(AF_INET,SOCK_STREAM)
robot.connect(ADDR)

这里是ur端口的介绍,使用30003是因为可以通过接受urscript指令并返回机械臂当前信息来实时控制,这里是返回信息的解析

2.控制机械臂运动(发送控制指令)

str_command = "movel(p[%(x)s,%(y)s,%(z)s,%(rx)s,%(ry)s,%(rz)s],a=%(a)s,v=%(v)s,t=%(t)s)" %{'x':x,'y':y,'z':z,'rx':rx,'ry':ry,'rz':rz,'a':a,'v':v,'t':t}
robot.send(str_command + "\n")

这里需要注意的是一开我并没有使用控制指令中的t参数,这是一个很有用的参数,主要是用来规定让你的机械臂多久内到达指定位置,控制器会根据你给的值来进行路径优化,当然如果你设置的速度加速度太小,时间又太短,就会有卡顿现象,所以时间短的话,请将速度加速度调大。

3. 实时

如果你连续发送两条运动指令,会发现机械臂并没有走到第一个目标位置,中途就改变运动轨迹移到第二个目标位置,为了避免这种情况的发生,应该在发送指令后判断是否到达目标位置,才可发送下一条指令

while (True):try: time.sleep(0.001)packet_1  = robot.recv(4)packet_2  = robot.recv(8)packet_3  = robot.recv(48)packet_4  = robot.recv(48)packet_5  = robot.recv(48)packet_6  = robot.recv(48)packet_7  = robot.recv(48) packet_8  = robot.recv(48)packet_9  = robot.recv(48)packet_10 = robot.recv(48)packet_11 = robot.recv(48)#获取末端当前x坐标packet_12 = robot.recv(8)packet_12 = packet_12.encode("hex") #convert the data from \x hex notation to plain hexmx = str(packet_12)mx = struct.unpack('!d', packet_12.decode('hex'))[0]print "mx = ", round(mx ,4)#获取末端当前y坐标packet_13 = robot.recv(8)packet_13 = packet_13.encode("hex") #convert the data from \x hex notation to plain hexmy = str(packet_13)my = struct.unpack('!d', packet_13.decode('hex'))[0]print "my = ", round(my ,4)#获取末端当前y坐标packet_14 = robot.recv(8)packet_14 = packet_14.encode("hex") #convert the data from \x hex notation to plain hexmz = str(packet_14)mz = struct.unpack('!d', packet_14.decode('hex'))[0]print "mz = ", round(mz ,4)#获取末端当前rx坐标packet_15 = robot.recv(8)packet_15 = packet_15.encode("hex") #convert the data from \x hex notation to plain hexmrx = str(packet_15)mrx = struct.unpack('!d', packet_15.decode('hex'))[0]print "mrx = ", round(mrx,3)#获取末端当前ry坐标packet_16 = robot.recv(8)packet_16 = packet_16.encode("hex") #convert the data from \x hex notation to plain hexmry = str(packet_16)mry = struct.unpack('!d', packet_16.decode('hex'))[0]print "mry = ", round(mry,3)#获取末端当前rz坐标packet_17 = robot.recv(8)packet_17 = packet_17.encode("hex") #convert the data from \x hex notation to plain hexmrz = str(packet_17)mrz = struct.unpack('!d', packet_17.decode('hex'))[0]print "mrz = ", round(mrz,3)#精度控制,根据情况设置 toler_dist if abs(round(mx,4) - round(x,4)) < toler_dist and abs(round(my,4) - round(y,4)) < toler_dist and abs(round(mz,4) - round(z,4)) < toler_dist:break#注意:因为这里并没有把robot反馈的所有字节都获取,所以在进行下一次判断时应该关闭socket然后重新连接robot.close()# initRobot函数就是第一部分socket客户端的内容initRobot()

这里是反馈信息的官方文档解释,因为不知道怎么修改下载积分,所以每积分的小伙伴可以去这里直接下载

欢迎大家指正与交流~~~~~

通过socket通讯控制ur机械臂相关推荐

  1. 机械臂C语言编程,ROS下C++控制UR机械臂

    描述 ROS系统下,使用moveit和gazebo搭建UR机械臂控制的仿真环境,并使用C++编写一个节点来控制UR机械臂的移动 ROS系统:kinetic UR5机械臂 电脑系统:Ubuntu16.0 ...

  2. 机械臂控制C语言程序,ROS下C++控制UR机械臂

    描述 ROS系统下,使用moveit和gazebo搭建UR机械臂控制的仿真环境,并使用C++编写一个节点来控制UR机械臂的移动 ROS系统:kinetic UR5机械臂 电脑系统:Ubuntu16.0 ...

  3. 通过示教器或ROS控制UR机械臂

    一.初始化 1.打开示教器后,并点击初始化屏幕,跳转至初始化界面,松开急停按钮,设置有效负载2kg,点击开--启动--确定. 二.抓取实验 1.编写程序 1.1选择为机器人编程--选择一个空程序. 2 ...

  4. UR机械臂学习(6):使用robotiq二指夹爪

    在ros中下载的ur机器人包里不包括夹爪.力传感器等Robotiq的产品. Robotiq相关产品的ros功能包可以在 https://github.com/ros-industrial/roboti ...

  5. ros kinetic-moveit驱动ur3机械臂------控制真实机械臂并且能动

    ros kinetic-moveit驱动ur3机械臂------控制真实机械臂并且能动 本文工作环境配置: ubuntu16.04.6 ros-kinetic ur3 已验证本教程代码在Ubuntu1 ...

  6. UR机械臂仿真和用上位机编程控制

    UR机械臂仿真和用上位机编程控制 在没有实物UR机械臂时怎么办,优傲提供了仿真工具可以满足开发者需求,这样也减少了实际操作机械臂时的麻烦. 需要下载和安装的软件 虚拟机 使用VMware是不错的选择, ...

  7. ur机械臂 + robotiq gripper + robotiq ft sensor + gazebo + 连接真实机械臂 + 网页控制

    ur机械臂 + robotiq gripper + robotiq ft sensor + gazebo + 连接真实机械臂 + 网页控制 仓库地址:[ur_ws](https://github.co ...

  8. UR机械臂学习(5-2):使用Universal_Robots_ROS_Driver驱动真实机械臂

    使用的版本是 Ubuntu18.04 + ROS melodic + UR3(CB3.12) 因为后续需要使用手控器,手控器的驱动需要在Ubuntu18.04下才可以使用. 这篇文章是电脑上的设置,关 ...

  9. 通过ROS控制真实机械臂(2)----单轴运动,手柄控制

    创建ROS包,包名redwall_arm ,通过自定义的消息,将手柄的数据发布 msg/ joycontrol.msg,内容如下,分别对应罗技手柄的按钮和遥杆轴. int32 button1 int3 ...

最新文章

  1. Mathematica初学者第二讲
  2. 程序员法律考试(7)-民法(4)
  3. 【爬虫】爬取百度贴吧数据
  4. 揭秘.NET Core剪裁器背后的技术
  5. MVC的传递数据的方法
  6. mysql中使用concat例子
  7. php的具体配置学习笔记
  8. Anaconda3+Python3.6搭建Tensorflow
  9. 计算机丢失binkw32会怎么样,binkw32.dll 丢失 binkw32dll安装在哪
  10. C#调用天气查询服务
  11. 任务方案思考:文本分类篇
  12. FR cpt报表的自动滚屏/滚动编辑
  13. 如何将EXCEL数据表里面的数据逆时针旋转90度
  14. 【实战技能】从《Beautiful Teams》一书看团队
  15. 谷歌搜索中一些十分有趣的特效现象
  16. springboot接口统一加密解密
  17. fitbit手表中文说明书_Fitbit OS达到3.0版,这是新功能
  18. python读文件的三种方式_Python|读、写Excel文件(三种模块三种方式)
  19. 信号与系统公式笔记(1)
  20. linux教程(四)— Xshell常用命令

热门文章

  1. crontab安装和用法(定时任务)
  2. Windows Media Player控件及url类型异常
  3. 购物网站的秒杀计时器实现
  4. java类加载器(ClassLoader)
  5. 深入理解 ProtoBuf 原理与工程实践
  6. 全面了解C++后端开发技能树,C++后端开发面试技术点丨C/C++linux服务器开发丨linux后台开发
  7. 笔记 MIT6.824 Lecture 17: COPS, Causal Consistency
  8. 快速打造人像照片添加烟雾光斑效果
  9. 华为手机主界面的返回键怎么调出来_华为手机返回键怎么调整 怎么设置返回键...
  10. 添加数量的html标签,dedecms织梦模板栏目列表中添加统计文档数量的标签