@Chengyawen26 chatgpt
根据你提供的代码和错误信息,报错显示 'PoseStamped' 对象没有 'position' 属性。这表明您的 pose_stamped 对象并没有正确设置,因此无法访问其位置信息。在设置 pose_stamped 时,请确保正确设置了其位置信息。
您可以尝试更改您的代码,如下所示:
import rclpy
from tf2_ros import Buffer, TransformListener
from tf2_geometry_msgs import do_transform_pose
from geometry_msgs.msg import PoseStamped, TransformStamped
import tf2_ros
def main():
rclpy.init()
node = rclpy.create_node('tf2_listener')
tf_buffer = Buffer()
listener = TransformListener(tf_buffer, node)
# pose
pose_stamped = PoseStamped()
pose_stamped.header.frame_id = "camera"
pose_stamped.pose.position.x = 1.0
pose_stamped.pose.position.y = 2.0
pose_stamped.pose.position.z = 3.0
pose_stamped.pose.orientation.x = 0.0
pose_stamped.pose.orientation.y = 0.0
pose_stamped.pose.orientation.z = 0.0
pose_stamped.pose.orientation.w = 1.0
rclpy.spin_once(node, timeout_sec=1)
try:
transform = tf_buffer.lookup_transform('base_link', 'camera', rclpy.time.Time())
transformed_pose = do_transform_pose(pose_stamped, transform)
print(transformed_pose)
except tf2_ros.LookupException as e:
print("Transform not available: ", e)
except tf2_ros.ExtrapolationException as e:
print("Extrapolation exception: ", e)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
在此示例中,我稍微更改了导入,添加了异常处理以捕获转换查找可能出现的异常,并在异常处理块中打印相关错误信息。请确保您的 TF2 树中确实存在 'camera' 到 'base_link' 的变换。