Skip to content
Snippets Groups Projects
Unverified Commit b8e7a387 authored by Jesse Mapel's avatar Jesse Mapel Committed by GitHub
Browse files

Fixed seg fault when using an ISD without angular velocities (#327)

* Updated embedded ALE to get orientations fix

* Added workaround for old ALE versions
parent d0020883
No related branches found
No related tags found
No related merge requests found
Subproject commit 37bb560ac6a5327063f6c36d8259b3dbb6880bab Subproject commit 7bd25687480f8e6b60319026ef0982ae41ef027e
...@@ -964,6 +964,30 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd( ...@@ -964,6 +964,30 @@ std::string UsgsAstroFrameSensorModel::constructStateFromIsd(
// get sensor_orientation quaternion // get sensor_orientation quaternion
ale::Orientations j2000_to_sensor = ale::getInstrumentPointing(parsedIsd); ale::Orientations j2000_to_sensor = ale::getInstrumentPointing(parsedIsd);
// Work-around for issues in ALE <=0.8.5 where Orientations without angular
// velocities seg fault when you multiply them. This will make the angular
// velocities in the final Orientations dubious but they are not used
// in any calculations so this is okay.
if (j2000_to_sensor.getAngularVelocities().empty()) {
j2000_to_sensor = ale::Orientations(
j2000_to_sensor.getRotations(),
j2000_to_sensor.getTimes(),
std::vector<ale::Vec3d>(j2000_to_sensor.getTimes().size()),
j2000_to_sensor.getConstantRotation(),
j2000_to_sensor.getConstantFrames(),
j2000_to_sensor.getTimeDependentFrames());
}
if (j2000_to_target.getAngularVelocities().empty()) {
j2000_to_target = ale::Orientations(
j2000_to_target.getRotations(),
j2000_to_target.getTimes(),
std::vector<ale::Vec3d>(j2000_to_target.getTimes().size()),
j2000_to_target.getConstantRotation(),
j2000_to_target.getConstantFrames(),
j2000_to_target.getTimeDependentFrames());
}
ale::Orientations sensor_to_j2000 = j2000_to_sensor.inverse(); ale::Orientations sensor_to_j2000 = j2000_to_sensor.inverse();
ale::Orientations sensor_to_target = j2000_to_target * sensor_to_j2000; ale::Orientations sensor_to_target = j2000_to_target * sensor_to_j2000;
ephemTime = sensor_to_target.getTimes(); ephemTime = sensor_to_target.getTimes();
......
...@@ -2413,6 +2413,29 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd( ...@@ -2413,6 +2413,29 @@ std::string UsgsAstroLsSensorModel::constructStateFromIsd(
state["m_velocities"] = velocities; state["m_velocities"] = velocities;
MESSAGE_LOG("m_velocities: {}", state["m_velocities"].dump()) MESSAGE_LOG("m_velocities: {}", state["m_velocities"].dump())
// Work-around for issues in ALE <=0.8.5 where Orientations without angular
// velocities seg fault when you multiply them. This will make the angular
// velocities in the final Orientations dubious but they are not used
// in any calculations so this is okay.
if (j2000_to_sensor.getAngularVelocities().empty()) {
j2000_to_sensor = ale::Orientations(
j2000_to_sensor.getRotations(),
j2000_to_sensor.getTimes(),
std::vector<ale::Vec3d>(j2000_to_sensor.getTimes().size()),
j2000_to_sensor.getConstantRotation(),
j2000_to_sensor.getConstantFrames(),
j2000_to_sensor.getTimeDependentFrames());
}
if (j2000_to_target.getAngularVelocities().empty()) {
j2000_to_target = ale::Orientations(
j2000_to_target.getRotations(),
j2000_to_target.getTimes(),
std::vector<ale::Vec3d>(j2000_to_target.getTimes().size()),
j2000_to_target.getConstantRotation(),
j2000_to_target.getConstantFrames(),
j2000_to_target.getTimeDependentFrames());
}
ale::Orientations sensor_to_j2000 = j2000_to_sensor.inverse(); ale::Orientations sensor_to_j2000 = j2000_to_sensor.inverse();
ale::Orientations sensor_to_target = j2000_to_target * sensor_to_j2000; ale::Orientations sensor_to_target = j2000_to_target * sensor_to_j2000;
ephemTime = sensor_to_target.getTimes(); ephemTime = sensor_to_target.getTimes();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment