AttributeError:无法在ROS中的geometry_msgs / Pose中设置属性错误

时间:2016-07-17 16:54:03

标签: python

我试图在ROS python包中使用geometry_msgs/Pose。但它显示以下错误 -

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))

1 个答案:

答案 0 :(得分:1)

ROS 中的Position的{​​{1}}和Quaternion使用collections.namedtuple来存储其值,因此一旦{{1}的实例已创建,无法修改;元组是不可变的

为避免重复自己,您可以使用函数从旧的geometry_msgs/Pose创建新的Pose;如下所示:

Pose

该函数的位置为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 pxpy和四元数为pzqxqy,{{1} }。

可以用作:

qz

未指定的值默认qw,并且必须在将它们作为参数传递时指定位置和四元数的符号