Skip to content

Commit 2b40c96

Browse files
committed
ControlBoardDriver: refactor decouplePos
1 parent 2524219 commit 2b40c96

File tree

1 file changed

+34
-17
lines changed

1 file changed

+34
-17
lines changed

plugins/controlboard/src/ControlBoardDriver.cpp

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -475,36 +475,53 @@ void GazeboYarpControlBoardDriver::resetPositionsAndTrajectoryGenerators()
475475
else
476476
{
477477
yCDebug(GAZEBOCONTROLBOARD) << "Initializing Trajectory Generator with current values";
478-
yarp::sig::Vector initial_positions;
478+
yarp::sig::Vector initialPositionPhys;
479479
for (unsigned int i = 0; i < m_numberOfJoints; ++i) {
480480
double gazeboPos = m_jointPointers[i]->Position(0);
481-
initial_positions.push_back(convertGazeboToUser(i, gazeboPos));
481+
initialPositionPhys.push_back(convertGazeboToUser(i, gazeboPos));
482482
}
483+
yarp::sig::Vector initialPositionAct;
483484

484485
if(m_ijointcoupling){
485486
// TODO check if this is correct
486-
bool ok = m_ijointcoupling->convertFromPhysicalJointsToActuatedAxesPos(initial_positions, initial_positions);
487+
size_t nrOfActuatedAxes{0};
488+
bool ok = m_ijointcoupling->getNrOfActuatedAxes(nrOfActuatedAxes);
489+
initialPositionAct.resize(nrOfActuatedAxes);
490+
ok &= m_ijointcoupling->convertFromPhysicalJointsToActuatedAxesPos(initialPositionPhys, initialPositionAct);
491+
if (!ok)
492+
{
493+
yCError(GAZEBOCONTROLBOARD) << "Failed to convert from physical joints to actuated axes";
494+
return;
495+
}
496+
for (unsigned int i = 0; i < nrOfActuatedAxes; ++i) {
497+
double limit_min, limit_max;
498+
getUserDOFLimit(i, limit_min, limit_max);
499+
m_trajectory_generator[i]->setLimits(limit_min, limit_max);
500+
501+
m_trajectory_generator[i]->initTrajectory(initialPositionAct[i],
502+
initialPositionAct[i],
503+
m_trajectoryGenerationReferenceSpeed[i],
504+
m_trajectoryGenerationReferenceAcceleration[i]);
505+
}
487506
}
488507
else {
508+
initialPositionAct = initialPositionPhys;
489509
for (size_t cpl_cnt = 0; cpl_cnt < m_coupling_handler.size(); cpl_cnt++) {
490510
if (m_coupling_handler[cpl_cnt])
491-
m_coupling_handler[cpl_cnt]->decouplePos(initial_positions);
511+
m_coupling_handler[cpl_cnt]->decouplePos(initialPositionAct);
492512
}
493-
}
513+
for (unsigned int i = 0; i < m_numberOfJoints; ++i) {
514+
if (isValidUserDOF(i)) {
494515

516+
double limit_min, limit_max;
517+
getUserDOFLimit(i, limit_min, limit_max);
518+
m_trajectory_generator[i]->setLimits(limit_min, limit_max);
495519

496-
497-
for (unsigned int i = 0; i < m_numberOfJoints; ++i) {
498-
if (isValidUserDOF(i)) {
499-
500-
double limit_min, limit_max;
501-
getUserDOFLimit(i, limit_min, limit_max);
502-
m_trajectory_generator[i]->setLimits(limit_min, limit_max);
503-
504-
m_trajectory_generator[i]->initTrajectory(initial_positions[i],
505-
initial_positions[i],
506-
m_trajectoryGenerationReferenceSpeed[i],
507-
m_trajectoryGenerationReferenceAcceleration[i]);
520+
m_trajectory_generator[i]->initTrajectory(initialPositionAct[i],
521+
initialPositionAct[i],
522+
m_trajectoryGenerationReferenceSpeed[i],
523+
m_trajectoryGenerationReferenceAcceleration[i]);
524+
}
508525
}
509526
}
510527
}

0 commit comments

Comments
 (0)