我试图在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))
答案 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
,px
,py
和四元数为pz
,qx
,qy
,{{1} }。
可以用作:
qz
未指定的值默认到qw
,并且必须在将它们作为参数传递时指定位置和四元数的符号。