Skip to content

Commit 67237dd

Browse files
committed
fix time trajectory for interpolation
1 parent 047f5dc commit 67237dd

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

ocs2_ipm/src/IpmSolver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ void IpmSolver::initializeSlackDualTrajectory(const std::vector<AnnotatedTime>&
408408
if (cachedEventIndex < slackDualTrajectory_.preJumps.size()) {
409409
ipm::toSlackDual(std::move(slackDualTrajectory_.preJumps[cachedEventIndex]), slackStateIneq[i], dualStateIneq[i]);
410410
} else {
411-
const auto time = newTimeTrajectory[i];
411+
const auto time = getIntervalStart(timeDiscretization[i]);
412412
const auto& state = x[i];
413413
constexpr auto request = Request::Constraint;
414414
ocpDefinition.preComputationPtr->requestPreJump(request, time, state);
@@ -428,7 +428,7 @@ void IpmSolver::initializeSlackDualTrajectory(const std::vector<AnnotatedTime>&
428428
dualStateInputIneq[i].resize(0);
429429
++eventIdx;
430430
} else {
431-
const auto time = newTimeTrajectory[i];
431+
const auto time = getIntervalStart(timeDiscretization[i]);
432432
if (interpolatableTimePeriod.first <= time && time <= interpolatableTimePeriod.second) {
433433
ipm::toSlackDual(getIntermediateDualSolutionAtTime(slackDualTrajectory_, time), slackStateIneq[i], dualStateIneq[i],
434434
slackStateInputIneq[i], dualStateInputIneq[i]);

ocs2_oc/src/oc_data/TimeDiscretization.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,13 @@ scalar_array_t toTime(const std::vector<AnnotatedTime>& annotatedTime) {
123123
}
124124

125125
scalar_array_t toInterpolationTime(const std::vector<AnnotatedTime>& annotatedTime) {
126+
if (annotatedTime.empty()) {
127+
return scalar_array_t();
128+
}
126129
scalar_array_t timeTrajectory;
127130
timeTrajectory.reserve(annotatedTime.size());
128-
for (size_t i = 0; i < annotatedTime.size() - 1; i++) {
131+
timeTrajectory.push_back(annotatedTime.back().time - numeric_traits::limitEpsilon<scalar_t>());
132+
for (int i = 1; i < annotatedTime.size() - 1; i++) {
129133
if (annotatedTime[i].event == AnnotatedTime::Event::PostEvent) {
130134
timeTrajectory.push_back(getInterpolationTime(annotatedTime[i]));
131135
} else {

0 commit comments

Comments
 (0)