当前位置: 首页>編程日記>正文

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

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
endfunction sysCall_actuation()if coroutine.status(corout)~='dead' thenlocal ok,errorMsg=coroutine.resume(corout)if errorMsg thenerror(debug.traceback(corout,errorMsg),2)endend-- put your actuation code here
endfunction sysCall_sensing()-- put your sensing code here
endfunction sysCall_cleanup()-- do some clean-up here
end-- See the user manual or the available code snippets for additional callback functions and detailsfunction movCallback(config,vel,accel,handles)for i=1,#handles,1 doif sim.getJointMode(handles[i])==sim.jointmode_force and sim.isDynamicallyEnabled(handles[i]) thensim.setJointTargetPosition(handles[i],config[i])else    sim.setJointPosition(handles[i],config[i])endend
end
function moveToConfig(handles,maxVel,maxAccel,maxJerk,targetConf)local currentConf={}for i=1,#handles,1 docurrentConf[i]=sim.getJointPosition(handles[i])endsim.moveToConfig(-1,currentConf,nil,nil,maxVel,maxAccel,maxJerk,targetConf,nil,movCallback,handles)
end
function coroutineMain()local jointHandles={}for i=1,7,1 dojointHandles[i]=sim.getObjectHandle('Xmate_joint'..i)endlocal vel=10local accel=2local jerk=10local 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代码学习参照第四条链接


https://www.fengoutiyan.com/post/14737.html

相关文章:

  • V1区与纹状区域交互作用模型
  • er模型怎么画
  • 机械臂接触力仿真
  • 改进型V模型
  • V字形法则模型
  • 前臂运动模型怎么做
  • 开发V模型
  • 中等V模型
  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機