{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Using SpiceyPy to map the ExoMars Rover (RM).\n", "This is just a simple tutorial for using SPICE (SpiceyPy) and some of the standard python libraries to make a map of the ExoMars Rover (RM) position on the surface of Mars for some test data. This is based on Andrew Annex's SpiceyPy MSL Example: https://gist.github.com/AndrewAnnex/f7be18db4ae41620b71c7cf27adbab12 \n", "\n", "## Step 1: getting kernels\n", "We get the kernels from the ESS BitBucket\n", "\n", "url: https://repos.cosmos.esa.int/socci/projects/SPICE_KERNELS/repos/exomarsrsp/\n", "\n", "## Step 2: imports\n", "Relatively self explanatory, we will import spiceypy, numpy, and matplotlib to get started." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import spiceypy\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 3: Load the kernels\n", "Now we can actually use spiceypy to load the kernels using the furnsh command on the metakernel file, this will load the kernels into the kernel pool for us to use. Please note that most probably you will need to either run this notebook in the metakernel directroy of manually modidy the PATH in the metakernel." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "spiceypy.furnsh('/Users/mcosta/SPICE/ExoMarsRSP/kernels/mk/emrsp_test_rec_0003_v001_local.tm')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check to see how many kernels we loaded\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "29" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spiceypy.ktotal('ALL')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 4: Use SpiceyPy to get the longitude and latitude of the rover through time\n", "We will pick a time range from 2021 APR 01 23:01:09.185 to 2021 APR 04 23:01:09.185. I will use linspace to enumerate 500 times between these times so " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "500" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solStart = spiceypy.str2et(\"2021 APR 01 23:01:09.185 UTC\")\n", "solEnd = spiceypy.str2et(\"2021 APR 04 23:01:09.1850 UTC\")\n", "times = np.linspace(solStart, solEnd, num=500, endpoint=True)\n", "len(times)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we obtain the positions using spkpos in SpiceyPy\n", "\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "500" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "positions, lttimes = spiceypy.spkpos(\"EXOMARS ROVER\", times, \"IAU_MARS\", \"lt+s\", \"MARS\")\n", "len(positions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we need to convert it to lon lat, let's go with planetocentric\n", "\n" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "r, lon, lat = np.array([spiceypy.reclat(p) for p in positions]).T\n", "lon *= spiceypy.dpr() # you could also just use numpy.degrees for this...\n", "lat *= spiceypy.dpr()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Great, so let's make a simple map to show the traverse. Here we plot the line of points and the marker points for each position, with a colormap corresponding to increasingly yellow through time." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'RM from 2021 APR 01 to 2021 APR 04')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(6,6))\n", "plt.plot(lon,lat)\n", "plt.scatter(lon,lat, c=times)\n", "plt.title('RM from 2021 APR 01 to 2021 APR 04')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 5: make a very pretty map\n", "Let's make an interactive map with folium. We will be using the USGS Astrogeology center's map layers hosted by ESRI for basemaps. I've included the shaded MOLA+HRSC topography layer, the global CTX mosaic layer, and the uncontrolled (more on this in a bit) HiRISE mosaic layer. Note that there is a significant (hundred+ meters) miss-alignment between where the RM positions are plotted in longitude and latitude from the HiRISE basemap. This is due to the basemap of hirise being produced as a \"uncontrolled\" mosaic so the placement of the images is not exact. I expect that the position of the rover in longitude and latitude is more correct as the spice kernels I used are from the PDS archive." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import folium\n", "\n", "tiles='https://astro.arcgis.com/arcgis/rest/services/OnMars/MColorDEM/MapServer/tile/{z}/{y}/{x}'\n", "\n", "m = folium.Map(location=[18.001, -24.549],\n", " zoom_start=18,\n", " max_zoom=20,\n", " tiles=None, \n", " crs='EPSG4326')\n", "\n", "folium.TileLayer(\n", " max_native_zoom=7,\n", " tiles=tiles,\n", " attr='usgs/esri',\n", " crs='EPSG4326'\n", ").add_to(m)\n", "\n", "ctx = folium.raster_layers.TileLayer(\n", " tiles='https://astro.arcgis.com/arcgis/rest/services/OnMars/CTX/MapServer/tile/{z}/{y}/{x}',\n", " max_native_zoom=12,\n", " attr='usgs/caltech',\n", " name='ctx', \n", " opacity=1,\n", " overlay=True, \n", " control=True,\n", " crs='EPSG4326'\n", ")\n", "ctx.add_to(m)\n", "\n", "hirise = folium.raster_layers.TileLayer(\n", " tiles='https://astro.arcgis.com/arcgis/rest/services/OnMars/HiRISE/MapServer/tile/{z}/{y}/{x}',\n", " max_native_zoom=17,\n", " attr='usgs/esri',\n", " name='hirise', \n", " opacity=1,\n", " overlay=True, \n", " control=True,\n", " crs='EPSG4326'\n", ")\n", "hirise.add_to(m)\n", "\n", "# add points from positions\n", "utc_times = spiceypy.et2utc(times, 'C', 0)\n", "folium.PolyLine(list(zip(lat, lon)), color='green').add_to(m)\n", "for i, (lo, la) in enumerate(list(zip(lon,lat))[::10]):\n", " folium.Marker((la, lo), tooltip=f'{utc_times[i]}').add_to(m)\n", "folium.LayerControl().add_to(m)\n", "m" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 4 }