RML 抓取-放置 运动应用

RML运动应用

抓取物体步骤:

  • 抓取阶段:(工业一般如此)

1 到达目标附近位置(一般是某个轴的方向,如Z轴10 厘米处)

2 设置抓取点

3 再回到目标点附近

  • 放置阶段:

1 达到放置目标点附近位置

2 设置放置目标点

3 再回到放置目标点附近位置

-- This is a threaded script!

activateSuctionPad=function(active)
    if (active) then
        simSetScriptSimulationParameter(suctionPadScript,‘active‘,‘true‘)        --设置子脚本相关参数
    else
        simSetScriptSimulationParameter(suctionPadScript,‘active‘,‘false‘)
    end
end

getTargetPosVectorFromObjectPose=function(objectHandle)
    local p=simGetObjectPosition(objectHandle,targetBase)
    local o=simGetObjectQuaternion(objectHandle,targetBase)
    return p,o
end

getNextContainerIndex=function(index)
    index=index+1
    if index>3 then
        index=1
    end
    return index
end

getNextBoxIndex=function(index)
    index=index+1
    if index>2 then
        index=1
    end
    return index
end

threadFunction=function()
    while simGetSimulationState()~=sim_simulation_advancing_abouttostop do
        -- 1. Pick-up a box:
        -- Go to approach pose near container X:
        targetP,targetO=getTargetPosVectorFromObjectPose(approaches[containerIndex])
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
        simWait(1)
        -- Go to grasp pose on box A:
        targetP,targetO=getTargetPosVectorFromObjectPose(boxes[boxIndex])
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
        -- Activate suction pad:
        activateSuctionPad(true)
        -- Go to approach pose near container X:
        targetP,targetO=getTargetPosVectorFromObjectPose(approaches[containerIndex])
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
        -- Go to initial pose:
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,initPos,initOr,nil)

        -- 2. Drop a box:
        -- Get the next container:
        containerIndex=getNextContainerIndex(containerIndex)
        -- Go to approach pose near container X+1:
        targetP,targetO=getTargetPosVectorFromObjectPose(approaches[containerIndex])
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
        -- Go to drop pose on container X+1:
        targetP,targetO=getTargetPosVectorFromObjectPose(drops[containerIndex])
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
        -- Deactivate suction pad:
        activateSuctionPad(false)
        -- Go to approach pose near container X+1:
        targetP,targetO=getTargetPosVectorFromObjectPose(approaches[containerIndex])
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
        simWait(1)
        -- Go to initial pose:
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,initPos,initOr,nil)

        -- 3. Now handle the other box:
        boxIndex=getNextBoxIndex(boxIndex)
        containerIndex=getNextContainerIndex(containerIndex)
    end
end

-- Initialization:
simSetThreadSwitchTiming(2) 

suctionPad=simGetObjectHandle(‘suctionPad‘)
suctionPadScript=simGetScriptAssociatedWithObject(suctionPad)        -- 获取子脚本

target=simGetObjectHandle(‘RobotTarget‘)
targetBase=simGetObjectHandle(‘Robot1‘)

box1=simGetObjectHandle(‘Cuboid1Grasp‘)
box2=simGetObjectHandle(‘Cuboid2Grasp‘)
boxes={box1,box2}

drop1=simGetObjectHandle(‘CuboidDrop1‘)
drop2=simGetObjectHandle(‘CuboidDrop2‘)
drop3=simGetObjectHandle(‘CuboidDrop3‘)
drops={drop1,drop2,drop3}

approach1=simGetObjectHandle(‘CuboidApproach1‘)
approach2=simGetObjectHandle(‘CuboidApproach2‘)
approach3=simGetObjectHandle(‘CuboidApproach3‘)
approaches={approach1,approach2,approach3}

-- targetSphere is the object that the robot‘s tooltip will try to follow via IK, which means that
-- if you change the position/orientation of targetSphere, then the robot‘s tooltip will try to follow
-- targetSphereBase is used so that all position and orientation values are always relative to the robot base
-- (e.g. so that if you move the robot to another position, you will not have to rewrite this code!)

-- Get the current position and orientation of the robot‘s tooltip:
initPos=simGetObjectPosition(target,targetBase)
initOr=simGetObjectQuaternion(target,targetBase)

-- Set-up some of the RML vectors:
maxVel={0.4,0.4,0.4,1.8}
maxAccel={0.3,0.3,0.3,0.9}
maxJerk={0.2,0.2,0.2,0.8}

activateSuctionPad(false)
boxIndex=2
containerIndex=2

-- Here we execute the regular thread code:
res,err=xpcall(threadFunction,function(err) return debug.traceback(err) end)
if not res then
    simAddStatusbarMessage(‘Lua runtime error: ‘..err)
end

-- Clean-up:

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

时间: 2024-10-31 01:31:59

RML 抓取-放置 运动应用的相关文章

微信运动数据抓取(Python)

"微信运动"能够向朋友分享一个包含有运动数据的网页,网页中就有我们需要的数据.url类似于:http://hw.weixin.qq.com/steprank/step/personal?openid=用户的openid,其中有用于对于微信运动的唯一openid,打开fiddler进行抓包,首先打开fiddler,然后打开微信运动点击我的主页,如下: 微信通过请求头区分是否是通过微信浏览器进行的请求,如果用浏览器直接打开链接会出现如下错误提示,说明不是通过微信浏览器打开被微信拦截了: 通

分布式爬虫:使用Scrapy抓取数据

分布式爬虫:使用Scrapy抓取数据 Scrapy是Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自动化测试. 官方主页: http://www.scrapy.org/ 中文文档:Scrapy 0.22 文档 GitHub项目主页:https://github.com/scrapy/scrapy Scrapy 使用了 Twisted 异步网络库来处理网络通讯.整体架构大致如下(注:图片来自

Python爬虫抓取 python tutorial中文版,保存为word

看到了中文版的python tutorial,发现是网页版的,刚好最近在学习爬虫,想着不如抓取到本地 首先是网页的内容 查看网页源码后发现可以使用BeautifulSoup来获取文档的标题和内容,并保存为doc文件. 这里需要使用from bs4 import BeautifulSoup 来导入该模块 具体代码如下: # 输出所在网址的内容from bs4 import BeautifulSoup def introduce(url): res = requests.get(url) res.e

屏幕抓取程序 (位图DDB的例子)

屏幕抓取程序的意思是将整个屏幕图显示在应用程序的用户区中,等价于截图.对桌面窗口的操作:首先得知道桌面窗口的宽和高,获取宽和高需要利用窗口的设备句柄,而获取设备句柄需要知道窗口句柄,这一系列的连串关系如下:窗口句柄——>设备句柄——>获取设备句柄属性(比如宽和高).(书本采用的一种方法,但至少也把这种种被需要的关系复习了一下,必须承认,初学需要重复很多次才能形成熟练意识) hwndDeskTop = GetDesktopWindow();// 获取桌面窗口的窗口句柄 hdcDeskTop =

php爬虫抓取信息及反爬虫相关

58爬虫了百姓,赶集和58互爬,最后各种信息相同,都是爬虫后的数据库调用,潜规则啊,几家独大还暗中各种攻击,赶驴网的幽默事例我不想多评价.这个时代是砸.钱*养.钱的时代,各种姚晨杨幂葛优,各种地铁公车广告,各种卫视广告,铺天盖地~~~ 来谈php爬虫抓取信息~~ php爬虫首推Curl函数了,先来认识下它. 0x01.curl扩展的安装: 1.确保php子文件夹ext里面有php_curl.dll(一般都有的,一般配置时候会设置环境变量的) 2.将php.ini里面的;extension=php

爬虫Scrapy学习指南之抓取新浪天气

scrapy有一个简单的入门文档,大家可以参考一下,我感觉官方文档是最靠谱的,也是最真实的. 首先我们先创建一个scrapy的项目 scrapy startproject weather 我采用的是ubuntu12.04的系统,建立项目之后主文件夹就会出现一个weather的文件夹.我们可以通过tree来查看文件夹的结构.可以使用sudoapt-get install tree安装. tree weather weather ├── scrapy.cfg ├── wea.json ├── wea

Python爬虫之抓取豆瓣影评数据

脚本功能: 1.访问豆瓣最受欢迎影评页面(http://movie.douban.com/review/best/?start=0),抓取所有影评数据中的标题.作者.影片以及影评信息 2.将抓取的信息写入excel中 页面信息如下: 一共5页,需要循环访问不同的页面 HTML源代码: <a class="" title="<权力的游戏>S5E8:凛冬已至,凡人皆死" href="http://movie.douban.com/review

Python爬虫,抓取淘宝商品评论内容

作为一个资深吃货,网购各种零食是很频繁的,但是能否在浩瀚的商品库中找到合适的东西,就只能参考评论了!今天给大家分享用python做个抓取淘宝商品评论的小爬虫! 思路 我们就拿"德州扒鸡"做为参考目标吧~!如果想抓其他商品的话,自行更换目标即可!打开淘宝,搜索目标,随便点击一个商品进入,在点击累计评论,打开F12开发者工具--网络,先清除现有的所有内容,然后点击下一页评论,在弹出的内容中查找文件中开头为list_detail_rate.htm的html类型,如下图所示 这个html中就含

微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”

微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友的动态,而朋友圈中或虚或实的状态更新,似乎都在证明自己的"有趣",寻找那份或有或无的存在感. 有人选择在朋友圈记录生活的点滴,有人选择在朋友圈展示自己的观点.有时我们想去展示自己,有时又想去窥探着别人的生活,而有时又不想别人过多的了解自己的生活,或是屏蔽对方,或是不给对方看朋友圈,又或是不