Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Python API Pose gives odd behavior

#1
I Have the following test code block


Code:
from robodk import Pose  
def test(abc):
 a,b,c = abc
 p = Pose(0,0,0,a,b,c)
 print (p)


test((30,89,0))
test((30,90,0))
and I get the following output:


Code:
Pose(0.000, 0.000, 0.000,  30.000, 89.000, 0.000):
[[ 0.017, -0.000, 1.000, 0 ],
[ 0.500, 0.866, -0.009, 0 ],
[ -0.866, 0.500, 0.015, 0 ],
[ 0, 0, 0, 1 ]]

Pose(0.000, 0.000, 0.000,  0.000, 90.000, 30.000):
[[ 0.000, -0.000, 1.000, 0 ],
[ 0.500, 0.866, -0.000, 0 ],
[ -0.866, 0.500, 0.000, 0 ],
[ 0, 0, 0, 1 ]]


Note the angles of the two outputs. In the second Rx and Rz appear to be swapped.

Perhaps I don't understand the coordinates but the second output seems wrong to me.

Can anyone confirm that this is bad behavior or explain why its not?
#2
This is not a bug or a bad behavior. The Pose command uses an Euler angle representation (Rx->Ry'->Rz''). Using this representation, when the Ry value is 90 deg (your b value), Rx and Rz are redundant.

These 2 transformations are very similar:
Code:
from robodk import *

pose1 = Pose(0.000, 0.000, 0.000,  30.000, 89.000, 0.000)
pose2 = Pose(0.000, 0.000, 0.000,  0.000, 90.000, 30.000)

# Calculate error:
pose1to2 = pose1.inv() * pose2
print(pose1to2)
# Outputs: Pose(0.000, 0.000, 0.000,  -0.000, 1.000, -0.000)

The 4x4 matrix you see is a pose and it represents the 6D transformation. You can see a very small change between the 2 poses.

More information here:
https://robodk.com/doc/en/PythonAPI/robo...obodk.Pose
https://robodk.com/doc/en/Basic-Guide.html#RefFrames
https://robodk.com/blog/robot-euler-angles/

Albert
  




Users browsing this thread:
1 Guest(s)