@@ -378,8 +378,7 @@ void Device::integrate( const double & dt )
378
378
if (controlInputType_==CONTROL_INPUT_NO_INTEGRATION)
379
379
{
380
380
assert (state_.size ()==controlIN.size ()+6 );
381
- for ( int i=0 ;i<controlIN.size ();++i )
382
- state_ (i+6 ) = controlIN (i);
381
+ state_.tail (controlIN.size ()) = controlIN;
383
382
return ;
384
383
}
385
384
@@ -389,29 +388,25 @@ void Device::integrate( const double & dt )
389
388
// If control size is state size - 6, integrate joint angles,
390
389
// if control and state are of same size, integrate 6 first degrees of
391
390
// freedom as a translation and roll pitch yaw.
392
- unsigned int offset = 6 ;
393
391
394
392
if (controlInputType_==CONTROL_INPUT_TWO_INTEGRATION)
395
393
{
396
- if (controlIN.size () == velocity_.size ()) offset = 0 ;
397
- for ( int i=0 ;i<controlIN.size ();++i )
398
- {
399
- vel_control_ (i) = velocity_ (i+offset) + controlIN (i)*dt*0.5 ;
400
- velocity_ (i+offset) = velocity_ (i+offset) + controlIN (i)*dt;
401
- }
394
+ // Position increment
395
+ vel_control_ = velocity_.tail (controlIN.size ()) + (0.5 *dt)*controlIN;
396
+ // Velocity integration.
397
+ velocity_.tail (controlIN.size ()) += controlIN*dt;
402
398
}
403
399
else
404
400
{
405
401
vel_control_ = controlIN;
406
402
}
407
403
408
404
if (vel_control_.size () == state_.size ()) {
409
- offset = 0 ;
410
405
integrateRollPitchYaw (state_, vel_control_, dt);
411
406
}
412
407
413
- for ( int i= 6 ;i<state_. size ();++i )
414
- { state_ (i) += ( vel_control_ (i-offset)*dt); }
408
+ // Position integration
409
+ state_. tail (controlIN. size ()) += vel_control_ * dt;
415
410
}
416
411
417
412
/* --- DISPLAY ------------------------------------------------------------ */
0 commit comments