Satellite Observers Workbench. NOT yet complete, just published for forum posters to \"cherry pick\" pieces of code as requiered as an example.

Dependencies:   mbed

Committer:
AjK
Date:
Mon Oct 11 10:34:55 2010 +0000
Revision:
0:0a841b89d614
Totally Alpha quality as this project isn\t completed. Just publishing it as it answers many questions asked in the forums

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AjK 0:0a841b89d614 1 /****************************************************************************
AjK 0:0a841b89d614 2 * Copyright 2010 Andy Kirkham, Stellar Technologies Ltd
AjK 0:0a841b89d614 3 *
AjK 0:0a841b89d614 4 * This file is part of the Satellite Observers Workbench (SOWB).
AjK 0:0a841b89d614 5 *
AjK 0:0a841b89d614 6 * SOWB is free software: you can redistribute it and/or modify
AjK 0:0a841b89d614 7 * it under the terms of the GNU General Public License as published by
AjK 0:0a841b89d614 8 * the Free Software Foundation, either version 3 of the License, or
AjK 0:0a841b89d614 9 * (at your option) any later version.
AjK 0:0a841b89d614 10 *
AjK 0:0a841b89d614 11 * SOWB is distributed in the hope that it will be useful,
AjK 0:0a841b89d614 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
AjK 0:0a841b89d614 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
AjK 0:0a841b89d614 14 * GNU General Public License for more details.
AjK 0:0a841b89d614 15 *
AjK 0:0a841b89d614 16 * You should have received a copy of the GNU General Public License
AjK 0:0a841b89d614 17 * along with SOWB. If not, see <http://www.gnu.org/licenses/>.
AjK 0:0a841b89d614 18 *
AjK 0:0a841b89d614 19 * $Id: main.cpp 5 2010-07-12 20:51:11Z ajk $
AjK 0:0a841b89d614 20 *
AjK 0:0a841b89d614 21 ***************************************************************************/
AjK 0:0a841b89d614 22
AjK 0:0a841b89d614 23 #include "string.h"
AjK 0:0a841b89d614 24 #include "sowb.h"
AjK 0:0a841b89d614 25 #include "osd.h"
AjK 0:0a841b89d614 26 #include "sgp4sdp4.h"
AjK 0:0a841b89d614 27 #include "predict_th.h"
AjK 0:0a841b89d614 28 #include "gps.h"
AjK 0:0a841b89d614 29 #include "gpio.h"
AjK 0:0a841b89d614 30 #include "satapi.h"
AjK 0:0a841b89d614 31 #include "debug.h"
AjK 0:0a841b89d614 32
AjK 0:0a841b89d614 33 #ifdef PREDICT_TH_RUN
AjK 0:0a841b89d614 34
AjK 0:0a841b89d614 35 tle_t ISS_TLE;
AjK 0:0a841b89d614 36
AjK 0:0a841b89d614 37
AjK 0:0a841b89d614 38
AjK 0:0a841b89d614 39 int sgp4sdp4_th_init(void) {
AjK 0:0a841b89d614 40 char buf[128];
AjK 0:0a841b89d614 41 GPS_TIME t;
AjK 0:0a841b89d614 42 double jd_epoch, jd_utc, tsince, phase;
AjK 0:0a841b89d614 43 vector_t vel = { 0, 0, 0 };
AjK 0:0a841b89d614 44 vector_t pos = { 0, 0, 0 };
AjK 0:0a841b89d614 45 vector_t obs_set;
AjK 0:0a841b89d614 46 geodetic_t obs_geodetic;
AjK 0:0a841b89d614 47 geodetic_t sat_geodetic;
AjK 0:0a841b89d614 48 tle_t tle, localtle;
AjK 0:0a841b89d614 49 char elements[3][80];
AjK 0:0a841b89d614 50
AjK 0:0a841b89d614 51 /* Prepare to begin ISS */
AjK 0:0a841b89d614 52 strcpy(elements[0], "ISS (ZARYA)");
AjK 0:0a841b89d614 53 strcpy(elements[1], "1 25544U 98067A 10278.19511664 .00012217 00000-0 97221-4 0 147");
AjK 0:0a841b89d614 54 strcpy(elements[2], "2 25544 051.6473 027.7875 0007506 064.6316 006.5147 15.71651651680777");
AjK 0:0a841b89d614 55
AjK 0:0a841b89d614 56 debug_printf("SGP4SDP4 TH starting 1\r\n");
AjK 0:0a841b89d614 57
AjK 0:0a841b89d614 58 ClearFlag(ALL_FLAGS);
AjK 0:0a841b89d614 59 Get_Next_Tle_Set(elements, &tle);
AjK 0:0a841b89d614 60 memcpy(&localtle, &tle, sizeof(tle_t));
AjK 0:0a841b89d614 61 select_ephemeris(&tle);
AjK 0:0a841b89d614 62
AjK 0:0a841b89d614 63 gps_get_time(&t);
AjK 0:0a841b89d614 64
AjK 0:0a841b89d614 65 if (!t.is_valid) {
AjK 0:0a841b89d614 66 debug_printf("SGP4SDP4 TH Abort, invalid time.\r\n");
AjK 0:0a841b89d614 67 return 0;
AjK 0:0a841b89d614 68 }
AjK 0:0a841b89d614 69
AjK 0:0a841b89d614 70 jd_utc = gps_julian_date(&t);
AjK 0:0a841b89d614 71 jd_epoch = Julian_Date_of_Epoch(tle.epoch);
AjK 0:0a841b89d614 72 tsince = (jd_utc - jd_epoch) * xmnpda;
AjK 0:0a841b89d614 73
AjK 0:0a841b89d614 74 if (isFlagSet(DEEP_SPACE_EPHEM_FLAG)) {
AjK 0:0a841b89d614 75 //debug_printf("Using SDP4\r\n");
AjK 0:0a841b89d614 76 SDP4(tsince, &tle, &pos, &vel, &phase);
AjK 0:0a841b89d614 77 }
AjK 0:0a841b89d614 78 else {
AjK 0:0a841b89d614 79 //debug_printf("Using SGP4\r\n");
AjK 0:0a841b89d614 80 SGP4(tsince, &tle, &pos, &vel, &phase);
AjK 0:0a841b89d614 81 }
AjK 0:0a841b89d614 82
AjK 0:0a841b89d614 83 Convert_Sat_State(&pos, &vel);
AjK 0:0a841b89d614 84 //SgpMagnitude(&vel); // scalar magnitude, not brightness...
AjK 0:0a841b89d614 85 //double velocity = vel.w;
AjK 0:0a841b89d614 86
AjK 0:0a841b89d614 87 GPS_LOCATION_AVERAGE loc;
AjK 0:0a841b89d614 88 gps_get_location_average(&loc);
AjK 0:0a841b89d614 89 if (loc.east_west == 'W') loc.longitude *= -1.;
AjK 0:0a841b89d614 90 if (loc.north_south == 'S') loc.latitude *= -1.;
AjK 0:0a841b89d614 91
AjK 0:0a841b89d614 92 obs_geodetic.lat = loc.latitude * de2ra; // * 56.1920;
AjK 0:0a841b89d614 93 obs_geodetic.lon = loc.longitude * de2ra; // * -3.0339;
AjK 0:0a841b89d614 94 obs_geodetic.alt = loc.height / 1000.;
AjK 0:0a841b89d614 95
AjK 0:0a841b89d614 96 Calculate_Obs(jd_utc, &pos, &vel, &obs_geodetic, &obs_set);
AjK 0:0a841b89d614 97 Calculate_LatLonAlt(jd_utc, &pos, &sat_geodetic);
AjK 0:0a841b89d614 98
AjK 0:0a841b89d614 99 double azimuth = Degrees(obs_set.x);
AjK 0:0a841b89d614 100 double elevation = Degrees(obs_set.y);
AjK 0:0a841b89d614 101 double range = obs_set.z;
AjK 0:0a841b89d614 102 //double rangeRate = obs_set.w;
AjK 0:0a841b89d614 103 //double height = sat_geodetic.alt;
AjK 0:0a841b89d614 104
AjK 0:0a841b89d614 105 //sprintf(buf, "JD UTC : %.5f JD SAT : %.5f DIF : %f\r\n", jd_utc, jd_epoch, jd_utc - jd_epoch);
AjK 0:0a841b89d614 106 //debug_printf("%s", buf);
AjK 0:0a841b89d614 107
AjK 0:0a841b89d614 108 sprintf(buf, "ISS El:%.1f AZ:%.1f %dKm\r\n\n", elevation, azimuth, (int)range);
AjK 0:0a841b89d614 109 osd_string_xy(0, 14, buf);
AjK 0:0a841b89d614 110 debug_printf("%s", buf);
AjK 0:0a841b89d614 111 return 1;
AjK 0:0a841b89d614 112
AjK 0:0a841b89d614 113
AjK 0:0a841b89d614 114 }
AjK 0:0a841b89d614 115
AjK 0:0a841b89d614 116 #endif
AjK 0:0a841b89d614 117