58 double Fx_FL = 0, Fx_FR = 0, Fx_RL = 0, Fx_RR = 0;
65 vehicleModel.setTorques(newTorques);
66 vehicleModel.getLongitudinalForces(Fx_FL, Fx_FR, Fx_RL, Fx_RR);
70 ASSERT_NEAR(Fx_RL,1033.25 , 1);
71 ASSERT_NEAR(Fx_RR, 1033.25, 1);
75 double Fx_FL = 0, Fx_FR = 0, Fx_RL = 0, Fx_RR = 0;
82 vehicleModel.setTorques(newTorques);
83 vehicleModel.getLongitudinalForces(Fx_FL, Fx_FR, Fx_RL, Fx_RR);
87 ASSERT_NEAR(Fx_RL,433.71 , 1);
88 ASSERT_NEAR(Fx_RR, 433.71, 1);
92 double Fx_FL = 0, Fx_FR = 0, Fx_RL = 0, Fx_RR = 0;
99 vehicleModel.setTorques(newTorques);
100 vehicleModel.getLongitudinalForces(Fx_FL, Fx_FR, Fx_RL, Fx_RR);
104 ASSERT_NEAR(Fx_RL,127.10 , 1);
105 ASSERT_NEAR(Fx_RR, 127.10, 1);
109 double Fx_FL = 0, Fx_FR = 0, Fx_RL = 0, Fx_RR = 0;
116 vehicleModel.setTorques(newTorques);
117 vehicleModel.getLongitudinalForces(Fx_FL, Fx_FR, Fx_RL, Fx_RR);
121 ASSERT_NEAR(Fx_RL,-127.10 , 1);
122 ASSERT_NEAR(Fx_RR,-127.10, 1);
188 double Fz_Front = 0, Fz_Rear = 0;
189 vehicleModel.setVelocity(Eigen::Vector3d(5, 0, 0));
190 vehicleModel.getNormalForces(Fz_Front, Fz_Rear);
191 ASSERT_NEAR(Fz_Front, 519.1 ,1);
192 ASSERT_NEAR(Fz_Rear, 469.3 , 1);
234 Wheels wheelspeeds = {0.0, 0.0, 0.0, 0.0, 0.0};
235 Wheels throttleInputs = {0.0, 0.0, 1.0, 1.0, 0.0};
236 vehicleModel.getPowertrainModel().calculateWheelTorques(throttleInputs, wheelspeeds, wheelTorques);
237 ASSERT_EQ(wheelTorques.
FL, 0);
238 ASSERT_EQ(wheelTorques.
FR, 0);
239 ASSERT_NEAR(wheelTorques.
RL, 60.0, 1.0);
240 ASSERT_NEAR(wheelTorques.
RR, 60.0, 1.0);
245 Wheels wheelspeeds = {0.0, 0.0, 0.0, 0.0, 0.0};
246 Wheels throttleInputs = {0.0, 0.0, -1.0, -1.0, 0.0};
247 vehicleModel.getPowertrainModel().calculateWheelTorques(throttleInputs, wheelspeeds, wheelTorques);
248 ASSERT_EQ(wheelTorques.
FL, 0);
249 ASSERT_EQ(wheelTorques.
FR, 0);
250 ASSERT_NEAR(wheelTorques.
RL, -60.0, 1.0);
251 ASSERT_NEAR(wheelTorques.
RR, -60.0, 1.0);
428 double steeringFront;
429 Eigen::Vector3d rFL, rFR, rRL, rRR, rFront, rRear, vFL, vFR, vRL, vRR;
431 vehicleModel.setSteeringSetpointFront(0.1);
432 vehicleModel.getWheelGeometry(steeringFront, rFL, rFR, rRL, rRR, rFront, rRear, vFL, vFR, vRL, vRR);
434 ASSERT_NEAR(steeringFront, 0.1, 0.01);
435 ASSERT_NEAR(rFL.x(), 0.726, 0.01);
436 ASSERT_NEAR(rFR.x(), 0.726, 0.01);
437 ASSERT_NEAR(rRL.x(), -0.804, 0.01);
438 ASSERT_NEAR(rRR.x(), -0.804, 0.01);
439 ASSERT_NEAR(rFL.y(), 0.6, 0.01);
440 ASSERT_NEAR(rFR.y(), -0.6, 0.01);
441 ASSERT_NEAR(rRL.y(), 0.6, 0.01);
442 ASSERT_NEAR(rRR.y(), -0.6, 0.01);
443 ASSERT_NEAR(rFL.z(), 0.0, 0.01);
444 ASSERT_NEAR(rFR.z(), 0.0, 0.01);
445 ASSERT_NEAR(rRL.z(), 0.0, 0.01);
446 ASSERT_NEAR(rRR.z(), 0.0, 0.01);
447 ASSERT_NEAR(vFL.x(), 0.0, 0.01);
448 ASSERT_NEAR(vFR.x(), 0.0, 0.01);
449 ASSERT_NEAR(vRL.x(), 0.0, 0.01);
450 ASSERT_NEAR(vRR.x(), 0.0, 0.01);
451 ASSERT_NEAR(vFL.y(), 0.0, 0.01);
452 ASSERT_NEAR(vFR.y(), 0.0, 0.01);
453 ASSERT_NEAR(vRL.y(), 0.0, 0.01);
454 ASSERT_NEAR(vRR.y(), 0.0, 0.01);
455 ASSERT_NEAR(vFL.z(), 0.0, 0.01);
456 ASSERT_NEAR(vFR.z(), 0.0, 0.01);
457 ASSERT_NEAR(vRL.z(), 0.0, 0.01);
458 ASSERT_NEAR(vRR.z(), 0.0, 0.01);
464 double steeringFront;
465 Eigen::Vector3d rFL, rFR, rRL, rRR, rFront, rRear, vFL, vFR, vRL, vRR;
467 vehicleModel.setSteeringSetpointFront(-0.1);
468 vehicleModel.getWheelGeometry(steeringFront, rFL, rFR, rRL, rRR, rFront, rRear, vFL, vFR, vRL, vRR);
470 ASSERT_NEAR(steeringFront, -0.1, 0.01);
471 ASSERT_NEAR(rFL.x(), 0.726, 0.01);
472 ASSERT_NEAR(rFR.x(), 0.726, 0.01);
473 ASSERT_NEAR(rRL.x(), -0.804, 0.01);
474 ASSERT_NEAR(rRR.x(), -0.804, 0.01);
475 ASSERT_NEAR(rFL.y(), 0.6, 0.01);
476 ASSERT_NEAR(rFR.y(), -0.6, 0.01);
477 ASSERT_NEAR(rRL.y(), 0.6, 0.01);
478 ASSERT_NEAR(rRR.y(), -0.6, 0.01);
479 ASSERT_NEAR(rFL.z(), 0.0, 0.01);
480 ASSERT_NEAR(rFR.z(), 0.0, 0.01);
481 ASSERT_NEAR(rRL.z(), 0.0, 0.01);
482 ASSERT_NEAR(rRR.z(), 0.0, 0.01);
483 ASSERT_NEAR(vFL.x(), 0.0, 0.01);
484 ASSERT_NEAR(vFR.x(), 0.0, 0.01);
485 ASSERT_NEAR(vRL.x(), 0.0, 0.01);
486 ASSERT_NEAR(vRR.x(), 0.0, 0.01);
487 ASSERT_NEAR(vFL.y(), 0.0, 0.01);
488 ASSERT_NEAR(vFR.y(), 0.0, 0.01);
489 ASSERT_NEAR(vRL.y(), 0.0, 0.01);
490 ASSERT_NEAR(vRR.y(), 0.0, 0.01);
491 ASSERT_NEAR(vFL.z(), 0.0, 0.01);
492 ASSERT_NEAR(vFR.z(), 0.0, 0.01);
493 ASSERT_NEAR(vRL.z(), 0.0, 0.01);
494 ASSERT_NEAR(vRR.z(), 0.0, 0.01);
498 double steeringFront;
499 Eigen::Vector3d rFL, rFR, rRL, rRR, rFront, rRear, vFL, vFR, vRL, vRR;
501 vehicleModel.setSteeringSetpointFront(0.0);
502 vehicleModel.getWheelGeometry(steeringFront, rFL, rFR, rRL, rRR, rFront, rRear, vFL, vFR, vRL, vRR);
504 ASSERT_NEAR(steeringFront, 0.0, 0.01);
505 ASSERT_NEAR(rFL.x(), 0.726, 0.01);
506 ASSERT_NEAR(rFR.x(), 0.726, 0.01);
507 ASSERT_NEAR(rRL.x(), -0.804, 0.01);
508 ASSERT_NEAR(rRR.x(), -0.804, 0.01);
509 ASSERT_NEAR(rFL.y(), 0.6, 0.01);
510 ASSERT_NEAR(rFR.y(), -0.6, 0.01);
511 ASSERT_NEAR(rRL.y(), 0.6, 0.01);
512 ASSERT_NEAR(rRR.y(), -0.6, 0.01);
513 ASSERT_NEAR(rFL.z(), 0.0, 0.01);
514 ASSERT_NEAR(rFR.z(), 0.0, 0.01);
515 ASSERT_NEAR(rRL.z(), 0.0, 0.01);
516 ASSERT_NEAR(rRR.z(), 0.0, 0.01);
519 ASSERT_NEAR(vFL.x(), 0.0, 0.01);
520 ASSERT_NEAR(vFR.x(), 0.0, 0.01);
521 ASSERT_NEAR(vRL.x(), 0.0, 0.01);
522 ASSERT_NEAR(vRR.x(), 0.0, 0.01);
523 ASSERT_NEAR(vFL.y(), 0.0, 0.01);
524 ASSERT_NEAR(vFR.y(), 0.0, 0.01);
525 ASSERT_NEAR(vRL.y(), 0.0, 0.01);
526 ASSERT_NEAR(vRR.y(), 0.0, 0.01);
527 ASSERT_NEAR(vFL.z(), 0.0, 0.01);
528 ASSERT_NEAR(vFR.z(), 0.0, 0.01);
529 ASSERT_NEAR(vRL.z(), 0.0, 0.01);
530 ASSERT_NEAR(vRR.z(), 0.0, 0.01);
535 double steeringFront;
536 Eigen::Vector3d rFL, rFR, rRL, rRR, rFront, rRear, vFL, vFR, vRL, vRR;
537 vehicleModel.setVelocity(Eigen::Vector3d(5, 0, 0));
538 vehicleModel.getWheelGeometry(steeringFront, rFL, rFR, rRL, rRR, rFront, rRear, vFL, vFR, vRL, vRR);
539 ASSERT_NEAR(steeringFront, 0.0, 0.01);
540 ASSERT_NEAR(rFL.x(), 0.726, 0.01);
541 ASSERT_NEAR(rFR.x(), 0.726, 0.01);
542 ASSERT_NEAR(rRL.x(), -0.804, 0.01);
543 ASSERT_NEAR(rRR.x(), -0.804, 0.01);
544 ASSERT_NEAR(rFL.y(), 0.6, 0.01);
545 ASSERT_NEAR(rFR.y(), -0.6, 0.01);
546 ASSERT_NEAR(rRL.y(), 0.6, 0.01);
547 ASSERT_NEAR(rRR.y(), -0.6, 0.01);
548 ASSERT_NEAR(rFL.z(), 0.0, 0.01);
549 ASSERT_NEAR(rFR.z(), 0.0, 0.01);
550 ASSERT_NEAR(rRL.z(), 0.0, 0.01);
551 ASSERT_NEAR(rRR.z(), 0.0, 0.01);
552 ASSERT_NEAR(vFL.x(), 5.0, 0.01);
553 ASSERT_NEAR(vFR.x(), 5.0, 0.01);
554 ASSERT_NEAR(vRL.x(), 5.0, 0.01);
555 ASSERT_NEAR(vRR.x(), 5.0, 0.01);
556 ASSERT_NEAR(vFL.y(), 0.0, 0.01);
557 ASSERT_NEAR(vFR.y(), 0.0, 0.01);
558 ASSERT_NEAR(vRL.y(), 0.0, 0.01);
559 ASSERT_NEAR(vRR.y(), 0.0, 0.01);
560 ASSERT_NEAR(vFL.z(), 0.0, 0.01);
561 ASSERT_NEAR(vFR.z(), 0.0, 0.01);
562 ASSERT_NEAR(vRL.z(), 0.0, 0.01);
563 ASSERT_NEAR(vRR.z(), 0.0, 0.01);
574 Eigen::Vector3d vFL(3.0, 0, 0), vFR(3.0, 0, 0), vRL(3.0, 0, 0), vRR(3.0, 0, 0);
575 vehicleModel.setWheelSpeedsTester(vFL, vFR, vRL, vRR);
578 double rpm2ms = 0.203 * 2 * M_PI / 60.0;
579 double expectedRPM = 3.0 / rpm2ms;
581 ASSERT_NEAR(vehicleModel.getWheelspeeds().FL, expectedRPM, 0.01);
582 ASSERT_NEAR(vehicleModel.getWheelspeeds().FR, expectedRPM, 0.01);
583 ASSERT_NEAR(vehicleModel.getWheelspeeds().RL, expectedRPM, 0.01);
584 ASSERT_NEAR(vehicleModel.getWheelspeeds().RR, expectedRPM, 0.01);
588 Eigen::Vector3d vFL(0.0, 0, 0), vFR(0.0, 0, 0), vRL(0.0, 0, 0), vRR(0.0, 0, 0);
589 vehicleModel.setWheelSpeedsTester(vFL, vFR, vRL, vRR);
591 ASSERT_EQ(vehicleModel.getWheelspeeds().FL, 0);
592 ASSERT_EQ(vehicleModel.getWheelspeeds().FR, 0);
593 ASSERT_EQ(vehicleModel.getWheelspeeds().RL, 0);
594 ASSERT_EQ(vehicleModel.getWheelspeeds().RR, 0);
605 vehicleModel.setPosition(Eigen::Vector3d(0, 0, 0));
606 vehicleModel.setOrientation(Eigen::Vector3d(0, 0, 0));
608 auto wheels = vehicleModel.getWheelPositions();
611 ASSERT_NEAR(wheels[0].x(), 0.726, 0.01);
612 ASSERT_NEAR(wheels[0].y(), 0.6, 0.01);
613 ASSERT_NEAR(wheels[1].x(), 0.726, 0.01);
614 ASSERT_NEAR(wheels[1].y(), -0.6, 0.01);
615 ASSERT_NEAR(wheels[2].x(), -0.804, 0.01);
616 ASSERT_NEAR(wheels[2].y(), 0.6, 0.01);
617 ASSERT_NEAR(wheels[3].x(), -0.804, 0.01);
618 ASSERT_NEAR(wheels[3].y(), -0.6, 0.01);
623 vehicleModel.setPosition(Eigen::Vector3d(0, 0, 0));
624 vehicleModel.setOrientation(Eigen::Vector3d(0, 0, - M_PI / 2));
626 auto wheels = vehicleModel.getWheelPositions();
628 ASSERT_NEAR(wheels[0].x(), -0.6, 0.01);
629 ASSERT_NEAR(wheels[0].y(), 0.726, 0.01);
630 ASSERT_NEAR(wheels[1].x(), 0.6, 0.01);
631 ASSERT_NEAR(wheels[1].y(), 0.726, 0.01);
632 ASSERT_NEAR(wheels[2].x(), -0.6, 0.01);
633 ASSERT_NEAR(wheels[2].y(), -0.804, 0.01);
634 ASSERT_NEAR(wheels[3].x(), 0.6, 0.01);
635 ASSERT_NEAR(wheels[3].y(), -0.804, 0.01);
639 vehicleModel.setPosition(Eigen::Vector3d(1, 1, 1));
640 vehicleModel.setOrientation(Eigen::Vector3d(0, 0, 0));
642 auto wheels = vehicleModel.getWheelPositions();
644 ASSERT_NEAR(wheels[0].x(), 1.726, 0.01);
645 ASSERT_NEAR(wheels[0].y(), 1.6, 0.01);
646 ASSERT_NEAR(wheels[1].x(), 1.726, 0.01);
647 ASSERT_NEAR(wheels[1].y(), -0.6 + 1, 0.01);
648 ASSERT_NEAR(wheels[2].x(), -0.804 + 1 , 0.01);
649 ASSERT_NEAR(wheels[2].y(), 1.6, 0.01);
650 ASSERT_NEAR(wheels[3].x(), -0.804 + 1, 0.01);
651 ASSERT_NEAR(wheels[3].y(), -0.6 + 1, 0.01);
661 Eigen::Vector3d friction = Eigen::Vector3d(0, 0, 0);
662 Eigen::Vector3d result = vehicleModel.getCalculateAccelerations(0,0,0,0,0,0,0,0,friction);
663 ASSERT_EQ(result.x() , 0);
664 ASSERT_EQ(result.y() , 0);
665 ASSERT_EQ(result.z() , 0);
672 Eigen::Vector3d friction = Eigen::Vector3d(10, 0, 0);
673 Eigen::Vector3d result = vehicleModel.getCalculateAccelerations(0,0,0,0,0,0,0,0,friction);
674 ASSERT_NEAR(result.x() , 0.0498 , 0.01);
675 ASSERT_EQ(result.y() , 0);
676 ASSERT_EQ(result.z() , 0);
680 Eigen::Vector3d friction = Eigen::Vector3d(0, 0, 0);
681 Eigen::Vector3d result = vehicleModel.getCalculateAccelerations(0,0,0,5,5,0,0,0,friction);
682 ASSERT_NEAR(result.x() , 0.0498 , 0.01);
683 ASSERT_EQ(result.y() , 0);
684 ASSERT_EQ(result.z() , 0);
688 Eigen::Vector3d friction = Eigen::Vector3d(2, 0, 0);
689 Eigen::Vector3d result = vehicleModel.getCalculateAccelerations(0,0,0,-5,-5,0,0,0,friction);
690 ASSERT_NEAR(result.x() , -8/200.707 , 0.01);
691 ASSERT_EQ(result.y() , 0);
692 ASSERT_EQ(result.z() , 0);
696 Eigen::Vector3d friction = Eigen::Vector3d(0, 0, 0);
697 Eigen::Vector3d result = vehicleModel.getCalculateAccelerations(0,0,0,5,5,0.1,0,0,friction);
698 ASSERT_NEAR(result.x() , 0.0498 , 0.01);
699 ASSERT_NEAR(result.y() , -0.005 , 0.01);
700 ASSERT_NEAR(result.z() , 0 , 0.01);
713 vehicleModel.setVelocity(Eigen::Vector3d(0, 0, 0));
714 vehicleModel.setSteeringSetpointFront(0.0);
716 Eigen::Vector3d result = vehicleModel.getGetDynamicStates(1);
718 ASSERT_EQ(result.x(), 0);
719 ASSERT_NEAR(result.y(), 0.067313 , 0.001 );
720 ASSERT_NEAR(result.z(), 0 + 0.00331369 , 0.001);
726 vehicleModel.setVelocity(Eigen::Vector3d(0, 0, 0));
727 vehicleModel.setSteeringSetpointFront(0.0);
728 vehicleModel.setTorques(
Wheels{0, 0, 60, 60});
730 Eigen::Vector3d result = vehicleModel.getGetDynamicStates(1);
732 ASSERT_NEAR(result.x(), 10.3 , 0.1);
733 ASSERT_NEAR(result.y(), 0.067313 , 0.001 );
734 ASSERT_NEAR(result.z(), 0+ 0.00331369, 0.001);
738 vehicleModel.setVelocity(Eigen::Vector3d(0, 0, 0));
739 vehicleModel.setSteeringSetpointFront(0);
740 vehicleModel.setTorques(
Wheels{0, 0, -60, -60});
741 Eigen::Vector3d result = vehicleModel.getGetDynamicStates(1);
743 ASSERT_NEAR(result.x(), -10.3 , 0.1);
744 ASSERT_NEAR(result.y(), 0.067313 , 0.001 );
745 ASSERT_NEAR(result.z(), 0 + 0.00331369, 0.001);