def distance(self, p1, p2):
     uc = utmconv()
     (hemisphere, zone, letter, easting1,
      northing1) = uc.geodetic_to_utm(p1[0], p1[1])
     (hemisphere, zone, letter, easting2,
      northing2) = uc.geodetic_to_utm(p2[0], p2[1])
     return sqrt((easting1 - easting2)**2 + (northing1 - northing2)**2)
示例#2
0
    def __init__(self, lat=0, lon=0, northing=0, easting=0, GPS_data=0):
        self.lat = float(lat)
        self.lon = float(lon)
        self.northing = float(northing)
        self.easting = float(easting)
        self.altitude = 30
        self.GPS_data = GPS_data
        if self.GPS_data != 0:
            self.lat = GPS_data.latitude
            self.lon = GPS_data.longitude
            self.altitude = GPS_data.altitude

        # Default values:
        self.hemisphere = 'N'
        self.zone = 32
        self.letter = 'U'

        self.converter = utmconv()

        if self.lat == 0 and self.lon == 0:
            self.update_geo_coordinates()
        if self.northing == 0 and self.easting == 0:
            self.update_UTM_coordinates()
        if self.GPS_data == 0:
            self.GPS_data = GPS()
            self.GPS_data.latitude = self.lat
            self.GPS_data.longitude = self.lon
            self.GPS_data.altitude = self.altitude
示例#3
0
	def __init__(self, filename, max_lines, relative_coordinates):
		self.i = 0
		print 'Importing GPS data'
		file = open(filename, 'rb')
		file_content = csv.reader(file, delimiter=',')
	 	self.data = []
		i = 0
		uc = utmconv()
		origo_e = 0
		origo_n = 0
		for time, lat, lon, fix, sat, hdop in file_content:
			if fix > 0:
				# convert to UTM
				(hemisphere, zone, letter, easting, northing) = uc.geodetic_to_utm (float(lat),float(lon))
				# use relative coordinates
				if relative_coordinates:
					if origo_e == 0:
						origo_e = easting
						origo_n = northing
						easting = 0
						northing = 0
					else:
						easting -= origo_e
						northing -= origo_n
			else:
				easting = 0
				northing = 0
			self.data.append([float(time), float(lat), float(lon), \
				int(fix), int(sat), float(hdop), easting, northing])
			i += 1
			if max_lines > 0 and i == max_lines:
				break
		file.close()
		self.length = len(self.data)
		print '\tTotal samples: %d' % (self.length) 
    def __init__(self):
        self.rate = rospy.Rate(update_interval)

        self.bus = SMBus(1)
        self.utmconv = utmconv()
        self.recording = False

        self.main_mode = ""
        self.sub_mode = ""
        self.lat = 0
        self.lon = 0
        self.alt = 0
        self.mission_idx = 0
        self.mission_len = 0
        self.new_imu_reading = False
        self.new_vel_reading = False

        dt = 1/update_interval
        self.state = np.zeros((4,1), float)
        self.kalman = kalman.KalmanFilter(self.state, dt)
        # self.state = np.zeros((6,1), float)
        # self.kalman = kalman3.KalmanFilter(self.state, dt)
        # self.state = np.zeros((9,1), float)
        # self.kalman = kalman_acc3.KalmanFilter(self.state, dt)

        self.local_position_ned = np.array([0,0,0])
        self.vx = 0
        self.vy = 0
        self.vz = 0
        self.ax = 0
        self.ay = 0
        self.az = 0
 
        self.filtered_pos = np.empty((0,2), float)
        self.local_position_landing = Point()
        self.landing_target = np.array([0,0,0])
        self.landing_coords = Point(1.17, 0.75, 0)

        self.data = np.empty((0,4), float)   
        self.local_data = np.empty((0,3), float)
        # self.filtered_data = np.empty((0,3), float)
        self.filtered_data = np.empty((0,2), float)
        self.rotation_matrix = np.array([[1,0],[0,1]])

        rospack = rospkg.RosPack()
        package_path = rospack.get_path("precision_landing")
        self.data_path = package_path + "/data/"

        rospy.Subscriber("/mavlink_pos", mavlink_lora_pos, self.on_drone_pos)
        rospy.Subscriber("/telemetry/mission_info", telemetry_mission_info, self.on_mission_info)
        rospy.Subscriber("/telemetry/heartbeat_status", telemetry_heartbeat_status, self.on_heartbeat_status)
        rospy.Subscriber("/telemetry/imu_data_ned", telemetry_imu_ned, self.on_imu_data)
        rospy.Subscriber("/telemetry/local_position_ned", telemetry_local_position_ned, self.on_local_pos)
        
        self.sensor_data_pub    = rospy.Publisher("/landing/sensor_data", precland_sensor_data, queue_size=0)
        self.landing_target_pub = rospy.Publisher("/telemetry/set_landing_target", telemetry_landing_target, queue_size=0)
示例#5
0
    def __init__(self, serial_device, serial_baudrate, debug=False):
        rospy.init_node(self.ROS_NODE_NAME, log_level=rospy.DEBUG)
        rospy.loginfo('Started: ' + rospy.get_caller_id())
        #serial_device = str(serial_device)
        #serial_baudrate = int(float(serial_baudrate))
        serial_device = rospy.get_param('/uav_restriction_node/serial_device')
        serial_baudrate = rospy.get_param(
            '/uav_restriction_node/serial_baudrate')
        rospy.logdebug('Device %s, data type %s' %
                       (serial_device, type(serial_device)))
        rospy.logdebug('Baud rate %s, data type %s' %
                       (serial_baudrate, type(serial_baudrate)))

        self.debug = debug

        rospy.loginfo('Configuring UTM for zone 32')
        self.uc = utmconv()
        self.uc.set_zone_override(32)
        #Center positions
        self.zeroEasting = 590734.045671
        self.zeroNorthing = 6136563.68892

        rospy.loginfo('Configuring arduino serial port')
        self.ser_arduino = serial.Serial()
        self.ser_arduino.baudrate = serial_baudrate  #ARDUINO_BAUD_RATE
        self.ser_arduino.port = serial_device  #ARDUINO_PORT
        #rospy.loginfo(ser)
        rospy.loginfo('Opening arduino serial port')
        try:
            self.ser_arduino.open()
        except serial.SerialException as e:
            rospy.logerr('Could not open arduino serial port')
        else:
            with self.mutex_heading:
                self.uav_heading_rad = 0
                self.uav_heading_deg = self.uav_heading_rad * RAD2DEG

            if rospy.get_param('/uav_restriction_node/emulate_arduino_send'):
                r = rospy.Rate(0.5)  # 10hz
                while not rospy.is_shutdown():
                    rospy.loginfo('Sending')
                    self.send_arduino_message(0, 20, 30, 40, 50, 60)
                    r.sleep()

            rospy.Subscriber(ROS_POSE_TOPIC, mavlink_lora_pos,
                             self.callback_pos)
            rospy.Subscriber(ROS_ATTITUDE_TOPIC, mavlink_lora_attitude,
                             self.callback_attitude)

        # spin() simply keeps python from exiting until this node is stopped
        rospy.spin()
        rospy.loginfo('Closing arduino serial port')
        while self.ser_arduino.is_open:
            self.ser_arduino.close()
        rospy.loginfo('Arduino serial port closed')
        rospy.loginfo('Stopped ' + rospy.get_caller_id())
示例#6
0
def geodetic_to_utm(geo_coordinates):
    utm_values = np.array
    uc = utmconv()
    for point in geo_coordinates:
        new_utm_values = uc.geodetic_to_utm(point[0], point[1])
        # The first time, the exception is raised and the array is initialized.
        try:
            utm_values = np.vstack((utm_values, new_utm_values))
        except ValueError:
            utm_values = new_utm_values
    return utm_values
示例#7
0
def utm_to_geodetic(utm_data):
    uc = utmconv()
    geodetic_coordinates = np.array
    for point in utm_data:
        new_geodetic_coordinates = uc.utm_to_geodetic(str(utm_data[:,0][0]),
                                                     int(utm_data[:,1][0]),
                                                     float(utm_data[:,3][0]),
                                                     float(utm_data[:,4][0]))
        # The first time, the exception is raised and the array is initialized.
        try:
            geodetic_coordinates = np.vstack((geodetic_coordinates,
                                              new_geodetic_coordinates))
        except ValueError:
            geodetic_coordinates = new_geodetic_coordinates

    return geodetic_coordinates
示例#8
0
    def __init__(self):
        rospy.loginfo(rospy.get_name() + ": Start")

        #Get parameters
        #self.got_dev = rospy.get_param("~got_device", "/dev/drone_cage_got_in")
        #self.aq_dev = rospy.get_param("~aq_device", "/dev/drone_cage_aq_out")

        #Serial communications
        serial_error = False
        try:
            self.serialIn = serial.Serial(
                port="/dev/ttyUSB0",
                baudrate=57600)  #(port = self.got_dev, baudrate = 57600)
        except Exception as e:
            rospy.logerr(
                rospy.get_name() +
                ": Unable to open serial device")  # %s" % self.got_dev)
            serial_error = True

        if serial_error == False:
            try:
                self.serialOut = serial.Serial(
                    port="/dev/ttyUSB1",
                    baudrate=57600)  #(port = self.aq_dev, baudrate = 57600)
            except Exception as e:
                rospy.logerr(
                    rospy.get_name() +
                    ": Unable to open serial device")  # %s" % self.aq_dev)
                serial_error = True
        if serial_error == False:
            #Position conversion class
            self.uc = utmconv()

            #Crc calculation class
            self.crc = crc16()

            #Center positions
            self.zeroEasting = 590734.045671
            self.zeroNorthing = 6136563.68892

            #Update frequency
            self.rate = 200  #5Hz

            self.r = rospy.Rate(self.rate)
            self.updater()
示例#9
0
def main():
    # Fixing random state for reproducibility
    np.random.seed(19680801)

    fig, ax = plt.subplots()

    patches = []

    utmcon = utmconv()

    for int_id, val in dict_json.items():
        coords = val["coordinates"]
        if val["geometry"] == "polygon":
            coords = coords.split(" ")
            i = 0
            for a in coords:
                coords[i] = a.split(',')
                i += 1
            new_c = []
            for i in coords:
                (hemisphere, zone, zlet, easting,
                 northing) = utmcon.geodetic_to_utm(float(i[0]), float(i[1]))
                new_c.append([easting, northing])
            polygon = Polygon(new_c, True)
            patches.append(polygon)
            print(easting, northing)
        else:
            coords = coords.split(',')
            (hemisphere, zone, zlet, easting,
             northing) = utmcon.geodetic_to_utm(float(coords[0]),
                                                float(coords[1]))
            circle = Circle((easting, northing), float(coords[2]))
            #patches.append(circle)

    colors = 100 * np.random.rand(len(patches))
    p = PatchCollection(patches, alpha=0.4)
    p.set_array(np.array(colors))
    ax.add_collection(p)

    plt.ylim(1141400, 1142400)
    plt.xlim(332400, 333400)
    fig.colorbar(p, ax=ax)

    plt.show()
示例#10
0
def utm_to_geodetic(utm_data):
    uc = utmconv()
    geodetic_coordinates = np.array
    for point in utm_data:
        # import pdb; pdb.set_trace()
        new_geodetic_coordinates = uc.utm_to_geodetic(str(point[0]),
                                                     int(point[1]),
                                                     float(point[3]),
                                                     float(point[4]))

        # The first time, the exception is raised and the array is initialized.
        try:
            geodetic_coordinates = np.vstack((geodetic_coordinates,
                                              new_geodetic_coordinates))

        except ValueError:
            geodetic_coordinates = new_geodetic_coordinates

    return geodetic_coordinates
    def get_remove_outliers(self, points):
        lat_data = points[:, 0]
        lon_data = points[:, 1]
        utm_easting = []
        utm_northing = []
        geo_lat = []
        geo_lon = []
        variable_distance = 0

        # initialize variables
        uc = utmconv()
        old_e = 590686.5315567022
        old_n = 6136529.126779066
        # looping through file
        for i in range(len(lat_data)):

            lat = float(lat_data[i])
            lon = float(lon_data[i])

            (hemisphere, zone, letter, easting,
             northing) = uc.geodetic_to_utm(lat, lon)

            tmp_distance = sqrt((old_e - easting)**2 + (old_n - northing)**2)

            if tmp_distance < 1 + variable_distance:  # and time < 527.542:
                utm_easting.append(easting)
                utm_northing.append(northing)

                geo_lat.append(lat)
                geo_lon.append(lon)
                variable_distance = 0
                old_e = easting
                old_n = northing
            else:
                variable_distance += 0.2

        # self.plot_data(utm_easting, utm_northing, 'Data', 'Easting', 'Northing', 'Position')

        points = np.column_stack((geo_lat, geo_lon))

        return points
示例#12
0
# 1000m
m = 1000

# geodetic reference coordinate
lat1 =  55.47
lon1 = 010.33
# Our geodetic reference coordinate
lat1_1 = 68.530855
lon1_1 = -089.827172

print ('First position [deg]:')
print ('  latitude:  %.8f'  % (lat1))
print ('  longitude: %.8f'  % (lon1))

# instantiate utmconv class
uc = utmconv()
uc_1 = utmconv()

# convert from geodetic to UTM
(hemisphere, zone, letter, e1, n1) = uc.geodetic_to_utm (lat1,lon1)
print ('\nConverted from geodetic to UTM [m]')
print ('  %d %c %.5fe %.5fn' % (zone, letter, e1, n1))
(hemisphere_1, zone_1, letter_1, e1_1, n1_1) = uc_1.geodetic_to_utm (lat1_1,lon1_1)

# now generating the second UTM coordinate
e2 = e1 
n2 = n1 + m
e2_1 = e1_1 + m
n2_1 = n1_1

# convert back from UTM to geodetic
示例#13
0
from utm import utmconv
from math import pi, cos, acos, sin
# define test position
#test_lat =  55.47
#test_lon = 010.33

test_lat = 42.160771
test_lon = 024.747739

print('Test position [deg]:')
print('  latitude:  %.10f' % (test_lat))
print('  longitude: %.10f' % (test_lon))
#N55.47 E010.33
# instantiate utmconv class
#uc = utm.from_latlon(lat, lon)
uc = utmconv()

# convert from geodetic to UTM
(hemisphere, zone, letter, easting,
 northing) = uc.geodetic_to_utm(test_lat, test_lon)
print('\nConverted from geodetic to UTM [m]')
print('  %d %c %.5fe %.5fn' % (zone, letter, easting, northing))

# convert back from UTM to geodetic
(lat, lon) = uc.utm_to_geodetic(hemisphere, zone, easting, northing)
print('\nConverted back from UTM to geodetic [deg]:')
print(' Original latitude:  %.10f' % (lat))
print(' Original longitude: %.10f' % (lon))
lat11 = lat
lon11 = lon
lat = lat * (pi / (180))
示例#14
0
    def __init__(self):
        rospy.sleep(2)
        self.scenario = rospy.get_param("~scenario")
        self.payload = {''}
        self.kml = kml_no_fly_zones_parser(0)
        self.static_filename = ''
        self.geoditic_coords = []
        self.utm_coords = []
        self.coord_conv = utmconv()
        self.utm_trafic_debug = 0
        self.debug = 0
        self.path_debug = 0
        self.push_debug = 0
        self.utm_coords = []
        self.empty_map = []
        self.map_ll_reference = []
        self.map_res = 1
        self.ll_dummy = ['N', 32, 'U', 466703, 6162091]
        self.ur_dummy = ['N', 32, 'U', 469703, 6165091]
        self.map_length = 0
        self.map_width = 0
        self.map_height = 0
        self.path = []
        self.post_payload = {
            'uav_id': 3012,
            'uav_auth_key':
            '96ba4387cb37a2cbc5f05de53d5eab0c9583f1e102f8fe10ccab04c361234d6cd8cc47c0db4a46e569f03b61374745ebb433c84fac5f4bdfb8d89d2eb1d1ec0f',
            'uav_op_status': 22,
            'pos_cur_lat_dd': 0,
            'pos_cur_lng_dd': 0,
            'pos_cur_alt_m': 0,
            'pos_cur_hdg_deg': 0,
            'pos_cur_vel_mps': 0,
            'pos_cur_gps_timestamp': 0,
            'wp_next_lat_dd': 0,
            'wp_next_lng_dd': 0,
            'wp_next_alt_m': 0,
            'wp_next_hdg_deg': 0,
            'wp_next_vel_mps': 0,
            'wp_next_eta_epoch': 0,
            'uav_bat_soc': 0
        }
        self.standard_post_payload = {
            'uav_id': 3012,
            'uav_auth_key':
            '96ba4387cb37a2cbc5f05de53d5eab0c9583f1e102f8fe10ccab04c361234d6cd8cc47c0db4a46e569f03b61374745ebb433c84fac5f4bdfb8d89d2eb1d1ec0f',
            'uav_op_status': 22,
            'pos_cur_lat_dd': 1,
            'pos_cur_lng_dd': 1,
            'pos_cur_alt_m': 1,
            'pos_cur_hdg_deg': 1,
            'pos_cur_vel_mps': 1,
            'pos_cur_gps_timestamp': 1,
            'wp_next_lat_dd': -1,
            'wp_next_lng_dd': -1,
            'wp_next_alt_m': -1,
            'wp_next_hdg_deg': -1,
            'wp_next_vel_mps': -1,
            'wp_next_eta_epoch': -1,
            'uav_bat_soc': 100
        }
        self.at_last_wp = 0
        self.last_info_pub = time.time()
        self.path_flag = False
        self.latest_dynamic_data = self.get_dynamic_nfz()
        self.published_first_dnfz = 0
        #ROS STUFF
        self.get_snfz_service = rospy.Service("/utm_parser/get_snfz",
                                              get_snfz,
                                              self.get_snfz_handler,
                                              buff_size=10)
        self.get_dnfz_service = rospy.Service("/utm_parser/get_dnfz",
                                              get_dnfz,
                                              self.get_dnfz_handler,
                                              buff_size=10)
        self.is_coord_free_service = rospy.Service("/utm_parser/is_coord_free",
                                                   is_coord_free,
                                                   self.check_coord_service,
                                                   buff_size=10)
        self.get_rally_points = rospy.Service("/utm_parser/get_rally_points",
                                              get_rally_points,
                                              self.get_rally_points_handler,
                                              buff_size=10)
        #self.post_drone_service = rospy.Service("/utm_parser/post_drone_info", post_drone_info, self.post_drone_info_handler, buff_size=10) ##SUBSCRIBE
        self.drone_info_sub = rospy.Subscriber("/drone_handler/DroneInfo",
                                               DroneInfo,
                                               self.post_drone_info_handler)
        self.path_sub = rospy.Subscriber(
            "/gcs/forwardPath", DronePath,
            self.save_path)  #Activity when new path is calculated
        self.drone_type_sub = rospy.Subscriber("/gcs/medicalTransport",
                                               DroneSingleValue,
                                               self.update_type)

        self.dnfz_pub = rospy.Publisher('/utm/dynamic_no_fly_zones',
                                        String,
                                        queue_size=10)
        self.heartbeat_pub = rospy.Publisher('/node_monitor/input/Heartbeat',
                                             heartbeat,
                                             queue_size=10)
        self.utm_drones_pub = rospy.Publisher('/utm/dronesList',
                                              UTMDroneList,
                                              queue_size=10)
        self.heart_msg = heartbeat()

        self.recent_drone = dict_init()

        self.posted = False
        self.last_posted_dnfz = self.get_dynamic_nfz()

        self.dynamic_polys = []
        self.dynamic_circles = []
        self.static_zones = []
        self.static_polys = []
示例#15
0
    def __init__(self):
        self.request_sent = False
        self.first_msg_ok = False

        # status variables
        self.batt_volt = 0.0
        self.last_heard = 0
        self.last_heard_sys_status = 0
        self.lat = 0.0
        self.lon = 0.0
        self.alt = 0.0
        self.local_lat = 0.0
        self.local_lon = 0.0
        self.local_alt = -5.0
        self.local_pos = np.empty((1, 3), float)
        self.recorded_sys_id = 0
        self.recorded_comp_id = 0

        self.utmconv = utm.utmconv()

        self.target_lat = 55.4720459
        self.target_lon = 10.4148503
        (_, _, _, easting,
         northing) = self.utmconv.geodetic_to_utm(self.target_lat,
                                                  self.target_lon)
        self.target_easting = easting
        self.target_northing = northing

        self.mission_handler = mission_handler.MissionHandler()
        self.current_mission_no = 0
        self.last_mission_no = 0

        self.command_handler = command_handler.CommandHandler()

        rospy.sleep(1)  # wait until everything is running

        self.boot_time = rospy.Time.now().to_sec() * 1000
        self.drone_boot_epoch = 0

        # Service handlers
        self.arm_service = rospy.Service("/telemetry/arm_drone",
                                         Trigger,
                                         self.command_handler.arm_drone,
                                         buff_size=10)
        self.disarm_service = rospy.Service("/telemetry/disarm_drone",
                                            Trigger,
                                            self.command_handler.disarm_drone,
                                            buff_size=10)
        self.takeoff_service = rospy.Service(
            "/telemetry/takeoff_drone",
            TakeoffDrone,
            self.command_handler.takeoff_drone,
            buff_size=10)
        self.land_service = rospy.Service("/telemetry/land_drone",
                                          LandDrone,
                                          self.command_handler.land_drone,
                                          buff_size=10)
        self.start_mission_service = rospy.Service(
            "/telemetry/start_mission",
            Trigger,
            self.command_handler.start_mission,
            buff_size=10)
        self.goto_waypoint = rospy.Service("/telemetry/goto_waypoint",
                                           GotoWaypoint,
                                           self.command_handler.goto_waypoint,
                                           buff_size=10)
        self.return_home_service = rospy.Service(
            "/telemetry/return_home",
            Trigger,
            self.command_handler.return_home,
            buff_size=10)
        self.set_home_service = rospy.Service("/telemetry/set_home",
                                              SetHome,
                                              self.command_handler.set_home,
                                              buff_size=10)
        self.set_mode_service = rospy.Service("/telemetry/set_mode",
                                              SetMode,
                                              self.command_handler.set_mode,
                                              buff_size=10)
        self.guided_enable_service = rospy.Service(
            "/telemetry/guided_enable",
            Trigger,
            self.command_handler.guided_enable,
            buff_size=10)
        self.guided_disable_service = rospy.Service(
            "/telemetry/guided_disable",
            Trigger,
            self.command_handler.guided_disable,
            buff_size=10)
        self.change_speed_service = rospy.Service(
            "/telemetry/change_speed",
            ChangeSpeed,
            self.command_handler.change_speed,
            buff_size=10)
        self.dowload_mission_service = rospy.Service(
            "/telemetry/download_mission",
            Trigger,
            self.mission_handler.download,
            buff_size=10)
        self.mission_upload_service = rospy.Service(
            "/telemetry/upload_mission",
            UploadMission,
            self.mission_handler.upload,
            buff_size=10)
        self.mission_upload_from_file_service = rospy.Service(
            "/telemetry/upload_mission_from_file",
            UploadFromFile,
            self.mission_handler.upload_from_file,
            buff_size=10)
        self.start_tracking_service = rospy.Service(
            "/telemetry/start_tracking",
            Trigger,
            self.start_tracking,
            buff_size=10)
        self.stop_tracking_service = rospy.Service("/telemetry/stop_tracking",
                                                   Trigger,
                                                   self.stop_tracking,
                                                   buff_size=10)

        # Topic handlers
        self.mavlink_msg_pub = rospy.Publisher(mavlink_lora_pub_topic,
                                               mavlink_lora_msg,
                                               queue_size=0)
        self.statustext_pub = rospy.Publisher("/telemetry/statustext",
                                              telemetry_statustext,
                                              queue_size=0)
        self.heartbeat_status_pub = rospy.Publisher(
            "/telemetry/heartbeat_status",
            telemetry_heartbeat_status,
            queue_size=0)
        self.mav_mode_pub = rospy.Publisher("/telemetry/mav_mode",
                                            telemetry_mav_mode,
                                            queue_size=0)
        self.vfr_hud_pub = rospy.Publisher("/telemetry/vfr_hud",
                                           telemetry_vfr_hud,
                                           queue_size=0)
        self.home_position_pub = rospy.Publisher("/telemetry/home_position",
                                                 telemetry_home_position,
                                                 queue_size=0)
        self.control_commands_pub = rospy.Publisher(
            "/telemetry/control_commands",
            telemetry_control_commands,
            queue_size=0)
        self.imu_ned_pub = rospy.Publisher("/telemetry/imu_data_ned",
                                           telemetry_imu_ned,
                                           queue_size=0)
        self.local_position_ned_pub = rospy.Publisher(
            "/telemetry/local_position_ned",
            telemetry_local_position_ned,
            queue_size=0)
        rospy.Subscriber(mavlink_lora_sub_topic, mavlink_lora_msg,
                         self.on_mavlink_msg)
        rospy.Subscriber(mavlink_lora_pos_sub_topic, mavlink_lora_pos,
                         self.on_mavlink_lora_pos)
        rospy.Subscriber(mavlink_lora_status_sub_topic, mavlink_lora_status,
                         self.on_mavlink_lora_status)
        rospy.Subscriber("/telemetry/new_mission", mavlink_lora_mission_list,
                         self.mission_handler.on_mission_list)
        rospy.Subscriber("/telemetry/mission_set_current", Int16,
                         self.mission_handler.mission_set_current)
        rospy.Subscriber("/telemetry/set_landing_target",
                         telemetry_landing_target, self.on_landing_target)
        rospy.Subscriber("/mavlink_interface/mission/ack",
                         mavlink_lora_mission_ack,
                         self.mission_handler.on_mission_ack)
        rospy.Subscriber("/mavlink_interface/command/ack",
                         mavlink_lora_command_ack,
                         self.command_handler.on_command_ack)

        self.rate = rospy.Rate(update_interval)
示例#16
0
from utm import utmconv
from math import sqrt
def find_dist(pt1, pt2):
    return sqrt((pt1[0]-pt2[0])**2+(pt1[1]-pt2[1])**2)

uc = utmconv()

pt1 = (55.371010, 10.427521)
pt2 = (55.500685, 9.764382)

(hemisphere1, zone1, letter1, e1, n1) = uc.geodetic_to_utm(pt1[0], pt1[1])
(hemisphere2, zone2, letter2, e2, n2) = uc.geodetic_to_utm(pt2[0], pt2[1])
pt1 = (e1, n1)
pt2 = (e2, n2)


print (find_dist(pt1, pt2))
示例#17
0
    def __init__(self):

        self.count = 0

        self.GEO_class = ecefGeo_class()
        self.uc = utmconv()  # <---- from Kjelds lib
        self.t_prev = 0.0
        self.t_current = 0.0
        self.dt = 0.0
        self.data = None
        self.FirstRun_dt = True
        self.Pub_data = False  # <------ Remove ?
        self.FirstRun_pos = True
        self.FirstRun_pub = True
        self.gps_vel = 0.0  # [m/s]
        self.cog_gps = 0.0  #[cdeg]
        self.cog_amount_steps = 5.0  # [cdeg]
        self.cog_step_count = 0
        self.cog_step_dir = (1.0871889239775937e-05) / 10000.0  #/10.0#1.0
        self.cog_current = None
        self.cog_drone_start = None
        self.cog_drone_end = None

        self.h = std_msgs.msg.Header()

        #UTM spoofing
        self.speed_x = 0.0  #[m/s]
        self.speed_y = -1.5  #[m/s]
        self.spoofing_distance = 50  # [m]

        #Ground truth (GT)
        self.gt_pos_x = 0
        self.gt_pos_y = 0

        self.runs = 0
        self.load_data_first = True

        #The data from the raw gps signal
        self.gps_in_lat = 0.0
        self.gps_in_lon = 0.0
        self.gps_in_alt = 0.0

        # The xyz for ecef
        self.ecef_x = 0.0
        self.ecef_y = 0.0
        self.ecef_z = 0.0

        #The output from utm
        self.e1 = 0.0
        self.n1 = 0.0
        self.hemisphere = None
        self.zone = None

        # The spoofing inc offset
        self.lat_inc = 0.0  # x
        self.lon_inc = 0.0  # y
        self.alt_inc = 0.0  # z

        #The spoofing data that will be sent to the HIL_GPS
        self.gps_out_lat = 0.0
        self.gps_out_lon = 0.0
        self.gps_out_alt = 0.0

        #init the node and subscribe to the raw signal from the gps
        rospy.init_node('GNSS_spoofing_wiht_GNSS_2_UTM_2_GNSS', anonymous=True)

        #### -------- Check if mavros/global_position/raw/fix gives better results ----- ########
        rospy.Subscriber(
            '/mavros/global_position/global', NavSatFix, self.load_data
        )  #The '/mavros/global_position/global' used also the data from the IMU (http://wildfirewatch.elo.utfsm.cl/ros-topology/#global_gps)
        rospy.Subscriber('/mavros/altitude', Altitude, self.load_height)
        self.sub_path_check = rospy.Subscriber('/gazebo/model_states',
                                               ModelStates, self.load_GT)

        self.pub_spoofing_signal = rospy.Publisher(
            '/fake_gps/offset_inc', GeoPoint,
            queue_size=10)  # This is for the spoofing part

        self.change_param = rospy.ServiceProxy('/mavros/param/set', ParamSet)

        # The amount of time it should publish data
        self.freq = 2.5
        self.rosRate = rospy.Rate(self.freq)  # 2.5 Hz

        #rospy.spin()

        while not rospy.is_shutdown():

            #if self.load_data_first is False:
            #self.transform_gps_xyz_ECEF(0.0) # This is zero because we know the start pos
            #self.transform_gps_xyz_UTM(0) # This is zero because we know the start pos

            if self.gt_pos_x >= self.spoofing_distance:
                print('SPoofing!!')
                self.publish_data()
                self.rosRate.sleep()
                self.load_data_first = False
            else:
                print('Not Spoofing!!')
                self.rosRate.sleep()