想做练习的朋友可留下邮箱,将单独共享。

目标:

  • 会计算平衡重力的扭矩
  • 会使用PUMA机器手臂模拟器
  • 会使用P-控制器PD-控制器控制机械手臂

A[20分]

如图1所示的RRR平面操纵器,对应Puma 560的3-DOF模式(3维的自由度模式,即有3个可控的关节)。此模式下的三个关节分别对应于Puma 560的关节2、3和5。 每个手臂都有一个质量

 [公式] 。 每个质心(COM)位于坐标系i的 X 方向上的距离 

[公式] 处。 第 i 个关节角为

 [公式] 

  1. 计算重力补偿

 [公式] ,该重力矢量G估算每个关节在重力作用下产生的扭矩

 [公式] 。[20分] 计算方法见

B[80分]

注意:在此任务中,机器人应以3-DOF模式运行。 为此,您必须从模拟器的下拉菜单中选择“ 3-DOF”。 (默认情况下,其开始于“ 6-DOF(四元数)”。)在3-DOF模式下,您只能以gv.q [0] 、gv.q [1]和gv.q [2]的方式分别访问关节2、3和5。可以使用gv.dof检查当前激活的自由度模式。

1. [12分] njmoveControl()

在njmoveControl()中为Puma的2、3和5关节实现一个P控制器

2. [10分]调整控制器

在所有三个关节角度中执行10° 步,并手动调整关节的位置增益(

 [公式] )。 找到这样的值

  • 尽快达到

 [公式]

  • q的任何值都没有振荡/超调
  • 不超过机器人的扭矩限制

用不同的

 [公式] 机器人有什么不同的行为? 请在pdf中列出调整后的

 [公式] 。 为什么每个关节的调整的 

[公式] 不同?

注意:请勿硬编码转矩限制,而应以不超出转矩限制的方式调整控制器增益。 您必须通过模拟器禁用自动扭矩限制(“设置Setting”选项卡->取消选中“扭矩限制torque limits”),并将您记录的扭矩值与Puma扭矩极限进行比较(Puma的扭矩极限见末尾的表格)。 要测试您的控制器,请在第一个下拉框中选择njmove控制模式。 然后,您可以在其旁边的字段中指定所需的关节配置

[公式] 。 单击“开始”激活控制器。

提示:您将无法完美地实现所有三个目标。

3.[10分]记录机械手臂行为

现在,记录机器人从

 [公式] 

 [公式] 的行为。 画出目标角度

 [公式],实际的关节角度 q 和施加的扭矩

 [公式] 

图1: k_p = [650, 80, 8]

您可以使用模拟器的绘图功能或喜欢的任何其他绘图工具:Octave / Gnuplot,SciPy,Matlab等。对于经过良好调整的控制器,$q$的结果图应类似于上图。对于所有图, 在标题中(caption)列出使用的位置增益。

注意:要在模拟器中记录数据,请将模拟器设置为3-DOF并禁用转矩限制(“设置Setting”选项卡 取消“转矩限制torque limit”)。 在第一个下拉框中选择njmove控制模式,将角度设置为(0°; 0°; 0°),然后单击“开始Start”。 要开始记录数据,请输入文件名,例如 “data.mat”,然后单击“开始记录Start recording”。 然后在第二个下拉框中选择njmove控制模式,将角度设置为(10°; 10°; 10°),然后单击“开始”。 机器人达到目标后,单击“停止记录Stop recording”。 生成的数据文件具有以下格式:time q(1..n) dq(1..n) qd(1..n) tau(1..n) x(1..m) dx(1..m) xd(1..m)。如果生成的mat文件不能直接加载,可以把文件后缀改为txt,然后在matlab中选择Import data

4.[12分]在PreprocessControl()中计算重力矢量

使用您在“计算”中得出的函数来计算重力对连杆扭矩的影响。 将转矩保存到向量gv.G中。 Puma机器人的实际几何参数在param.h中定义。 将这些链接参数用于您的3-DOF实现:

  • r1 = R2, r2 = 0.189738, r3 = R6
  • l1 = L2, l2 = L3, l3 = L6,
  • m1 = M2, m2 = M3 +M4 +M5, m3 = M6
  • g = -9.81
  • [公式] 可以使用M_PI
  • 重要提示: 虚拟机中PUMA机器手臂的初始角度和作业A的图中一致,第二个机械手臂与第一个机械手臂呈90°角,确切的说是-90°因为它在第一个机械手臂的逆时针方向。此处与课时2-2里不同,即2-2课程中第一个机械手臂与第二个机械手臂在同一条直线上。所以在虚拟机中计算的重力补偿时,所使用的第二个关节角gv.q应该在减去M_PI/2

5. [12分] floatControl()

使用您计算出的重力矢量函数来补偿重力对floatControl()中机械臂的影响。 在浮动模式下,机器人应保持其当前姿势,并且仅在施加外力时才移动。 要在重力补偿中测试控制器,请将模拟器设置为3-DOF,然后启动浮动控制模式。 通过使用鼠标拖动机械臂,在可视化中的机器人上“拖动”。 它在拉动时应该移动,在松开时停止。 重要提示:您的实现还必须在 6-DOF 模式下成功运行,以便可以在真实的Puma上对其进行测试(先在模拟器中进行测试!)。

演示待更新!

6. [12分] njgotoControl()

在njgotoControl()中实现具有重力补偿P控制器。 调整位置增益(position gains,

[公式] ),并以10°步进绘制响应图(即从0°到10°的响应)。一张

 [公式] ,一张包含 q 

 [公式]

7. [12分] jgotoControl()

在jgotoControl()中实现具有重力补偿PD控制器。 现在,您的控制器应该能够执行10°步而不会出现振荡或超调。 选择

 [公式] 

 [公式] 尽可能高(相对于转矩极限)。 同6,画图。和P控制器相比,为什么现在的增益

 [公式] 可以更高?

注解: 有重力补偿的PD控制器就是机器手臂产生的扭矩

 [公式] 等于重力补偿gv.G与PD控制器的扭矩之和。

注意

请勿在控制代码中限制扭矩,并在模拟器中禁用扭矩限制(“设置”选项卡!“扭矩限制”)。 在10个步中产生的最大扭矩取决于增益。 您的控制器产生的扭矩不应高于关节的最大扭矩:

关节 1 2 3 4 5 6
最大扭矩[Nm] 97.6 156.4 89.4 24.2 20.1 21.2

2021年1月18更新:

  • 作业下载链接
  • 演示示例

作业下载 提取码rtb1

第一次录制,有点紧张,哈哈哈哈,不要介意。Puma介绍:

    第一次作业演示:

    njgoto 我们当时没有修改

     [公式] 所以最终效果并不好,这里就不演示了。

    注意:模拟中的参数值在模拟中的效果和实际机器人上的效果是有偏差的,因为还存在干扰等因素,所以还需要在实际机器人中测试。