V-rep中导入机械臂模型并验证

V-rep中导入机械臂模型并验证

工具:Solidworks,coppeliaSim,机械臂模型Xmate3_pro

1.solidworks导出模型

在solidworks中打开下载的机械臂模型,并转成.stl格式输出

在这里插入图片描述
在这里插入图片描述
保存完之后,机械臂以零件的形式保存在文件夹中
在这里插入图片描述

2. 打开vrep,导入模型

在这里插入图片描述
在这里插入图片描述
刚刚导出的.stl文件全部选中,导入vrep,由于模型体积太大,可以进行缩放,将缩放比例调整为0.01,z轴方向朝上
在这里插入图片描述
在这里插入图片描述
此时模型单独分开的,且不具有动力学行为,还需要采用关节将每个部分的零件连接在一起

3. 设置机械臂关节

新建一个scene,先将底座复制到新的scene中
![在这里插入图片描述](https://img-blog.csdnimg.cn/dc9780548d8a486b8bfe7230482518f4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55S16ISR5bCP55m955qEbGludXjmsYLlrabot68=,size_20,color_FFFFFF,t_70,g_se,x_16
因为旋转轴在底座的中心,所以选择底座的上的圆面,ctrl+鼠标选择圆面上的三角形,然后提取出圆柱体
在这里插入图片描述
推出选择后会发现文件中多了一个cylinder
在这里插入图片描述
添加关节旋转轴add–joint–revolute
在这里插入图片描述
同时选中刚刚添加的关节和刚刚选择的圆柱体(一定要先选择关节,再选择圆柱体)

在这里插入图片描述
在这里插入图片描述
这样就设置好了第一个关节,然后将连杆1从第一个scene中复制到这个scene中,根据旋转轴的位置按照上面方法重复设置,直到将所有的连杆和关节都设置完成,设置过程中,每设置好一个关节后进行重命名,方便后续操作,分别将关节命名为Xmate_joint,将连杆命名为Xmate_link_vision
在这里插入图片描述
这个时候可以发现还有关节露在外面,非常难看,可以选择将关节隐藏,选中Xmate_joint,然后tools–scene object properties–common
在这里插入图片描述
如图所示,取消上面勾选,勾选下面,即可隐藏关节

4. 提取实体特征,设置动力学特征

再次新建一个scene,将Xmate_link_vision全部选中,提取到新的scene中
在这里插入图片描述
如图所示,edit–morph selection into convex shapes
在这里插入图片描述
在这里插入图片描述
如图所示,第一步双击link0前面的圆圈,第五步勾选第一排第一个,后面不选,link1勾选第二个其他不选,link2勾选第三个其他不选,一次类推,下面的动力学特征根据机械臂的实际情况可以进行设置
与关节隐藏一样,将所有的实体选中,隐藏,并复制粘贴回第二个scene
在这里插入图片描述
注意看scene object properties中勾选的内容,将实体重命名为Xmate_link
在这里插入图片描述
调整模型树的关系
在这里插入图片描述
选择超父节点,按如图所示设置
在这里插入图片描述

这样选择超父节点的时候,就可以选择正个机械臂,以防机械臂内部被修改,将超父节点重新命名为机械臂的名称,即Xmate3_pro
在这里插入图片描述

在shape选项中,通过调整各个连杆的RGB值,改变颜色,可以使机械臂关节间的区别更加显著
设置joint的控制模式,全部选中各个关节,设置动力学特征
在这里插入图片描述
在这里插入图片描述
关节内部可以直接用PID控制器进行控制,此时开始仿真的时候,机械臂就会直接立在场景中,保持不动
在这里插入图片描述

5. 编写lua代码,让机械臂像v-rep中其他的机械臂一样动起来

在这里插入图片描述
如图所示,创建脚本
在这里插入图片描述
脚本中目前出现的是需要让机械臂动起来的几个基础函数,可以根据V-rep中自带的UR5例程进行修改,让机械臂进行点到点的运动

function sysCall_init()
    corout=coroutine.create(coroutineMain)
    -- do some initialization here
end

function sysCall_actuation()
    if coroutine.status(corout)~='dead' then
        local ok,errorMsg=coroutine.resume(corout)
        if errorMsg then
            error(debug.traceback(corout,errorMsg),2)
        end
    end
    -- put your actuation code here
end

function sysCall_sensing()
    -- put your sensing code here
end

function sysCall_cleanup()
    -- do some clean-up here
end

-- See the user manual or the available code snippets for additional callback functions and details

function movCallback(config,vel,accel,handles)
    for i=1,#handles,1 do
        if sim.getJointMode(handles[i])==sim.jointmode_force and sim.isDynamicallyEnabled(handles[i]) then
            sim.setJointTargetPosition(handles[i],config[i])
        else    
            sim.setJointPosition(handles[i],config[i])
        end
    end
end
function moveToConfig(handles,maxVel,maxAccel,maxJerk,targetConf)
    local currentConf={}
    for i=1,#handles,1 do
        currentConf[i]=sim.getJointPosition(handles[i])
    end
    sim.moveToConfig(-1,currentConf,nil,nil,maxVel,maxAccel,maxJerk,targetConf,nil,movCallback,handles)
end
function coroutineMain()

    local jointHandles={}
    for i=1,7,1 do
        jointHandles[i]=sim.getObjectHandle('Xmate_joint'..i)
    end

    local vel=10
    local accel=2
    local jerk=10
    local maxVel={vel*math.pi/180,vel*math.pi/180,vel*math.pi/180,vel*math.pi/180,vel*math.pi/180,vel*math.pi/180,vel*math.pi/180}
    local maxAccel={accel*math.pi/180,accel*math.pi/180,accel*math.pi/180,accel*math.pi/180,accel*math.pi/180,accel*math.pi/180,accel*math.pi/180}
    local maxJerk={jerk*math.pi/180,jerk*math.pi/180,jerk*math.pi/180,jerk*math.pi/180,jerk*math.pi/180,jerk*math.pi/180,jerk*math.pi/180}

    local targetPos1={90*math.pi/180,90*math.pi/180,-90*math.pi/180,90*math.pi/180,90*math.pi/180,90*math.pi/180,90*math.pi/180}
    moveToConfig(jointHandles,maxVel,maxAccel,maxJerk,targetPos1)

    local targetPos2={-90*math.pi/180,45*math.pi/180,90*math.pi/180,135*math.pi/180,90*math.pi/180,90*math.pi/180,90*math.pi/180}
    moveToConfig(jointHandles,maxVel,maxAccel,maxJerk,targetPos2)
    
    local targetPos3={45*math.pi/180,45*math.pi/180,45*math.pi/180,45*math.pi/180,60*math.pi/180,45*math.pi/180,45*math.pi/180}
    moveToConfig(jointHandles,maxVel,maxAccel,maxJerk,targetPos3)

    local targetPos4={0,0,0,0,0,0,0}
    moveToConfig(jointHandles,maxVel,maxAccel,maxJerk,targetPos4)
    
    
end

CoppeliaSim 2022-03-01

仿真结果如视频所示

最后,将机械臂导出为模型,并保存在Vrep模型库中,后续使用可以直接从左侧拖入界面
选中Xmate3_pro,然后file–save model as–coppeliasim model,根据指示选择封面保存,就大功告成啦
在这里插入图片描述

在这里插入图片描述

参考内容:

V-Rep机器人仿真软件模型导入部分
【详细】Solidworks中模型导出到VREP+代码控制模型
vrep例程之创建模型(build a clean model)
【V-REP自学笔记(三)】用代码控制机器人运动

一些vrep详细的设置原因可以参考第三条链接,采用urdf导入的可以参照第二条链接,lua代码学习参照第四条链接

  • 15
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值