9
9
from geometry_msgs .msg import Twist , Transform , TransformStamped
10
10
from geometry_msgs .msg import Pose , PoseWithCovarianceStamped , Quaternion
11
11
from nav_msgs .msg import Odometry
12
+ from std_srvs .srv import Trigger , TriggerRequest , TriggerResponse
12
13
13
14
class EmulationBase (object ):
14
15
def __init__ (self ):
@@ -30,7 +31,10 @@ def __init__(self):
30
31
rospy .Subscriber ("/base/twist_controller/command" , Twist , self .twist_callback , queue_size = 1 )
31
32
rospy .Subscriber ("/initialpose" , PoseWithCovarianceStamped , self .initalpose_callback , queue_size = 1 )
32
33
self .pub_odom = rospy .Publisher ("/base/odometry_controller/odometry" , Odometry , queue_size = 1 )
34
+ rospy .Service ("/base/odometry_controller/reset_odometry" , Trigger , self .reset_odometry )
33
35
self .br = tf2_ros .TransformBroadcaster ()
36
+ self .tf_buffer = tf2_ros .Buffer ()
37
+ self .tf_listener = tf2_ros .TransformListener (self .tf_buffer )
34
38
35
39
self .timestamp_last_update = rospy .Time .now ()
36
40
@@ -87,6 +91,16 @@ def initalpose_callback(self, msg):
87
91
self .odom .pose .pose = Pose ()
88
92
self .odom .pose .pose .orientation .w = 1
89
93
94
+ def reset_odometry (self , req ):
95
+ transform = self .tf_buffer .lookup_transform ("map" , "base_link" , rospy .Time (0 ))
96
+
97
+ self .initial_pose = transform .transform
98
+
99
+ self .odom .pose .pose = Pose ()
100
+ self .odom .pose .pose .orientation .w = 1
101
+
102
+ return TriggerResponse (True , "odometry resetted" )
103
+
90
104
def twist_callback (self , msg ):
91
105
self .twist = msg
92
106
self .timestamp_last_twist = rospy .Time .now ()
0 commit comments