@@ -475,36 +475,53 @@ void GazeboYarpControlBoardDriver::resetPositionsAndTrajectoryGenerators()
475
475
else
476
476
{
477
477
yCDebug (GAZEBOCONTROLBOARD) << " Initializing Trajectory Generator with current values" ;
478
- yarp::sig::Vector initial_positions ;
478
+ yarp::sig::Vector initialPositionPhys ;
479
479
for (unsigned int i = 0 ; i < m_numberOfJoints; ++i) {
480
480
double gazeboPos = m_jointPointers[i]->Position (0 );
481
- initial_positions .push_back (convertGazeboToUser (i, gazeboPos));
481
+ initialPositionPhys .push_back (convertGazeboToUser (i, gazeboPos));
482
482
}
483
+ yarp::sig::Vector initialPositionAct;
483
484
484
485
if (m_ijointcoupling){
485
486
// 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
+ }
487
506
}
488
507
else {
508
+ initialPositionAct = initialPositionPhys;
489
509
for (size_t cpl_cnt = 0 ; cpl_cnt < m_coupling_handler.size (); cpl_cnt++) {
490
510
if (m_coupling_handler[cpl_cnt])
491
- m_coupling_handler[cpl_cnt]->decouplePos (initial_positions );
511
+ m_coupling_handler[cpl_cnt]->decouplePos (initialPositionAct );
492
512
}
493
- }
513
+ for (unsigned int i = 0 ; i < m_numberOfJoints; ++i) {
514
+ if (isValidUserDOF (i)) {
494
515
516
+ double limit_min, limit_max;
517
+ getUserDOFLimit (i, limit_min, limit_max);
518
+ m_trajectory_generator[i]->setLimits (limit_min, limit_max);
495
519
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
+ }
508
525
}
509
526
}
510
527
}
0 commit comments