V-rep学习笔记:Reflexxes Motion Library 2

  VREP中的simRMLMoveToPosition函数可以将静态物体按照设定的运动规律移动到指定的目标位置/姿态。If your object is dynamically enabled, it will not work (since in that case the position of the object is dictated by the physics engine). In that case, make sure to uncheck the Body is dynamic checkbox.

  下面在原点处创建一个Dummy,为其添加threaded child script(The simRMLMoveToPosition function can only be called from child scripts running in a thread (since this is a blocking operation) ),并使用Graph记录其位置-速度-加速度信息。

local h=simGetObjectAssociatedWithScript(sim_handle_self)

local currentVel={0,0,0,0}
local currentAccel={0,0,0,0}
local maxVel={0.2,0.2,0.2,0.2}
local maxAccel={0.1,0.1,0.1,0.1}
local maxJerk={0.1,0.1,0.1,0.1}
local targetPos={1,0,0}
local targetVel={0,0,0,0}

simRMLMoveToPosition(h,-1,-1,currentVel,currentAccel,maxVel,maxAccel,maxJerk,targetPos,nil,targetVel)
simWait(1)
simStopSimulation()

  Graph的Data stream type中没有加速度的选项,但是注意下面有个Data transformation(determines how the selected data stream is transformed)选项框可以对原始数据进行微分、积分、缩放、平移等变换。

  Raw uses the original data stream, Derivative uses the time derivative of the data stream (e.g. if the raw data stream is the position of an object, then data will be its velocity), Integral uses the time integral of the data stream (e.g. if the raw data is the velocity of an object, then data will be its position) and Cumulative uses the cumulative value of the data stream (e.g. if the raw data is the surface cut by a mill, then data will be the total surface cut by that mill during the simulation). Additionally, the data can be scaled, shifted, and a moving average period specified.

  选择记录Dummy的X方向绝对速度,然后在Data transformations选项框中选择Derivative对数据进行微分,得到X方向加速度:

  下图记录了Dummy沿X轴运动1m时的位置、速度、加速度随时间的变化曲线。可以看出在开始的加速阶段,加速度在加加速度(Jerk)限制下以梯形曲线达到最大值0.1m/s2,此后进行一段匀加速直线运动,速度曲线为直线段,位置曲线为二次曲线;达到最大速度0.2m/s时进行匀速直线运动,此时加速度为0,位置曲线为直线段。

  另外需要注意的是simRMLMoveToPosition是一个阻塞模式(blocking operation)的函数,前一个函数执行完后才会继续执行下一个。下面连续两行代码让dummy先按规律运动到(1,0,0)处然后再返回远点:

simRMLMoveToPosition(h,-1,-1,currentVel,currentAccel,maxVel,maxAccel,maxJerk,targetPos,nil,targetVel)
simRMLMoveToPosition(h,-1,-1,currentVel,currentAccel,maxVel,maxAccel,maxJerk,{0,0,0},nil,targetVel)

  使用simRMLMoveToPosition并配合逆运动学可以实现机器人的路径控制:控制Target的目标位置/姿态和运动规律,VREP的运动学逆解解算器会自动让Tip跟随Target运动。下面在场景中拖入ABB IRB4600机器人模型,创建4个路径点pos1~pos4,使机器人按照指定的运动规律依次经过这4个路径点。

-- This is a threaded script!

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

threadFunction=function()
    while simGetSimulationState()~=sim_simulation_advancing_abouttostop do

        -- target is the object that the robot‘s tooltip will try to follow via IK, which means that
        -- if you change the position/orientation of target, then the robot‘s tooltip will try to follow
        -- target 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!)

        -- Go to pos1:
        targetP,targetO=getTargetPosVectorFromObjectPose(pos1_handle)
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
        -- Go to pos2:
        targetP,targetO=getTargetPosVectorFromObjectPose(pos2_handle)
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
        -- Go to pos3:
        targetP,targetO=getTargetPosVectorFromObjectPose(pos3_handle)
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
        -- Go to pos4:
        targetP,targetO=getTargetPosVectorFromObjectPose(pos4_handle)
        simRMLMoveToPosition(target,targetBase,-1,nil,nil,maxVel,maxAccel,maxJerk,targetP,targetO,nil)
    end
end

-- Initialization:
simSetThreadSwitchTiming(2) 

target=simGetObjectHandle(‘IRB4600_IkTarget‘)
targetBase=simGetObjectHandle(‘IRB4600‘)

pos1_handle=simGetObjectHandle(‘pos1‘)
pos2_handle=simGetObjectHandle(‘pos2‘)
pos3_handle=simGetObjectHandle(‘pos3‘)
pos4_handle=simGetObjectHandle(‘pos4‘)

-- 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}

-- 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

参考:

Reflexxes Motion LibrariesManual and Documentation

V-REP: Reflexxes Motion Library Demonstration

V-rep学习笔记:Reflexxes Motion Library 1

时间: 2024-10-08 08:22:14

V-rep学习笔记:Reflexxes Motion Library 2的相关文章

V-rep学习笔记:Reflexxes Motion Library

V-REP中集成了运动生成库Reflexxes,这家公司已经被谷歌收购. 随着计算机技术的发展,数控系统已经从最初的由数字逻辑电路构成的硬线数控系统发展到了以计算机为核心的计算机数控(Computer Numerical Control,CNC)系统.相对于硬线数控系统而言,CNC系统的控制功能主要由软件实现,并可处理逻辑电路难以处理的复杂信息,因而具有较高的柔性和更高的性能. 高速加工对CNC的最基本要求:以足够快的速度处理数据.为各进给轴加减速产生无冲击的理论值.高速加工CNC的核心技术是样

HashMap之put(K key, V value)学习笔记 jdk8版 (一)

    /**      * Associates the specified value with the specified key in this map.      * If the map previously contained a mapping for the key, the old      * value is replaced.      *      * @param key key with which the specified value is to be ass

Linux程序设计学习笔记----System V进程间通信(信号量)

关于System V Unix System V,是Unix操作系统众多版本中的一支.它最初由AT&T开发,在1983年第一次发布,因此也被称为AT&T System V.一共发行了4个System V的主要版本:版本1.2.3和4.System V Release 4,或者称为SVR4,是最成功的版本,成为一些UNIX共同特性的源头,例如"SysV 初始化脚本"(/etc/init.d),用来控制系统启动和关闭,System V Interface Definitio

Query意图分析:记一次完整的机器学习过程(scikit learn library学习笔记)

所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.假设现在有一个O2O领域的垂直搜索引擎,专门为用户提供团购.优惠券的检索:同时存在一个通用的搜索引擎,比如百度,通用搜索引擎希望能够识别出一个Query是否具有O2O检索意图,如果有则调用O2O垂直搜索引擎,获取结果作为通用搜索引擎的结果补充. 我们的目的是学习出一个分类器(classifier),分类器可以理解为一个函数,

Linux程序设计学习笔记----System V进程通信(共享内存)

转载请注明出处:http://blog.csdn.net/suool/article/details/38515863 共享内存可以被描述成内存一个区域(段)的映射,这个区域可以被更多的进程所共享.这是IPC机制中最快的一种形式,因为它不需要中间环节,而是把信息直接从一个内存段映射到调用进程的地址空间. 一个段可以直接由一个进程创建,随后,可以有任意多的进程对其读和写.但是,一旦内存被共享之后,对共享内存的访问同步需要由其他 IPC 机制,例如信号量来实现.象所有的System V IPC 对象

Linux程序设计学习笔记----System V进程通信之消息队列

一个或多个进程可向消息队列写入消息,而一个或多个进程可从消息队列中读取消息,这种进程间通讯机制通常使用在客户/服务器模型中,客户向服务器发送请求消息,服务器读取消息并执行相应请求.在许多微内核结构的操作系统中,内核和各组件之间的基本通讯方式就是消息队列.例如,在 MINIX 操作系统中,内核.I/O 任务.服务器进程和用户进程之间就是通过消息队列实现通讯的. Linux中的消息可以被描述成在内核地址空间的一个内部链表,每一个消息队列由一个IPC的标识号唯一的标识.Linux 为系统中所有的消息队

R语言学习笔记

參考:W.N. Venables, D.M. Smith and the R DCT: Introduction to R -- Notes on R: A Programming Environment for Data Analysis and Graphics,2003. http://bayes.math.montana.edu/Rweb/Rnotes/R.html 前言:关于R 在R的官方教程里是这么给R下注解的:一个数据分析和图形显示的程序设计环境(A system for data

OpenCV 2.4.9 学习笔记(1)—— 基本功能结构

一些关于OpenCV(2.4.9版本)的学习笔记,作为记录,以免自己忘了. 安装与配置 OpenCV的下载.安装以及在各个平台(Windows/Linux等)配置网上有很多的资料,自己就不用存了.需要或者遇到问题的时候再说. 基本模块结构 OpenCV(Open Source Computer Vision Library),一个遵循BSD协议的计算机视觉技术开源库,包含了几百个计算机视觉算法.目前最新版本应该是OpenCV3.0,alpha版和beta版都有了,我目前是用的2.4.9,3.0版

《iOS应用逆向工程》学习笔记(六)使用dumpdecrypted砸壳

本来是打算用AppCrackr砸壳的,结果砸壳都是失败的,开始以为是App的加密太厉害了,后来才知道是因为AppCrackr太暴力了,引起公愤,结果被人投诉招致核心功能被迫关闭了. 幸好在RE官网搜到一个用dumpdecrypted砸壳的帖子.下面是我砸壳的经历. 一.造锤 1.下载dumpdecrypted源码 下载地址:https://github.com/stefanesser/dumpdecrypted/archive/master.zip,接着在Mac中解压. 2.确认iOS设备的版本