V-REP(CoppeliaSim)可以导入obj、dxf、ply、stl、dae、URDF文件,这里介绍导入URDF文件。
在此之间需要获得URDF文件,URDF文件可以编写而成,通过在ROS下运行检验,也可以把三维模型导出。
在***solidwork软件中导出URDF文件需要通过URDF插件***,插件下载地址为http://wiki.ros.org/sw_urdf_exporter,下载之后,直接进行安装,完成之后需要在solidwork的插件管理器中打开。
完成上述之后,打开需要转换的模型。点击,工具—>file---->Export as URDF。
点击之后出现如下图,包含导出文件存储位置、inertial(惯性)、visual(视觉)、collision(碰撞)。 内含对应的坐标系设置。 对于这类小零件,三个坐标系可以重合。VREP导入URDF文件时不能出现中文路径,所以导出URDF文件时最好不要出现中文。然后,点击完成即可。
打开vrep,然后找到插件(plugins),点击urdf import ,然后点击import,找到文件路径点击导入。
导入效果如下,vrep已经根据urdf文件读取了关节树。
使用urdf文件建立模型,比使用stl文件在vrep中导入模型更加简单、方便。
vrep中的脚本有两种类型,一类为主脚本(the main script)和子脚本(child scripts),主脚本只有一个,且必须有,该脚本用于驱动场景,由于其的重要性,该部分代码不允许用户更改。子脚本则可以拥有多个,用来操作关节。在关节树的顶点处,创建脚本。
添加以下代码可以实现一些简单的功能。程序包含一个函数sysCall_threadmain(),该函数可用于运行主要代码。
代码分成三部分,第一部分为获取各关节句柄(handles),通过sim.getObjectHandle获得,变量为关节名。第二部分设置一些RML vectors。第三部则通过函数sim.rmlMoveToJointPositions驱动机械臂运动。
-- RPR arm code
function sysCall_threadmain()
--get Joint handles
X_jointHandles=sim.getObjectHandle('X_Joint')
Z_jointHandles=sim.getObjectHandle('Z_Joint')
Y_jointHandles=sim.getObjectHandle('Y_Joint')
jointHandles={X_jointHandles,Z_jointHandles,Y_jointHandles}
--modelbase
modelBase=sim.getObjectHandle('RPR')
modelBaseName=sim.getObjectName(modelBase)
-- Set-up some of the RML vectors:
vel=540
accel=180
jerk=250
currentVel={0,0,0} -- speed
currentAccel={0,0,0}
maxVel={vel*math.pi/180,vel*math.pi/180,vel*math.pi/180}
maxAccel={accel*math.pi/180,accel*math.pi/180,accel*math.pi/180}
maxJerk={jerk*math.pi/180,jerk*math.pi/180,jerk*math.pi/180}
targetVel={0,0,0}
for i=0,6,1 do
sim.wait(1)
targetPos1={-40000*math.pi/180,0,0}
sim.rmlMoveToJointPositions(jointHandles,-1,currentVel,currentAccel,maxVel,maxAccel,maxJerk,targetPos1,targetVel)
targetPos3={0,0,0}
sim.rmlMoveToJointPositions(jointHandles,-1,currentVel,currentAccel,maxVel,maxAccel,maxJerk,targetPos3,targetVel)
sim.wait(100)
end
end