Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
252
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.88 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Spyder Editor
  4.  
  5. This is a temporary script file.
  6. """
  7.  
  8. import rospy
  9. import serial
  10. from std_msgs.msg import Float64
  11. from std_msgs.msg import String, Header
  12. import utm
  13.  
  14.  
  15.  
  16. def calculate_lat(lat, direction):
  17. latitude = float(lat[0:2]) + float(lat[2:]) / 60.0
  18. if direction == 'S':
  19. latitude = -latitude
  20. return latitude
  21.  
  22. def calculate_lon(lon, direction):
  23. longitude = float(lon[0:3]) + float(lon[3:]) / 60.0
  24. if direction == 'W':
  25. longitude = -longitude
  26. return longitude
  27.  
  28.  
  29.  
  30. if __name__ == '__main__':
  31. ### Start Rospy and get all the parameters.
  32. rospy.logdebug("Initializing Minicom")
  33.  
  34. h = Header()
  35. #h.stamp = rospy.Time.now()
  36. rospy.init_node('serial_connection', anonymous = True)
  37. serial_port = rospy.get_param('~port','/dev/ttyUSB0')
  38. serial_baud = rospy.get_param('~baudrate',4800)
  39.  
  40. ### Read the serial ports with above parameters
  41. port = serial.Serial(serial_port, serial_baud, timeout=3)
  42.  
  43. lat_pub = rospy.Publisher("Minicom"+'/lattitude', Float64, queue_size=5)
  44. lon_pub = rospy.Publisher("Minicom"+'/longitude', Float64, queue_size=5)
  45. alt_pub = rospy.Publisher("Minicom"+'/altitude', Float64, queue_size=5)
  46. utm_easting_pub = rospy.Publisher("Minicom"+'/utm_easting', Float64, queue_size=5)
  47. utm_northing_pub = rospy.Publisher("Minicom"+'/utm_northing', Float64, queue_size=5)
  48. zone_pub = rospy.Publisher("Minicom"+'/zone', Float64, queue_size=5)
  49. letter_pub = rospy.Publisher("Minicom"+'/letter', String, queue_size=5)
  50. quality_pub = rospy.Publisher("Minicom"+'/quality', String, queue_size=5)
  51.  
  52.  
  53. # End the initialization Part
  54. rospy.logdebug("Initialization Complete")
  55.  
  56.  
  57.  
  58.  
  59.  
  60. rospy.loginfo("Calculating lattitude, longitude and altitude")
  61.  
  62.  
  63.  
  64. count = 0
  65. try:
  66. while not rospy.is_shutdown():
  67. data = str(port.readline())
  68.  
  69. if data == '':
  70. rospy.logwarn("No data")
  71. print("data")
  72. else:
  73.  
  74. if data.startswith('$GNGGA'):
  75.  
  76. datalist = data.split(',')
  77.  
  78. ### Saving Lattitude, longitude and Altitude in each reading in seperate lists.
  79. lattitude = datalist[2]
  80. latdirection = datalist[3]
  81. finalLat = calculate_lat(lattitude, latdirection)
  82.  
  83. longitude = datalist[4]
  84. londirection = datalist[5]
  85. finalLon = calculate_lon(longitude, londirection)
  86. quality = datalist[6]
  87.  
  88.  
  89. altitude = float(datalist[9]) + float(datalist[11])
  90.  
  91. utm_values = utm.from_latlon(finalLat, finalLon)
  92. utm_easting = utm_values[0]
  93. utm_northing = utm_values[1]
  94. utm_zone = utm_values[2]
  95. utm_letter = utm_values[3]
  96.  
  97. count = count + 1
  98. print(count)
  99.  
  100.  
  101. lat_pub.publish(finalLat)
  102. lon_pub.publish(finalLon)
  103. alt_pub.publish(altitude)
  104. utm_easting_pub.publish(utm_easting)
  105. utm_northing_pub.publish(utm_northing)
  106. zone_pub.publish(utm_zone)
  107. letter_pub.publish(utm_letter)
  108. quality_pub.publish(quality)
  109.  
  110.  
  111.  
  112.  
  113.  
  114. except rospy.ROSInterruptException:
  115. port.close()
  116.  
  117. except serial.serialutil.SerialException:
  118. rospy.loginfo("Shutting down Minicom Node due to Serial Exception!!!")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement