@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' 的变换。