localization_status.py
Go to the documentation of this file.
1 import rospy
2 from threading import Lock
3 from nav_msgs.msg import Odometry
4 from clearpath_localization_msgs.msg import LocalizationStatus
5 
6 
7 # The name of the topic for odometry. This needs to match the CPR OutdoorNav API.
8 ODOM_TOPIC_NAME = "/localization/odom"
9 # The name of the topic for status. This needs to match the CPR OutdoorNav API.
10 STATUS_TOPIC_NAME = "/localization/status"
11 
12 
14  """Create ROS subscribers for localization status topics and save the results."""
15 
16  def __init__(self, store_data=False, msg_warn_period=10.0):
17  """Subscribes for updates to the various localization topics"""
18 
19  self._store_data = store_data
20  self._status_lock = Lock()
21 
22  self._odom = Odometry()
23  self._odom_sub = rospy.Subscriber(
24  ODOM_TOPIC_NAME,
25  Odometry,
26  self._odomCallback)
27 
28  self._status = LocalizationStatus()
29  self._status_sub = rospy.Subscriber(
30  STATUS_TOPIC_NAME,
31  LocalizationStatus,
32  self._statusCallback)
33 
34  self._no_new_msg_period = msg_warn_period
35  self._last_odom_msg_time = rospy.get_time()
36  self._last_status_msg_time = rospy.get_time()
37  self._timer = rospy.Timer(period=rospy.Duration(0.2), callback=self._msgChecker, oneshot=False)
38 
39  self._odom_path = {
40  "x": [],
41  "y": [],
42  }
43 
44  def _odomCallback(self, msg):
45  """Updates the odom state.
46 
47  Parameters
48  ----------
49  msg : nav_msgs.msg.Odometry
50  The updated odom state
51  """
52 
53  self._last_odom_msg_time = rospy.get_time()
54  with self._status_lock:
55  self._odom = msg
56  if self._store_data:
57  self._odom_path["x"].append(self._odom.pose.pose.position.x)
58  self._odom_path["y"].append(self._odom.pose.pose.position.y)
59 
60  def _statusCallback(self, msg):
61  """Updates the GPS status state.
62 
63  Parameters
64  ----------
65  msg : clearpath_localization_msgs.msg.LocalizationStatus
66  The updated GPS status state
67  """
68 
69  self._last_status_msg_time = rospy.get_time()
70  with self._status_lock:
71  self._status = msg
72 
73  def _msgChecker(self, event):
74  """Check to see if messages have not been received within a certain amount of time"""
75 
76  now = rospy.get_time()
77  if now - self._last_odom_msg_time > self._no_new_msg_period:
78  rospy.logwarn_throttle(self._no_new_msg_period, "No new odometry message received in the last %0.1f seconds", self._no_new_msg_period)
79  if now - self._last_status_msg_time > self._no_new_msg_period:
80  rospy.logwarn_throttle(self._no_new_msg_period, "No new status message received in the last %0.1f seconds", self._no_new_msg_period)
81 
82  def report(self):
83  """Logs all localization information."""
84 
85  with self._status_lock:
86  rospy.loginfo(" Localization:")
87  rospy.loginfo(" Odom: Pose (%f, %f, %f) Orientation (%f, %f, %f, %f) " % (
88  self._odom.pose.pose.position.x,
89  self._odom.pose.pose.position.y,
90  self._odom.pose.pose.position.z,
91  self._odom.pose.pose.orientation.x,
92  self._odom.pose.pose.orientation.y,
93  self._odom.pose.pose.orientation.z,
94  self._odom.pose.pose.orientation.w))
95  rospy.loginfo(" Status:")
96  rospy.loginfo(" Accuracy: %f" % self._status.accuracy)
97  rospy.loginfo(" GPS Position Num Connected Sats: %d" %
98  self._status.position_gnss.num_connected_sats)
99  rospy.loginfo(" GPS Heading Num Connected Sats: %d" %
100  self._status.heading_gnss.num_connected_sats)
101  rospy.loginfo(" GPS Base Station Num Connected Sats: %d" %
102  self._status.base_station_gnss.num_connected_sats)
103  rospy.loginfo(" GPS Dead Reckoning: %d" %
104  self._status.dead_reckoning)
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor
Definition: localization_status.py:13
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._odom_path
_odom_path
Definition: localization_status.py:39
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._status_sub
_status_sub
Definition: localization_status.py:29
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._timer
_timer
Definition: localization_status.py:37
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._last_odom_msg_time
_last_odom_msg_time
Definition: localization_status.py:35
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._odomCallback
def _odomCallback(self, msg)
Definition: localization_status.py:44
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._no_new_msg_period
_no_new_msg_period
Definition: localization_status.py:34
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._last_status_msg_time
_last_status_msg_time
Definition: localization_status.py:36
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor.report
def report(self)
Definition: localization_status.py:82
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._odom_sub
_odom_sub
Definition: localization_status.py:23
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._store_data
_store_data
Definition: localization_status.py:19
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._statusCallback
def _statusCallback(self, msg)
Definition: localization_status.py:60
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._status
_status
Definition: localization_status.py:28
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._status_lock
_status_lock
Definition: localization_status.py:20
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._msgChecker
def _msgChecker(self, event)
Definition: localization_status.py:73
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor._odom
_odom
Definition: localization_status.py:22
clearpath_onav_api_examples_lib.localization_status.LocalizationStatusMonitor.__init__
def __init__(self, store_data=False, msg_warn_period=10.0)
Definition: localization_status.py:16


clearpath_onav_api_examples_lib
Author(s):
autogenerated on Sun Nov 12 2023 03:29:19