本文主要是介绍CoppeliaSim Edu(原V-rep)入门三实验指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Dummy对象和IKGroup的使用
实验目的
-
熟悉Dummy对象和IKGroup的使用,并用他们对UR10机器人进行逆运动学求解;
-
观察使用不同求解器、不同迭代步数下的逆解效果。
实验原理
利用雅可比矩阵将关节空间速度映射到直角坐标空间的性质可构造向量值函数:
p = f ( q ) p = f(q) p=f(q)
而逆运动学问题即是求解方程: f ( q ) = p d f(q) = p_{d} f(q)=pd
求解这个方程可用牛顿-拉弗森迭代法,即考虑函数 f ( q ) f(q) f(q)对于 q q q的雅可比矩阵 J J J( f ( q ) f(q) f(q)的输出的往往是一个 1 × 6 1\times 6 1×6的向量, q q q是一个 1 × n 1\times n 1×n的向量,其雅可比矩阵是一个 6 × n 6\times n 6×n阶的矩阵),用如下迭代公式进行迭代求解的方法:
J ( q n ) ( q n + 1 − q n ) = p d − f ( q n ) J(q_{n})\left(q_{n+1} - q_{n}\right)= p_{d}-f(q_{n}) J(qn)(qn+1−qn)=pd−f(qn)
很多情况下 J J J并不可逆,这时候有几种方法来求解这个问题。
-
伪逆法,求解 J J J的伪逆来求解方程;
-
阻尼最小二乘法,求解上述方程的最小二乘解作为上述方程的近似解来迭代。
实验步骤
-
导入模型并设置好机械臂
-
打开程序后在"model
browser"中找到"UR10.ttm",将其拖入当前场景中。 -
选中其所有关节,在"sean objects properties"中设置其为"inverse
kinematics mode"并勾选"hybrid operation"选项。
-
-
在机械臂末端创建两个"Dummy"对象,分别命名为"ur10_tip"和"ur10_target",并将"ur10_tip"添加为末端连杆"UR10_link7"的子对象。
-
在"sean objects properties"连接两个"Dummy"对象,连接类型选择为"IK,
tio-target"。 -
根据刚刚所创建的"tip-target"对在"inverse kinematics"对话框中创建"ik
group",并设置求解器和最大迭代次数。 -
点击运行,等待默认程序执行完毕后拖动"ur10_target",可观察到机器人自觉移动末端到目标位置。
实验结果与分析
-
在实验中可观察到,当所设置的最大迭代次数太小时,机械臂处于抖动的状态,无法移动到目标位置;
-
在选用"Pseudo
inverse"求解器时,关节初始位形是奇异位形的时候,无论设置多大的最大迭代次数,迭代都不能收敛; -
选用"DSL"求解器时,迭代求解会比较缓慢,当"target"和"tip"距离比较远的时候,迭代次数设置到最大值( 400 400 400)都不能够收敛。
机器人码垛任务设计与实践
实验目的
-
学会设计码垛任务的工作路径;
-
对机器人夹取工件和摆放工件的末端位姿要求有一个清晰的认识;
-
对机器人末端执行机构有一个较清晰的认识
实验原理
移动被标记为"target"的"Dummy",就可以通过"IKGroup"求解出机器人末端运动到"target"处的关节位形,从而进行正向动力学即可使机器人末端运动到指定位置。
在这里需要注意以下两点:
-
需要保证整个运动过程机器人各连杆间、机器人与外界不发生干涉;
-
对不同的工件进行夹取操作时,除了夹具的位置还应注意考虑夹具的方向,以便保证工件被夹住之后不易坠落。
实验步骤
-
末端执行机构安装
把"RG2"对象设为"UR10_connection"的子对象,调整其位置和方向使其与实际安装情况一致,并在其末端设置"Dummy"对象:“tip”
"UR10_connection"是"CoppeliaSim Edu"中的力传感器对象,其数据表示末端执行器与末端连杆之间的作用力(矩),或者理解为为保持末端执行器与末端连杆刚性连接所需要的作用力(矩)。
-
建立"IKGroup",并将其设置为显试句柄"Explicit handling"一便我们在程序中调用其进行求解。
-
建立工作路径
一般情况下,当"target"与"tip"距离较远时,不论是伪逆法还是阻尼最小二乘法都可能失效,这时,为确保求解器正常工作,显然不能仅给定工件夹取和释放位置作为工作条件,所以需要建立工作路径,为机器人选择一条从"夹取"到"释放"两个或更多工况之间的路径。
工作路径的建立有两种方法:-
确定好夹取、释放以及中间个别(有限制末端位姿需要)工况的末端位姿,用函数"generateIKPath"生成中间过程中的各组关节角度,然后按组依次运动;
-
直接自己选取合适的末端位姿作为"夹取"和"释放"的中间过渡点,本质上和第一种方法一样。
-
-
设置信号
末端运行到指定位置时,与"RG2"通信,告知其爪子目前是否可以闭合。这里用到的函数是"setIntegerSignal"和"getIntegerSignal"。
实验心得
-
在自动生成和手动生成工作路径的两种方法中,都需要注意设置求解器,使其不解算出有干涉的位形,同时,调整步长时也应注意不应将步长条件得过大,否则可能导致使用"rmlMoveToJointPositions"从一个无干涉位形到另一无干涉位形时,在中间过程发生干涉;但是步长太小又有可能浪费时间。
-
还遇到一个比较奇怪的地方是,步长等条件都完全不变的情况下,多次运行求解的结果可能不一样(比如夹取到第一个工件准备移动到下一位置时,大概有 5 % 5\% 5%的概率,逆运动求解会失败),可能是因为自己手动设置的步长,正好处于收敛与发散的临界值了。
操纵机器人绘图
实验目的
-
熟悉了解"Path"对象的导入和使用;
-
了解"feltPen"对象的使用;
实验原理
使用函数"getPositionOnPath"可获得"Path"对象上任意点的位置,只要让"target"的位置在各个"Path"上移动就可以了,“feltPen"上装有位置传感器"feltPen_sensor”,当其接近可被检测到的"shap"对象时,就会在该"shap"对象上留下痕迹。
实验步骤
-
导入"Path"对象:在菜单栏选择文件–>导入–>从"*.csv"文件导入即可。
-
安装"feltPen":与"RG2"的安装类似;
-
编写阻塞进程程序,每一个"Path"都一笔写成,每一笔包括准备(将笔尖移动到路径起点附近,但不接触纸面留下痕迹),书写(沿路径移动的同时接触纸面),提笔(将笔尖提起离开纸面,以方便移动到下一路径起点处)
实验心得
-
如果直接将"target"放在纸所在平面上,距离传感器反而判定未检测到物体。推测是反解存在一定误差,使得实际得到的"tip"可能进入了纸面之内,将"target"放在纸面之外即可解决这个问题。
-
不能批量导入"Path"对象实在是有点麻烦,如果路径比较复杂手动点击得搞好一会儿。
参考资料:CoppeliaSim Edu User Manual:https://coppeliarobotics.com/helpFiles/
这篇关于CoppeliaSim Edu(原V-rep)入门三实验指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!