你好,
目前,我们正在使用c# Api将RoboDK与我们的软件连接起来。在RoboDk中,我们使用KUKA KR 250 R2700-2。
我们在执行机器人末端执行器的绝对旋转时遇到了一些问题我们认为问题在于我们在Api中得到的欧拉坐标。
我们使用pose()收集姿势,我们创建一个旋转矩阵,我们将旋转矩阵从0.0.0中的参考帧转换到机器人的帧,然后乘以机器人的姿势。然后我们用MoveJ把这个姿势发送给robodk。
只要坐标系与末端执行器的坐标系相似,它就能按预期工作。如果它们不同(特别是在z轴上),那么运动就不是我们所期望的。
我认为这是因为我们使用Pose()获得的Pose是在学术坐标中,而机器人使用的是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 . fromxyzrxyz (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与我们的软件连接起来。在RoboDk中,我们使用KUKA KR 250 R2700-2。
我们在执行机器人末端执行器的绝对旋转时遇到了一些问题我们认为问题在于我们在Api中得到的欧拉坐标。
我们使用pose()收集姿势,我们创建一个旋转矩阵,我们将旋转矩阵从0.0.0中的参考帧转换到机器人的帧,然后乘以机器人的姿势。然后我们用MoveJ把这个姿势发送给robodk。
只要坐标系与末端执行器的坐标系相似,它就能按预期工作。如果它们不同(特别是在z轴上),那么运动就不是我们所期望的。
我认为这是因为我们使用Pose()获得的Pose是在学术坐标中,而机器人使用的是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 . fromxyzrxyz (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°旋转之前和之后的坐标。我还附上了我期待的最后一个姿势的截图。