资源行业动态控制一个通用机械臂—快速入门

控制一个通用机械臂—快速入门

2019-11-14 | |  68 |   0

原标题:控制一个通用机械臂—快速入门

来源:AI研习社        链接:https://www.yanxishe.com/TextTranslation/1561


现在通过“JaveScript”和“标准网络摄像头”这两个简单的工具,你就可以像控制木偶似的控制你的机器人,让机器人模仿你的动作!


最近我有机会在 Carnegie Mellon University 的工作室呆了一段时间。在此期间,我探索一种在没有用到手的情况下通过网络摄像头与设备进行交互的方式。为了实现这种交互的方式,我用了一项创造性的交互工具:Handsfree.js(我目前仍然在负责这个工具的开发)。


在这篇文章里,我实现了让机器人的头部跟随我的头部运动。你可以看到我是如何实现这个过程的。你也可以跟我一样,遵循这篇教程,实现这个功能。

    1573677409460582.gif


上图有两个视角,分别是我转动头部时我自己看到的内容和机器人看到的内容。


在我们开始这篇教程之前,你需要准备好以下的几项内容:

● 安装Node 8 or higher(我自己安装测试过8.11版本和10.15版本)

● 将机器人正常上电(查看我这篇文章)

● 安装RoboDK试用版或者完整版(我安装的是试用版)

● 去掉机械臂的其他附加工具


下面是教程的目录,教你如何控制机器人:    


文章目录

● 启动机械臂和RoboDK

● 实现机械臂与RoboDK的连接与设置

● 将 WebSocket server上传到机械臂上

● 给服务器发送控制指令

● 创建分支版本实现你自己的探索!


启动机械臂和RoboDK

启动机械臂

第一步是给你的机械臂上电,然后在初始化界面中初始化机械臂(产看我这篇文章)。随后,用电脑连接机械臂,并确保给机械臂分配一个合法的IP地址。如果默认没有IP,则需要你在你的电脑终端里输入ipconfig(Windows)或者ifconfig(MacLinux),然后在参考相应的IP地址。

image.png


    当你用windows电脑连接机械臂时,你会得到一个自动分配的IP,以169.254开头。预设的DNS server是我的电脑本地地址。

启动机械臂

    完成了机械臂上的IP设置之后,你便可以用你电脑上的RoboDK软件包连接它。步骤如下:

  • 打开RoboDK界面;

  • 点击File>Open

  • 打开“UR5”的模型文件

给多操作细节,可以查看这个网址:https://github.com/labofoz/handsfree-ur5/wiki/Setup---RoboDK.你将会看到下面这个页面:

image.png

当你成功倒入UR5之后将会看到上面的图片。下一节你将会实现点击图片中“A”连接机械臂,然后点击“B”来载入服务器。


实现机械臂与RoboDK的连接与设置


连接机械臂

当你在RoboDK软件中成功导入了UR5的机械臂模型,你就可以连接实体机械臂了。在UR5分支上右击打开子菜单:

1573677651704115.png


点击“Connect to robot”之后会出现这个页面:

image.png


在这个页面中填入你的机械臂IP和port值30001。


在上面这个页面中,输入你的机械臂的IP。需要特别注意的是你需要将port设置为30001,因为这个port是机械臂监听控制命令的port。如果某些情况下30001这个port值不起作用,你可以尝试一下30002。到这一步我们还没有实现连接,点击“ping”检测我们是否可以正常连接。


    这个页面有几个有用的按键:“Move Joints”按键可以让你的机械臂运动到在RoboDK界面中的位置。“Get Position”按键所做的工作正好是相反的,它让仿真器中的模型运动到现实中机械臂的位置。但是注意在我们让现实中的机械臂运动之前,我们需要先完成下面的“设置机械臂”。


设置机械臂


因为我们的目的是让机械臂末端完全模仿我们头部的运动,所以我们需要提前将机械臂的初始位姿设置为类似图中的位置,从而让机械臂在跟随我们头部运动的时候有一个比较大的可达运动范围(译者:尽量规避机械臂的边界奇异位置和其他奇异位置)。


UR5的默认初始位姿可以如下图所示:

1552546116945025.gif


在RoboDK软件中设置好UR5的默认初始位置,以避免机械臂在运动过程中撞到自己。和下图比较糟糕的设置对比:

1552546181899197.gif


这是一个比较糟糕的机械臂初始位姿设置,它会导致你用摄像头跟踪的时候发生碰撞。


这一节教程的目的是保证你可以正确导入并配置UR5的模型。你应该实现第一张图所示的配置。配置好之后,你可以点击“Move Joints”按键让机械臂移动到你在RoboDK仿真器中位姿。


你的机械臂到这一步已经被配置好了。


将 WebSocket server上传到机械臂上


恭喜,我们终于到这一步了!下一步就可以将WebSocket server 载入到机械臂里面,通过WebSocket server让我们用JavaScript来连接控制机械臂--这大大减小了我们玩机械臂的门槛。


你需要首先安装Python 3.6+,然后安装以下依赖包:

●  pip install websockets

●  pip install asyncio

image.png


随后操作:

A) 点击“Add Python Program”

B) 右键点击分支,然后选择“add Python Program”

C) 点击“Edit Python Script”


当你点击“Edit Python Script”,编辑器被打开。将“microserver”(译者:没有给连接)粘贴进去。


给服务器发送控制指令


启动服务器

最后,你需要将脚本运行起来,这样你的服务器就启动了。在控制现实中的机械臂运动之前,最好每次都先在仿真器中测试你的脚本代码。你可以双击或者右击Python代码,点击“Run on Robot”:

image.png


 选项“Run on robot”会在仿真器中运行脚本代码。当你测试没有问题之后,你可以点击“Upload to robot”将服务器连接你现实中的机械臂。如果你想停止这个脚本代码功能,双击或者右击Python代码,然后点击“Stop Python Script”:

image.png


然后,访问这个网站 Handsfree Dashboard。我随后将部署dashboard(你可以查看Github源码)。

image.png


A) 将WebSocket URI输入机械臂的服务器,应该是这样的形式:ws:IP_ADDRESS:PORT_NUMBER。你可以在服务器代码的最后几行找到“IP/Port”。当你完成了复制粘贴之后,它应该是这样的:ws:localhost:1337。

B) 点击这里来连接服务器

C) 这是预览图片。如果你想改善效果,你可以点击切换按键:步骤D)

E) 点击按键来允许/停止追踪脸部特效

F) 查看源代码,从网址https://github.com/labofoz/handsfree-ur5的client/文件夹下。

1573678361385702.gif


创建分支版本实现你自己的探索!

    希望我没有遗漏任何步骤。你现在可以启动服务器,然后通过“Handsfree Dashboard”来连接你的机器人。最后是一些操作方法:

增加新功能

    通过编辑服务器代码,你可以增加或者删除某些功能。比如你想控制实现绕某个单轴的转动,原始代码如下:

target_i = target_ref                     * rotx(data['face']['rotationX'] * -1.5)                     * roty(data['face']['rotationY'] * -1.5)                     * rotz(data['face']['rotationZ'] * 1.5)

修改如下:

target_i = target_ref * rotx(data['face']['rotationX'] * -1.5)

向服务器发送更多的数据

通过编辑Handsfree Dashboard,你可以管理应该向服务器发送什么数据。比如:你想发送转化数据,原始client.js代码:

/**  * Sends a message to the socket  */sendMessage: throttle(function (a) {  lastPose && socketConnected && socket && socket.send(  JSON.stringify({    handsfree: true,    action: 'updateCursor',    cursor: lastPose.cursor,    face: {      rotationX: lastPose.face.rotationX,      rotationY: lastPose.face.rotationY,      rotationZ: lastPose.face.rotationZ    }  }))}, 400)

修改后的:

/**  * Sends a message to the socket  */sendMessage: throttle(function (a) {  lastPose && socketConnected && socket && socket.send(  JSON.stringify({    handsfree: true,    action: 'updateCursor',    cursor: lastPose.cursor,    face: {      rotationX: lastPose.face.rotationX,      rotationY: lastPose.face.rotationY,      rotationZ: lastPose.face.rotationZ,            // see:https://handsfree.js.org/#/docs/config      translatioX: lastpose.face.translationS,      translatioY: lastpose.face.translationY    }  }))}, 400)


----------------------------------------------------------

[ 发起:王立鱼 校对:唐里 审核:鸢尾 ]

[ 参与翻译(1人):刘汝佳 ]

英文原文:Controlling a Universal Robot Handsfree — Quickstart

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:未来十年数据科学将如何发展?

下一篇:AAAI 2020 论文接收结果出炉,得分 997 论文被拒,388 反而中了?

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 安防智能化大势下...

    大部分传统安防设备不仅拍摄视野有限,而且无法事...

  • 20亿创业基金、10...

    近日,杭州举办了建设国家新一代人工智能创新发展...