mirror of
https://github.com/Xevion/history-of-robotics.git
synced 2025-12-12 20:11:50 -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
|
||||
days in total.
|
||||
</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 md="6" xl="3" align-h="center" class="w-100 h-100">
|
||||
<b-img fluid-grow src="./assets/sojourner.jpg"></b-img>
|
||||
<p class="text-center">
|
||||
<em>Sojourner</em>
|
||||
</b-col>
|
||||
</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>
|
||||
</b-col>
|
||||
</b-row>
|
||||
@@ -65,7 +149,8 @@
|
||||
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
|
||||
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>
|
||||
@@ -77,177 +162,169 @@
|
||||
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
|
||||
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">
|
||||
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.
|
||||
</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>
|
||||
<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>
|
||||
|
||||
</template>
|
||||
|
||||
<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=Open+Sans:ital,wght@0,400;0,600;0,700;1,400&display=swap');
|
||||
@import "./scss/_variables.scss";
|
||||
@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 "./scss/_variables.scss";
|
||||
@import '~bootstrap/scss/bootstrap';
|
||||
|
||||
html {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.jumbotron {
|
||||
color: $white;
|
||||
@include media-breakpoint-up(sm) {
|
||||
html {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
@extend .open-sans;
|
||||
font-size: 1.3em;
|
||||
}
|
||||
@include media-breakpoint-up(md) {
|
||||
html {
|
||||
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 {
|
||||
text-decoration-color: rgba(255, 255, 255, 0.5) !important;
|
||||
abbr {
|
||||
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 {
|
||||
background-color: $primary;
|
||||
color: $white;
|
||||
}
|
||||
.exo-2 {
|
||||
font-family: 'Exo 2', sans-serif;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
@extend .bg-black;
|
||||
}
|
||||
.open-sans {
|
||||
font-family: 'Open Sans', sans-serif;
|
||||
}
|
||||
|
||||
.jumbotron h1 {
|
||||
@extend .exo-2;
|
||||
font-size: 2.1em;
|
||||
}
|
||||
.navbar-brand, .nav-link {
|
||||
font-size: 1.2em;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
html, body {
|
||||
background-color: $primary;
|
||||
color: $white;
|
||||
max-width: 100%;
|
||||
overflow-x: hidden;
|
||||
font-size: 1em;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
import moment from 'moment';
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
components: {},
|
||||
methods: {
|
||||
scrollIntoView(evt) {
|
||||
evt.preventDefault()
|
||||
const href = evt.target.getAttribute('href')
|
||||
const el = href ? document.querySelector(href) : null
|
||||
if (el) {
|
||||
this.$refs.content.scrollTop = el.offsetTop
|
||||
export default {
|
||||
name: 'App',
|
||||
components: {},
|
||||
methods: {
|
||||
scrollIntoView(evt) {
|
||||
evt.preventDefault()
|
||||
const href = evt.target.getAttribute('href')
|
||||
const el = href ? document.querySelector(href) : null
|
||||
if (el) {
|
||||
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 {
|
||||
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: []
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
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] = {}
|
||||
}
|
||||
},
|
||||
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]) {
|
||||
obj[k][j] = moment.utc(this.dates[k][j])
|
||||
}
|
||||
for (let j in this.dates[k]) {
|
||||
obj[k][j] = moment.utc(this.dates[k][j])
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user