线程评级:
python程序旋转错误
# 1
你好,

我一直在为Staubli TX2-90机器人编写python程序。我正在试着调整工具的角度。我首先设置相对于机器人法兰的工具位姿,然后使用预定义的关节将机器人移动到主位置。然后我检索工具的位置,并调整相关角度(保存为新位置)。我转换回一个姿势,然后使用MoveJ命令移动机器人。

代码似乎工作得很好,但是,在我调整角度的行中,如果我调整rx或rz(在我的代码中为+20),它们会产生围绕同一轴的旋转。不管我是改变rx还是rz角度,它都会改变紫色的值(在附带的截图中)。这看起来像是一个万向节锁定问题,但在roboDK GUI中,我能够使用表盘正确地旋转每个轴(下图中的浅蓝色/紫色/黄色角度)。此外,我没有得到任何与此相关的错误。

我已经包含了下面的代码。提前感谢你的建议。


代码:
#设置工具相对于机器人法兰的姿态
Tool_position = [0,0,610,0,-20,0]
Tool_pose = xyzrpw_2_pose(tool_position)
robot.setPoseTool (tool_pose)

#移动到主位置并保存这个姿势
robot.MoveJ ([0, 90, -45, -90 65 0])
Home_pose = robot.Pose()

#调整角度
Home_position = pose_2_xyzrpw(Home_pose)
x,y,z,rx,ry,rz = Home_position
new_position = [x,y,z,rx,ry,rz+20] #这里我改变了角度

#换到新位置
New_pose = xyzrpw_2_pose(new_position)
robot.MoveJ (new_pose)


附加文件 缩略图(s)

我想我已经把罪犯的范围缩小了一点。这似乎是xyzrpw_2_pose()的问题。不管我是否改变r或w输入,它产生几乎相同的姿态(在一个姿态中一项是-0,在另一个姿态中它是0)。我的问题是,为什么当给定不同的输入时,xyzrpw_2_pose()会给出相同的输出?

代码:
#获取当前机器人位置
home_pose = robot.Pose()
Home_position = pose_2_xyzrpw(home_pose)
X,y,z,rx,ry,rz = home位置

打印(' ')
print('第一个位置:')
#调整一个角度(rx)并移动到新的位置
First_position = [x,y,z,rx+20,ry,rz]
打印(first_position)
First_pose = xyzrpw_2_pose(first_position)
robot.MoveJ (first_pose)
打印(first_pose)

打印(' ')
print('第二位置:')
#调整不同的角度(rz)并移动到新的位置
Second_position = [x,y,z,rx,ry,rz+20]
打印(second_position)
second_position = xyzrpw_2_pose(second_position)
robot.MoveJ (second_pose)
打印(second_pose)

这将产生以下输出:

代码:
第一个位置:
[-50.00000000000013, -1218.2225247665606, 242.834301761225, 20.0, -90.0, 90.0]
Pose(-50.000, -1218.223, 242.834, 90.000, 20.000, 90.000):
[[0.000, -0.940, 0.342, -50.000],
[0.000, -0.342, -0.940, -1218.223],
[1.000, 0.000, 0.000, 242.834],
[0,0,0,1]]


第二个位置:
[-50.00000000000013, -1218.2225247665606, 242.834301761225, 0.0, -90.0, 110.0]
Pose(-50.000, -1218.223, 242.834, 90.000, 20.000, 90.000):
[[-0.000, -0.940, 0.342, -50.000],
[0.000, -0.342, -0.940, -1218.223],
[1.000, 0.000, 0.000, 242.834],
[0,0,0,1]]
# 3
你好威廉,

在“Pose(,,,,,)”行中[90,20,90]的角度值意味着遵循[20,-90,90]和[0,-90,110]的角度输入,我也不清楚。

然而,下面的4x4齐次变换矩阵是正确的:[20,-90,90]的滚俯仰偏航产生与[0,-90,110]相同的方向。为什么?因为在这种情况下,三个不同的轴向旋转加起来是相同的方向。

函数xyzrpw_2_pose输出这个4x4矩阵,因此对我来说似乎是正确的。然而,当调用“print(some_pose)”时,“some_pose”是xyzrpw_2_pose输出的4x4矩阵,不仅打印这个4x4矩阵。似乎是其他一些函数在它前面添加了误解的“Pose(,,,,,)”行,但我不够聪明,看不出是哪个。

Maarten
# 4
嗨Maarten !

谢谢你的回复。

引用: 然而,下面的4x4齐次变换矩阵是正确的:[20,-90,90]的滚俯仰偏航产生与[0,-90,110]相同的方向。为什么?因为在这种情况下,三个不同的轴向旋转加起来是相同的方向。

你可能真的是对的。在这种情况下,如何区分这两者呢?


引用: 函数xyzrpw_2_pose输出这个4x4矩阵,因此对我来说似乎是正确的。然而,当调用“print(some_pose)”时,“some_pose”是xyzrpw_2_pose输出的4x4矩阵,不仅打印这个4x4矩阵。似乎是其他一些函数在它前面添加了误解的“Pose(,,,,,)”行,但我不够聪明,看不出是哪个。

我对姿势不是很熟悉。我想也许它不仅仅是4x4矩阵,还包括其中的位置。




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