4 from geometry_msgs.msg
import PoseStamped, QuaternionStamped, Quaternion, Pose, Twist, Vector3
5 from sensor_msgs.msg
import NavSatFix
6 from nav_msgs.msg
import Odometry
9 rospy.init_node(
'gps_attitude_to_pose')
12 pose_pub = rospy.Publisher(
'/drone_pose', PoseStamped, queue_size=1)
13 odom_pub = rospy.Publisher(
'/drone_odom', Odometry, queue_size=1)
14 attitude = Quaternion()
15 position = NavSatFix()
27 attitude = msg.quaternion
30 global position, origin_lat, origin_lon, origin_east, origin_north, origin_zone, origin_letter
33 if origin_lat
is None and origin_lon
is None:
35 origin_lat = position.latitude
36 origin_lon = position.longitude
37 origin_east, origin_north, origin_zone, origin_letter = utm.from_latlon(origin_lat, origin_lon)
41 pose.header = msg.header
42 pose.header.frame_id =
"world"
45 east, north, _, _ = utm.from_latlon(position.latitude, position.longitude, force_zone_number=origin_zone, force_zone_letter=origin_letter)
48 pose.pose.position.x = east - origin_east
49 pose.pose.position.y = north - origin_north
50 pose.pose.position.z = position.altitude
53 pose.pose.orientation = attitude
56 pose_pub.publish(pose)
60 odom_msg.header = pose.header
61 odom_msg.child_frame_id =
"base_link"
62 odom_msg.pose.pose = pose.pose
63 odom_msg.twist.twist = Twist(Vector3(0, 0, 0), Vector3(0, 0, 0))
64 odom_pub.publish(odom_msg)
66 attitude_sub = rospy.Subscriber(
'/sim/attitude', QuaternionStamped, attitude_callback)
67 gps_sub = rospy.Subscriber(
'/sim/gps_position', NavSatFix, gps_callback)
71 while not rospy.is_shutdown():