From cc366db2993d9fb6ad63b7dbef8cf68201ca132c Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 21 Nov 2022 19:12:55 +0100 Subject: [PATCH] Correctly place Perseverance on Mars after landing --- .../missions/perseverance/model.asset | 90 +++++++++++++++++-- .../missions/perseverance/spice.asset | 25 ++++++ .../missions/perseverance/trail.asset | 65 ++------------ data/profiles/mars.profile | 2 +- 4 files changed, 118 insertions(+), 64 deletions(-) create mode 100644 data/assets/scene/solarsystem/missions/perseverance/spice.asset diff --git a/data/assets/scene/solarsystem/missions/perseverance/model.asset b/data/assets/scene/solarsystem/missions/perseverance/model.asset index 31e5be7cee..09285e73c6 100644 --- a/data/assets/scene/solarsystem/missions/perseverance/model.asset +++ b/data/assets/scene/solarsystem/missions/perseverance/model.asset @@ -1,6 +1,7 @@ local trail = asset.require("./trail") local marsTransforms = asset.require("scene/solarsystem/planets/mars/transforms") local sun = asset.require("scene/solarsystem/sun/sun") +local spice = asset.require("./spice") local models = asset.syncedResource({ Name = "Perseverance Model", @@ -9,10 +10,86 @@ local models = asset.syncedResource({ Version = 2 }) +local TranslationKeyframes = { + ["1850 JAN 01 00:00:00"] = { + Type = "SpiceTranslation", + Target = spice.ID, + Observer = "MARS", + Kernels = spice.Kernels, + Frame = "IAU_MARS", + FixedDate = "2020 JUL 17 13:56:43" + }, + ["2020 JUL 17 13:56:42"] = { + Type = "SpiceTranslation", + Target = spice.ID, + Observer = "MARS", + Kernels = spice.Kernels, + Frame = "IAU_MARS", + FixedDate = "2020 JUL 17 13:56:43" + }, + ["2020 JUL 17 13:56:43"] = { + Type = "SpiceTranslation", + Target = spice.ID, + Observer = "MARS", + Frame = "IAU_MARS", + Kernels = spice.Kernels + }, + ["2020 JUL 17 13:56:44"] = { + Type = "SpiceTranslation", + Target = spice.ID, + Observer = "MARS", + Frame = "IAU_MARS", + Kernels = spice.Kernels + }, + ["2021 FEB 18 20:43:48"] = { + Type = "SpiceTranslation", + Target = spice.ID, + Observer = "MARS", + Frame = "IAU_MARS", + Kernels = spice.Kernels, + }, + ["2021 FEB 18 20:43:49"] = { + Type = "SpiceTranslation", + Target = spice.ID, + Observer = "MARS", + Frame = "IAU_MARS", + Kernels = spice.Kernels, + FixedDate = "2021 FEB 18 20:43:48" + }, +} + +local PerseveranceNode = { + Identifier = "PerseveranceNode", + Parent = marsTransforms.MarsBarycenter.Identifier, + Transform = { + Translation = { + Type = "SpiceTranslation", + Target = "MARS", + Observer = "MARS BARYCENTER" + }, + Rotation = { + Type = "SpiceRotation", + SourceFrame = "IAU_MARS", + DestinationFrame = "GALACTIC" + } + }, + GUI = { + Name = "Perseverance Node", + Path = "/Solar System/Missions/Perseverance", + Hidden = true + } +} + -- Perseverance Model -- local Perseverance = { Identifier = "Perseverance", - Parent = trail.PerseveranceNode.Identifier, + Parent = PerseveranceNode.Identifier, + Transform = { + Translation = { + Type = "TimelineTranslation", + Keyframes = TranslationKeyframes + } + }, GUI = { Name = "Perseverance", Path = "/Solar System/Missions/Perseverance" @@ -46,29 +123,30 @@ local Body = { Intensity = 0.5 } }, - PerformShading = false, - RotationVector = {65.940000,201.389999,263.980011} + RotationVector = {19.19,0.0,348.08} }, GUI = { Name = "Perseverance Model Body", Path = "/Solar System/Missions/Perseverance/Model", - Hidden = true + -- Hidden = true } } asset.onInitialize(function() + openspace.addSceneGraphNode(PerseveranceNode) openspace.addSceneGraphNode(Perseverance) openspace.addSceneGraphNode(PerseveranceModel) openspace.addSceneGraphNode(Body) end) - + asset.onDeinitialize(function() openspace.removeSceneGraphNode(Body) openspace.removeSceneGraphNode(PerseveranceModel) openspace.removeSceneGraphNode(Perseverance) + openspace.removeSceneGraphNode(PerseveranceNode) end) - + asset.export(Perseverance) asset.export(PerseveranceModel) asset.export(Body) diff --git a/data/assets/scene/solarsystem/missions/perseverance/spice.asset b/data/assets/scene/solarsystem/missions/perseverance/spice.asset new file mode 100644 index 0000000000..65ed32bc04 --- /dev/null +++ b/data/assets/scene/solarsystem/missions/perseverance/spice.asset @@ -0,0 +1,25 @@ +local kernels = asset.syncedResource({ + Name = "Mars 2020 Kernels", + Type = "HttpSynchronization", + Identifier = "perseverance_kernels", + Version = 2 +}) + +local m2020_kernels = { + kernels .. "m2020.tf", + kernels .. "m2020.tsc", + kernels .. "m2020_v04.tf", + + kernels .. "m2020_cruise_recon_nospin_v1.bc", + kernels .. "m2020_cruise_recon_rawrt_v1.bc", + kernels .. "m2020_cruise_recon_raweng_v1.bc", + kernels .. "m2020_edl_v01.bc", + + kernels .. "m2020_cruise_od138_v1.bsp", + kernels .. "m2020_edl_v01.bsp", + kernels .. "m2020_surf_rover_loc_0000_0089_v1.bsp" +} + +asset.export("Kernels", m2020_kernels) +asset.export("ID", -168) + diff --git a/data/assets/scene/solarsystem/missions/perseverance/trail.asset b/data/assets/scene/solarsystem/missions/perseverance/trail.asset index 2df94fa738..9b9fb46c9d 100644 --- a/data/assets/scene/solarsystem/missions/perseverance/trail.asset +++ b/data/assets/scene/solarsystem/missions/perseverance/trail.asset @@ -1,67 +1,21 @@ local sunTransforms = asset.require("scene/solarsystem/sun/transforms") local marsTransforms = asset.require("scene/solarsystem/planets/mars/transforms") - -local kernels = asset.syncedResource({ - Name = "Mars 2020 Kernels", - Type = "HttpSynchronization", - Identifier = "perseverance_kernels", - Version = 2 -}) - -local perseverance_id = -168 - -local m2020_kernels = { - kernels .. "m2020.tf", - kernels .. "m2020.tsc", - kernels .. "m2020_v04.tf", - - kernels .. "m2020_cruise_recon_nospin_v1.bc", - kernels .. "m2020_cruise_recon_rawrt_v1.bc", - kernels .. "m2020_cruise_recon_raweng_v1.bc", - kernels .. "m2020_edl_v01.bc", - - kernels .. "m2020_cruise_od138_v1.bsp", - kernels .. "m2020_edl_v01.bsp", - kernels .. "m2020_surf_rover_loc_0000_0089_v1.bsp" -} +local spice = asset.require("./spice") local startTime = "2020 JUL 17 13:56:42" local approachMars = "2021 FEB 11 20:32:16" local endTime = "2021 FEB 18 20:32:16" -local PerseveranceNode = { - Identifier = "PerseveranceNode", - Parent = sunTransforms.SolarSystemBarycenter.Identifier, - Transform = { - Translation = { - Type = "SpiceTranslation", - Target = perseverance_id, - Observer = "SSB", - Kernels = m2020_kernels - } - }, - GUI = { - Name = "Perseverance Node", - Path = "/Solar System/Missions/Perseverance", - Hidden = true - }, - TimeFrame = { - Type = "TimeFrameInterval", - Start = "2020 JUL 30 12:52:43.643", - End = "2021 FEB 18 20:43:48" - } -} - local PerseveranceTrailSun = { Identifier = "PerseveranceTrailSun", Parent = sunTransforms.SolarSystemBarycenter.Identifier, Renderable = { Type = "RenderableTrailTrajectory", - Translation = { + Translation = { Type = "SpiceTranslation", - Target = perseverance_id, + Target = spice.ID, Observer = "SSB", - Kernels = m2020_kernels + Kernels = spice.Kernels }, Color = { 0.2, 0.7, 0.1 }, StartTime = startTime, @@ -82,9 +36,9 @@ local PerseveranceTrailMars = { Type = "RenderableTrailTrajectory", Translation = { Type = "SpiceTranslation", - Target = perseverance_id, + Target = spice.ID, Observer = "MARS BARYCENTER", - Kernels = m2020_kernels + Kernels = spice.Kernels }, Color = { 0.7, 0.9, 0.6 }, StartTime = approachMars, @@ -99,17 +53,14 @@ local PerseveranceTrailMars = { } asset.onInitialize(function() - openspace.addSceneGraphNode(PerseveranceNode) openspace.addSceneGraphNode(PerseveranceTrailSun) openspace.addSceneGraphNode(PerseveranceTrailMars) end) - + asset.onDeinitialize(function() openspace.removeSceneGraphNode(PerseveranceTrailMars) openspace.removeSceneGraphNode(PerseveranceTrailSun) - openspace.removeSceneGraphNode(PerseveranceNode) end) - -asset.export(PerseveranceNode) + asset.export(PerseveranceTrailSun) asset.export(PerseveranceTrailMars) diff --git a/data/profiles/mars.profile b/data/profiles/mars.profile index 152a19ca03..ee0ef5776c 100644 --- a/data/profiles/mars.profile +++ b/data/profiles/mars.profile @@ -22,7 +22,7 @@ "identifier": "profile.setup.perseverance", "is_local": false, "name": "Setup and Goto Perseverance", - "script": "openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.HeightLayers.Mola_Utah.Settings.Offset', -1686.0);openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.HeightLayers.HiRISE-LS-DEM.Settings.Offset', -1686.0);openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.HeightLayers.MDEM200M.Settings.Offset', -1686);openspace.time.setPause(true);openspace.time.setTime('2021 FEB 18 20:32:16');openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.HeightLayers.HiRISE-LS-DEM.Enabled', true);openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.ColorLayers.HiRISE-LS.Enabled', true);openspace.navigation.setNavigationState({Anchor = 'Perseverance',Pitch = 0.567457E-4,Position = { 1.240506E1,-1.369270E1,-2.423553E0 },ReferenceFrame = 'Root',Up = { 0.441211E0,0.247019E0,0.862737E0 },Yaw = -0.446853E-4});" + "script": "openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.HeightLayers.Mola_Utah.Settings.Offset', -1685.5);openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.HeightLayers.HiRISE-LS-DEM.Settings.Offset', -1686.0);openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.HeightLayers.MDEM200M.Settings.Offset', -1686);openspace.time.setPause(true);openspace.time.setTime('2021 FEB 18 20:32:16');openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.HeightLayers.HiRISE-LS-DEM.Enabled', true);openspace.setPropertyValueSingle('Scene.Mars.Renderable.Layers.ColorLayers.HiRISE-LS.Enabled', true);openspace.navigation.setNavigationState({Anchor = 'Perseverance',Pitch = 0.567457E-4,Position = { 1.240506E1,-1.369270E1,-2.423553E0 },ReferenceFrame = 'Root',Up = { 0.441211E0,0.247019E0,0.862737E0 },Yaw = -0.446853E-4});" } ], "assets": [