-
Notifications
You must be signed in to change notification settings - Fork 0
/
base_pose_pub.py
executable file
·85 lines (63 loc) · 2.8 KB
/
base_pose_pub.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import PoseStamped, PointStamped
import math as m
import numpy as np
from tf.transformations import *
#########################################################################################
#########################################################################################
############################### Callback function #######################################
#########################################################################################
#########################################################################################
#===========================================================================================
# takes the camera_pose flips the axes to ground and does the translation from camera to base
# 0.55 inches to the right and 15.675 inches to the bottom
#===========================================================================================
def callback(data):
global pub
global pos0
global pos1
global first
in_to_m = 0.0254
msg = PointStamped()
msg.header.stamp = rospy.Time.now()
quat = [0,0,0,0]
quat[0] = data.pose.orientation.x
quat[1] = data.pose.orientation.y
quat[2] = data.pose.orientation.z
quat[3] = data.pose.orientation.w
x = data.pose.position.x
y = data.pose.position.y
euler = euler_from_quaternion(quat)
yaw = euler[2]
if (-m.pi < yaw) and (yaw < -0.5* m.pi):
yaw = - (yaw + 0.5*m.pi)
elif (-0.5* m.pi < yaw) and (yaw < 0):
yaw = - (yaw + 0.5*m.pi)
elif (0 < yaw) and (yaw < 0.5* m.pi):
yaw = - (yaw + 0.5*m.pi)
elif (0.5* m.pi < yaw) and (yaw < m.pi):
yaw = - (yaw - 1.5*m.pi)
else:
yaw = yaw
x_real = (-y) + (0.55 * in_to_m)
y_real = (-x) - (15.675 * in_to_m)
msg.point.x = x_real
msg.point.y = y_real
msg.point.z = yaw
pub.publish(msg)
#########################################################################################
#########################################################################################
#########################################################################################
############################### Initialize function #####################################
#########################################################################################
#########################################################################################
def initialize():
global pub
rospy.init_node('base_pose_pub', anonymous=True)
rospy.Subscriber("camera_pose", PoseStamped, callback)
pub = rospy.Publisher('base_pose', PointStamped, queue_size = 50)
rospy.spin()
#########################################################################################
if __name__ == '__main__':
initialize()