线程评级:
  • 0票(s) - 0平均
  • 1
  • 2
  • 3.
  • 4
  • 5
使用c# API从gcode为ABB机器人创建机器人目标
# 1
你好,

我一直试图理解RoboDK如何从gcode创建目标。例如,示例Gcode行:G1 X123.45 Y67.89 Z0.15 F1200如何在ABB机器人的MOVEL指令中转换为机器人目标?

我知道机器人加工项目和3d打印项目自动做到这一点,但我想在特定的动作中嵌入一些数字输入输出信号和速度信息,因此需要更多一点灵活性。

我已经研究了c# API示例(也是python版本)中的RoboDK.cs文件中的一些函数。针对ABB IRC5 MoveL命令进行讨论,根据我的理解,创建MoveL机器人目标的工作流程如下:

1.使用位置和欧拉角创建一个姿势矩阵[xyzrpw]:使用函数
代码:
静态公共垫FromXYZRPW(双x,双y,双z,双w,双p,双r)
在c# API中(与Transl(x,y,z)*rotz(w)*roty(p)*rotx®相同)

2.从位姿矩阵获取方向信息(ABB使用四元数)[q1 q2 q3 q4]:使用功能
代码:
静态双[]ToQuaternion(Mat Ti)


3.计算姿势所需的关节角度(使用逆运动学?)

4.从关节角度得到构型向量[cf1 cf4 cf6 cfx]

问题:

RoboDK如何从gcode行G1 X123.45 Y67.89 Z0.15 F1200计算[xyzwpr](更重要的是“wpr”欧拉角)?我知道这与TCP帧和XYZ坐标w.r.t用户帧(工作对象帧)之间的关系有关,但我无法理解它。

RoboDK是否使用逆运动学来计算给定姿势的关节值?c# API中是否有可用的函数?

任何帮助将不胜感激!

谢谢
岩石
我浏览了Robolink文档,找到了生成姿势、关节等的函数。

//www.w5838.com/doc/en/PythonAPI/robo...olink.Pose

有人能解释一下姿势是如何计算的吗?我不知道哪一个首先生成:姿势矩阵或[xyzwpr]数组?如何在c# API中使用Robolink.Pose()函数?
# 3
姿态是一个6自由度的约束,它可以被看作4x4矩阵或6维向量(XYZ坐标为位置,3次旋转为欧拉角)。更多信息请点击这里:
//www.w5838.com/blog/robot-euler-angles/

两种表示是等价的如果有另一种,就可以计算其中一种。

你可能把它和表示工具z轴方向的ijk向量混淆了。这样你就有了一个额外的自由度代表着绕工具Z轴的旋转。RoboDK用于机器人加工的工具将帮助您将5自由度的约束(通常由CNC使用)转换为6自由度的约束(机器人手臂所需)。下面是一个示例项目:
https://www.youtube.com/watch?v=tArHbCS2...XBz8QPnq1A
# 4
(05-20-2019, 06:54 pm)艾伯特写道:姿态是一个6自由度的约束,它可以被看作4x4矩阵或6维向量(XYZ坐标为位置,3次旋转为欧拉角)。更多信息请点击这里:
//www.w5838.com/blog/robot-euler-angles/

两种表示是等价的如果有另一种,就可以计算其中一种。

你可能把它和表示工具z轴方向的ijk向量混淆了。这样你就有了一个额外的自由度代表着绕工具Z轴的旋转。RoboDK用于机器人加工的工具将帮助您将5自由度的约束(通常由CNC使用)转换为6自由度的约束(机器人手臂所需)。下面是一个示例项目:
https://www.youtube.com/watch?v=tArHbCS2...XBz8QPnq1A

艾伯特,谢谢你的链接。让我困惑的是,不同的欧拉角组合会导致相同的4x4姿势矩阵!现在看了链接我明白了。我还有一个问题:

考虑xyzrpw向量= [X Y Z 0 180 0]。由此可以计算齐次4x4位姿矩阵(假设矩阵P)。

现在,有各种各样的欧拉角组合[Z Y’X”],导致相同的姿态矩阵:[180 0 180];[-180 0 180];[180 0 -180];[-180 0 -180];[0 -180 0]

对于所有这些不同的欧拉角组合,姿态矩阵为:

[-1.000000, 0.000000, 0.000000, 77.614000;
0.000000, 1.000000, 0.000000, 78.452000;
-0.000000, 0.000000, -1.000000, 100.000000;
0.000000, 0.000000, 0.000000, 1.000000];

上面所有的欧拉角都得到相同的旋转矩阵,因此理想情况下应该得到相同的四元数值。然而,在一些由RoboDK生成的MoveL命令中,我看到的四元数值如下:

[0 0 -1 0]和[0 0 +1 0]

这两者的结果似乎是相同的。我知道每个四元数值都有符号。在这种情况下,符号似乎对机器人的方向没有任何影响。总是这样吗?

为什么RoboDK在MoveL中生成两个不同的四元数数组[0 0 -1 0]和[0 0 +1 0],即使姿势矩阵(4x4)是相同的?
# 5
这种四元数值的对偶表示发生在进行180度位姿旋转(或非常接近180度旋转)时。

类似的情况也发生在欧拉角上。欧拉角通常有两个不同的值表示相同的姿态。在特定的旋转(如90度或180度旋转)中,可以有无限的表示。
# 6
(05-22-2019, 07:39 pm)艾伯特写道:这种四元数值的对偶表示发生在进行180度位姿旋转(或非常接近180度旋转)时。

类似的情况也发生在欧拉角上。欧拉角通常有两个不同的值表示相同的姿态。在特定的旋转(如90度或180度旋转)中,可以有无限的表示。

是有意义的!谢谢。

在c# API中是否有函数来计算给定的关节角?
# 7
是的,你可以用:
  • SolveIK(解决机器人逆运动学)计算关节角度给定的姿势
  • 求解机器人正运动学(Solve robot Forward Kinematics)来计算给定关节角的姿态。




浏览此线程的用户:
1客人(年代)