Skip to content

Commit

Permalink
Added code base for paper
Browse files Browse the repository at this point in the history
  • Loading branch information
aaronjohnsabu1999 committed Jun 9, 2021
0 parents commit 02723d6
Show file tree
Hide file tree
Showing 34 changed files with 1,916 additions and 0 deletions.
Empty file added .gitignore
Empty file.
339 changes: 339 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Scalable techniques for autonomous construction of a paraboloidal space telescope in an elliptic orbit

Code for the paper 'Scalable techniques for autonomous construction of a paraboloidal space telescope in an elliptic orbit' by Aaron John Sabu and Dwaipayan Mukherjee

***
### Abstract

It is well acknowledged that human-made technology is not always at par with human curiosity, and an example is the inability to send large telescopes to outer space despite their higher resolution and less atmospheric interference. In this paper, we develop a framework for autonomous in-orbit construction using spacecraft formation such that a large telescope can be built in an elliptic orbit using multiple spacecraft. We split this problem into four steps for converging the position and attitude of each spacecraft at predefined values around a central spacecraft. Each spacecraft performs attitude synchronization with its neighbors to match its three degrees of freedom in orientation as a parabolic mirror. Simulations validate our proposed methods and the paper concludes with an open possibility of using other techniques to improve upon existing results.

***
### Disclaimers

The work was supported in part by an ISRO funded project bearing code RD/0120-ISROC00-007. Aaron John Sabu (<p><a href="mailto:[email protected]">[email protected]</a></p>) is an undergraduate student and Dwaipayan Mukherjee (<p><a href="mailto:[email protected]">[email protected]</a></p>) is an Asst. Professor with the Dept. of Electrical Engineering, Indian Institute of Technology Bombay, Powai, Mumbai, Maharashtra, India}
67 changes: 67 additions & 0 deletions results/Three-Layer Double-Auction/Case 1/Stage-01A.html

Large diffs are not rendered by default.

67 changes: 67 additions & 0 deletions results/Three-Layer Double-Auction/Case 1/Stage-01B.html

Large diffs are not rendered by default.

67 changes: 67 additions & 0 deletions results/Three-Layer Double-Auction/Case 1/Stage-02.html

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
67 changes: 67 additions & 0 deletions results/Three-Layer Double-Auction/Case 2/Stage-01A.html

Large diffs are not rendered by default.

67 changes: 67 additions & 0 deletions results/Three-Layer Double-Auction/Case 2/Stage-01B.html

Large diffs are not rendered by default.

67 changes: 67 additions & 0 deletions results/Three-Layer Double-Auction/Case 2/Stage-02.html

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
67 changes: 67 additions & 0 deletions results/Two-Layer Single-Auction/Stage-01.html

Large diffs are not rendered by default.

67 changes: 67 additions & 0 deletions results/Two-Layer Single-Auction/Stage-02.html

Large diffs are not rendered by default.

Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
131 changes: 131 additions & 0 deletions src/algoCompare-cases.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
3.0

--A--
D > G > S
[[-1.99784066, 0.61604728, 1.44877280],
[ 0.43721149, -1.30390749, 1.55301486],
[ 0.55915338, 2.13624886, -0.14987920],
[ 0.74984804, -0.75304311, -0.66474228],
[ 0.77075604, 0.87307288, -1.74438445],
[-2.48796971, 0.33908818, 0.52480498],
[-1.44477932, 2.52165383, 2.41264048],
[ 1.55365393, -1.82890293, -0.55059913],
[ 1.45058134, 1.89266631, 0.43396470],
[ 0.22868990, 2.95146754, -2.74768372],
[-1.71631586, 2.58945856, -0.11163515],
[-0.84144055, -2.40168379, -2.58900144],
[-0.44148137, 1.84936233, 0.67115186],
[-0.06777739, 2.44530060, 2.95190673],
[ 0.14748820, 0.12127658, -0.61558311],
[-1.80767048, -1.17608603, -2.55560203],
[-1.34076421, -1.64031815, 0.73177507],
[ 2.53145494, -1.02498501, 1.35597693]]

--B--
D > G > S
[[ 2.46627585, -0.00365783, -0.86766388],
[ 1.38883444, -0.56932258, 0.85956188],
[-1.25104624, -2.68999598, -0.15664761],
[ 2.16808202, -0.95045921, 1.20754068],
[-1.08903682, 2.60837156, -2.49131614],
[-1.04670232, 1.20957410, -0.72505279],
[-0.84559224, 0.68161740, 2.11365239],
[ 0.64575732, -2.13576666, 0.09339260],
[-2.55221737, -1.67415379, 0.47248629],
[ 0.41558132, 1.75146335, 0.00541343],
[ 2.86279623, 1.26809123, -2.71293342],
[-2.88389105, -2.95786390, 2.92524385],
[ 0.84024423, 1.61057085, 0.91733068],
[ 0.10149796, -2.83326188, -1.57948462],
[-0.15197260, -0.44450887, 0.2405081 ],
[ 1.27905471, -0.58512968, -2.53469193],
[ 2.49569954, 1.30540283, 0.43167947],
[-2.65665346, 1.99028373, -0.42741740]]

1.0

--C--
D = G > S
[[-2.29364301, 1.26911104, -1.71273596],
[-0.30499439, 1.46048986, 0.84474138],
[ 1.20553178, 0.33463571, -0.45545043],
[ 0.00737466, 2.69883730, 2.20860278],
[-0.13433824, -2.45255776, 0.01869546],
[ 0.87274879, -1.20121056, -2.55504595],
[ 1.82212589, -2.88499068, -2.82692798],
[ 1.32413586, 1.38993451, -1.85659537],
[ 2.79356145, -1.84074991, 1.31134734],
[-2.45089991, 2.86245750, -0.92419686],
[ 0.15760877, -1.63576172, -0.10413470],
[ 0.22633934, 2.55351914, -2.75085611],
[-2.19934209, -1.28014131, 1.85593947],
[ 1.72048638, 1.75400878, -1.49284592],
[ 2.66459536, 0.56970289, -1.64283741],
[-0.26072675, 1.64575550, -1.69458091],
[-1.34255969, 2.06506644, -1.14374557],
[ 1.99163571, -0.24707069, 1.72698837]]

--D--
D = G > S
[[-0.19737204, -0.29886555, 0.36305570],
[ 0.30534063, -2.06205336, 0.85791965],
[-0.31816348, -1.50494332, 1.20013356],
[ 2.37388446, -0.77882058, -2.38966806],
[-1.26343545, 1.35004930, -2.50027709],
[-2.79467901, 1.98856370, -2.35316213],
[ 2.13003201, -1.86269152, 1.10253472],
[-0.67690309, 0.79051274, 2.26351260],
[-0.59926310, -1.34331266, 2.17618607],
[ 1.53274718, 2.75566058, -2.39949286],
[ 2.50468947, -0.79161118, 1.89192649],
[-1.34296578, -2.47305670, 0.32794480],
[ 0.04971921, 0.31507048, 1.23422994],
[-1.49500104, 1.42257160, 0.02548234],
[ 1.64378575, 0.50837734, -1.16396825],
[-0.15880788, -1.60500876, 0.57350283],
[ 1.97794503, -1.58259626, 0.98126498],
[-2.37234622, -2.92121553, -0.15240542]]

0.25

--E--
D = G = S
[[-1.92787107, 0.63939344, -1.74877778],
[-0.30968752, -2.78756743, -1.91208517],
[-1.69563097, -0.54375145, -2.04193897],
[-1.19935501, 1.31577906, -2.54588322],
[-2.98803831, -0.36685609, -2.54239741],
[ 1.12833730, -2.12756837, -1.36607097],
[ 1.61800051, 0.18784015, 0.28711688],
[ 1.92682527, 2.09294888, 0.98220375],
[ 1.97998589, 2.24655191, 0.14703710],
[ 0.47940243, 1.69466183, 0.05916908],
[-2.68327754, -1.14751618, 2.31631216],
[ 0.18796644, 2.84885841, 1.20630379],
[-1.69364916, 0.59877788, 2.61884078],
[ 1.43370002, 2.63335636, -1.51988725],
[-1.03356433, 2.15331561, -2.18635319],
[ 2.88018742, -2.11038576, -0.34113182],
[-2.52695979, 2.31005279, 1.70296583],
[-0.95626977, -1.69848325, 1.65944077]]

--F--
D = G = S
[[ 0.59172304, 2.18793548, 1.10135151],
[ 0.62986765, -0.44234319, -1.62572802],
[-0.95098904, -2.35326135, 0.49000436],
[-1.32871148, -2.64306835, -2.85634444],
[-1.09643693, -2.35856294, 0.17633947],
[ 0.3299397 , 2.37370064, 0.27763727],
[-2.69151347, -1.59395844, -2.30497489],
[ 1.08577260, -0.95740143, 2.48758025],
[ 2.67521330, 2.29325859, -1.98293085],
[ 2.43850247, 1.28220791, 2.44042221],
[-1.97818562, -0.47634221, -0.88855438],
[ 0.93433954, -0.24520145, 1.18601613],
[-1.60052782, 0.68527799, 1.53182175],
[-0.61836986, 0.16281878, 2.30119389],
[-0.09954839, 0.96592547, 0.57013133],
[ 2.62370233, 0.60724350, 2.32005221],
[ 1.13604260, 1.25932709, 1.28721869],
[ 0.79380202, -1.49476592, -0.22534066]]
109 changes: 109 additions & 0 deletions src/algoCompare.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
from copy import deepcopy
from math import sqrt, sin, cos, radians
from simulate import simulatePL
from glideslope import multiAgentGlideslope
from initializations import poseInit

numAgents = 18
numJumps = 5

innerRad = 0.4
R_T = [[innerRad*1*sin(radians( 0)), innerRad*1*cos(radians( 0)), 0.000],
[innerRad*1*sin(radians( 60)), innerRad*1*cos(radians( 60)), 0.000],
[innerRad*1*sin(radians(120)), innerRad*1*cos(radians(120)), 0.000],
[innerRad*1*sin(radians(180)), innerRad*1*cos(radians(180)), 0.000],
[innerRad*1*sin(radians(240)), innerRad*1*cos(radians(240)), 0.000],
[innerRad*1*sin(radians(300)), innerRad*1*cos(radians(300)), 0.000],

[innerRad*2*sin(radians( 0)), innerRad*2*cos(radians( 0)), 0.000],
[innerRad*2*sin(radians( 30)), innerRad*2*cos(radians( 30)), 0.000],
[innerRad*2*sin(radians( 60)), innerRad*2*cos(radians( 60)), 0.000],
[innerRad*2*sin(radians( 90)), innerRad*2*cos(radians( 90)), 0.000],
[innerRad*2*sin(radians(120)), innerRad*2*cos(radians(120)), 0.000],
[innerRad*2*sin(radians(150)), innerRad*2*cos(radians(150)), 0.000],
[innerRad*2*sin(radians(180)), innerRad*2*cos(radians(180)), 0.000],
[innerRad*2*sin(radians(210)), innerRad*2*cos(radians(210)), 0.000],
[innerRad*2*sin(radians(240)), innerRad*2*cos(radians(240)), 0.000],
[innerRad*2*sin(radians(270)), innerRad*2*cos(radians(270)), 0.000],
[innerRad*2*sin(radians(300)), innerRad*2*cos(radians(300)), 0.000],
[innerRad*2*sin(radians(330)), innerRad*2*cos(radians(330)), 0.000],]
Rdot0 = [[0.00, 0.00, 0.00] for i in range(numAgents)]
R = 6870 + 405
mu = 398600.50
omega = sqrt(mu/R**3)
nframes = 400
dt = 4000.0/nframes
e = 0.05
h = (R**2)*omega
config = [[1, 2, 1, 1, 1, 2],
[2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2]]
fConfig = [i for i in range(numAgents)]

Neighbors = [[0 for i in range(numAgents)] for i in range(numAgents)]
Nghradius = 3.00

# RRR, _ = poseInit(numAgents)
# print(RRR)

RRR = [[ 2.29364301, 1.26911104, -1.71273596],
[-2.30499439, 1.46048986, 0.84474138],
[-2.20553178, 0.33463571, -0.45545043],
[-2.00737466, 2.69883730, 2.20860278],
[-2.13433824, -2.45255776, 0.01869546],
[-2.87274879, -1.20121056, -2.55504595],
[-2.82212589, -2.88499068, -2.82692798],
[-2.32413586, 1.38993451, -1.85659537],
[-2.79356145, -1.84074991, 1.31134734],
[-2.45089991, 2.86245750, -0.92419686],
[-2.15760877, -1.63576172, -0.10413470],
[-2.22633934, 2.55351914, -2.75085611],
[-2.19934209, -1.28014131, 1.85593947],
[-2.72048638, 1.75400878, -1.49284592],
[-2.66459536, 0.56970289, -1.64283741],
[-2.26072675, 1.64575550, -1.69458091],
[-2.34255969, 2.06506644, -1.14374557],
[-2.99163571, -0.24707069, 1.72698837]]

R_0 = deepcopy(RRR)
Neighbors = [[0 for i in range(numAgents)] for i in range(numAgents)]
X, Y, Z, Deltav, Energy, NeighborsOutput = multiAgentGlideslope(Neighbors, Nghradius,
R_0, Rdot0, R_T, R, e, h, omega,
numJumps, dt, nframes,
auctionParams = (True, 'Standard', False),
Config = (config, fConfig))
NeighborsDistanceOT = NeighborsOutput[0]
NeighborsConfigOT = NeighborsOutput[1]
simulatePL ('08A-Standard.html', X, Y, Z, ['Spacecraft '+str(agent) for agent in range(numAgents)])

R_0 = deepcopy(RRR)
Neighbors = [[0 for i in range(numAgents)] for i in range(numAgents)]
X, Y, Z, Deltav, Energy, NeighborsOutput = multiAgentGlideslope(Neighbors, Nghradius,
R_0, Rdot0, R_T, R, e, h, omega,
numJumps, dt, nframes,
auctionParams = (True, 'Distributed', False),
Config = (config, fConfig))
NeighborsDistanceOT = NeighborsOutput[0]
NeighborsConfigOT = NeighborsOutput[1]
simulatePL ('08B-Distributed.html', X, Y, Z, ['Spacecraft '+str(agent) for agent in range(numAgents)])

# R_0 = deepcopy(RRR)
# Neighbors = [[0 for i in range(numAgents)] for i in range(numAgents)]
# X, Y, Z, Deltav, Energy, NeighborsOutput = multiAgentGlideslope(Neighbors, Nghradius,
# R_0, Rdot0, R_T, R, e, h, omega,
# numJumps, dt, nframes,
# auctionParams = (True, 'Consensus', False),
# Config = (config, fConfig))
# NeighborsDistanceOT = NeighborsOutput[0]
# NeighborsConfigOT = NeighborsOutput[1]
# simulatePL ('08C-Consensus.html', X, Y, Z, ['Spacecraft '+str(agent) for agent in range(numAgents)])

R_0 = deepcopy(RRR)
Neighbors = [[0 for i in range(numAgents)] for i in range(numAgents)]
X, Y, Z, Deltav, Energy, NeighborsOutput = multiAgentGlideslope(Neighbors, Nghradius,
R_0, Rdot0, R_T, R, e, h, omega,
numJumps, dt, nframes,
auctionParams = (True, 'Greedy', False),
Config = (config, fConfig))
NeighborsDistanceOT = NeighborsOutput[0]
NeighborsConfigOT = NeighborsOutput[1]
simulatePL ('08D-Greedy.html', X, Y, Z, ['Spacecraft '+str(agent) for agent in range(numAgents)])
18 changes: 18 additions & 0 deletions src/anomaly.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from numpy import cos, sin, multiply

# True Anomaly from Time
def getTrueAnomalyFromTime(omega, e, T, calcDerivs = False):
M = multiply(omega, T)
c1 = (2.0*e -(e**3.0)/4.0)
c2 = (5.0/4) *(e**2.0)
c3 = (13.0/12)*(e**3.0)
F = M + c1*sin(M) + c2*sin(2.0*M) + c3*sin(3.0*M)
if not calcDerivs:
return F
cd1 = (1.0+(e*cos(F)))**2
cd2 = (1.0-(e**2.0)) **(3.0/2)
Fd = cd1*omega/cd2
cdd1 = -2.0*e*(Fd**2.0)
cdd2 = (1+(e*cos(F)))
Fdd = cdd1*sin(F)/cdd2
return F, Fd, Fdd
Loading

0 comments on commit 02723d6

Please sign in to comment.