mirror of
https://github.com/Xevion/history-of-robotics.git
synced 2025-12-15 06:12:03 -06:00
add list of tools, rearrange Sojourner description overview
This commit is contained in:
365
src/App.vue
365
src/App.vue
@@ -33,15 +33,99 @@
|
|||||||
Despite it's original mission duration planned to be just 7 days, it stayed active for 83
|
Despite it's original mission duration planned to be just 7 days, it stayed active for 83
|
||||||
days in total.
|
days in total.
|
||||||
</p>
|
</p>
|
||||||
<p class="ml-4">
|
|
||||||
The lander that Sojourner landed on, <em>Pathfinder</em>, used Airbags, paving the way for
|
|
||||||
the technologies use in future missions, such as Curiosity and Spirit.
|
|
||||||
</p>
|
|
||||||
</b-col>
|
</b-col>
|
||||||
<b-col md="6" xl="3" align-h="center" class="w-100 h-100">
|
<b-col md="6" xl="3" align-h="center" class="w-100 h-100">
|
||||||
<b-img fluid-grow src="./assets/sojourner.jpg"></b-img>
|
<b-img fluid-grow src="./assets/sojourner.jpg"></b-img>
|
||||||
<p class="text-center">
|
</b-col>
|
||||||
<em>Sojourner</em>
|
</b-row>
|
||||||
|
</b-jumbotron>
|
||||||
|
<b-jumbotron fluid container-fluid class="bg-black my-0 py-md-5 py-sm-0 px-md-5 px-sm-3">
|
||||||
|
<b-row class="px-sm-3 px-md-3 w-100" align-h="around">
|
||||||
|
<b-col md="6" xl="6" align-self="top">
|
||||||
|
<h2>Communications</h2>
|
||||||
|
<p class="ml-4">
|
||||||
|
Sojourner is unique among the 4 rovers to successfully deploy on Mars in that it required
|
||||||
|
it's lander to stay in communication with Earth. The rover was not equipped with a high gain
|
||||||
|
antenna, which is required in order to communicate with Earth over large distances.
|
||||||
|
</p>
|
||||||
|
<p class="ml-4">
|
||||||
|
This limitation forced the rover to stay within a certain range of the lander, and
|
||||||
|
throughout it's lifetime on Mars, it never traveled more than a few dozen feet from the
|
||||||
|
lander.
|
||||||
|
</p>
|
||||||
|
<h2>Tools</h2>
|
||||||
|
<p class="ml-4 mb-1">
|
||||||
|
Sojourner was designed to study the surface of Mars by collecting and analyzing rock
|
||||||
|
samples, taking pictures and more using the following tools:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
An <abbr title="Alpha Proton X-ray Spectrometer"><em>APXS</em></abbr> for determining
|
||||||
|
elemental composition of soil, rocks and other materials on the surface of Mars.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<em>Rover Control Software</em> for coordinating movement, studying terrain features,
|
||||||
|
and viewing
|
||||||
|
the nearby area in 3D space.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<em>Three cameras</em>, one color, two monochrome. However, the operators used images
|
||||||
|
from the
|
||||||
|
lander's
|
||||||
|
IMP camera system primarily, as it had higher quality on top of having a height
|
||||||
|
advantage over the rover.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</b-col>
|
||||||
|
<b-col md="6" xl="5" align-h="top" class="w-100 h-100">
|
||||||
|
<h2>Autonomy</h2>
|
||||||
|
<p class="ml-3 ml-xl-4">
|
||||||
|
Sojourner was an important step in Robotics due to the nature of the mission.
|
||||||
|
With such a long distance between Mars and Earth, radio communications took around 14
|
||||||
|
minutes to receive, and then another 14 minutes to send back.
|
||||||
|
</p>
|
||||||
|
<p class="ml-3 ml-xl-4">
|
||||||
|
As such, human telegraphed movements too slow for the mission, and while complete autopilot
|
||||||
|
is impossible for such a complex mission, the rovers, landers, and spacecraft made by NASA
|
||||||
|
had to be programmer with autopilot.
|
||||||
|
</p>
|
||||||
|
<p class="ml-3 ml-xl-4">
|
||||||
|
To solve this problem, Sojourner, along with every rover to land on Mars, is equipped with
|
||||||
|
software dedicated to autonomously moving the rover across the martian surface.
|
||||||
|
</p>
|
||||||
|
<p class="ml-3 ml-xl-4">
|
||||||
|
While Sojourner was comparatively basic in it's software's autonomy, the software was
|
||||||
|
helpful to operators in visualizing and telegraphing instructions across the rocky terrain
|
||||||
|
of Ares Vallis.
|
||||||
|
</p>
|
||||||
|
</b-col>
|
||||||
|
</b-row>
|
||||||
|
</b-jumbotron>
|
||||||
|
<b-jumbotron fluid container-fluid class="text-dark my-0 py-md-5 py-sm-0 px-md-5 px-sm-3">
|
||||||
|
<b-row class="px-sm-3 px-md-3 w-100" align-h="around">
|
||||||
|
<b-col md="6" xl="3" align-h="center">
|
||||||
|
<b-img fluid-grow class="shadow-lg" src="./assets/spirit.jpg"></b-img>
|
||||||
|
</b-col>
|
||||||
|
<b-col class="ml-n5" md="6" xl="7" align-self="top">
|
||||||
|
<h1 id="spirit">
|
||||||
|
Spirit
|
||||||
|
</h1>
|
||||||
|
<p class="ml-4">
|
||||||
|
The geology-centric rover was launched into space <abbr
|
||||||
|
title="Spirit and Opportunity were launched separately, 3 days apart.">with it's
|
||||||
|
twin</abbr>, Opportunity, on
|
||||||
|
<em class="text-nowrap" :title="this.moments.spirit.launch.fromNow()">
|
||||||
|
{{ this.moments.spirit.launch.format("MMMM Do, YYYY") }}</em>.
|
||||||
|
And on
|
||||||
|
<em :title="this.moments.sojourner.landing.fromNow()">
|
||||||
|
{{ this.moments.spirit.landing.format("MMMM Do, YYYY") }}</em>,
|
||||||
|
it became the 2nd rover to arrive on the red planet.
|
||||||
|
</p>
|
||||||
|
<p class="ml-4">
|
||||||
|
Spirit was planned with just a 90 day mission in mind, but like it's twin, Spirit outlasted
|
||||||
|
this cycle far beyond what was originally planned.
|
||||||
|
</p>
|
||||||
|
<p class="ml-4">
|
||||||
</p>
|
</p>
|
||||||
</b-col>
|
</b-col>
|
||||||
</b-row>
|
</b-row>
|
||||||
@@ -65,7 +149,8 @@
|
|||||||
software dedicated to autonomously moving the rover across the martian surface.
|
software dedicated to autonomously moving the rover across the martian surface.
|
||||||
</p>
|
</p>
|
||||||
<p class="ml-3 ml-xl-4">
|
<p class="ml-3 ml-xl-4">
|
||||||
While Sojourner was comparatively basic in it's software's autonomy, the software was helpful to operators
|
While Sojourner was comparatively basic in it's software's autonomy, the software was
|
||||||
|
helpful to operators
|
||||||
in visualizing and telegraphing instructions across the rocky terrain of Ares Vallis.
|
in visualizing and telegraphing instructions across the rocky terrain of Ares Vallis.
|
||||||
</p>
|
</p>
|
||||||
</b-col>
|
</b-col>
|
||||||
@@ -77,177 +162,169 @@
|
|||||||
antenna, which is required in order to communicate with Earth over large distances.
|
antenna, which is required in order to communicate with Earth over large distances.
|
||||||
</p>
|
</p>
|
||||||
<p class="ml-4">
|
<p class="ml-4">
|
||||||
This limitation forced the rover to stay within a certain range of the lander, and throughout
|
This limitation forced the rover to stay within a certain range of the lander, and
|
||||||
|
throughout
|
||||||
it's lifetime on Mars, it never traveled more than a few dozen feet from the lander.
|
it's lifetime on Mars, it never traveled more than a few dozen feet from the lander.
|
||||||
</p>
|
</p>
|
||||||
<h2>Tools</h2>
|
<h2>Tools</h2>
|
||||||
<p class="ml-4">
|
<p class="ml-4">
|
||||||
Sojourner was designed to study the surface of Mars by collecting and analyzing rock samples,
|
Sojourner was designed to study the surface of Mars by collecting and analyzing rock
|
||||||
|
samples,
|
||||||
taking pictures and more.
|
taking pictures and more.
|
||||||
</p>
|
</p>
|
||||||
</b-col>
|
</b-col>
|
||||||
</b-row>
|
</b-row>
|
||||||
</b-jumbotron>
|
</b-jumbotron>
|
||||||
<b-jumbotron fluid container-fluid class="text-dark my-0 py-md-5 py-sm-0 px-md-5 px-sm-3">
|
|
||||||
<b-row class="px-sm-3 px-md-3 w-100" align-h="around">
|
|
||||||
<b-col md="6" xl="3" align-h="center">
|
|
||||||
<b-img fluid-grow class="shadow-lg" src="./assets/spirit.jpg"></b-img>
|
|
||||||
<p class="text-center">
|
|
||||||
<em>Spirit</em>
|
|
||||||
</p>
|
|
||||||
</b-col>
|
|
||||||
<b-col class="ml-n5" md="6" xl="7" align-self="top">
|
|
||||||
<h1 id="spirit">
|
|
||||||
Spirit
|
|
||||||
</h1>
|
|
||||||
<p class="ml-4">
|
|
||||||
The geology-centric rover was launched into space <abbr
|
|
||||||
title="Spirit and Opportunity were launched separately, 3 days apart.">with it's
|
|
||||||
twin</abbr>, Opportunity, on
|
|
||||||
<em class="text-nowrap" :title="this.moments.spirit.launch.fromNow()">
|
|
||||||
{{ this.moments.spirit.launch.format("MMMM Do, YYYY") }}</em>.
|
|
||||||
And on
|
|
||||||
<em :title="this.moments.sojourner.landing.fromNow()">
|
|
||||||
{{ this.moments.spirit.landing.format("MMMM Do, YYYY") }}</em>,
|
|
||||||
it became the 2nd rover to arrive on the red planet.
|
|
||||||
</p>
|
|
||||||
<p class="ml-4">
|
|
||||||
Spirit was planned with just a 90 day mission in mind, but like it's twin, Spirit outlasted
|
|
||||||
this cycle far beyond what was originally planned.
|
|
||||||
</p>
|
|
||||||
<p class="ml-4">
|
|
||||||
</p>
|
|
||||||
</b-col>
|
|
||||||
</b-row>
|
|
||||||
</b-jumbotron>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Exo+2:wght@500&display=swap');
|
@import url('https://fonts.googleapis.com/css2?family=Exo+2:wght@500&display=swap');
|
||||||
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,600;0,700;1,400&display=swap');
|
@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,600;0,700;1,400&display=swap');
|
||||||
@import "./scss/_variables.scss";
|
@import "./scss/_variables.scss";
|
||||||
|
@import '~bootstrap/scss/bootstrap';
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
.jumbotron {
|
@include media-breakpoint-up(sm) {
|
||||||
color: $white;
|
html {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
p {
|
@include media-breakpoint-up(md) {
|
||||||
@extend .open-sans;
|
html {
|
||||||
font-size: 1.3em;
|
font-size: 1.4rem;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@include media-breakpoint-up(lg) {
|
||||||
|
html {
|
||||||
|
font-size: 1.6rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.jumbotron {
|
||||||
|
color: $white;
|
||||||
|
|
||||||
|
p, li {
|
||||||
|
@extend .open-sans;
|
||||||
|
font-size: 1.3em;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
abbr {
|
abbr {
|
||||||
text-decoration-color: rgba(255, 255, 255, 0.5) !important;
|
text-decoration-color: rgba(255, 255, 255, 0.5) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-black {
|
||||||
|
background-color: $primary;
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar {
|
||||||
|
@extend .bg-black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jumbotron h1 {
|
||||||
|
@extend .exo-2;
|
||||||
|
font-size: 2.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-caption {
|
||||||
|
bottom: -10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.carousel-caption {
|
||||||
|
width: 100%;
|
||||||
|
background-size: cover;
|
||||||
|
background-color: rgba(0, 0, 0, .45);
|
||||||
|
padding-top: 1rem;
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #b0b0b0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.bg-black {
|
.exo-2 {
|
||||||
background-color: $primary;
|
font-family: 'Exo 2', sans-serif;
|
||||||
color: $white;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
.navbar {
|
.open-sans {
|
||||||
@extend .bg-black;
|
font-family: 'Open Sans', sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.jumbotron h1 {
|
.navbar-brand, .nav-link {
|
||||||
@extend .exo-2;
|
font-size: 1.2em;
|
||||||
font-size: 2.1em;
|
color: $white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.carousel-caption {
|
html, body {
|
||||||
bottom: -10px;
|
background-color: $primary;
|
||||||
}
|
color: $white;
|
||||||
|
max-width: 100%;
|
||||||
.carousel-caption {
|
overflow-x: hidden;
|
||||||
width: 100%;
|
font-size: 1em;
|
||||||
background-size: cover;
|
}
|
||||||
background-color: rgba(0, 0, 0, .45);
|
|
||||||
padding-top: 1rem;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
color: #b0b0b0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.exo-2 {
|
|
||||||
font-family: 'Exo 2', sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.open-sans {
|
|
||||||
font-family: 'Open Sans', sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.navbar-brand, .nav-link {
|
|
||||||
font-size: 1.2em;
|
|
||||||
color: $white;
|
|
||||||
}
|
|
||||||
|
|
||||||
html, body {
|
|
||||||
background-color: $primary;
|
|
||||||
color: $white;
|
|
||||||
max-width: 100%;
|
|
||||||
overflow-x: hidden;
|
|
||||||
font-size: 1em;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import moment from 'moment';
|
import moment from 'moment';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'App',
|
name: 'App',
|
||||||
components: {},
|
components: {},
|
||||||
methods: {
|
methods: {
|
||||||
scrollIntoView(evt) {
|
scrollIntoView(evt) {
|
||||||
evt.preventDefault()
|
evt.preventDefault()
|
||||||
const href = evt.target.getAttribute('href')
|
const href = evt.target.getAttribute('href')
|
||||||
const el = href ? document.querySelector(href) : null
|
const el = href ? document.querySelector(href) : null
|
||||||
if (el) {
|
if (el) {
|
||||||
this.$refs.content.scrollTop = el.offsetTop
|
this.$refs.content.scrollTop = el.offsetTop
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
moment: moment,
|
||||||
|
dates: {
|
||||||
|
sojourner: {
|
||||||
|
launch: [1996, 11, 4, 5, 57],
|
||||||
|
landing: [1997, 6, 4],
|
||||||
|
lastContact: [],
|
||||||
|
},
|
||||||
|
spirit: {
|
||||||
|
launch: [2003, 5, 11, 16, 57],
|
||||||
|
landing: [2004, 0, 4, 3, 34],
|
||||||
|
lastContact: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
}
|
||||||
data() {
|
},
|
||||||
return {
|
computed: {
|
||||||
moment: moment,
|
moments: function () {
|
||||||
dates: {
|
moment.defaultFormat = "MMMM Do, YYYY";
|
||||||
sojourner: {
|
let obj = {}
|
||||||
launch: [1996, 11, 4, 5, 57],
|
// Build moment.utc fromNow 2d object dict
|
||||||
landing: [1997, 6, 4],
|
for (let k in this.dates) {
|
||||||
lastContact: [],
|
if (!(k in obj))
|
||||||
},
|
obj[k] = {}
|
||||||
spirit: {
|
|
||||||
launch: [2003, 5, 11, 16, 57],
|
|
||||||
landing: [2004, 0, 4, 3, 34],
|
|
||||||
lastContact: []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
moments: function () {
|
|
||||||
moment.defaultFormat = "MMMM Do, YYYY";
|
|
||||||
let obj = {}
|
|
||||||
// Build moment.utc fromNow 2d object dict
|
|
||||||
for (let k in this.dates) {
|
|
||||||
if (!(k in obj))
|
|
||||||
obj[k] = {}
|
|
||||||
|
|
||||||
for (let j in this.dates[k]) {
|
for (let j in this.dates[k]) {
|
||||||
obj[k][j] = moment.utc(this.dates[k][j])
|
obj[k][j] = moment.utc(this.dates[k][j])
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return obj;
|
|
||||||
}
|
}
|
||||||
|
return obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user