你好,
我们目前正在使用c# Api将RoboDK与我们的SW连接起来。在RoboDk中,我们使用KUKA KR 250 R2700-2。
我们在执行机器人末端执行器的绝对旋转时遇到了一些问题,我们认为问题是我们在Api中获得的欧拉坐标。
我们使用pose()收集姿态,我们创建一个旋转矩阵,我们将旋转矩阵从0.0.0中的参考系转换到机器人的坐标系,然后乘以机器人姿态。然后我们使用MoveJ将这个姿势发送给robodk。
只要坐标系与末端执行器的系统相似,它就能正常工作。如果相反,它们不同(特别是在z轴上),那么运动就不是我们所期望的。
我认为这是因为我们用Pose()获得的Pose是Mecademic坐标,而机器人使用的是KUKA坐标。
在c#中是否有一种方法可以正确地获取和发送坐标到robodk?
下面是我们正在做的一个例子。我们还尝试使用RPM代替Rxyz,但它仍然不能工作
Mat robot_pose = _robot.Pose();
Var move_xyzrxryrz = new double[6];
Move_xyzrxryrz [0] = 0;
Move_xyzrxryrz [1] = 0;
Move_xyzrxryrz [2] = 0;
Move_xyzrxryrz [3] = 0;
Move_xyzrxryrz [4] = -45;
Move_xyzrxryrz [5] = 0;
var movementPoseRxyz = Mat.FromTxyzRxyz(move_xyzrxryrz);
var transformationAxes = new Mat(robot_pose);
transformationAxes。setPos(0,0,0);
var movementPoseAlignedRxyz = transformationAxes.inv() * movementPoseRxyz * transformationAxes;
Mat MovRxyz = robot_pose * movementPoseAlignedRxyz;
_robot。MoveJ (MovRxyz MoveBlocking);
编辑-
我更新了示例,并添加了一些截图来阐明行为。请查看尝试在Y轴上执行-45°旋转之前和之后的坐标。我还附上了我所期待的最后一个姿势的截图。
我们目前正在使用c# Api将RoboDK与我们的SW连接起来。在RoboDk中,我们使用KUKA KR 250 R2700-2。
我们在执行机器人末端执行器的绝对旋转时遇到了一些问题,我们认为问题是我们在Api中获得的欧拉坐标。
我们使用pose()收集姿态,我们创建一个旋转矩阵,我们将旋转矩阵从0.0.0中的参考系转换到机器人的坐标系,然后乘以机器人姿态。然后我们使用MoveJ将这个姿势发送给robodk。
只要坐标系与末端执行器的系统相似,它就能正常工作。如果相反,它们不同(特别是在z轴上),那么运动就不是我们所期望的。
我认为这是因为我们用Pose()获得的Pose是Mecademic坐标,而机器人使用的是KUKA坐标。
在c#中是否有一种方法可以正确地获取和发送坐标到robodk?
下面是我们正在做的一个例子。我们还尝试使用RPM代替Rxyz,但它仍然不能工作
Mat robot_pose = _robot.Pose();
Var move_xyzrxryrz = new double[6];
Move_xyzrxryrz [0] = 0;
Move_xyzrxryrz [1] = 0;
Move_xyzrxryrz [2] = 0;
Move_xyzrxryrz [3] = 0;
Move_xyzrxryrz [4] = -45;
Move_xyzrxryrz [5] = 0;
var movementPoseRxyz = Mat.FromTxyzRxyz(move_xyzrxryrz);
var transformationAxes = new Mat(robot_pose);
transformationAxes。setPos(0,0,0);
var movementPoseAlignedRxyz = transformationAxes.inv() * movementPoseRxyz * transformationAxes;
Mat MovRxyz = robot_pose * movementPoseAlignedRxyz;
_robot。MoveJ (MovRxyz MoveBlocking);
编辑-
我更新了示例,并添加了一些截图来阐明行为。请查看尝试在Y轴上执行-45°旋转之前和之后的坐标。我还附上了我所期待的最后一个姿势的截图。