V-rep 逆运动学(IK )8-computingJointAnglesForRandomP 。。。V-rep 逆运动学(IK)8-computingJointAnglesForRandomPos 代码⾃学
⽩⾊机器⼈(即通过封装好的simExtIK插件进⾏逆运动学计算)的代码
代码功能:⽤代码实现dummy的创建、ik组和元素的创建及参数设置
iveco
(//注释部分的代码不能放在vrep⾥直接运⾏,这⾥只做解释使⽤)function sysCall_init () //⼀共六个关节,通过句柄获得 //这⾥的IRB4600_joint1、……、IRB4600_joint6与场景层次结构⾥的名称⼀⼀对应 //把这些句柄分别赋给simJointHandles[1]……simJointHandles[6] simJointHandles ={} for i =1,6,1 do simJointHandles [i ]=sim .getObjectHandle ('IRB4600_joint'..i ) end //机器⼈末端的Dummy 赋给simTip ,机器⼈的基座赋给simBa simTip =sim .getObjectHandle ('IRB4600_IkTip') simBa =sim .getObjectHandle ('IRB4600') //规划的机器⼈末端⽬标位置⼀共有四个Dummy ,分别是testTarget1……testTarget4 //把这些末端位置句柄分别赋给target[1]…target[4] targets ={sim .getObjectHandle ('testTarget1'),sim .getObjectHandle ('testTarget2'),sim .getObjectHandle ('testTarget3'),sim .getObjectHandle ('testTarget4' //机器⼈的⽬标位置,初始化为0,cnt1在0-3之间循环 cnt1=0 cnt2=0 // //现在基于机器⼈的运动学在IK 插件环境中建⽴⼀个运动学链和2个IK 组(⽆阻尼和阻尼) ikJointHandles ={} //创建⼀个IK 环境ikEnv ikEnv =simIK .createEnvironment () //在IK
环境中创建⼀个Dummy ,命名为ikBa local ikBa =simIK .createDummy (ikEnv ) //把ikBa 设置成与CoppeliaSim 中的simBa 对应的相同姿势 simIK .tObjectMatrix (ikEnv ,ikBa ,-1,sim .getObjectMatrix (simBa ,-1)) //建⽴⽗基座的Dummy ,当前与ikBa 相同 local parent =ikBa //循环所有simJointHandles 关节,simJointHandles[1]-simJointHandles[6] for i =1,#simJointHandles ,1 do //在IK 环境中创建⼀个旋转关节ikJointHandles[i] ikJointHandles [i ]=simIK .createJoint (ikEnv ,simIK .jointtype_revolute ) //把该关节ikJointHandles[i]设置成IK 模式 simIK .tJointMode (ikEnv ,ikJointHandles [i ],simIK .jointmode_ik ) //获得关节simJointHandles[i]的关节限制 local cyclic ,interv =sim .getJointInterval (simJointHandles [i ]) //为ikJointHandles[i]设置上述获得的与关节simJointHandles[i]相同的关节限制 simIK .tJointInterval (ikEnv ,ikJointHandles [i ],cyclic ,interv ) //为ikJointHandles[i]设置与关节simJointHandles[i]相同的关节位置 simIK .tJointPosition (ikEnv ,ikJointHandles [i ],sim .getJointPosition (simJointHandles [i ])) //为ikJointHandles[i]设置与关节simJointHandles[i]相同的关节姿态
1
2
3
4
one day more5
6
trine7
8
英语作文夏令营
9
成人高考准考证怎么打印10
11
12
13
14
15
maybe16
17
18
19
20
21
22
23
24
25
torr
26
27
28
drunk是什么意思
29
30
31
32
33
34
35
36
37
cyril38
39
40
41
//为ikJointHandles[i]设置与关节simJointHandles[i]相同的关节姿态 simIK .tObjectMatrix (ikEnv ,ikJointHandles [i ],-1,sim .getObjectMatrix (simJointHandles [i ],-1)) //设置相应的⽗元素(第⼀个关节的⽗节点为基座) simIK .tObjectParent (ikEnv ,ikJointHandles [i ],parent ,true ) //更新相应的⽗元素(第⼆个关节的⽗节点为第⼀个关节) parent =ikJointHandles [i ] end //在IK 环境中创建末端tip Dummy ,命名为ikTip ikTip =simIK .createDummy (ikEnv ) //把ikTip 设置成与CoppeliaSim 中的simTip 对应的相同姿势 simIK .tObjectMatrix (ikEnv ,ikTip ,-1,sim .getObjectMatrix (simTip ,-1)) //把ikTip 连接到运动链的parent 上,此时parent 为ikJointHandles[6] simIK .tObjectParent (ikEnv ,ikTip ,parent ,true ) //在IK 环境中创建⽬标Dummy ,命名为ikTarget ikTarget =simIK .createDummy (ikEnv ) //将ikTarget 设置成与CoppeliaSim 中的simTip 对
应的相同姿势 simIK .tObjectMatrix (ikEnv ,ikTarget ,-1,sim .getObjectMatrix (simTip ,-1)) //连接两个Dummy,ikTip 和ikTarget simIK .tLinkedDummy (ikEnv ,ikTip ,ikTarget ) //创建⼀个IK 组,命名为ikGroup ikGroup =simIK .createIkGroup (ikEnv ) //把ikGroup 的分辨率(计算⽅法)设置为undamped ,即对应于界⾯设置中的Pudo inver ,参数0为Damping 的值,参数3为maxIterations 的值 simIK .tIkGroupCalculation (ikEnv ,ikGroup ,simIK .method_pudo_inver ,0,3) //向ikGroup 中添加⼀个IK 元素---ikTip local ikElementHandle =simIK .addIkElement (ikEnv ,ikGroup ,ikTip ) //指定IK 元素ikTip 的基座为ikBa simIK .tIkElementBa (ikEnv ,ikGroup ,ikElementHandle ,ikBa ) //指定IK 元素ikTip 的约束条件 //其中,最后⼀项值是约束条件 //straint_x, straint_y, straint_z, straint_alpha_beta, straint_gamma //其中,straint_gamma 只能在straint_alpha_beta 设置时设置 //为了⽅便起见,还有 //straint_straint_straint_straint_z //straint_straint_alpha_straint_gamma //straint_straint_straint_orientation. simIK .tIkElementConstraints (ikEnv ,ikGroup ,ikElementHandle ,simIK .constraint_po ) //设置IK 元素ikTip 所需的精度,最后⼀项第⼀个值是linear 精度,第⼆个值是angular 精度 simIK .tIkElementPrecision (ikEnv ,ikGroup ,ikElementHandle ,{0.00005,0.1*math .pi /180})end //函数ap
加勒比海盗5下载plyJoints ,将joints 的每个值设置为jointHandles 的关节位置applyJoints =function (jointHandles ,joints ) for i =1,#jointHandles ,1 do sim .tJointPosition (jointHandles [i ],joints [i ]) end end //在这⾥你可以检查碰撞和其他测试。如果配置有效,返回true function configurationValidationCallback (config ) sim .addLog (sim .verbosity_scriptinfos ,"Hello from validation callback") return true end function sysCall_actuation () //定义当前的⽬标dummyHandle 为targets[cnt1+1] local dummyHandle =targets [cnt1+1] //获得dummyHandle 的姿态m local m =sim .getObjectMatrix (dummyHandle ,-1) //设置ikTarget 的姿态为m simIK .tObjectMatrix (ikEnv ,ikTarget ,-1,m ) //搜索⼀个姿态配置,最⼤100毫秒 local startTime =sim .getSystemTimeInMs (-1) while sim .getSystemTimeInMs (startTime )<100 do local validationCB ='' //如果你需要对找到的配置执⾏额外的检查,请取消下⾯的注释:
4142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106