我试图在ROS包中使用味觉/姿势。但它显示出了以下错误-
AttributeError: can't set attribute error下面是代码的片段-
ee_pose['position'].x += -0.5
ee_pose['position'].y += -0.5我修改了上面的行,但我正在寻找更好的方法。
ee_pose=Pose(position=Point(x=ee_pose['position'].x-0.5,
y=ee_pose['position'].y-0.5,
z=ee_pose['position'].z),
orientation=Quaternion(x=ee_pose['orientation'].x,
y=ee_pose['orientation'].y,
z=ee_pose['orientation'].z,
w=ee_pose['orientation'].w))发布于 2016-07-22 10:20:33
ROS中的Position和Quaternion of geometry_msgs/Pose使用collections.namedtuple来存储它们的值,因此一旦创建了Pose实例,就不能修改它;元组是不可变的。
为了避免重复,您可以使用一个函数从旧的Pose创建新的the;如下所示:
def update_pose(pose, **kwargs):
new_pose = Pose(position = Point(
x=pose['position'].x + kwargs.get('px', 0),
y=pose['position'].y + kwargs.get('py', 0),
z=pose['position'].z + kwargs.get('pz', 0)),
orientation = Quaternion(
x=pose['orientation'].x + kwargs.get('qx', 0),
y=pose['orientation'].y + kwargs.get('qy', 0),
z=pose['orientation'].z + kwargs.get('qz', 0),
w=pose['orientation'].w + kwargs.get('qw', 0)))
return new_pose函数的位置为px、py、pz和四元数为qx、qy、qz、qw。
并可用作:
ee_pose = update_pose(ee_pose, px=-0.5, py=-0.5)
print(ee_pose)
# {'position': Point(x=-0.366, y=0.7096, z=0.3766), 'orientation': Quaternion(x=0.7468, y=-0.5236, z=-0.2663, w=-0.3115)}未指定的值将默认为0,并且在将位置和四元数作为参数传递时必须指定它们的符号。
https://stackoverflow.com/questions/38423657
复制相似问题