From 1d2b4cb14f7d344e760e93355fe9a7ffd5c0136b Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:08:07 -0800 Subject: [PATCH 01/13] Implement abstract gravity model class --- .../_GeneralModuleFiles/gravityModel.h | 90 +++++++++++++++++++ .../dynamics/gravityEffector/gravityModel.i | 45 ++++++++++ 2 files changed, 135 insertions(+) create mode 100644 src/simulation/dynamics/_GeneralModuleFiles/gravityModel.h create mode 100644 src/simulation/dynamics/gravityEffector/gravityModel.i diff --git a/src/simulation/dynamics/_GeneralModuleFiles/gravityModel.h b/src/simulation/dynamics/_GeneralModuleFiles/gravityModel.h new file mode 100644 index 0000000000..8169e95767 --- /dev/null +++ b/src/simulation/dynamics/_GeneralModuleFiles/gravityModel.h @@ -0,0 +1,90 @@ +/* + ISC License + + Copyright (c) 2023, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +#ifndef GRAVITY_MODEL_H +#define GRAVITY_MODEL_H + +#include +#include +#include +#include + +#include "architecture/utilities/bskLogging.h" + +class GravBodyData; + +/** GravityModel is a purely abstract class the represents a mathematical body + * for computing the gravity field generated by a body at some arbitrary + * point in space. + */ +class GravityModel { + public: + // Core Guidelines C.67 and C.127 + virtual ~GravityModel() = default; + GravityModel() = default; + GravityModel(const GravityModel&) = delete; + GravityModel& operator=(const GravityModel&) = delete; + GravityModel(GravityModel&&) = delete; + GravityModel& operator=(GravityModel&&) = delete; + + /** Initializes any parameters necessary for the computation of gravity. + * + * This method can be called to generate all dependent parameters assuming + * that all independent parameters have been set. + * + * This method returns an empty string whenever initialization was + * succesful. Otherwise, the returned string will be used as the error + * message. + */ + virtual std::optional initializeParameters() = 0; + + /** Initialize any parameters necessary for the computation of gravity. + * + * See GravityModel::initializeParameters(). + * + * Unlike GravityModel::initializeParameters(), this method is passed a + * GravBodyData, which can be used to initialize parameters, such as the + * gravitational constant or the radius. + * + * This method is called by GravityEffector::Reset on all GravBodyData. If + * the returned optional is set, GravityEffector::Reset will log an error + * with the value in the optional. + */ + virtual std::optional initializeParameters(const GravBodyData&) = 0; + + /** Returns the gravity acceleration at a position around this body. + * + * The position is given in the body-fixed reference frame. + * Likewise, the resulting acceleration should be given in the + * body-fixed reference frame. + */ + virtual Eigen::Vector3d computeField(const Eigen::Vector3d& position_planetFixed) const = 0; + + /** Returns the gravitational potential energy at a position around this body. + * + * The position is given relative to the body and in the inertial + * reference frame. + */ + virtual double computePotentialEnergy(const Eigen::Vector3d& positionWrtPlanet_N) const = 0; + + public: + BSKLogger *bskLogger; +}; + +#endif /* GRAVITY_MODEL_H */ diff --git a/src/simulation/dynamics/gravityEffector/gravityModel.i b/src/simulation/dynamics/gravityEffector/gravityModel.i new file mode 100644 index 0000000000..583811e217 --- /dev/null +++ b/src/simulation/dynamics/gravityEffector/gravityModel.i @@ -0,0 +1,45 @@ +/* + ISC License + + Copyright (c) 2023, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +%module(package="Basilisk.simulation") gravityModel +%{ + #include "simulation/dynamics/_GeneralModuleFiles/gravityModel.h" + #include +%} + +%pythoncode %{ +from Basilisk.architecture.swig_common_model import * +%} +%include "std_string.i" +%include "swig_eigen.i" +%include "swig_conly_data.i" + +%include +%shared_ptr(GravityModel) + +%typemap(out) std::optional { + if ($1.has_value()) { + $result = PyUnicode_FromString($1.value().c_str()); + } else { + $result = Py_None; + Py_INCREF($result); + } +} + +%include "simulation/dynamics/_GeneralModuleFiles/gravityModel.h" From c3810866dc700c882036698c6ddcfefffcea854b Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:08:32 -0800 Subject: [PATCH 02/13] Add a point mass gravity model --- .../pointMassGravityModel.cpp | 40 +++++++++++++ .../pointMassGravityModel.h | 57 +++++++++++++++++++ .../gravityEffector/pointMassGravityModel.i | 33 +++++++++++ 3 files changed, 130 insertions(+) create mode 100644 src/simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.cpp create mode 100644 src/simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.h create mode 100644 src/simulation/dynamics/gravityEffector/pointMassGravityModel.i diff --git a/src/simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.cpp b/src/simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.cpp new file mode 100644 index 0000000000..956e9b523b --- /dev/null +++ b/src/simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.cpp @@ -0,0 +1,40 @@ +/* + ISC License + + Copyright (c) 2023, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +#include "pointMassGravityModel.h" +#include "gravityEffector.h" + +std::optional PointMassGravityModel::initializeParameters(const GravBodyData& body) +{ + this->muBody = body.mu; + return this->initializeParameters(); +} + +Eigen::Vector3d +PointMassGravityModel::computeField(const Eigen::Vector3d& position_planetFixed) const +{ + const double rMag = position_planetFixed.norm(); + return -position_planetFixed * this->muBody / (rMag * rMag * rMag); +} + +double +PointMassGravityModel::computePotentialEnergy(const Eigen::Vector3d& positionWrtPlanet_N) const +{ + return -this->muBody / positionWrtPlanet_N.norm(); +} diff --git a/src/simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.h b/src/simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.h new file mode 100644 index 0000000000..1961d058a5 --- /dev/null +++ b/src/simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.h @@ -0,0 +1,57 @@ +/* + ISC License + + Copyright (c) 2023, Autonomous Vehicle Systems Lab, University of Colorado at + Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +#ifndef POINT_MASS_GRAVITY_MODEL_H +#define POINT_MASS_GRAVITY_MODEL_H + +#include "gravityModel.h" + +/** + * The point mass gravity model + */ +class PointMassGravityModel : public GravityModel { + public: + /** Does nothing, as the point-mass gravity model has no parameters other than + * `muBody`, which must be set separately */ + std::optional initializeParameters() override { return {}; }; + + /** Reads the only necessary parameter (`muBody`) from the given `GravBodyData`*/ + std::optional initializeParameters(const GravBodyData&) override; + + /** Returns the gravity acceleration at a position around this body. + * + * The position is given in the body-fixed reference frame. + * Likewise, the resulting acceleration should be given in the + * body-fixed reference frame. + */ + Eigen::Vector3d computeField(const Eigen::Vector3d& position_planetFixed) const override; + + /** Returns the gravitational potential energy at a position around this body. + * + * The position is given relative to the body and in the inertial + * reference frame. + */ + double computePotentialEnergy(const Eigen::Vector3d& positionWrtPlanet_N) const; + + public: + double muBody = 0; /**< [m^3/s^2] Gravitation parameter for the planet */ +}; + +#endif /* POINT_MASS_GRAVITY_MODEL_H */ diff --git a/src/simulation/dynamics/gravityEffector/pointMassGravityModel.i b/src/simulation/dynamics/gravityEffector/pointMassGravityModel.i new file mode 100644 index 0000000000..8f301cd19a --- /dev/null +++ b/src/simulation/dynamics/gravityEffector/pointMassGravityModel.i @@ -0,0 +1,33 @@ +/* + ISC License + + Copyright (c) 2016, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +%module(package="Basilisk.simulation") pointMassGravityModel +%{ + #include "simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.h" + #include +%} + +%include "swig_eigen.i" + +%import "simulation/dynamics/gravityEffector/gravityModel.i" + +%include +%shared_ptr(PointMassGravityModel) + +%include "simulation/dynamics/_GeneralModuleFiles/pointMassGravityModel.h" From 9b455cfdf931fc41633e590e72590c9cbda54266 Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:08:55 -0800 Subject: [PATCH 03/13] Add a Spherical Harmonics gravity model --- .../sphericalHarmonicsGravityModel.cpp | 205 ++++++++++++++++++ .../sphericalHarmonicsGravityModel.h | 117 ++++++++++ .../sphericalHarmonicsGravityModel.i | 65 ++++++ 3 files changed, 387 insertions(+) create mode 100644 src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.cpp create mode 100644 src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.h create mode 100644 src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.i diff --git a/src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.cpp b/src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.cpp new file mode 100644 index 0000000000..86e8517ab9 --- /dev/null +++ b/src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.cpp @@ -0,0 +1,205 @@ +/* + ISC License + + Copyright (c) 2023, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +#include "sphericalHarmonicsGravityModel.h" +#include "architecture/utilities/bskLogging.h" +#include "simulation/dynamics/_GeneralModuleFiles/gravityEffector.h" + +namespace { +// Computes the term (2 - d_l), where d_l is the kronecker delta. +inline double getK(const unsigned int degree) +{ + return (degree == 0) ? 1.0 : 2.0; +} +} + +std::optional SphericalHarmonicsGravityModel::initializeParameters() +{ + if (this->cBar.size() == 0 || this->sBar.size() == 0) { + return "Could not initialize spherical harmonics: the 'C' or 'S' parameters were not " + "provided."; + } + + for (size_t i = 0; i <= this->maxDeg + 1; i++) { + std::vector aRow, n1Row, n2Row; + aRow.resize(i + 1, 0.0); + // Diagonal elements of A_bar + if (i == 0) { aRow[i] = 1.0; } + else { + aRow[i] = sqrt(double((2 * i + 1) * getK(i)) / (2 * i * getK(i - 1))) * + this->aBar[i - 1][i - 1]; + } + n1Row.resize(i + 1, 0.0); + n2Row.resize(i + 1, 0.0); + for (size_t m = 0; m <= i; m++) { + if (i >= m + 2) { + n1Row[m] = sqrt(double((2 * i + 1) * (2 * i - 1)) / ((i - m) * (i + m))); + n2Row[m] = sqrt(double((i + m - 1) * (2 * i + 1) * (i - m - 1)) / + ((i + m) * (i - m) * (2 * i - 3))); + } + } + this->n1.push_back(n1Row); + this->n2.push_back(n2Row); + this->aBar.push_back(aRow); + } + + for (size_t l = 0; l <= this->maxDeg; l++) // up to _maxDegree-1 + { + std::vector nq1Row, nq2Row; + nq1Row.resize(l + 1, 0.0); + nq2Row.resize(l + 1, 0.0); + for (size_t m = 0; m <= l; m++) { + if (m < l) { nq1Row[m] = sqrt(double((l - m) * getK(m) * (l + m + 1)) / getK(m + 1)); } + nq2Row[m] = sqrt(double((l + m + 2) * (l + m + 1) * (2 * l + 1) * getK(m)) / + ((2 * l + 3) * getK(m + 1))); + } + this->nQuot1.push_back(nq1Row); + this->nQuot2.push_back(nq2Row); + } + + return {}; // No error! +} + +std::optional +SphericalHarmonicsGravityModel::initializeParameters(const GravBodyData& body) +{ + this->radEquator = body.radEquator; + this->muBody = body.mu; + return this->initializeParameters(); +} + +Eigen::Vector3d +SphericalHarmonicsGravityModel::computeField(const Eigen::Vector3d& position_planetFixed) const +{ + return this->computeField(position_planetFixed, this->maxDeg, true); +} + +Eigen::Vector3d +SphericalHarmonicsGravityModel::computeField(const Eigen::Vector3d& position_planetFixed, + unsigned int degree, bool include_zero_degree) const +{ + if (degree > this->maxDeg) { + auto errorMsg = + "Requested degree greater than maximum degree in Spherical Harmonics gravity model"; + if (bskLogger) bskLogger->bskLog(BSK_ERROR, errorMsg); + throw std::invalid_argument(errorMsg); + } + + double x = position_planetFixed[0]; + double y = position_planetFixed[1]; + double z = position_planetFixed[2]; + double r, s, t, u; + double order; + double rho; + double a1, a2, a3, a4, sum_a1, sum_a2, sum_a3, sum_a4; + std::vector rE, iM, rhol; + + // Change of variables: direction cosines + r = sqrt(x * x + y * y + z * z); + s = x / r; + t = y / r; + u = z / r; + + // Future work: allow maximum order different than maximum degree + order = degree; + + for (size_t l = 1; l <= degree + 1; l++) { + // Diagonal terms are computed in initializeParameters() + // Low diagonal terms + this->aBar[l][l - 1] = sqrt(double((2 * l) * getK(l - 1)) / getK(l)) * this->aBar[l][l] * u; + } + + // Lower terms of A_bar + for (size_t m = 0; m <= order + 1; m++) { + for (size_t l = m + 2; l <= degree + 1; l++) { + this->aBar[l][m] = + u * this->n1[l][m] * this->aBar[l - 1][m] - this->n2[l][m] * this->aBar[l - 2][m]; + } + + // Computation of real and imaginary parts of (2+j*t)^m + if (m == 0) { + rE.push_back(1.0); + iM.push_back(0.0); + } + else { + rE.push_back(s * rE[m - 1] - t * iM[m - 1]); + iM.push_back(s * iM[m - 1] + t * rE[m - 1]); + } + } + + rho = radEquator / r; + rhol.resize(degree + 2, 0.0); + rhol[0] = muBody / r; + rhol[1] = rhol[0] * rho; + + // Degree 0 + + // Gravity field and potential of degree l = 0 + // Gravity components + a1 = 0.0; + a2 = 0.0; + a3 = 0.0; + a4 = 0.0; + + if (include_zero_degree) { + a4 = -rhol[1] / radEquator; // * this->_Nquot_2[0][0] * this->_A_bar[1][1]; //This is 1, so + // it's not included! + } + + for (size_t l = 1; l <= degree; l++) // does not include l = maxDegree + { + rhol[l + 1] = rho * rhol[l]; // rho_l computed + + sum_a1 = 0.0; + sum_a2 = 0.0; + sum_a3 = 0.0; + sum_a4 = 0.0; + + for (size_t m = 0; m <= l; m++) { + double D, E, F; + D = this->cBar[l][m] * rE[m] + this->sBar[l][m] * iM[m]; + if (m == 0) { + E = 0.0; + F = 0.0; + } + else { + E = this->cBar[l][m] * rE[m - 1] + this->sBar[l][m] * iM[m - 1]; + F = this->sBar[l][m] * rE[m - 1] - this->cBar[l][m] * iM[m - 1]; + } + + sum_a1 = sum_a1 + m * this->aBar[l][m] * E; + sum_a2 = sum_a2 + m * this->aBar[l][m] * F; + if (m < l) { sum_a3 = sum_a3 + this->nQuot1[l][m] * this->aBar[l][m + 1] * D; } + sum_a4 = sum_a4 + this->nQuot2[l][m] * this->aBar[l + 1][m + 1] * D; + } + + a1 = a1 + rhol[l + 1] / radEquator * sum_a1; + a2 = a2 + rhol[l + 1] / radEquator * sum_a2; + a3 = a3 + rhol[l + 1] / radEquator * sum_a3; + a4 = a4 - rhol[l + 1] / radEquator * sum_a4; + } + + return {a1 + s * a4, a2 + t * a4, a3 + u * a4}; +} + +double SphericalHarmonicsGravityModel::computePotentialEnergy( + const Eigen::Vector3d& positionWrtPlanet_N) const +{ + return -this->muBody / positionWrtPlanet_N.norm(); +} diff --git a/src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.h b/src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.h new file mode 100644 index 0000000000..1e9a6cb3bd --- /dev/null +++ b/src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.h @@ -0,0 +1,117 @@ +/* + ISC License + + Copyright (c) 2023, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +#ifndef SH_GRAVITY_MODEL_H +#define SH_GRAVITY_MODEL_H + +#include "architecture/utilities/bskLogging.h" +#include "simulation/dynamics/_GeneralModuleFiles/gravityModel.h" + +#include + +/** + * The Spherical Harmonics gravity model + */ +class SphericalHarmonicsGravityModel : public GravityModel { + public: + /** Initialize all parameters necessary for the computation of gravity. + * + * The attributes `muBody`and `radEquator` must be set separately. + * + * Will return an error message (string) if `cBar` or `sBar` were not set. + * Otherwise, returns an empty optional. + */ + std::optional initializeParameters() override; + + /** Initialize all parameters necessary for the computation of gravity. + * + * The attributes `muBody`and `radEquator` are read from the given `GravBodyData`. + * + * Will return an error message (string) if `cBar` or `sBar` were not set. + * Otherwise, returns an empty optional. + */ + std::optional initializeParameters(const GravBodyData&) override; + + /** Returns the gravity acceleration at a position around this body. + * + * The position is given in the body-fixed reference frame. + * Likewise, the resulting acceleration should be given in the + * body-fixed reference frame. + */ + Eigen::Vector3d computeField(const Eigen::Vector3d& position_planetFixed) const override; + + /** Returns the gravity acceleration at a position around this body. + * + * The position is given in the body-fixed reference frame. + * Likewise, the resulting acceleration should be given in the + * body-fixed reference frame. + * + * If the given `degree` is smaller than the maximum degree stored in + * this class, then the field is computed using only degrees up to `degree`. + * If the requested degree is higher than the available one, an error is thrown. + * + * If include_zero_degree is false the degree that corresponds to the spherical + * term (point-mass) of the gravity is ignored. + */ + Eigen::Vector3d computeField(const Eigen::Vector3d& position_planetFixed, unsigned int degree, + bool include_zero_degree) const; + + /** Returns the gravitational potential energy at a position around this body. + * + * The current implementation returns the potential energy of a point-mass + * (the spherical harmonics coefficients of the body are ignored) + * + * The position is given relative to the body and in the inertial + * reference frame. + */ + double computePotentialEnergy(const Eigen::Vector3d& positionWrtPlanet_N) const; + + public: + double radEquator = 0; /**< [m] Reference radius for the planet */ + double muBody = 0; /**< [m^3/s^2] Gravitation parameter for the planet */ + + /** The maximum degree of Spherical Harmonics to use + * + * A value of maxDeg greater than the size of cBar or sBar will cause an error. + * A value that is lower will truncate the spherical harmonics, ignoring any + * parameters in cBar/sBar with degree greater than maxDeg. + */ + size_t maxDeg = 0; + + /** The normalized "C" spherical harmonics coefficients */ + std::vector> cBar; + + /** The normalized "S" spherical harmonics coefficients */ + std::vector> sBar; + + private: + /** + * The following parameters are used internally to compute the gravity. + * + * They are coefficients used in the method of Pines for the gravity due to SH. + * For their definition, see the 'Basilisk-GravityEffector' documentation. + */ + mutable std::vector> aBar; /**< [-] Eq. 61 */ + std::vector> n1; /**< [-] Eq. 63 */ + std::vector> n2; /**< [-] Eq. 64 */ + std::vector> nQuot1; /**< [-] Eq. 79 */ + std::vector> nQuot2; /**< [-] Eq. 80 */ +}; + +#endif /* SH_GRAVITY_MODEL_H */ diff --git a/src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.i b/src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.i new file mode 100644 index 0000000000..65f7dd7680 --- /dev/null +++ b/src/simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.i @@ -0,0 +1,65 @@ +/* + ISC License + + Copyright (c) 2016, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +%module(package="Basilisk.simulation") sphericalHarmonicsGravityModel +%{ + #include "simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.h" + #include +%} + +%include "exception.i" + +%exception { + try { + $action + } catch (const std::exception& e) { + SWIG_exception(SWIG_RuntimeError, e.what()); + } +} + +%include "swig_eigen.i" + +%import "simulation/dynamics/gravityEffector/gravityModel.i" + +%include "std_vector.i" +%template() std::vector; +%template() std::vector>; + +%include +%shared_ptr(SphericalHarmonicsGravityModel) + +// Declaring cBar and sBar as %naturalvar allows setting them without the MultiArray wrapper: +// mySphericalHarmonics.cBar = [[1.0], [0.0, 1.0]] +// However, it prevents modifying them in place. The following is illegal: +// mySphericalHarmonics.cBar[0][0] = 2 +// This is because the variables are returned by value, instead of by reference. +%naturalvar SphericalHarmonicsGravityModel::cBar; +%naturalvar SphericalHarmonicsGravityModel::sBar; + +%include "simulation/dynamics/gravityEffector/sphericalHarmonicsGravityModel.h" + +%extend SphericalHarmonicsGravityModel { + %pythoncode %{ + def loadFromFile(self, fileName: str, maxDeg: int): + """Loads the C and S coefficients from a file.""" + from Basilisk.simulation.gravityEffector import loadGravFromFile + loadGravFromFile(fileName, self, maxDeg) + return self + %} +} From 33781c4dd824fc8a6a6f8e4da2999f94c3818648 Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:09:10 -0800 Subject: [PATCH 04/13] Add a Polyhedral gravity model --- .../polyhedralGravityModel.cpp | 171 ++++++++++++++++++ .../gravityEffector/polyhedralGravityModel.h | 97 ++++++++++ .../gravityEffector/polyhedralGravityModel.i | 43 +++++ 3 files changed, 311 insertions(+) create mode 100644 src/simulation/dynamics/gravityEffector/polyhedralGravityModel.cpp create mode 100644 src/simulation/dynamics/gravityEffector/polyhedralGravityModel.h create mode 100644 src/simulation/dynamics/gravityEffector/polyhedralGravityModel.i diff --git a/src/simulation/dynamics/gravityEffector/polyhedralGravityModel.cpp b/src/simulation/dynamics/gravityEffector/polyhedralGravityModel.cpp new file mode 100644 index 0000000000..cc3f4be18e --- /dev/null +++ b/src/simulation/dynamics/gravityEffector/polyhedralGravityModel.cpp @@ -0,0 +1,171 @@ +/* + ISC License + + Copyright (c) 2016, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +#include "polyhedralGravityModel.h" +#include "simulation/dynamics/_GeneralModuleFiles/gravityEffector.h" + +std::optional PolyhedralGravityModel::initializeParameters() +{ + // If data hasn't been loaded, quit and return failure + if (this->xyzVertex.size() == 0 || this->orderFacet.size() == 0) { + return "Could not initialize polyhedral data: the vertex (xyzVertex) or facet (orderFacet) " + "were not provided."; + } + + const size_t nFacet = this->orderFacet.rows(); + int i, j, k; + Eigen::Vector3i v; + Eigen::Vector3d xyz1, xyz2, xyz3, e21, e32; + + /* Initialize normal */ + this->normalFacet.setZero(nFacet, 3); + + /* Loop through each facet to compute volume */ + for (unsigned int m = 0; m < nFacet; m++) { + /* Fill auxiliary variables with vertex order on each facet */ + v = this->orderFacet.row(m); + i = v[0] - 1; + j = v[1] - 1; + k = v[2] - 1; + + xyz1 = this->xyzVertex.row(i); + xyz2 = this->xyzVertex.row(j); + xyz3 = this->xyzVertex.row(k); + + /* Compute two edge vectors and normal to facet */ + e21 = xyz2 - xyz1; + e32 = xyz3 - xyz2; + this->normalFacet.row(m) = e21.cross(e32) / e21.cross(e32).norm(); + + /* Add volume contribution */ + this->volPoly += abs(xyz1.cross(xyz2).transpose() * xyz3) / 6; + } + + return {}; +} + +std::optional PolyhedralGravityModel::initializeParameters(const GravBodyData& body) +{ + this->muBody = body.mu; + return this->initializeParameters(); +} + +Eigen::Vector3d +PolyhedralGravityModel::computeField(const Eigen::Vector3d& position_planetFixed) const +{ + int i, j, k; + Eigen::Vector3i v; + Eigen::Vector3d ri, rj, rk; + Eigen::Vector3d nf; + Eigen::Vector3d r1, r2, re; + Eigen::Vector3d r21, n21; + Eigen::Matrix3d Ee; + + int idx_min; + double a, b, e, Le; + double wy, wx, wf; + + Eigen::Vector3d dUe, dUf, acc; + dUe.setZero(3); + dUf.setZero(3); + + const size_t nFacet = this->orderFacet.rows(); + + /* Loop through each facet */ + for (unsigned int m = 0; m < nFacet; m++) { + /* Fill auxiliary variables with vertex order on each facet */ + v = this->orderFacet.row(m); + i = v[0] - 1; + j = v[1] - 1; + k = v[2] - 1; + + /* Compute vectors and norm from each vertex to the evaluation position */ + ri = this->xyzVertex.row(i).transpose() - position_planetFixed; + rj = this->xyzVertex.row(j).transpose() - position_planetFixed; + rk = this->xyzVertex.row(k).transpose() - position_planetFixed; + + /* Extract normal to facet */ + nf = this->normalFacet.row(m).transpose(); + + /* Loop through each facet edge */ + for (unsigned int n = 0; n <= 2; n++) { + switch (n) { + case 0: + idx_min = std::min(i, j); + r1 = ri; + r2 = rj; + re = this->xyzVertex.row(idx_min).transpose() - position_planetFixed; + + a = ri.norm(); + b = rj.norm(); + break; + case 1: + idx_min = std::min(j, k); + r1 = rj; + r2 = rk; + re = this->xyzVertex.row(idx_min).transpose() - position_planetFixed; + + a = rj.norm(); + b = rk.norm(); + break; + case 2: + idx_min = std::min(i, k); + r1 = rk; + r2 = ri; + re = this->xyzVertex.row(idx_min).transpose() - position_planetFixed; + + a = rk.norm(); + b = ri.norm(); + break; + } + + /* Compute along edge vector and norm */ + r21 = r2 - r1; + e = r21.norm(); + n21 = r21.cross(nf) / r21.cross(nf).norm(); + + /* Dimensionless per edge factor */ + Le = log((a + b + e) / (a + b - e)); + + /* Compute dyad product */ + Ee = nf * n21.transpose(); + + /* Add current facet distribution */ + dUe += Ee * re * Le; + } + + /* Compute solid angle for the current facet */ + wy = ri.transpose() * rj.cross(rk); + wx = ri.norm() * rj.norm() * rk.norm() + ri.norm() * rj.transpose() * rk + + rj.norm() * rk.transpose() * ri + rk.norm() * ri.transpose() * rj; + wf = 2 * atan2(wy, wx); + + /* Add current solid angle facet */ + dUf += nf * (nf.transpose() * ri) * wf; + } + + /* Compute acceleration contribution */ + return (this->muBody / this->volPoly) * (-dUe + dUf); +} + +double +PolyhedralGravityModel::computePotentialEnergy(const Eigen::Vector3d& positionWrtPlanet_N) const +{ + return -this->muBody / positionWrtPlanet_N.norm(); +} diff --git a/src/simulation/dynamics/gravityEffector/polyhedralGravityModel.h b/src/simulation/dynamics/gravityEffector/polyhedralGravityModel.h new file mode 100644 index 0000000000..cdd08fa4b8 --- /dev/null +++ b/src/simulation/dynamics/gravityEffector/polyhedralGravityModel.h @@ -0,0 +1,97 @@ +/* + ISC License + + Copyright (c) 2023, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +#ifndef POLY_GRAVITY_MODEL_H +#define POLY_GRAVITY_MODEL_H + +#include "simulation/dynamics/_GeneralModuleFiles/gravityModel.h" + +/** The Polyhedral gravity model. + * + * In this class, a polyhedron is defined by its triangular facets. + * Each facet is defined by three vertices (they are triangles), and + * each vertex is defined by its position relative to the center of + * mass of the body. + */ +class PolyhedralGravityModel : public GravityModel { + public: + + /** Initialize all parameters necessary for the computation of gravity. + * + * The attribute `muBody` must be set separately. + * + * Will return an error message (string) if `xyzVertex` or `orderFacet` were not set. + * Otherwise, returns an empty optional. + */ + std::optional initializeParameters() override; + + /** Initialize all parameters necessary for the computation of gravity. + * + * The attribute `muBody` is read from the given `GravBodyData`. + * + * Will return an error message (string) if `xyzVertex` or `orderFacet` were not set. + * Otherwise, returns an empty optional. + */ + std::optional initializeParameters(const GravBodyData&) override; + + /** Returns the gravity acceleration at a position around this body. + * + * The position is given in the body-fixed reference frame. + * Likewise, the resulting acceleration should be given in the + * body-fixed reference frame. + */ + Eigen::Vector3d computeField(const Eigen::Vector3d& position_planetFixed) const override; + + /** Returns the gravitational potential energy at a position around this body. + * + * The current implementation returns the potential energy of a point-mass + * (the polyhedral shape of the body is ignored) + * + * The position is given relative to the body and in the inertial + * reference frame. + */ + double computePotentialEnergy(const Eigen::Vector3d& positionWrtPlanet_N) const; + + public: + double muBody = 0; /**< [m^3/s^2] Gravitation parameter for the planet */ + + /** + * This matrix contains the position of every vertex of this + * polyhedron, in meters. Each row corresponds to a different + * vertex, while each column corresponds to x, y, z respectively. + */ + Eigen::MatrixX3d xyzVertex; + + /** + * This matrix defines the facets of the matrix. Each row + * contains three numbers, each of them corresponding to the + * index of a vertex, as defined in xyzVertex. These three + * vertices define a single facet of the polyhedron. + * + * Note that the order of the vertex index is important: the facets + * must all be outward pointing. + */ + Eigen::MatrixX3i orderFacet; + + private: + double volPoly = 0; /**< [m^3] Volume of the polyhedral */ + Eigen::MatrixX3d normalFacet; /**< [-] Normal of a facet */ +}; + +#endif /* POLY_GRAVITY_MODEL_H */ diff --git a/src/simulation/dynamics/gravityEffector/polyhedralGravityModel.i b/src/simulation/dynamics/gravityEffector/polyhedralGravityModel.i new file mode 100644 index 0000000000..308c4358c7 --- /dev/null +++ b/src/simulation/dynamics/gravityEffector/polyhedralGravityModel.i @@ -0,0 +1,43 @@ +/* + ISC License + + Copyright (c) 2016, Autonomous Vehicle Systems Lab, University of Colorado at Boulder + + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + */ + +%module(package="Basilisk.simulation") polyhedralGravityModel +%{ + #include "simulation/dynamics/gravityEffector/polyhedralGravityModel.h" + #include +%} + +%include "swig_eigen.i" + +%import "simulation/dynamics/gravityEffector/gravityModel.i" + +%include +%shared_ptr(PolyhedralGravityModel) + +%include "simulation/dynamics/gravityEffector/polyhedralGravityModel.h" + +%extend PolyhedralGravityModel { + %pythoncode %{ + def loadFromFile(self, fileName: str): + """Loads the vertices and facet data from the given file.""" + from Basilisk.simulation.gravityEffector import loadPolyFromFile + loadPolyFromFile(fileName, self) + return self + %} +} From 02189edff3a1ffef8c9b942da2940676de84c818 Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:09:44 -0800 Subject: [PATCH 05/13] Update gravity effector to new gravity model class --- .../_GeneralModuleFiles/gravityEffector.cpp | 816 ++++-------------- .../_GeneralModuleFiles/gravityEffector.h | 247 +++--- .../gravityEffector/gravityEffector.i | 163 +++- 3 files changed, 456 insertions(+), 770 deletions(-) diff --git a/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.cpp b/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.cpp index f70210b4fd..7eec0cd955 100644 --- a/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.cpp +++ b/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.cpp @@ -17,640 +17,178 @@ */ +#include #include "gravityEffector.h" -#include "architecture/utilities/macroDefinitions.h" #include "architecture/utilities/avsEigenMRP.h" #include "architecture/utilities/linearAlgebra.h" -#include - -Polyhedral::Polyhedral() -{ - this->volPoly = 0.0; - this->muBody = 0.0; - return; -} - -Polyhedral::~Polyhedral() -{ - return; -} +#include "architecture/utilities/macroDefinitions.h" -bool Polyhedral::initializeParameters() +namespace { +// Prevents casting to int64_t from uint64_t, which could inccur information +// loss and might raise warnings in some compilers +double computeDtInSeconds(uint64_t lhs, uint64_t rhs) { - bool paramsDone = false; - - //! - If coefficients haven't been loaded, quit and return failure - if(xyzVertex.size() == 0 || orderFacet.size() == 0) - { - return paramsDone; - } - - int i, j, k; - Eigen::Vector3d v, xyz1, xyz2, xyz3, e21, e32; - - /* Initialize normal */ - this->normalFacet.setZero(this->nFacet,3); - - /* Loop through each facet to compute volume */ - for (unsigned int m = 0; m < this->nFacet; m++) - { - /* Fill auxiliary variables with vertex order on each facet */ - v = orderFacet.row(m); - i = v[0] - 1; - j = v[1] - 1; - k = v[2] - 1; - - xyz1 = xyzVertex.row(i); - xyz2 = xyzVertex.row(j); - xyz3 = xyzVertex.row(k); - - /* Compute two edge vectors and normal to facet */ - e21 = xyz2 - xyz1; - e32 = xyz3 - xyz2; - this->normalFacet.row(m) = e21.cross(e32) / e21.cross(e32).norm(); - - /* Add volume contribution */ - this->volPoly += abs(xyz1.cross(xyz2).transpose()*xyz3)/6; + if (lhs > rhs) { + return ((lhs - rhs) * NANO2SEC); } - - paramsDone = true; - return paramsDone; -} - -///---------------------------------Main Interface----------------------------/// -/*! - @brief Use to compute the field in position pos, given in a body frame. - @param pos_Pfix Position in which the field is to be computed. - @return acc Vector including the computed field. - */ -Eigen::Vector3d Polyhedral::computeField(const Eigen::Vector3d pos_Pfix) -{ - int i, j, k; - Eigen::Vector3d v; - Eigen::Vector3d ri, rj, rk; - Eigen::Vector3d nf; - Eigen::Vector3d r1, r2, re; - Eigen::Vector3d r21, n21; - Eigen::Matrix3d Ee; - - int idx_min; - double a, b, e, Le; - double wy, wx, wf; - - Eigen::Vector3d dUe, dUf, acc; - dUe.setZero(3); - dUf.setZero(3); - - /* Loop through each facet */ - for (unsigned int m = 0; m < this->nFacet; m++){ - /* Fill auxiliary variables with vertex order on each facet */ - v = orderFacet.row(m); - i = v[0] - 1; - j = v[1] - 1; - k = v[2] - 1; - - /* Compute vectors and norm from each vertex to the evaluation position */ - ri = xyzVertex.row(i).transpose() - pos_Pfix; - rj = xyzVertex.row(j).transpose() - pos_Pfix; - rk = xyzVertex.row(k).transpose() - pos_Pfix; - - /* Extract normal to facet */ - nf = this->normalFacet.row(m).transpose(); - - /* Loop through each facet edge */ - for (unsigned int n = 0; n <= 2; n++){ - switch(n){ - case 0: - idx_min = fmin(i,j); - r1 = ri; - r2 = rj; - re = xyzVertex.row(idx_min).transpose() - pos_Pfix; - - a = ri.norm(); - b = rj.norm(); - break; - case 1: - idx_min = fmin(j,k); - r1 = rj; - r2 = rk; - re = xyzVertex.row(idx_min).transpose() - pos_Pfix; - - a = rj.norm(); - b = rk.norm(); - break; - case 2: - idx_min = fmin(i,k); - r1 = rk; - r2 = ri; - re = xyzVertex.row(idx_min).transpose() - pos_Pfix; - - a = rk.norm(); - b = ri.norm(); - break; - } - - - /* Compute along edge vector and norm */ - r21 = r2 - r1; - e = r21.norm(); - n21 = r21.cross(nf) / r21.cross(nf).norm(); - - /* Dimensionless per edge factor */ - Le = log((a+b+e) / (a+b-e)); - - /* Compute dyad product */ - Ee = nf*n21.transpose(); - - /* Add current facet distribution */ - dUe += Ee*re*Le; - } - - /* Compute solid angle for the current facet */ - wy = ri.transpose()*rj.cross(rk); - wx = ri.norm()*rj.norm()*rk.norm() + ri.norm()*rj.transpose()*rk - + rj.norm()*rk.transpose()*ri + rk.norm()*ri.transpose()*rj; - wf = 2*atan2(wy, wx); - - /* Add current solid angle facet */ - dUf += nf*(nf.transpose()*ri)*wf; + else { + return -((rhs - lhs) * NANO2SEC); } - - /* Compute acceleration contribution */ - acc = (this->muBody/this->volPoly)*(-dUe + dUf); - - return acc; -} - -bool Polyhedral::polyReady() -{ - bool polyGood = true; - - polyGood = polyGood && xyzVertex.size() > 0; - polyGood = polyGood && orderFacet.size() > 0; - - return polyGood; -} - -SphericalHarmonics::SphericalHarmonics() -{ - this->radEquator = 0.0; - this->maxDeg = 0; - this->muBody = 0.0; - return; -} - -SphericalHarmonics::~SphericalHarmonics() -{ - return; } +} // namespace -/* -@brief Computes the term (2 - d_l), where d_l is the kronecker delta. -*/ -double SphericalHarmonics::getK(const unsigned int degree) -{ - return ((degree == 0) ? 1.0 : 2.0); -} - -bool SphericalHarmonics::initializeParameters() +GravBodyData::GravBodyData() + : gravityModel{std::make_shared()}, + localPlanet{std::invoke([]() { + SpicePlanetStateMsgPayload payload{}; + m33SetIdentity(payload.J20002Pfix); // Initialize rotation matrix to identity + return payload; + })} { - bool paramsDone = false; - - //! - If coefficients haven't been loaded, quit and return failure - if(cBar.size() == 0 || sBar.size() == 0) - { - return paramsDone; - } - - for(unsigned int i = 0; i <= this->maxDeg + 1; i++) - { - std::vector aRow, n1Row, n2Row; - aRow.resize(i+1, 0.0); - // Diagonal elements of A_bar - if (i == 0) - { - aRow[i] = 1.0; - } - else - { - aRow[i] = sqrt(double((2*i+1)*getK(i))/(2*i*getK(i-1))) * aBar[i-1][i-1]; - } - n1Row.resize(i+1, 0.0); - n2Row.resize(i+1, 0.0); - for (unsigned int m = 0; m <= i; m++) - { - if (i >= m + 2) - { - n1Row[m] = sqrt(double((2*i+1)*(2*i-1))/((i-m)*(i+m))); - n2Row[m] = sqrt(double((i+m-1)*(2*i+1)*(i-m-1))/((i+m)*(i-m)*(2*i-3))); - - } - } - n1.push_back(n1Row); - n2.push_back(n2Row); - aBar.push_back(aRow); - } - - for (unsigned int l = 0; l <= this->maxDeg; l++) // up to _maxDegree-1 - { - std::vector nq1Row, nq2Row; - nq1Row.resize(l+1, 0.0); - nq2Row.resize(l+1, 0.0); - for (unsigned int m = 0; m <= l; m++) - { - if (m < l) - { - nq1Row[m] = sqrt(double((l-m)*getK(m)*(l+m+1))/getK(m+1)); - } - nq2Row[m] = sqrt(double((l+m+2)*(l+m+1)*(2*l+1)*getK(m))/((2*l+3)*getK(m+1))); - } - nQuot1.push_back(nq1Row); - nQuot2.push_back(nq2Row); - } - paramsDone = true; - - return paramsDone; } -///---------------------------------Main Interface----------------------------/// -/*! - @brief Use to compute the field in position pos, given in a body frame. - @param pos_Pfix Position in which the field is to be computed. - @param degree used to compute the field. - @return acc Vector including the computed field. - @param include_zero_degree Boolean that determines whether the zero-degree term is included. - */ -Eigen::Vector3d SphericalHarmonics::computeField(const Eigen::Vector3d pos_Pfix, unsigned int degree, - bool include_zero_degree) +void GravBodyData::initBody(int64_t moduleID) { - double x = pos_Pfix[0]; - double y = pos_Pfix[1]; - double z = pos_Pfix[2]; - double r, s, t, u; - double order; - double rho; - double a1, a2, a3, a4, sum_a1, sum_a2, sum_a3, sum_a4; - std::vector rE, iM, rhol; - Eigen::Vector3d acc; - acc.fill(0.0); - - // Change of variables: direction cosines - r = sqrt(x*x + y*y + z*z); - s = x/r; - t = y/r; - u = z/r; - - // maximum degree! - if (degree > this->maxDeg) - degree = this->maxDeg; - - order = degree; - - for (unsigned int l = 1; l <= degree+1; l++) - { - //Diagonal terms are computed in initialize() - // Low diagonal terms - aBar[l][l-1] = sqrt(double((2*l)*getK(l-1))/getK(l)) * aBar[l][l] * u; - } - - // Lower terms of A_bar - for (unsigned int m = 0; m <= order+1; m++) - { - for(unsigned int l = m + 2; l <= degree+1; l++) - { - aBar[l][m] = u * n1[l][m] * aBar[l-1][m] - n2[l][m] * aBar[l-2][m]; - - } - - // Computation of real and imaginary parts of (2+j*t)^m - if (m == 0) - { - rE.push_back(1.0); - iM.push_back(0.0); - } - else - { - rE.push_back(s * rE[m-1] - t * iM[m-1]); - iM.push_back(s * iM[m-1] + t * rE[m-1]); - } - - + std::optional errorMessage; + if (this->gravityModel) { + this->gravityModel->bskLogger = &bskLogger; + errorMessage = this->gravityModel->initializeParameters(*this); } - - rho = radEquator/r; - rhol.resize(degree+2, 0.0); - rhol[0] = muBody/r; - rhol[1] = rhol[0]*rho; - - - // Degree 0 - - // Gravity field and potential of degree l = 0 - // Gravity components - a1 = 0.0; - a2 = 0.0; - a3 = 0.0; - a4 = 0.0; - - if (include_zero_degree == true) - { - a4 = -rhol[1]/radEquator; // * this->_Nquot_2[0][0] * this->_A_bar[1][1]; //This is 1, so it's not included! + else { + errorMessage = "Gravity model is null"; } - for (unsigned int l = 1; l <= degree; l++) // does not include l = maxDegree - { - rhol[l+1] = rho * rhol[l]; // rho_l computed - - sum_a1 = 0.0; - sum_a2 = 0.0; - sum_a3 = 0.0; - sum_a4 = 0.0; - - for(unsigned int m = 0; m <= l; m++) - { - double D, E, F; - D = cBar[l][m] * rE[m] + sBar[l][m] * iM[m]; - if (m == 0) - { - E = 0.0; - F = 0.0; - } - else - { - E = cBar[l][m] * rE[m-1] + sBar[l][m] * iM[m-1]; - F = sBar[l][m] * rE[m-1] - cBar[l][m] * iM[m-1]; - } - - // if (l < degree) // Gravity contains up to max_degree-1 harmonics - // { - sum_a1 = sum_a1 + m * aBar[l][m] * E; - sum_a2 = sum_a2 + m * aBar[l][m] * F; - if (m < l) - { - sum_a3 = sum_a3 + nQuot1[l][m] * aBar[l][m+1] * D; - } - sum_a4 = sum_a4 + nQuot2[l][m] * aBar[l+1][m+1] * D; - // } - - } - - // if (l < degree) // Gravity contains up to max_degree-1 harmonics - // { - a1 = a1 + rhol[l+1]/radEquator * sum_a1; - a2 = a2 + rhol[l+1]/radEquator * sum_a2; - a3 = a3 + rhol[l+1]/radEquator * sum_a3; - a4 = a4 - rhol[l+1]/radEquator * sum_a4; - // } + if (errorMessage) { + std::string fullMsg = + "Error initializating body '" + this->planetName + "'. " + errorMessage.value(); + this->bskLogger.bskLog(BSK_ERROR, fullMsg.c_str()); } - - acc[0] = a1 + s * a4; - acc[1] = a2 + t * a4; - acc[2] = a3 + u * a4; - - return acc; -} - -bool SphericalHarmonics::harmReady() -{ - bool harmGood = true; - - harmGood = harmGood && cBar.size() > 0; - harmGood = harmGood && sBar.size() > 0; - harmGood = harmGood && aBar.size()> 0; - - return harmGood; -} - -/*--------------------------------------------------------------------------------------------------*/ -// GravBodyData implementation - -/*! - @brief Set parameters for a gravity body - */ -GravBodyData::GravBodyData() -{ - this->usePolyhedral = false; - this->useSphericalHarmParams = false; - this->isCentralBody = false; - this->ephemTime = 0; //!< [s] Ephemeris time for the body in question - this->ephIntTime = 0; //!< [s] Integration time associated with the ephem data - this->spherHarm.maxDeg = 0; - // Default these values to zero just in case they don't get populated - this->localPlanet = this->planetBodyInMsg.zeroMsgPayload; - m33SetIdentity(this->localPlanet.J20002Pfix); - return; -} - -/*! - @brief Destructor. - */ -GravBodyData::~GravBodyData() -{ - -} - -void GravBodyData::initBody(int64_t moduleID) -{ - bool polyFound; - polyFound = this->poly.initializeParameters(); - this->poly.muBody = polyFound ? this->mu : 0; - - bool spherFound; - spherFound = this->spherHarm.initializeParameters(); - this->mu = spherFound ? this->spherHarm.muBody : this->mu; - this->radEquator = spherFound ? this->spherHarm.radEquator : this->radEquator; - - return; } -void GravBodyData::registerProperties(DynParamManager& statesIn) +Eigen::Vector3d GravBodyData::computeGravityInertial(Eigen::Vector3d r_I, uint64_t simTimeNanos) { - if (this->planetName == "") { - this->bskLogger.bskLog(BSK_ERROR, "You must specify a planetary body name in GravBodyData"); + double dt = computeDtInSeconds(simTimeNanos, this->timeWritten); + Eigen::Matrix3d dcm_PfixN = c2DArray2EigenMatrix3d(this->localPlanet.J20002Pfix).transpose(); + if (dcm_PfixN + .isZero()) { // Sanity check for connected messages that do not initialize J20002Pfix + dcm_PfixN = Eigen::Matrix3d::Identity(); } - Eigen::Vector3d stateInit; - stateInit.fill(0.0); - this->r_PN_N = statesIn.createProperty(this->planetName + ".r_PN_N", stateInit); - this->v_PN_N = statesIn.createProperty(this->planetName + ".v_PN_N", stateInit); - - Eigen::MatrixXd muInit(1,1); - muInit.setZero(); - this->muPlanet = statesIn.createProperty(this->planetName + ".mu", muInit); - - this->J20002Pfix = statesIn.createProperty(this->planetName + ".J20002Pfix", - Eigen::Map (&(this->localPlanet.J20002Pfix[0][0]), 3, 3)); - this->J20002Pfix_dot = statesIn.createProperty(this->planetName + ".J20002Pfix_dot", - Eigen::Map (&(this->localPlanet.J20002Pfix_dot[0][0]), 3, 3)); - - return; -} - -/*! - compute the gravitational acceleration - @param r_I inertial position vector - @param simTimeNanos simulation time (ns) - */ -Eigen::Vector3d GravBodyData::computeGravityInertial(Eigen::Vector3d r_I, - uint64_t simTimeNanos) -{ - Eigen::Vector3d gravOut; - - double rMag = r_I.norm(); - gravOut = -r_I*this->mu/(rMag*rMag*rMag); - - /* compute orientation of the body */ - double dt = ((int64_t) simTimeNanos - (int64_t) this->timeWritten)*NANO2SEC; - Eigen::Matrix3d dcm_PfixN = Eigen::Map - (&(this->localPlanet.J20002Pfix[0][0]), 3, 3); - Eigen::Matrix3d dcm_PfixN_dot = Eigen::Map - (&(this->localPlanet.J20002Pfix_dot[0][0]), 3, 3); + Eigen::Matrix3d dcm_PfixN_dot = + c2DArray2EigenMatrix3d(this->localPlanet.J20002Pfix_dot).transpose(); dcm_PfixN += dcm_PfixN_dot * dt; - /* store the current planet orientation and rates */ + // store the current planet orientation and rates *this->J20002Pfix = dcm_PfixN; *this->J20002Pfix_dot = dcm_PfixN_dot; - if(this->spherHarm.harmReady() && this->useSphericalHarmParams) - { - dcm_PfixN.transposeInPlace(); - Eigen::Vector3d r_Pfix = dcm_PfixN*r_I; - Eigen::Vector3d gravPert_Pfix = this->spherHarm.computeField(r_Pfix, - this->spherHarm.maxDeg, false); - gravOut += dcm_PfixN.transpose() * gravPert_Pfix; - } - else if(this->poly.polyReady() && this->usePolyhedral) - { - dcm_PfixN.transposeInPlace(); - Eigen::Vector3d r_Pfix = dcm_PfixN*r_I; - Eigen::Vector3d gravPert_Pfix = this->poly.computeField(r_Pfix); - gravOut = dcm_PfixN.transpose() * gravPert_Pfix; - } - - return(gravOut); -} + // Compute position in the body-fixed reference frame and compute the gravity + Eigen::Matrix3d dcm_NPfix = dcm_PfixN.transpose(); + Eigen::Vector3d r_Pfix = dcm_NPfix * r_I; + Eigen::Vector3d grav_Pfix = this->gravityModel->computeField(r_Pfix); -/*! - compute potential energy - @param r_I inertial position vector - */ -double GravBodyData::computePotentialEnergy(Eigen::Vector3d r_I) -{ - double gravPotentialEnergyOut = -this->mu/r_I.norm(); - return gravPotentialEnergyOut; + return dcm_PfixN * grav_Pfix; } -/*! - load ephemeris information - @param moduleID - */ void GravBodyData::loadEphemeris() { - if(this->planetBodyInMsg.isLinked()){ + if (this->planetBodyInMsg.isLinked()) { this->localPlanet = this->planetBodyInMsg(); this->timeWritten = this->planetBodyInMsg.timeWritten(); - } else { - /* use default zero planet state information, including a zero orientation */ + } + else { + // use default zero planet state information this->localPlanet = this->planetBodyInMsg.zeroMsgPayload; - m33SetIdentity(this->localPlanet.J20002Pfix); this->timeWritten = 0; } - return; } +void GravBodyData::registerProperties(DynParamManager& statesIn) +{ + if (this->planetName == "") { + auto errorMessage = "You must specify a planetary body name in GravBodyData"; + this->bskLogger.bskLog(BSK_ERROR, errorMessage); + throw std::invalid_argument(errorMessage); + } + Eigen::Vector3d stateInit = Eigen::Vector3d::Zero(); + this->r_PN_N = statesIn.createProperty(this->planetName + ".r_PN_N", stateInit); + this->v_PN_N = statesIn.createProperty(this->planetName + ".v_PN_N", stateInit); -/* - GravityEffector - */ -GravityEffector::GravityEffector() -{ - this->centralBody = nullptr; - this->systemTimeCorrPropName = "systemTime"; - this->vehicleGravityPropName = "g_N"; - this->inertialPositionPropName = "r_BN_N"; - this->inertialVelocityPropName = "v_BN_N"; - return; -} + Eigen::MatrixXd muInit = Eigen::MatrixXd::Zero(1, 1); + this->muPlanet = statesIn.createProperty(this->planetName + ".mu", muInit); -GravityEffector::~GravityEffector() -{ - return; + this->J20002Pfix = statesIn.createProperty( + this->planetName + ".J20002Pfix", c2DArray2EigenMatrix3d(this->localPlanet.J20002Pfix)); + this->J20002Pfix_dot = + statesIn.createProperty(this->planetName + ".J20002Pfix_dot", + c2DArray2EigenMatrix3d(this->localPlanet.J20002Pfix_dot)); } - -/*! This method is used to reset the module. - @return void - */ -void GravityEffector::Reset(uint64_t CurrentSimNanos) +void GravityEffector::Reset(uint64_t currentSimNanos) { - //! - reset each gravity body object - std::vector::iterator it; - for(it = this->gravBodies.begin(); it != this->gravBodies.end(); it++) - { - (*it)->initBody(this->moduleID); + // Initializes the bodies + for (auto&& body : this->gravBodies) { + body->initBody(this->moduleID); } } -/*! - update state - @param currentSimNanos - */ void GravityEffector::UpdateState(uint64_t currentSimNanos) { - //! - Updates the grav body planet ephemerides - std::vector::iterator it; - for(it = this->gravBodies.begin(); it != this->gravBodies.end(); it++) - { - (*it)->loadEphemeris(); - if((*it)->isCentralBody){ - this->centralBody = (*it); + // Updates the central body + this->centralBody.reset(); + for (auto&& body : this->gravBodies) { + body->loadEphemeris(); + + if (!body->isCentralBody) continue; + + if (this->centralBody) // A centralBody was already set + { + auto errorMessage = "Specified two central bodies at the same time"; + this->bskLogger.bskLog(BSK_ERROR, errorMessage); + throw std::invalid_argument(errorMessage); + } + else { + this->centralBody = body; } } + this->writeOutputMessages(currentSimNanos); - return; } -/*! - write output message - @param currentSimNanos -*/ void GravityEffector::writeOutputMessages(uint64_t currentSimNanos) { if (this->centralBodyOutMsg.isLinked() && this->centralBody) { - this->centralBodyOutMsg.write(&this->centralBody->localPlanet, this->moduleID, currentSimNanos); + this->centralBodyOutMsg.write(&this->centralBody->localPlanet, this->moduleID, + currentSimNanos); } - return; } void GravityEffector::prependSpacecraftNameToStates() { - this->inertialPositionPropName = this->nameOfSpacecraftAttachedTo + this->inertialPositionPropName; - this->inertialVelocityPropName = this->nameOfSpacecraftAttachedTo + this->inertialVelocityPropName; + this->inertialPositionPropName = + this->nameOfSpacecraftAttachedTo + this->inertialPositionPropName; + this->inertialVelocityPropName = + this->nameOfSpacecraftAttachedTo + this->inertialVelocityPropName; this->vehicleGravityPropName = this->nameOfSpacecraftAttachedTo + this->vehicleGravityPropName; - - return; } -/*! - register properties - @param statesIn simulation states -*/ void GravityEffector::registerProperties(DynParamManager& statesIn) { - Eigen::Vector3d gravInit; - gravInit.fill(0.0); - this->gravProperty = statesIn.createProperty(this->vehicleGravityPropName, gravInit); - this->inertialPositionProperty = statesIn.createProperty(this->inertialPositionPropName, gravInit); - this->inertialVelocityProperty = statesIn.createProperty(this->inertialVelocityPropName, gravInit); - - /* register planet position and velocity state vectors as parameters in the state engine */ - std::vector::iterator it; - for(it = this->gravBodies.begin(); it != this->gravBodies.end(); it++) { - (*it)->registerProperties(statesIn); + static const Eigen::Vector3d zeroVector3d = Eigen::Vector3d::Zero(); + + this->gravProperty = statesIn.createProperty(this->vehicleGravityPropName, zeroVector3d); + this->inertialPositionProperty = + statesIn.createProperty(this->inertialPositionPropName, zeroVector3d); + this->inertialVelocityProperty = + statesIn.createProperty(this->inertialVelocityPropName, zeroVector3d); + + // register planet position and velocity state vectors as parameters in the + // state engine + for (auto&& body : this->gravBodies) { + body->registerProperties(statesIn); } - } void GravityEffector::linkInStates(DynParamManager& statesIn) @@ -658,126 +196,118 @@ void GravityEffector::linkInStates(DynParamManager& statesIn) this->timeCorr = statesIn.getPropertyReference(this->systemTimeCorrPropName); } -/*! - Calculate gravitational acceleration of s/c wrt inertial (no central body) or wrt central body - @param r_cF_N is position of center of mass of s/c wrt frame it is stored/integrated in in spacecraft - @param rDot_cF_N is the derivative of above -*/ void GravityEffector::computeGravityField(Eigen::Vector3d r_cF_N, Eigen::Vector3d rDot_cF_N) { - std::vector::iterator it; - uint64_t systemClock = (uint64_t) this->timeCorr->data()[0]; - Eigen::Vector3d r_cN_N; //position of s/c CoM wrt N - Eigen::Vector3d r_CN_N; //inertial position of central body if there is one. Big C is central body. Little c is CoM of s/c - Eigen::Vector3d r_PN_N; //position of Planet being queried wrt N - Eigen::Vector3d r_cP_N; //position of s/c CoM wrt planet in N - Eigen::Vector3d rDotDot_cF_N; //acceleration of CoM of s/c wrt Frame in which it is stored/integrated in spacecraft - rDotDot_cF_N.fill(0.0); - Eigen::Vector3d rDotDot_cN_N_P; //acceleration of c wrt N in N, due to P - - if (this->centralBody){ //Evaluates true if there is a central body, false otherwise + uint64_t systemClock = (uint64_t)this->timeCorr->data()[0]; + Eigen::Vector3d r_cN_N; // position of s/c CoM wrt N + Eigen::Vector3d r_CN_N; // inertial position of central body if there is one. Big C is + // central body. Little c is CoM of s/c + + if (this->centralBody) // If there is a central body + { r_CN_N = getEulerSteppedGravBodyPosition(this->centralBody); - r_cN_N = r_cF_N + r_CN_N; //shift s/c to be wrt inertial frame origin if it isn't already - }else{ + r_cN_N = r_cF_N + r_CN_N; // shift s/c to be wrt inertial frame origin + // if it isn't already + } + else { r_cN_N = r_cF_N; } - for(it = this->gravBodies.begin(); it != this->gravBodies.end(); it++) - { - r_PN_N = getEulerSteppedGravBodyPosition(*it); - r_cP_N = r_cN_N - r_PN_N; - if(this->centralBody) //Evaluates true if there is a central body, false otherwise + // acceleration of CoM of s/c wrt Frame in which it is stored/integrated in spacecraft + Eigen::Vector3d rDotDot_cF_N = Eigen::Vector3d::Zero(); + + for (auto&& body : this->gravBodies) { + // position of Planet being queried wrt N + Eigen::Vector3d r_PN_N = getEulerSteppedGravBodyPosition(body); + Eigen::Vector3d r_cP_N = r_cN_N - r_PN_N; // position of s/c CoM wrt planet in N + + if (this->centralBody && !body->isCentralBody) // If there is a central body, and its not + // 'body' { - if(this->centralBody != (*it)) - { - rDotDot_cF_N += (*it)->computeGravityInertial(r_PN_N - r_CN_N, systemClock); //subtract accel of central body due to other bodies to get RELATIVE accel of s/c. See Vallado on "Three-body and n-body Equations" - } + // Subtract accel of central body due to other bodies to get + // RELATIVE accel of s/c. See Vallado on "Three-body and n-body + // Equations" + rDotDot_cF_N += body->computeGravityInertial(r_PN_N - r_CN_N, systemClock); } - rDotDot_cN_N_P = (*it)->computeGravityInertial(r_cP_N, systemClock); //acc of s/c wrt N CoM in Frame used for s/c dynamics - rDotDot_cF_N += rDotDot_cN_N_P; + // acceleration of c wrt N in N, due to P + rDotDot_cF_N += body->computeGravityInertial(r_cP_N, systemClock); - /* store planet states in the state engine parameters */ - *((*it)->r_PN_N) = r_PN_N; - *((*it)->v_PN_N) = Eigen::Map(&((*it)->localPlanet.VelocityVector[0]), 3, 1); - (*((*it)->muPlanet))(0,0) = (*it)->mu; + // store planet states in the state engine parameters + *(body->r_PN_N) = r_PN_N; + *(body->v_PN_N) = cArray2EigenVector3d(body->localPlanet.VelocityVector); + (*(body->muPlanet))(0, 0) = body->mu; } *this->gravProperty = rDotDot_cF_N; } -/*! - Calculate gravitational acceleration of s/c wrt inertial (no central body) or wrt central body - @param r_BF_N is position of body frame of s/c wrt frame it is stored/integrated in in spacecraft - @param rDot_BF_N is the derivative of above - */ + void GravityEffector::updateInertialPosAndVel(Eigen::Vector3d r_BF_N, Eigen::Vector3d rDot_BF_N) { - // Here we add the central body inertial position and velocities to the central-body-relative - // position and velicities which are propogated relative to the central body - if(this->centralBody) //Evaluates true if there is a central body, false otherwise + // Here we add the central body inertial position and velocities to the + // central-body-relative position and velicities which are propogated + // relative to the central body + if (this->centralBody) // If there is a central body { Eigen::Vector3d r_CN_N = getEulerSteppedGravBodyPosition(this->centralBody); *this->inertialPositionProperty = r_CN_N + r_BF_N; - *this->inertialVelocityProperty = Eigen::Map(&(this->centralBody->localPlanet.VelocityVector[0]), 3, 1) + rDot_BF_N; - } else { + *this->inertialVelocityProperty = + cArray2EigenMatrixXd(this->centralBody->localPlanet.VelocityVector, 3, 1) + rDot_BF_N; + } + else { *this->inertialPositionProperty = r_BF_N; *this->inertialVelocityProperty = rDot_BF_N; } } -/*! - compute planet position with Euler integration - @param bodyData planet data - */ -Eigen::Vector3d GravityEffector::getEulerSteppedGravBodyPosition(GravBodyData *bodyData) + +Eigen::Vector3d +GravityEffector::getEulerSteppedGravBodyPosition(std::shared_ptr bodyData) { - uint64_t systemClock = (uint64_t) this->timeCorr->data()[0]; - double dt = ((int64_t)(systemClock - bodyData->timeWritten))*NANO2SEC; - Eigen::Vector3d r_PN_N = Eigen::Map - (&(bodyData->localPlanet.PositionVector[0]), 3, 1); - r_PN_N += Eigen::Map - (&(bodyData->localPlanet.VelocityVector[0]), 3, 1)*dt; + uint64_t systemClock = (uint64_t)this->timeCorr->data()[0]; + double dt = computeDtInSeconds(systemClock, bodyData->timeWritten); + Eigen::Vector3d r_PN_N = cArray2EigenVector3d(bodyData->localPlanet.PositionVector); + r_PN_N += cArray2EigenVector3d(bodyData->localPlanet.VelocityVector) * dt; return r_PN_N; } -void GravityEffector::updateEnergyContributions(Eigen::Vector3d r_cF_N, double & orbPotEnergyContr) +void GravityEffector::updateEnergyContributions(Eigen::Vector3d r_cF_N, double& orbPotEnergyContr) { - Eigen::Vector3d r_CN_N; // C is central body. position of C wrt N in N - Eigen::Vector3d r_PN_N; // P is planet being queried. position of planet wrt N in N - Eigen::Vector3d r_cP_N; // c is s/c CoM. position of c wrt P in N - Eigen::Vector3d r_cN_N; // position c wrt N in N + Eigen::Vector3d r_CN_N; // C is central body. position of C wrt N in N + Eigen::Vector3d r_cN_N; // position c wrt N in N - if(this->centralBody){ //Evaluates true if there is a central body, false otherwise + if (this->centralBody) { // Evaluates true if there is a central body, false + // otherwise r_CN_N = getEulerSteppedGravBodyPosition(this->centralBody); - r_cN_N = r_cF_N + r_CN_N; //shift s/c to be wrt inertial frame origin if it isn't already - }else{ + r_cN_N = r_cF_N + r_CN_N; // shift s/c to be wrt inertial frame origin + // if it isn't already + } + else { r_cN_N = r_cF_N; } - std::vector::iterator it; - for(it = this->gravBodies.begin(); it != this->gravBodies.end(); it++) - { - r_PN_N = getEulerSteppedGravBodyPosition(*it); - r_cP_N = r_cN_N - r_PN_N; + for (auto&& body : this->gravBodies) { + // P is planet being queried. position of planet wrt N in N + Eigen::Vector3d r_PN_N = getEulerSteppedGravBodyPosition(body); + // c is s/c CoM. position of c wrt P in N + Eigen::Vector3d r_cP_N = r_cN_N - r_PN_N; - if(this->centralBody) //Evaluates true if there is a central body, false otherwise + if (this->centralBody && !body->isCentralBody) // If there is a central body and it's not + // 'body' { - if(this->centralBody != (*it)) - { - orbPotEnergyContr += (*it)->computePotentialEnergy(r_PN_N - r_CN_N); //potential of central body w/in current planet field. leads to relative potential energy solution - } + // potential of central body w/in current planet field. leads to + // relative potential energy solution + orbPotEnergyContr += body->gravityModel->computePotentialEnergy(r_PN_N - r_CN_N); } - orbPotEnergyContr = (*it)->computePotentialEnergy(r_cP_N); //Potential w/in current planet field + orbPotEnergyContr = body->gravityModel->computePotentialEnergy( + r_cP_N); // Potential w/in current planet field } - return; } -void GravityEffector::setGravBodies(std::vector gravBodies) +void GravityEffector::setGravBodies(std::vector> gravBodies) { - this->gravBodies = gravBodies; - return; + this->gravBodies = std::move(gravBodies); } -void GravityEffector::addGravBody(GravBodyData* gravBody) +void GravityEffector::addGravBody(std::shared_ptr gravBody) { this->gravBodies.push_back(gravBody); - return; } diff --git a/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.h b/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.h index ae26403fac..e55a9d90e9 100644 --- a/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.h +++ b/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.h @@ -17,7 +17,6 @@ */ - #ifndef GRAVITY_DYN_EFFECTOR_H #define GRAVITY_DYN_EFFECTOR_H @@ -28,148 +27,160 @@ #include "architecture/msgPayloadDefC/SpicePlanetStateMsgPayload.h" #include "architecture/utilities/bskLogging.h" #include "architecture/messaging/messaging.h" - -/*! @brief poyhedral class */ -class Polyhedral +#include +#include "gravityModel.h" +#include "pointMassGravityModel.h" +#include "architecture/utilities/avsEigenSupport.h" + +/** Container for gravitational body data + * + * This class is designed to hold all of the information for a gravity + * body. The nominal use-case has it initialized at the python level and + * attached to dynamics using the AddGravityBody method. + */ +class GravBodyData { public: - unsigned int nVertex; //!< [-] Number of vertexes - unsigned int nFacet; //!< [-] Number of facets - - double volPoly; //!< [-] Volume of the polyhedral - double muBody; //!< [-] Gravitation parameter for the planet - - Eigen::MatrixXd xyzVertex; //!< [m] Position of vertex - Eigen::MatrixXd orderFacet; //!< [-] Vertexes of a facet + friend class GravityEffector; - Eigen::MatrixXd normalFacet; //!< [-] Normal of a facet + /** Initializes `localPlanet` to zero except for `localPlanet.J20002Pfix`, which + * is initialized to the identity matrix. Additionally, initializes `gravityModel` + * to a `PointMassGravityModel`. + */ + GravBodyData(); - BSKLogger bskLogger; //!< -- BSK Logging + /** Initializes the gravityModel, logging and raising an error if + * the initialization fails. + */ + void initBody(int64_t moduleID); -public: + /** Computes the gravitational acceleration + * + * @param r_I inertial position vector + * @param simTimeNanos simulation time (ns) + */ + Eigen::Vector3d computeGravityInertial(Eigen::Vector3d r_I, uint64_t simTimeNanos); - Polyhedral(); - ~Polyhedral(); - bool initializeParameters(); //!< [-] configure polyhedral based on inputs - Eigen::Vector3d computeField(const Eigen::Vector3d pos_Pfix); - bool polyReady(); //!< class variable -}; + /** Read the ephemeris data from planetBodyInMsg if it's linked. + * Otherwise, zeros `this->localPlanet`. + */ + void loadEphemeris(); + + /** Creates the following properies in the given statesIn object. + * + * - [planetName].r_PN_N + * - [planetName].v_PN_N + * - [planetName].mu + * - [planetName].J20002Pfix + * - [planetName].J20002Pfix_dot + * + * vr_PN_N`, `v_PN_N`, and `mu` are initialized to zero, while `J20002Pfix` and `J20002Pfix_dot` + * are initialized to the values stored in `this->localPlanet`. This usually means that + * `J20002Pfix` is initialized to the identity matrix and `J20002Pfix_dot` to zero. + */ + void registerProperties(DynParamManager &statesIn); -/*! @brief spherical harmonics class */ -class SphericalHarmonics -{ public: - unsigned int maxDeg; //!< [-] Maximum degree of the spherical harmonics - double radEquator; //!< [-] Reference radius for the planet - double muBody; //!< [-] Gravitation parameter for the planet - - std::vector> cBar; //!< [-] C coefficient set - std::vector> sBar; //!< [-] S coefficient set - std::vector> aBar; //!< [-] Normalized 'derived' Assoc. Legendre - std::vector> n1; //!< [-] What am I - std::vector> n2; //!< [-] What am I - std::vector> nQuot1;//!< [-] What am I - std::vector> nQuot2;//!< [-] What am I - - BSKLogger bskLogger; //!< -- BSK Logging + bool isCentralBody = false; /**< Flag indicating that object is center */ -public: + std::shared_ptr gravityModel; /**< Model used to compute the gravity of the object */ - SphericalHarmonics(); - ~SphericalHarmonics(); - bool initializeParameters(); //!< [-] configure all spher-harm based on inputs - double getK(const unsigned int degree); //!< class method - Eigen::Vector3d computeField(const Eigen::Vector3d pos_Pfix, unsigned int degree, - bool include_zero_degree); - bool harmReady(); //!< class variable - -}; + double mu = 0; /**< [m3/s^2] central body gravitational param */ + double radEquator = 0; /**< [m] Equatorial radius for the body */ + double radiusRatio = 1; /**< [] ratio of polar over equatorial radius */ + std::string planetName = ""; /**< Gravitational body name, this is used as the Spice name if spiceInterface is used */ + std::string displayName = ""; /**< This is the name that is displayed in Vizard. If not set, Vizard shows planetName */ + std::string modelDictionaryKey = ""; /**< "" will result in using the current default for the celestial body's given name, otherwise key will be matched if possible to available model in internal model dictionary */ -//!@brief Container for gravitational body data -/*! This class is designed to hold all of the information for a gravity - body. The nominal use-case has it initialized at the python level and - attached to dynamics using the AddGravityBody method. + ReadFunctor planetBodyInMsg; /**< planet spice ephemeris input message */ + SpicePlanetStateMsgPayload localPlanet; /**< [-] Class storage of ephemeris info from scheduled portion */ - */ -class GravBodyData -{ -public: - // Default constructor - GravBodyData(); - ~GravBodyData(); + BSKLogger bskLogger; /**< -- BSK Logging */ - void initBody(int64_t moduleID); //!< Method to initialize the gravity body - Eigen::Vector3d computeGravityInertial(Eigen::Vector3d r_I, uint64_t simTimeNanos); - double computePotentialEnergy(Eigen::Vector3d r_I); - void loadEphemeris(); //!< Command to load the ephemeris data - void registerProperties(DynParamManager& statesIn); //!< class method - ReadFunctor planetBodyInMsg; //!< planet spice ephemeris input message - -public: - bool isCentralBody=0; //!< Flag indicating that object is center - bool usePolyhedral=0; //!< Flag indicating to use polyhedral model - bool useSphericalHarmParams=0; //!< Flag indicating to use spherical harmonics perturbations - - double mu=0; //!< [m3/s^2] central body gravitational param - double ephemTime; //!< [s] Ephemeris time for the body in question - double ephIntTime; //!< [s] Integration time associated with the ephem data - double radEquator=0; //!< [m] Equatorial radius for the body - double radiusRatio=0; //!< [] ratio of polar over equatorial radius - SpicePlanetStateMsgPayload localPlanet = {}; //!< [-] Class storage of ephemeris info from scheduled portion - uint64_t timeWritten = 0; //!< [ns] time the input planet state message was written - std::string planetName=""; //!< Gravitational body name, this is used as the Spice name if spiceInterface is used - std::string displayName=""; //!< this is the name that is displayed in Vizard. If not set, Vizard shows planetName - std::string modelDictionaryKey = ""; //!< "" will result in using the current default for the celestial body's given name, otherwise key will be matched if possible to available model in internal model dictionary - - Polyhedral poly; //!< Object that computes the polyhedral gravity field - SphericalHarmonics spherHarm; //!< Object that computes the spherical harmonics gravity field - BSKLogger bskLogger; //!< -- BSK Logging - Eigen::MatrixXd *r_PN_N; //!< [m] (state engine property) planet inertial position vector - Eigen::MatrixXd *v_PN_N; //!< [m/s] (state engine property) planet inertial velocity vector - Eigen::MatrixXd *muPlanet; //!< [m/s] (state engine property) planet inertial velocity vector - Eigen::MatrixXd *J20002Pfix; //!< [m/s] (state engine property) planet attitude [PN] - Eigen::MatrixXd *J20002Pfix_dot;//!< [m/s] (state engine property) planet attitude rate [PN_dot] +private: + Eigen::MatrixXd *r_PN_N; /**< [m] (state engine property) planet inertial position vector */ + Eigen::MatrixXd *v_PN_N; /**< [m/s] (state engine property) planet inertial velocity vector */ + Eigen::MatrixXd *muPlanet; /**< [m/s] (state engine property) planet inertial velocity vector */ + Eigen::MatrixXd *J20002Pfix; /**< [m/s] (state engine property) planet attitude [PN] */ + Eigen::MatrixXd *J20002Pfix_dot; /**< [m/s] (state engine property) planet attitude rate [PN_dot] */ + uint64_t timeWritten = 0; /**< [ns] time the input planet state message was written */ }; - /*! @brief gravity effector class */ -class GravityEffector : public SysModel { +class GravityEffector : public SysModel +{ public: - GravityEffector(); - ~GravityEffector(); - void Reset(uint64_t CurrentSimNanos); - void UpdateState(uint64_t CurrentSimNanos); - void linkInStates(DynParamManager& statesIn); //!< class method - void registerProperties(DynParamManager& statesIn); + /** Initializes every `GravBodyData` associated with this `GravityEffector` */ + void Reset(uint64_t currentSimNanos); + + /** Updates the central body, loads the ephemeris data for every `GravBodyData`, + * and writes the output messages. */ + void UpdateState(uint64_t currentSimNanos); + + /** Links the correlation between times property */ + void linkInStates(DynParamManager &statesIn); + + /** Registers the gravity, inertial position, and inertial velocity properties. + * It also calls `registerProperties` for every associated `GravBodyData`. + */ + void registerProperties(DynParamManager &statesIn); + + /** Calculate gravitational acceleration of s/c wrt inertial (no central body) or wrt central body + * + * @param r_cF_N is position of center of mass of s/c wrt frame + * @param rDot_cF_N is the derivative of above + */ void computeGravityField(Eigen::Vector3d r_cF_N, Eigen::Vector3d rDot_cF_N); + + /** Updates the inertial position and velocity properties */ void updateInertialPosAndVel(Eigen::Vector3d r_BF_N, Eigen::Vector3d rDot_BF_N); - void updateEnergyContributions(Eigen::Vector3d r_CN_N, double & orbPotEnergyContr); //!< -- Orbital Potential Energy Contributions - void setGravBodies(std::vector gravBodies); //!< class method - void addGravBody(GravBodyData* gravBody); //!< class method - void prependSpacecraftNameToStates(); //!< class method - + + /** Computes the Potential Energy Contributions from every associated `GravBodyData` */ + void updateEnergyContributions(Eigen::Vector3d r_CN_N, double &orbPotEnergyContr); + + /** Sets the `GravBodyData` associated with this effector */ + void setGravBodies(std::vector> gravBodies); + + /** Adds a `GravBodyData` associated with this effector */ + void addGravBody(std::shared_ptr gravBody); + + /** Called to modify property names to prepend them by the string stored in nameOfSpacecraftAttachedTo + * + * This can be used to make property names unique between different `GravityEffector` in a simulation + * with multiple dynamic objects. + */ + void prependSpacecraftNameToStates(); + private: - Eigen::Vector3d getEulerSteppedGravBodyPosition(GravBodyData *bodyData); //!< class method - void writeOutputMessages(uint64_t currentSimNanos); //!< class method + /** + Compute planet position with Euler integration + @param bodyData planet data + */ + Eigen::Vector3d getEulerSteppedGravBodyPosition(std::shared_ptr bodyData); + + /** Writes to centralBodyOutMsg if it is linked and there is a central body */ + void writeOutputMessages(uint64_t currentSimNanos); public: - std::string vehicleGravityPropName; //!< [-] Name of the vehicle mass state - std::string systemTimeCorrPropName; //!< [-] Name of the correlation between times - std::vector gravBodies; //!< [-] Vector of bodies we feel gravity from - GravBodyData* centralBody; //!< Central body - std::string inertialPositionPropName; //!< [-] Name of the inertial position property - std::string inertialVelocityPropName; //!< [-] Name of the inertial velocity property - std::string nameOfSpacecraftAttachedTo; //!< [-] Name of the s/c this gravity model is attached to - BSKLogger bskLogger; //!< -- BSK Logging - Message centralBodyOutMsg; //!< central planet body state output message + std::vector> gravBodies; /**< [-] Vector of bodies we feel gravity from */ + std::shared_ptr centralBody; /**< Central body */ -private: - Eigen::MatrixXd *gravProperty; //!< [-] g_N property for output - Eigen::MatrixXd *timeCorr; //!< [-] Time correlation property - Eigen::MatrixXd *inertialPositionProperty; //!< [m] r_N inertial position relative to system spice zeroBase/refBase coordinate frame, property for output. - Eigen::MatrixXd *inertialVelocityProperty; //!< [m/s] v_N inertial velocity relative to system spice zeroBase/refBase coordinate frame, property for output. + std::string vehicleGravityPropName = "g_N"; /**< [-] Name of the vehicle gravity acceleration property */ + std::string systemTimeCorrPropName = "systemTime"; /**< [-] Name of the correlation between times */ + std::string inertialPositionPropName = "r_BN_N"; /**< [-] Name of the inertial position property */ + std::string inertialVelocityPropName = "v_BN_N"; /**< [-] Name of the inertial velocity property */ + std::string nameOfSpacecraftAttachedTo = ""; /**< [-] Name of the s/c this gravity model is attached to */ + + Message centralBodyOutMsg; /**< central planet body state output message */ + BSKLogger bskLogger; /**< -- BSK Logging */ + +private: + Eigen::MatrixXd *gravProperty; /**< [-] g_N property for output */ + Eigen::MatrixXd *timeCorr; /**< [-] Time correlation property */ + Eigen::MatrixXd *inertialPositionProperty; /**< [m] r_N inertial position relative to system spice zeroBase/refBase coordinate frame, property for output. */ + Eigen::MatrixXd *inertialVelocityProperty; /**< [m/s] v_N inertial velocity relative to system spice zeroBase/refBase coordinate frame, property for output. */ }; #endif /* GRAVITY_EFFECTOR_H */ diff --git a/src/simulation/dynamics/gravityEffector/gravityEffector.i b/src/simulation/dynamics/gravityEffector/gravityEffector.i index 3fbbcc65b1..67baa1d44e 100644 --- a/src/simulation/dynamics/gravityEffector/gravityEffector.i +++ b/src/simulation/dynamics/gravityEffector/gravityEffector.i @@ -17,37 +17,182 @@ */ -%module gravityEffector +%module(package="Basilisk.simulation") gravityEffector %{ #include "simulation/dynamics/_GeneralModuleFiles/gravityEffector.h" %} %pythoncode %{ from Basilisk.architecture.swig_common_model import * + +from Basilisk.simulation.pointMassGravityModel import PointMassGravityModel +from Basilisk.simulation.polyhedralGravityModel import PolyhedralGravityModel +from Basilisk.simulation.sphericalHarmonicsGravityModel import SphericalHarmonicsGravityModel + +from Basilisk.utilities import deprecated + +Polyhedral = PolyhedralGravityModel +SphericalHarmonics = SphericalHarmonicsGravityModel + +from typing import Optional, Union + %} + %include "std_string.i" %include "swig_eigen.i" %include "swig_conly_data.i" +%include +%shared_ptr(GravBodyData) + +%include "std_vector.i" +%template(GravBodyVector) std::vector>; + +// The central body should be changed by changing the isCentralBody flag +// in GravBodyData +%immutable GravityEffector::centralBody; +%immutable GravityEffector::vehicleGravityPropName; +%immutable GravityEffector::systemTimeCorrPropName; +%immutable GravityEffector::inertialPositionPropName; +%immutable GravityEffector::inertialVelocityPropName; +%immutable GravityEffector::nameOfSpacecraftAttachedTo; + +// Methods that users do not need / should not be calling +%ignore GravityEffector::updateInertialPosAndVel; +%ignore GravityEffector::updateEnergyContributions; +%ignore GravityEffector::prependSpacecraftNameToStates; + +%pythonappend GravBodyData::GravBodyData() %{ + object.__setattr__(self, "_pyGravityModel", None) # Enable setting _pyGravityModel + self.gravityModel = PointMassGravityModel() # Re-set gravityModel to populate the _pyGravityModel%} + +%import "simulation/dynamics/gravityEffector/gravityModel.i" + %include "simulation/dynamics/_GeneralModuleFiles/dynamicEffector.h" %include "simulation/dynamics/_GeneralModuleFiles/stateData.h" %include "sys_model.i" #pragma SWIG nowarn=362 %include "simulation/dynamics/_GeneralModuleFiles/gravityEffector.h" -%include "std_vector.i" - -namespace std { - %template(GravBodyVector) vector; -} - %include "architecture/msgPayloadDefC/SpicePlanetStateMsgPayload.h" struct SpicePlanetStateMsg_C; +%extend GravBodyData { + %pythoncode %{ + + """ + If we were to call GravBodyData::gravityModel we would obtain a pointer to the + parent object GravityModel, as this is what is stored in the GravBodyData C++ + class (the concrete type is "lost"). To overcome this, we store a copy of the + set object in _pyGravityModel and use the gravityModel property to keep the + Python and C++ objects synchronized. _pyGravityModel does retain the concrete + type (PointMassGravityModel, SphericalHarmonicsGravityModel...) + """ + _gravityModel = gravityModel + @property + def gravityModel(self): + return self._pyGravityModel + + @gravityModel.setter + def gravityModel(self, value): + self._gravityModel = value + self._pyGravityModel = value + + @property + def useSphericalHarmParams(self): + return isinstance(self.gravityModel, SphericalHarmonicsGravityModel) + + @useSphericalHarmParams.setter + def useSphericalHarmParams(self, value: bool): + deprecated.deprecationWarn( + "GravBodyData.useSphericalHarmParams setter", + "2024/09/07", + "Using 'useSphericalHarmParams = True/False' to turn on/off the spherical harmonics" + " is deprecated. Prefer the following syntax:\n" + "\tplanet.useSphericalHarmonicsGravityModel('GGM2BData.txt', 100)\n" + "Over:\n" + "\tplanet.useSphericalHarmParams = True\n" + "\tsimIncludeGravBody.loadGravFromFile('GGM2BData.txt', planet.spherHarm, 100)" + ) + if self.useSphericalHarmParams and not value: + self.gravityModel = PointMassGravityModel() + elif not self.useSphericalHarmParams and value: + self.gravityModel = SphericalHarmonicsGravityModel() + + @property + def usePolyhedral(self): + return isinstance(self.gravityModel, PolyhedralGravityModel) + + @usePolyhedral.setter + def usePolyhedral(self, value: bool): + deprecated.deprecationWarn( + "GravBodyData.usePolyhedral setter", + "2024/09/07", + "Using 'usePolyhedral = True/False' to turn on/off the polyhedral model" + " is deprecated. Prefer the following syntax:\n" + "\tplanet.usePolyhedralGravityModel('eros.txt')\n" + "Over:\n" + "\tplanet.usePolyhedral = True\n" + "\tsimIncludeGravBody.loadPolyFromFile('eros.txt', planet.poly)" + ) + if self.usePolyhedral and not value: + self.gravityModel = PointMassGravityModel() + elif not self.usePolyhedral and value: + self.gravityModel = PolyhedralGravityModel() + + @property + def spherHarm(self) -> SphericalHarmonicsGravityModel: + if self.useSphericalHarmParams: + return self.gravityModel + else: + raise ValueError("GravBodyData is not using spherical harmonics as a gravity model. " + "Call 'useSphericalHarmonicsGravityModel(...)' or set 'useSphericalHarmParams' to 'True' before retrieving 'spherHarm'.") + + @spherHarm.setter + def spherHarm(self, value: SphericalHarmonicsGravityModel): + self.gravityModel = value + + @property + def poly(self) -> PolyhedralGravityModel: + if self.usePolyhedral: + return self.gravityModel + else: + raise ValueError("GravBodyData is not using the polyhedral gravity model. " + "Call 'usePolyhedralGravityModel(...)' or set 'usePolyhedral' to 'True' before retrieving 'poly'.") + + @poly.setter + def poly(self, value: PolyhedralGravityModel): + self.gravityModel = value + + def usePointMassGravityModel(self): + self.gravityModel = PointMassGravityModel() + + def useSphericalHarmonicsGravityModel(self, file: str, maxDeg: int): + """Makes the GravBodyData use Spherical Harmonics as its gravity model. + + Args: + file (str): The file that contains the spherical harmonics data in the + JPL format. + maxDeg (int): The maximum degree to use in the spherical harmonics. + """ + self.gravityModel = SphericalHarmonicsGravityModel().loadFromFile(file, maxDeg) + + def usePolyhedralGravityModel(self, file: str): + """Makes the GravBodyData use the Polyhedral gravity model. + + Args: + file (str): The file that contains the vertices and facet + data for the polyhedral. + """ + self.gravityModel = PolyhedralGravityModel().loadFromFile(file) + + %} +} %pythoncode %{ import sys -protectAllClasses(sys.modules[__name__]) +protectAllClasses(sys.modules[__name__]) %} -%pythoncode "gravCoeffOps.py" +%pythoncode "simulation/dynamics/gravityEffector/gravCoeffOps.py" + From 535e3e08e5b7387051337b85e124f4b21877df83 Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:10:00 -0800 Subject: [PATCH 06/13] Remove duplicate code and add sanity checks --- .../dynamics/gravityEffector/gravCoeffOps.py | 164 +++++------------- 1 file changed, 48 insertions(+), 116 deletions(-) diff --git a/src/simulation/dynamics/gravityEffector/gravCoeffOps.py b/src/simulation/dynamics/gravityEffector/gravCoeffOps.py index 44df682b40..99feb26a25 100755 --- a/src/simulation/dynamics/gravityEffector/gravCoeffOps.py +++ b/src/simulation/dynamics/gravityEffector/gravCoeffOps.py @@ -16,53 +16,56 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # import csv -from Basilisk.architecture import sim_model -def loadGravFromFile(fileName, spherHarm, maxDeg=2): +from Basilisk import __path__ - with open(fileName, 'r') as csvfile: - gravReader = csv.reader(csvfile, delimiter=',') - firstRow = next(gravReader) - clmList = [] - slmList = [] - try: - valCurr = int(firstRow[0]) - except ValueError: - spherHarm.muBody = float(firstRow[1]) - spherHarm.radEquator = float(firstRow[0]) +def loadGravFromFile( + fileName: str, + spherHarm: "SphericalHarmonicsGravityModel", + maxDeg: int = 2 + ): - clmRow = [] - slmRow = [] - currDeg = 0 - for gravRow in gravReader: - while int(gravRow[0]) > currDeg: - if( len(clmRow) < currDeg+1): - clmRow.extend([0.0]*(currDeg+1 - len(clmRow))) - slmRow.extend([0.0]*(currDeg+1 - len(slmRow))) - clmList.append(clmRow) - slmList.append(slmRow) - clmRow = [] - slmRow = [] - currDeg += 1 - clmRow.append(float(gravRow[2])) - slmRow.append(float(gravRow[3])) - - spherHarm.cBar = sim_model.MultiArray(clmList) - spherHarm.sBar = sim_model.MultiArray(slmList) - spherHarm.maxDeg = maxDeg - - -def loadGravFromFileToList(fileName, maxDeg=2): + [clmList, slmList, mu, radEquator] = loadGravFromFileToList(fileName, maxDeg=2) + + spherHarm.muBody = mu + spherHarm.radEquator = radEquator + spherHarm.cBar = clmList + spherHarm.sBar = slmList + spherHarm.maxDeg = maxDeg + +def loadGravFromFileToList(fileName: str, maxDeg: int = 2): with open(fileName, 'r') as csvfile: gravReader = csv.reader(csvfile, delimiter=',') firstRow = next(gravReader) clmList = [] slmList = [] + try: - valCurr = int(firstRow[0]) - except ValueError: - mu = float(firstRow[1]) radEquator = float(firstRow[0]) + mu = float(firstRow[1]) + # firstRow[2] is uncertainty in mu, not needed for Basilisk + maxDegreeFile = int(firstRow[3]) + maxOrderFile = int(firstRow[4]) + coefficientsNormalized = int(firstRow[5]) == 1 + refLong = float(firstRow[6]) + refLat = float(firstRow[7]) + except Exception as ex: + raise ValueError("File is not in the expected JPL format for " + "spherical Harmonics", ex) + + if maxDegreeFile < maxDeg or maxOrderFile < maxDeg: + raise ValueError(f"Requested using Spherical Harmonics of degree {maxDeg}" + f", but file '{fileName}' has maximum degree/order of" + f"{min(maxDegreeFile, maxOrderFile)}") + + if not coefficientsNormalized: + raise ValueError("Coefficients in given file are not normalized. This is " + "not currently supported in Basilisk.") + + if refLong != 0 or refLat != 0: + raise ValueError("Coefficients in given file use a reference longitude" + " or latitude that is not zero. This is not currently " + "supported in Basilisk.") clmRow = [] slmRow = [] @@ -83,86 +86,12 @@ def loadGravFromFileToList(fileName, maxDeg=2): return [clmList, slmList, mu, radEquator] -def loadPolyFromFile(fileName, poly): - with open(fileName) as polyFile: - if fileName.endswith('.tab'): - try: - nVertex, nFacet = [int(x) for x in next(polyFile).split()] # read first line - fileType = 'gaskell' - except: - polyFile.seek(0) - fileType = 'pds3' - - vertList = [] - faceList = [] - if fileType == 'gaskell': - contLines = 0 - for line in polyFile: - arrtemp = [] - - for x in line.split(): - arrtemp.append(float(x)) - - if contLines < nVertex: - vertList.append([float(arrtemp[1]*1e3),float(arrtemp[2]*1e3),float(arrtemp[3]*1e3)]) - else: - faceList.append([int(arrtemp[1]),int(arrtemp[2]),int(arrtemp[3])]) - - contLines += 1 - elif fileType == 'pds3': - nVertex = 0 - nFacet = 0 - vertList = [] - faceList = [] - for line in polyFile: - arrtemp = line.split() - if arrtemp: - if arrtemp[0] == 'v': - nVertex += 1 - vertList.append([float(arrtemp[1])*1e3, float(arrtemp[2])*1e3, float(arrtemp[3])*1e3]) - elif arrtemp[0] == 'f': - nFacet += 1 - faceList.append([int(arrtemp[1])+1, int(arrtemp[2])+1, int(arrtemp[3])+1]) - elif fileName.endswith('.obj'): - nVertex = 0 - nFacet = 0 - vertList = [] - faceList = [] - for line in polyFile: - arrtemp = line.split() - if arrtemp: - if arrtemp[0] == 'v': - nVertex += 1 - vertList.append([float(arrtemp[1])*1e3, float(arrtemp[2])*1e3, float(arrtemp[3])*1e3]) - elif arrtemp[0] == 'f': - nFacet += 1 - faceList.append([int(arrtemp[1]), int(arrtemp[2]), int(arrtemp[3])]) - elif fileName.endswith('.txt'): - nVertex, nFacet = [int(x) for x in next(polyFile).split()] # read first line - vertList = [] - faceList = [] - - contLines = 0 - for line in polyFile: - arrtemp = [] - - for x in line.split(): - arrtemp.append(float(x)) - - if contLines < nVertex: - vertList.append([float(arrtemp[0]*1e3),float(arrtemp[1]*1e3),float(arrtemp[2]*1e3)]) - else: - faceList.append([int(arrtemp[0]),int(arrtemp[1]),int(arrtemp[2])]) - - contLines += 1 - - poly.nVertex = nVertex - poly.nFacet = nFacet - poly.xyzVertex = vertList - poly.orderFacet = faceList - +def loadPolyFromFile(fileName: str, poly: "PolyhedralGravityModel"): + [vertList, faceList, _, _] = loadPolyFromFileToList(fileName) + poly.xyzVertex = vertList + poly.orderFacet = faceList -def loadPolyFromFileToList(fileName): +def loadPolyFromFileToList(fileName: str): with open(fileName) as polyFile: if fileName.endswith('.tab'): try: @@ -235,5 +164,8 @@ def loadPolyFromFileToList(fileName): faceList.append([int(arrtemp[0]),int(arrtemp[1]),int(arrtemp[2])]) contLines += 1 + else: + raise ValueError("Unrecognized file extension. Valid extensions are " + "'.tab', '.obj', and '.txt'") return [vertList, faceList, nVertex, nFacet] From d239a2670f7f652c16ccec2e326164ccdcba7221 Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:10:23 -0800 Subject: [PATCH 07/13] Update dynamic object for new grav effector SWIG --- src/simulation/dynamics/spacecraft/spacecraft.i | 8 ++------ .../dynamics/spacecraftSystem/spacecraftSystem.i | 9 ++------- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/simulation/dynamics/spacecraft/spacecraft.i b/src/simulation/dynamics/spacecraft/spacecraft.i index 087dfc8fd0..91ca5dc173 100755 --- a/src/simulation/dynamics/spacecraft/spacecraft.i +++ b/src/simulation/dynamics/spacecraft/spacecraft.i @@ -25,15 +25,11 @@ %pythoncode %{ from Basilisk.architecture.swig_common_model import * +from Basilisk.simulation.gravityEffector import GravBodyVector %} %include "std_string.i" %include "swig_eigen.i" %include "swig_conly_data.i" -%include "std_vector.i" - -namespace std { - %template(GravBodyVector) vector; -} %include "sys_model.i" %include "simulation/dynamics/_GeneralModuleFiles/stateData.h" @@ -41,7 +37,7 @@ namespace std { %include "simulation/dynamics/_GeneralModuleFiles/dynamicEffector.h" %include "simulation/dynamics/_GeneralModuleFiles/dynParamManager.h" %include "simulation/dynamics/_GeneralModuleFiles/dynamicObject.h" -%include "simulation/dynamics/_GeneralModuleFiles/gravityEffector.h" +%import "simulation/dynamics/gravityEffector/gravityEffector.i" %include "spacecraft.h" %include "architecture/msgPayloadDefC/SCStatesMsgPayload.h" diff --git a/src/simulation/dynamics/spacecraftSystem/spacecraftSystem.i b/src/simulation/dynamics/spacecraftSystem/spacecraftSystem.i index 4f3a73beb4..2fc7287a9f 100755 --- a/src/simulation/dynamics/spacecraftSystem/spacecraftSystem.i +++ b/src/simulation/dynamics/spacecraftSystem/spacecraftSystem.i @@ -25,22 +25,17 @@ %pythoncode %{ from Basilisk.architecture.swig_common_model import * +from Basilisk.simulation.gravityEffector import GravBodyVector %} %include "std_string.i" %include "swig_eigen.i" %include "swig_conly_data.i" -%include "std_vector.i" - -namespace std { - %template(GravBodyVector) vector; -} - %include "sys_model.i" %include "../_GeneralModuleFiles/stateData.h" %include "../_GeneralModuleFiles/dynParamManager.h" %include "../_GeneralModuleFiles/dynamicObject.h" -%include "../_GeneralModuleFiles/gravityEffector.h" +%import "simulation/dynamics/gravityEffector/gravityEffector.i" %include "../_GeneralModuleFiles/stateEffector.h" %include "../_GeneralModuleFiles/dynamicEffector.h" %include "spacecraftSystem.h" From 1597739f77c83d99b33216de6ddcfce0cb049b02 Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:11:28 -0800 Subject: [PATCH 08/13] Update gravity test --- .../_UnitTest/test_gravityDynEffector.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/simulation/dynamics/gravityEffector/_UnitTest/test_gravityDynEffector.py b/src/simulation/dynamics/gravityEffector/_UnitTest/test_gravityDynEffector.py index 234b198d95..fd469185e5 100644 --- a/src/simulation/dynamics/gravityEffector/_UnitTest/test_gravityDynEffector.py +++ b/src/simulation/dynamics/gravityEffector/_UnitTest/test_gravityDynEffector.py @@ -251,10 +251,12 @@ def sphericalHarmonics(show_plots): snippetContent = '{:1.1e}'.format(accuracy) # write formatted LATEX string to file to be used by auto-documentation. unitTestSupport.writeTeXSnippet(snippetName, snippetContent, path) #write formatted LATEX string to file to be used by auto-documentation. - gravOutMax = spherHarm.computeField([[0.0], [0.0], [(6378.1363)*1.0E3]], 100, True) - if gravOutMax != gravOut: + try: + spherHarm.computeField([[0.0], [0.0], [(6378.1363)*1.0E3]], 100, True) testFailCount += 1 testMessages.append("Gravity ceiling not enforced correctly") + except RuntimeError: + pass # Great! We threw an error if testFailCount == 0: passFailText = 'PASSED' @@ -315,8 +317,7 @@ def singleGravityBody(show_plots): gravBody1 = gravityEffector.GravBodyData() gravBody1.planetName = "earth_planet_data" gravBody1.isCentralBody = False - gravBody1.useSphericalHarmParams = True - gravityEffector.loadGravFromFile(path + '/GGM03S.txt', gravBody1.spherHarm, 60) + gravBody1.useSphericalHarmonicsGravityModel(path + '/GGM03S.txt', 60) gravBody1.planetBodyInMsg.subscribeTo(SpiceObject.planetStateOutMsgs[0]) # Use the python spice utility to load in spacecraft SPICE ephemeris data @@ -471,6 +472,7 @@ def multiBodyGravity(show_plots): localPlanetEditor = messaging.SpicePlanetStateMsgPayload() localPlanetEditor.PositionVector = [om.AU/10., 0., 0.] localPlanetEditor.VelocityVector = [0., 0., 0.] + localPlanetEditor.J20002Pfix = np.identity(3) #Grav Body 1 is twice the size of the other two gravBody1 = gravityEffector.GravBodyData() @@ -478,7 +480,6 @@ def multiBodyGravity(show_plots): gravBody1.mu = 1000000. gravBody1.radEquator = 6500. gravBody1.isCentralBody = False - gravBody1.useSphericalHarmParams = False gravBody1.localPlanet = localPlanetEditor #This is the gravityEffector which will actually compute the gravitational acceleration @@ -486,6 +487,7 @@ def multiBodyGravity(show_plots): allGrav.gravBodies = gravityEffector.GravBodyVector([gravBody1]) allGrav.linkInStates(newManager) allGrav.registerProperties(newManager) + allGrav.Reset(0) multiSim.AddModelToTask(unitTaskName, allGrav) posVelSig = [[0.], [0.], [0.]] allGrav.computeGravityField(posVelSig, posVelSig) #compute acceleration only considering the first body. @@ -501,7 +503,6 @@ def multiBodyGravity(show_plots): gravBody2.mu = gravBody1.mu/2. gravBody2.radEquator = 6500. gravBody2.isCentralBody = False - gravBody2.useSphericalHarmParams = False gravBody2.localPlanet = localPlanetEditor #This is the gravityEffector which will actually compute the gravitational acceleration @@ -511,6 +512,7 @@ def multiBodyGravity(show_plots): allGrav2.gravBodies = gravityEffector.GravBodyVector([gravBody1, gravBody2]) allGrav2.linkInStates(newManager) allGrav2.registerProperties(newManager) + allGrav2.Reset(0) multiSim.AddModelToTask(unitTaskName, allGrav2) allGrav2.computeGravityField(posVelSig, posVelSig) #compute acceleration considering the first and second bodies. step2 = newManager.getPropertyReference("g_N") #retrieve total gravitational acceleration in inertial frame @@ -520,7 +522,6 @@ def multiBodyGravity(show_plots): gravBody3.mu = gravBody2.mu gravBody3.radEquator = 6500. gravBody3.isCentralBody = False - gravBody3.useSphericalHarmParams = False gravBody3.localPlanet = localPlanetEditor #This is the gravityEffector which will actually compute the gravitational acceleration @@ -530,6 +531,7 @@ def multiBodyGravity(show_plots): allGrav3.gravBodies = gravityEffector.GravBodyVector([gravBody1, gravBody2, gravBody3]) allGrav3.linkInStates(newManager) allGrav3.registerProperties(newManager) + allGrav3.Reset(0) multiSim.AddModelToTask(unitTaskName, allGrav3) allGrav3.computeGravityField(posVelSig, posVelSig) #comput acceleration considering all three bodies step3 = newManager.getPropertyReference("g_N") #retrieve total gravitational acceleration in inertial frame From 28da905704bba11e10b436bd0d69f1fdc1690e66 Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:11:52 -0800 Subject: [PATCH 09/13] Update scenarios to use new SH utility function --- .../OpNavScenarios/modelsOpNav/BSK_OpNavDynamics.py | 6 ++---- examples/scenarioBasicOrbit.py | 10 ++++------ examples/scenarioBasicOrbitStream.py | 9 +++------ examples/scenarioDragRendezvous.py | 5 ++--- examples/scenarioFormationMeanOEFeedback.py | 4 +--- examples/scenarioGroundDownlink.py | 5 +---- examples/scenarioLagrangePointOrbit.py | 1 - examples/scenarioOrbitMultiBody.py | 6 +----- examples/scenarioSmallBodyNavUKF.py | 4 +--- 9 files changed, 15 insertions(+), 35 deletions(-) diff --git a/examples/OpNavScenarios/modelsOpNav/BSK_OpNavDynamics.py b/examples/OpNavScenarios/modelsOpNav/BSK_OpNavDynamics.py index 76ec2f48a2..142b5c9270 100644 --- a/examples/OpNavScenarios/modelsOpNav/BSK_OpNavDynamics.py +++ b/examples/OpNavScenarios/modelsOpNav/BSK_OpNavDynamics.py @@ -212,10 +212,8 @@ def SetGravityEffector(self): self.mars = 2 self.jupiter = 3 - simIncludeGravBody.loadGravFromFile(bskPath + '/supportData/LocalGravData/GGM2BData.txt' - , gravBodies['mars barycenter'].spherHarm - , 2 - ) + gravBodies['mars barycenter'].useSphericalHarmonicsGravityModel( + bskPath + '/supportData/LocalGravData/GGM2BData.txt', 2) self.scObject.gravField.gravBodies = spacecraft.GravBodyVector(list(self.gravFactory.gravBodies.values())) self.gravFactory.createSpiceInterface(bskPath + '/supportData/EphemerisData/', diff --git a/examples/scenarioBasicOrbit.py b/examples/scenarioBasicOrbit.py index eddd0f1393..915d4448e6 100644 --- a/examples/scenarioBasicOrbit.py +++ b/examples/scenarioBasicOrbit.py @@ -289,9 +289,8 @@ def run(show_plots, orbitCase, useSphericalHarmonics, planetCase): planet = gravFactory.createMarsBarycenter() planet.isCentralBody = True # ensure this is the central gravitational body if useSphericalHarmonics: - planet.useSphericalHarmParams = True - simIncludeGravBody.loadGravFromFile(bskPath + '/supportData/LocalGravData/GGM2BData.txt', - planet.spherHarm, 100) + planet.useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/GGM2BData.txt', 100) + else: # Earth planet = gravFactory.createEarth() planet.isCentralBody = True # ensure this is the central gravitational body @@ -299,9 +298,8 @@ def run(show_plots, orbitCase, useSphericalHarmonics, planetCase): # If extra customization is required, see the createEarth() macro to change additional values. # For example, the spherical harmonics are turned off by default. To engage them, the following code # is used - planet.useSphericalHarmParams = True - simIncludeGravBody.loadGravFromFile(bskPath + '/supportData/LocalGravData/GGM03S-J2-only.txt', - planet.spherHarm, 2) + planet.useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/GGM03S-J2-only.txt', 2) + # The value 2 indicates that the first two harmonics, excluding the 0th order harmonic, # are included. This harmonics data file only includes a zeroth order and J2 term. mu = planet.mu diff --git a/examples/scenarioBasicOrbitStream.py b/examples/scenarioBasicOrbitStream.py index 6b8557091e..200ffeea0d 100644 --- a/examples/scenarioBasicOrbitStream.py +++ b/examples/scenarioBasicOrbitStream.py @@ -146,16 +146,13 @@ def run(show_plots, liveStream, timeStep, orbitCase, useSphericalHarmonics, plan planet = gravFactory.createMarsBarycenter() planet.isCentralBody = True # ensure this is the central gravitational body if useSphericalHarmonics: - planet.useSphericalHarmParams = True - simIncludeGravBody.loadGravFromFile(bskPath + '/supportData/LocalGravData/GGM2BData.txt', - planet.spherHarm, 100) + planet.useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/GGM2BData.txt', 100) + else: # Earth planet = gravFactory.createEarth() planet.isCentralBody = True # ensure this is the central gravitational body if useSphericalHarmonics: - planet.useSphericalHarmParams = True - simIncludeGravBody.loadGravFromFile(bskPath + '/supportData/LocalGravData/GGM03S-J2-only.txt', - planet.spherHarm, 2) + planet.useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/GGM03S-J2-only.txt', 2) mu = planet.mu # attach gravity model to spacecraft diff --git a/examples/scenarioDragRendezvous.py b/examples/scenarioDragRendezvous.py index 740085a4ef..990b8cf8be 100644 --- a/examples/scenarioDragRendezvous.py +++ b/examples/scenarioDragRendezvous.py @@ -192,9 +192,8 @@ def drag_simulator(altOffset, trueAnomOffset, densMultiplier, ctrlType='lqr', us gravFactory = simIncludeGravBody.gravBodyFactory() gravBodies = gravFactory.createBodies(['earth']) gravBodies['earth'].isCentralBody = True - simIncludeGravBody.loadGravFromFile(bskPath + '/supportData/LocalGravData/GGM03S.txt', gravBodies['earth'].spherHarm, 2) - - gravBodies['earth'].useSphericalHarmParams = useJ2 + if useJ2: + gravBodies['earth'].useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/GGM03S.txt', 2) # timeInitString = '2021 MAY 04 07:47:48.965 (UTC)' # gravFactory.createSpiceInterface(bskPath + '/supportData/EphemerisData/' # , timeInitString diff --git a/examples/scenarioFormationMeanOEFeedback.py b/examples/scenarioFormationMeanOEFeedback.py index ff63c8ee6e..66b54a1631 100644 --- a/examples/scenarioFormationMeanOEFeedback.py +++ b/examples/scenarioFormationMeanOEFeedback.py @@ -129,9 +129,7 @@ def run(show_plots, useClassicElem, numOrbits): gravFactory = simIncludeGravBody.gravBodyFactory() gravBodies = gravFactory.createBodies(['earth']) gravBodies['earth'].isCentralBody = True - gravBodies['earth'].useSphericalHarmParams = True - simIncludeGravBody.loadGravFromFile( - bskPath + '/supportData/LocalGravData/GGM03S.txt', gravBodies['earth'].spherHarm, 2) + gravBodies['earth'].useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/GGM03S.txt', 2) scObject.gravField.gravBodies = spacecraft.GravBodyVector( list(gravFactory.gravBodies.values())) scObject2.gravField.gravBodies = spacecraft.GravBodyVector( diff --git a/examples/scenarioGroundDownlink.py b/examples/scenarioGroundDownlink.py index 4f78449c42..09e12e0f45 100644 --- a/examples/scenarioGroundDownlink.py +++ b/examples/scenarioGroundDownlink.py @@ -104,10 +104,7 @@ def run(show_plots): gravFactory = simIncludeGravBody.gravBodyFactory() planet = gravFactory.createEarth() planet.isCentralBody = True # ensure this is the central gravitational body - - planet.useSphericalHarmParams = True - simIncludeGravBody.loadGravFromFile(bskPath + '/supportData/LocalGravData/GGM03S-J2-only.txt', - planet.spherHarm, 2) + planet.useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/GGM03S-J2-only.txt', 2) mu = planet.mu # setup Spice interface for some solar system bodies timeInitString = '2020 MAY 21 18:28:03 (UTC)' diff --git a/examples/scenarioLagrangePointOrbit.py b/examples/scenarioLagrangePointOrbit.py index 4a898e3bba..76efa17c67 100644 --- a/examples/scenarioLagrangePointOrbit.py +++ b/examples/scenarioLagrangePointOrbit.py @@ -184,7 +184,6 @@ def run(lagrangePoint, nOrbits, timestep, showPlots=True): gravFactory = simIncludeGravBody.gravBodyFactory() gravBodies = gravFactory.createBodies(['moon', 'earth']) gravBodies['earth'].isCentralBody = True - # Necessary to specify useSphericalHarmParams for Earth or Moon, and then load parameters from file? # Add gravity bodies to the spacecraft dynamics scObject.gravField.gravBodies = spacecraft.GravBodyVector(list(gravFactory.gravBodies.values())) diff --git a/examples/scenarioOrbitMultiBody.py b/examples/scenarioOrbitMultiBody.py index 569398c621..39dabf93eb 100755 --- a/examples/scenarioOrbitMultiBody.py +++ b/examples/scenarioOrbitMultiBody.py @@ -186,11 +186,7 @@ def run(show_plots, scCase): # Other possible ways to access specific gravity bodies include the below # earth = gravBodies['earth'] # earth = gravFactory.createEarth() - gravBodies['earth'].useSphericalHarmParams = True - simIncludeGravBody.loadGravFromFile(bskPath +'/supportData/LocalGravData/GGM03S.txt' - , gravBodies['earth'].spherHarm - , 100 - ) + gravBodies['earth'].useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/GGM03S.txt', 100) # The configured gravitational bodies are added to the spacecraft dynamics with the usual command: scObject.gravField.gravBodies = spacecraft.GravBodyVector(list(gravFactory.gravBodies.values())) diff --git a/examples/scenarioSmallBodyNavUKF.py b/examples/scenarioSmallBodyNavUKF.py index f9531db99b..3f07faf58a 100644 --- a/examples/scenarioSmallBodyNavUKF.py +++ b/examples/scenarioSmallBodyNavUKF.py @@ -342,10 +342,8 @@ def run(show_plots): mu = 17.2882449693*1e9 # m^3/s^2 asteroid = gravFactory.createCustomGravObject("vesta", mu, radEquator=265*1000) asteroid.isCentralBody = True - asteroid.useSphericalHarmParams = True nSpherHarm = 14 - simIncludeGravBody.loadGravFromFile(bskPath + '/supportData/LocalGravData/VESTA20H.txt', - asteroid.spherHarm, nSpherHarm) + asteroid.useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/VESTA20H.txt', nSpherHarm) asteroid.planetBodyInMsg.subscribeTo(gravBodyEphem.planetOutMsgs[0]) # create an ephemeris converter From 035660d74e0c6851ff112dafc24caf0bfe1a1b9a Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:12:06 -0800 Subject: [PATCH 10/13] Update GravityEffector documentation file --- .../Basilisk-GravityEffector-20170712.pdf | Bin 670997 -> 657432 bytes .../Basilisk-GravityEffector-20170712.tex | 2 + .../_Documentation/secModelDescription.tex | 4 +- .../_Documentation/secModelFunctions.tex | 9 +++-- .../_Documentation/secTest.tex | 2 +- .../_Documentation/secUserGuide.tex | 35 +----------------- 6 files changed, 12 insertions(+), 40 deletions(-) diff --git a/src/simulation/dynamics/gravityEffector/_Documentation/Basilisk-GravityEffector-20170712.pdf b/src/simulation/dynamics/gravityEffector/_Documentation/Basilisk-GravityEffector-20170712.pdf index 4b1efbf7cc10bbd540462fa12c9e4985efa394e8..de539b02c2c69ccccf9b9b2e7120b6415c341e9b 100755 GIT binary patch delta 149094 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

P)iYz=5T^b{(7J;A-EE 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�zX{T&?_UKsny50;j|>~BZ_Um13m5CV(2lRZ%@ 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�xQI+MP5f`0aTk@&as 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

GQS^RRmS)sBQx%CvD;k5 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 Date: Sat, 18 Nov 2023 17:12:20 -0800 Subject: [PATCH 11/13] Update gravityEffector documentation --- src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.rst b/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.rst index 71f50372be..1c549126e5 100644 --- a/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.rst +++ b/src/simulation/dynamics/_GeneralModuleFiles/gravityEffector.rst @@ -61,7 +61,6 @@ Each gravity body data object can be created using:: earth.mu = 0.3986004415E+15 # meters^3/s^2 earth.radEquator = 6378136.6 # meters earth.isCentralBody = False - earth.useSphericalHarmParams = False Note that the ``simIncludeGradBody.py`` helper file contains a gravity body factor class to facilitate setting up gravity bodies. From 21875e1bc389137382099c3e41d4880e5adff509 Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:12:42 -0800 Subject: [PATCH 12/13] Update tests to use new SH utility function --- .../FuelTank/_UnitTest/test_mass_depletion.py | 2 -- .../test_hingedRigidBodyStateEffector.py | 1 - .../_UnitTest/test_linearSpringMassDamper.py | 1 - .../test_nHingedRigidBodyStateEffector.py | 1 - .../test_radiation_pressure_integrated.py | 19 +++++++++---------- .../_UnitTest/test_thruster_integrated_sim.py | 1 - .../test_VSCMGStateEffector_integrated.py | 1 - .../test_dualhingedRigidBodyStateEffector.py | 1 - .../test_extForceTorqueIntegrated.py | 2 -- .../_UnitTest/test_gravitySpacecraft.py | 7 ++----- .../test_PrescribedMotionStateEffector.py | 2 -- ...t_reactionWheelStateEffector_integrated.py | 1 - .../spacecraft/_UnitTest/test_spacecraft.py | 2 -- .../_UnitTest/test_multiSpacecraft.py | 2 -- .../test_spinningBodyOneDOFStateEffector.py | 1 - .../test_spinningBodyTwoDOFStateEffector.py | 1 - .../_UnitTests/test_scenarioBasicOrbitMC.py | 4 +--- 17 files changed, 12 insertions(+), 37 deletions(-) diff --git a/src/simulation/dynamics/FuelTank/_UnitTest/test_mass_depletion.py b/src/simulation/dynamics/FuelTank/_UnitTest/test_mass_depletion.py index 1ff5e6e1d8..4ed9df42c8 100644 --- a/src/simulation/dynamics/FuelTank/_UnitTest/test_mass_depletion.py +++ b/src/simulation/dynamics/FuelTank/_UnitTest/test_mass_depletion.py @@ -119,7 +119,6 @@ def massDepletionTest(show_plots, thrusterType): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) @@ -291,7 +290,6 @@ def axisChangeHelper(r_BcB_B): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) diff --git a/src/simulation/dynamics/HingedRigidBodies/_UnitTest/test_hingedRigidBodyStateEffector.py b/src/simulation/dynamics/HingedRigidBodies/_UnitTest/test_hingedRigidBodyStateEffector.py index cbf37f8220..d5b6debc81 100644 --- a/src/simulation/dynamics/HingedRigidBodies/_UnitTest/test_hingedRigidBodyStateEffector.py +++ b/src/simulation/dynamics/HingedRigidBodies/_UnitTest/test_hingedRigidBodyStateEffector.py @@ -136,7 +136,6 @@ def hingedRigidBodyGravity(show_plots): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.primaryCentralSpacecraft.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) # Log the spacecraft state message diff --git a/src/simulation/dynamics/LinearSpringMassDamper/_UnitTest/test_linearSpringMassDamper.py b/src/simulation/dynamics/LinearSpringMassDamper/_UnitTest/test_linearSpringMassDamper.py index a14a240cec..86a0ace897 100644 --- a/src/simulation/dynamics/LinearSpringMassDamper/_UnitTest/test_linearSpringMassDamper.py +++ b/src/simulation/dynamics/LinearSpringMassDamper/_UnitTest/test_linearSpringMassDamper.py @@ -179,7 +179,6 @@ def fuelSloshTest(show_plots,useFlag,testCase): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) scObject.hub.r_CN_NInit = [[-4020338.690396649], [7490566.741852513], [5248299.211589362]] scObject.hub.v_CN_NInit = [[-5199.77710904224], [-3436.681645356935], [1041.576797498721]] diff --git a/src/simulation/dynamics/NHingedRigidBodies/_UnitTest/test_nHingedRigidBodyStateEffector.py b/src/simulation/dynamics/NHingedRigidBodies/_UnitTest/test_nHingedRigidBodyStateEffector.py index bab65d8d95..0b883744e3 100644 --- a/src/simulation/dynamics/NHingedRigidBodies/_UnitTest/test_nHingedRigidBodyStateEffector.py +++ b/src/simulation/dynamics/NHingedRigidBodies/_UnitTest/test_nHingedRigidBodyStateEffector.py @@ -163,7 +163,6 @@ def nHingedRigidBody(show_plots, testCase): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) scObject.hub.r_CN_NInit = [[-4020338.690396649], [7490566.741852513], [5248299.211589362]] scObject.hub.v_CN_NInit = [[-5199.77710904224], [-3436.681645356935], [1041.576797498721]] diff --git a/src/simulation/dynamics/RadiationPressure/_UnitTest/test_radiation_pressure_integrated.py b/src/simulation/dynamics/RadiationPressure/_UnitTest/test_radiation_pressure_integrated.py index cd42ff321a..26c1c81c5c 100644 --- a/src/simulation/dynamics/RadiationPressure/_UnitTest/test_radiation_pressure_integrated.py +++ b/src/simulation/dynamics/RadiationPressure/_UnitTest/test_radiation_pressure_integrated.py @@ -156,16 +156,15 @@ def radiationPressureIntegratedTest(show_plots): # true position for un perturbed 2 body GEO orbit with cannonball SRP true_pos = np.array([[-2.18197848e+07, 3.58872415e+07, 0.00000000e+00] - ,[-3.97753183e+07, 1.34888783e+07, -7.34006882e+01] - ,[-3.91389821e+07, -1.52401394e+07, -3.06392342e+02] - ,[-2.01837904e+07, -3.68366949e+07, -6.37825333e+02] - ,[ 8.21685433e+06, -4.11950336e+07, -9.13451012e+02] - ,[ 3.27532829e+07, -2.63023741e+07, -9.57894936e+02] - ,[ 4.19944582e+07, 9.02560169e+05, -6.78189034e+02] - ,[ 3.15827901e+07, 2.76842665e+07, -1.40584587e+02] - ,[ 6.38612441e+06, 4.15047641e+07, 4.29547195e+02] - ,[-2.18007315e+07, 3.58874482e+07, 7.40749634e+02]]) - + ,[-3.97753187e+07, 1.34888792e+07, -7.33231880e+01] + ,[-3.91389859e+07, -1.52401375e+07, -3.06322198e+02] + ,[-2.01838008e+07, -3.68366952e+07, -6.37764168e+02] + ,[ 8.21683806e+06, -4.11950440e+07, -9.13393204e+02] + ,[ 3.27532709e+07, -2.63024006e+07, -9.57828703e+02] + ,[ 4.19944648e+07, 9.02522873e+05, -6.78102461e+02] + ,[ 3.15828214e+07, 2.76842358e+07, -1.40473487e+02] + ,[ 6.38617052e+06, 4.15047581e+07, 4.29674085e+02] + ,[-2.18006914e+07, 3.58874726e+07, 7.40872311e+02]]) # compare the results to the truth values accuracy = 1.0 # meters diff --git a/src/simulation/dynamics/Thrusters/thrusterDynamicEffector/_UnitTest/test_thruster_integrated_sim.py b/src/simulation/dynamics/Thrusters/thrusterDynamicEffector/_UnitTest/test_thruster_integrated_sim.py index 7830b3d99a..37674f48f4 100644 --- a/src/simulation/dynamics/Thrusters/thrusterDynamicEffector/_UnitTest/test_thruster_integrated_sim.py +++ b/src/simulation/dynamics/Thrusters/thrusterDynamicEffector/_UnitTest/test_thruster_integrated_sim.py @@ -99,7 +99,6 @@ def thrusterIntegratedTest(show_plots): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) diff --git a/src/simulation/dynamics/VSCMGs/_UnitTest/test_VSCMGStateEffector_integrated.py b/src/simulation/dynamics/VSCMGs/_UnitTest/test_VSCMGStateEffector_integrated.py index ee868d16a7..e1280c20f3 100644 --- a/src/simulation/dynamics/VSCMGs/_UnitTest/test_VSCMGStateEffector_integrated.py +++ b/src/simulation/dynamics/VSCMGs/_UnitTest/test_VSCMGStateEffector_integrated.py @@ -221,7 +221,6 @@ def VSCMGIntegratedTest(show_plots,useFlag,testCase): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) diff --git a/src/simulation/dynamics/dualHingedRigidBodies/_UnitTest/test_dualhingedRigidBodyStateEffector.py b/src/simulation/dynamics/dualHingedRigidBodies/_UnitTest/test_dualhingedRigidBodyStateEffector.py index 7a8c483dc2..231e51673e 100644 --- a/src/simulation/dynamics/dualHingedRigidBodies/_UnitTest/test_dualhingedRigidBodyStateEffector.py +++ b/src/simulation/dynamics/dualHingedRigidBodies/_UnitTest/test_dualhingedRigidBodyStateEffector.py @@ -141,7 +141,6 @@ def dualHingedRigidBodyTest(show_plots, useFlag, testCase): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) scObject.hub.r_CN_NInit = [[-4020338.690396649], [7490566.741852513], [5248299.211589362]] scObject.hub.v_CN_NInit = [[-5199.77710904224], [-3436.681645356935], [1041.576797498721]] diff --git a/src/simulation/dynamics/extForceTorque/_UnitTest/test_extForceTorqueIntegrated.py b/src/simulation/dynamics/extForceTorque/_UnitTest/test_extForceTorqueIntegrated.py index 92ec28d8ce..2743af20f6 100644 --- a/src/simulation/dynamics/extForceTorque/_UnitTest/test_extForceTorqueIntegrated.py +++ b/src/simulation/dynamics/extForceTorque/_UnitTest/test_extForceTorqueIntegrated.py @@ -71,7 +71,6 @@ def extForceBodyAndTorque(): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) @@ -165,7 +164,6 @@ def extForceInertialAndTorque(): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) diff --git a/src/simulation/dynamics/gravityEffector/_UnitTest/test_gravitySpacecraft.py b/src/simulation/dynamics/gravityEffector/_UnitTest/test_gravitySpacecraft.py index 799497c978..6c3b508559 100644 --- a/src/simulation/dynamics/gravityEffector/_UnitTest/test_gravitySpacecraft.py +++ b/src/simulation/dynamics/gravityEffector/_UnitTest/test_gravitySpacecraft.py @@ -83,9 +83,7 @@ def singleGravityBody(show_plots): gravFactory = simIncludeGravBody.gravBodyFactory() gravBodies = gravFactory.createBodies(['earth', 'sun', 'moon', 'jupiter barycenter']) gravBodies['earth'].isCentralBody = True - gravBodies['earth'].useSphericalHarmParams = True - simIncludeGravBody.loadGravFromFile(path + '/../_UnitTest/GGM03S.txt' - , gravBodies['earth'].spherHarm + gravBodies['earth'].useSphericalHarmonicsGravityModel(path + '/../_UnitTest/GGM03S.txt' , 40 ) stringCurrent = "2016 MAY 1 00:32:30.0" @@ -369,8 +367,7 @@ def polyGravityBody(show_plots): gravFactory = simIncludeGravBody.gravBodyFactory() polyBody = gravFactory.createCustomGravObject('eros', mu=mu) polyBody.isCentralBody = True - polyBody.usePolyhedral = True - simIncludeGravBody.loadPolyFromFile(path + '/../_UnitTest/EROS856Vert1708Fac.txt', polyBody.poly) + polyBody.usePolyhedralGravityModel(path + '/../_UnitTest/EROS856Vert1708Fac.txt') polyBody.planetBodyInMsg.subscribeTo(polyBodyEphem.planetOutMsgs[0]) # create an ephemeris converter diff --git a/src/simulation/dynamics/prescribedMotion/_UnitTest/test_PrescribedMotionStateEffector.py b/src/simulation/dynamics/prescribedMotion/_UnitTest/test_PrescribedMotionStateEffector.py index fc46e75db3..0c9f13f11d 100644 --- a/src/simulation/dynamics/prescribedMotion/_UnitTest/test_PrescribedMotionStateEffector.py +++ b/src/simulation/dynamics/prescribedMotion/_UnitTest/test_PrescribedMotionStateEffector.py @@ -204,7 +204,6 @@ def PrescribedMotionTestFunction(show_plots, rotTest, thetaInit, theta_Ref, posI earthGravBody.planetName = "earth_planet_data" earthGravBody.mu = 0.3986004415E+15 earthGravBody.isCentralBody = True - earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([earthGravBody]) # Add energy and momentum variables to log @@ -440,7 +439,6 @@ def PrescribedMotionTestFunction(show_plots, rotTest, thetaInit, theta_Ref, posI earthGravBody.planetName = "earth_planet_data" earthGravBody.mu = 0.3986004415E+15 earthGravBody.isCentralBody = True - earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([earthGravBody]) # Add energy and momentum variables to log diff --git a/src/simulation/dynamics/reactionWheels/_UnitTest/test_reactionWheelStateEffector_integrated.py b/src/simulation/dynamics/reactionWheels/_UnitTest/test_reactionWheelStateEffector_integrated.py index 0b2c682143..a2fa47bfbe 100644 --- a/src/simulation/dynamics/reactionWheels/_UnitTest/test_reactionWheelStateEffector_integrated.py +++ b/src/simulation/dynamics/reactionWheels/_UnitTest/test_reactionWheelStateEffector_integrated.py @@ -191,7 +191,6 @@ def reactionWheelIntegratedTest(show_plots,useFlag,testCase): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) diff --git a/src/simulation/dynamics/spacecraft/_UnitTest/test_spacecraft.py b/src/simulation/dynamics/spacecraft/_UnitTest/test_spacecraft.py index 60f328e08c..7133861398 100644 --- a/src/simulation/dynamics/spacecraft/_UnitTest/test_spacecraft.py +++ b/src/simulation/dynamics/spacecraft/_UnitTest/test_spacecraft.py @@ -97,7 +97,6 @@ def SCTranslation(show_plots): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) @@ -230,7 +229,6 @@ def SCTransAndRotation(show_plots): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([unitTestSim.earthGravBody]) diff --git a/src/simulation/dynamics/spacecraftSystem/_UnitTest/test_multiSpacecraft.py b/src/simulation/dynamics/spacecraftSystem/_UnitTest/test_multiSpacecraft.py index 23aa2bedcf..d703038a79 100644 --- a/src/simulation/dynamics/spacecraftSystem/_UnitTest/test_multiSpacecraft.py +++ b/src/simulation/dynamics/spacecraftSystem/_UnitTest/test_multiSpacecraft.py @@ -116,7 +116,6 @@ def SCConnected(show_plots): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scSystem.primaryCentralSpacecraft.gravField.gravBodies = spacecraftSystem.GravBodyVector([unitTestSim.earthGravBody]) @@ -394,7 +393,6 @@ def SCConnectedAndUnconnected(show_plots): unitTestSim.earthGravBody.planetName = "earth_planet_data" unitTestSim.earthGravBody.mu = 0.3986004415E+15 # meters! unitTestSim.earthGravBody.isCentralBody = True - unitTestSim.earthGravBody.useSphericalHarmParams = False scSystem.primaryCentralSpacecraft.gravField.gravBodies = spacecraftSystem.GravBodyVector([unitTestSim.earthGravBody]) diff --git a/src/simulation/dynamics/spinningBodies/spinningBodiesOneDOF/_UnitTest/test_spinningBodyOneDOFStateEffector.py b/src/simulation/dynamics/spinningBodies/spinningBodiesOneDOF/_UnitTest/test_spinningBodyOneDOFStateEffector.py index 412d30cd31..a00455db57 100644 --- a/src/simulation/dynamics/spinningBodies/spinningBodiesOneDOF/_UnitTest/test_spinningBodyOneDOFStateEffector.py +++ b/src/simulation/dynamics/spinningBodies/spinningBodiesOneDOF/_UnitTest/test_spinningBodyOneDOFStateEffector.py @@ -157,7 +157,6 @@ def spinningBody(show_plots, cmdTorque, lock, thetaRef): earthGravBody.planetName = "earth_planet_data" earthGravBody.mu = 0.3986004415E+15 # meters! earthGravBody.isCentralBody = True - earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([earthGravBody]) # Log the spacecraft state message diff --git a/src/simulation/dynamics/spinningBodies/spinningBodiesTwoDOF/_UnitTest/test_spinningBodyTwoDOFStateEffector.py b/src/simulation/dynamics/spinningBodies/spinningBodiesTwoDOF/_UnitTest/test_spinningBodyTwoDOFStateEffector.py index 1bc78a7829..92a85d376a 100644 --- a/src/simulation/dynamics/spinningBodies/spinningBodiesTwoDOF/_UnitTest/test_spinningBodyTwoDOFStateEffector.py +++ b/src/simulation/dynamics/spinningBodies/spinningBodiesTwoDOF/_UnitTest/test_spinningBodyTwoDOFStateEffector.py @@ -183,7 +183,6 @@ def spinningBody(show_plots, cmdTorque1, lock1, theta1Ref, cmdTorque2, lock2, th earthGravBody.planetName = "earth_planet_data" earthGravBody.mu = 0.3986004415E+15 # meters! earthGravBody.isCentralBody = True - earthGravBody.useSphericalHarmParams = False scObject.gravField.gravBodies = spacecraft.GravBodyVector([earthGravBody]) # Log the spacecraft state message diff --git a/src/utilities/MonteCarlo/_UnitTests/test_scenarioBasicOrbitMC.py b/src/utilities/MonteCarlo/_UnitTests/test_scenarioBasicOrbitMC.py index adba3eaf49..db56f87432 100644 --- a/src/utilities/MonteCarlo/_UnitTests/test_scenarioBasicOrbitMC.py +++ b/src/utilities/MonteCarlo/_UnitTests/test_scenarioBasicOrbitMC.py @@ -78,9 +78,7 @@ def myCreationFunction(): gravFactory = simIncludeGravBody.gravBodyFactory() planet = gravFactory.createEarth() planet.isCentralBody = True - planet.useSphericalHarmParams = True - simIncludeGravBody.loadGravFromFile(bskPath + '/supportData/LocalGravData/GGM03S-J2-only.txt' - , planet.spherHarm + planet.useSphericalHarmonicsGravityModel(bskPath + '/supportData/LocalGravData/GGM03S-J2-only.txt' , 2 ) scObject.gravField.gravBodies = spacecraft.GravBodyVector([planet]) From b6c6c07ada85c7bb80bf8b43a20a8ca786e48804 Mon Sep 17 00:00:00 2001 From: Juan Garcia Bonilla Date: Sat, 18 Nov 2023 17:12:51 -0800 Subject: [PATCH 13/13] Update release notes for GravityEffector refactor --- docs/source/Support/bskReleaseNotes.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/source/Support/bskReleaseNotes.rst b/docs/source/Support/bskReleaseNotes.rst index 8e37d45ca9..3f3e79b35f 100644 --- a/docs/source/Support/bskReleaseNotes.rst +++ b/docs/source/Support/bskReleaseNotes.rst @@ -77,7 +77,10 @@ Version |release| - Updated :ref:`thrusterPlatformReference` to add an input and output thruster config msg, and integral feedback term which dumps steady-state momentum in case of uncertainties on the CM location. - Created :ref:`thrustCMEstimation` to perform online estimation of the CM using gimbaled thruster torque measurements. - +- Refactored ``GravityEffector``. Adding custom gravity models can now be done by subclassing ``GravityModel``. The + utility method ``useSphericalHarmonicsGravityModel`` has been added to planetary body objects, which makes the body + use spherical harmonics and loads them from a file with a single command. Similarly, the methods ``usePolyhedralGravityModel`` + and ``usePointMassGravityModel`` have been added. Version 2.2.0 (June 28, 2023) -----------------------------