随着技术的发展,3D相机的使用越来越频繁,当然如果价格亲民点、再亲民点,那将得到更多的使用。
今天我们就来说说3D相机和机器人之间那些思维。
往往3D相机是标定工具的,因此相机给出的位置信息对于机器人来说相当于绝对坐标值,就是说相机给了这个产品的位置信息,机器人拿到就直接执行这个位置就可以了。
首先我们来了解一下3D相机的原理:
3D相机是通过“激光”扫描得到镜头下物体轮廓的点云,并且计算出预先设置好的特征,并且计算出机器人tcp的位置
由此看来相机需要知道机器人的base坐标系位置,tcp位置,tcp抓取姿态,产品特征点等信息。这些信息都是通过标定和信息录入来得到的。
当这些都设置完成后就可以相机的工作了。
相机通过扫描得出镜头下物体的轮廓,并且从中选择抓取容易度比较高的零件,计算出抓取该产品的TCP位置。把这个位置信息发送给机器人。
当机器人收到后只需要执行这个位置就可以实现抓取了。
真的吗!!!
假的,机器人到达这个位置之前的所有运动点都还是需要我们自己计算的,(有些品牌相机会帮我们做好这个计算)
比如下图:这个姿态是我们的抓取点姿态,但前提是我们必须延红色箭头线方向将抓手伸进产品“身体里”,,,做个“活塞”运动。,,,
这个“活塞”运动一点也不简单,因为产品的位置决定了运动的方向。然而相机只给了机器人插入后的位置信息。(怎么总觉得在开车)
就是说我们知道目标点的姿态和位置{x,y,z,a,b,c}如果我们不在进入前把姿态调整好将无法进入。当然姿态调整好了还吧必须沿着这条红色箭头线进入。否则就像找不到洞的小伙子。
回头看看我们前面说过相机给我们的数据是:机器人的base坐标系下,tcp位置,tcp抓取姿态。
运用到实际抓取中就是这样的
def pick ()
ini
ptp home
ptp p1
ptp pick ;相机传过来的数据
先做个假设,相机给的坐标值中永远都有一个坐标轴与产品的“深入”方向平行。
这样我们就可以利用这个坐标值进行tcp的运算了。
为了实现这个假设,我们必须在标定前就完成tcp的建立和base的建立。并且要求预先选定让tool坐标的一个方向与夹爪深入产品的方向一致
此时需要注意的是相机标定会实现base的位置计算,base的方向计算,tcp的计算,但不能实现tool的方向计算。
此时我们建立tool1和base1。全部完成后开始标定。
正确的标定以后我们通过相机传来的位置信息为目标点,这时我们需要让这个运动点在base1下,并且采用tool1
有了目标点后我们在计算抓取前的点。
如果我们的夹爪需要深入产品200mm那么我们把工具位置偏移250mm到达我们的目标点,这时这个点位就是我们的抓取上方点了
def pick()
ini
tool_data[2]=tool_data[1]
tool_data[2].z=tool_data[2].z-250
ptp pick tool2 base1 ;抓取上方点
tool_data[2]=tool_data[1]
lin pick tool2 base1;直线伸入产品腔体
怎么样你会了吗?