1 #include "header/collisionPropagator.h" 3 CollisionPropagator::CollisionPropagator(){}
6 std::vector<double> CollisionPropagator::calculateCollisionDisturbArmVeh(Eigen::Matrix<double, 6, TOT_DOF>world_J_tip,
7 Eigen::Matrix4d wTpegtip, Eigen::Vector3d forces, Eigen::Vector3d torques){
9 Eigen::Vector3d w_forces = wTpegtip.topLeftCorner<3,3>() * forces;
10 Eigen::Vector3d w_torques = wTpegtip.topLeftCorner<3,3>() * torques;
12 Eigen::Matrix<double, TOT_DOF, 1> deltayDot_eigen =
13 CollisionPropagator::fromPegTipToWholeRobot(world_J_tip, w_forces, w_torques);
15 return CONV::vector_eigen2std(deltayDot_eigen);
19 Eigen::Matrix<double, TOT_DOF, 1> CollisionPropagator::fromPegTipToWholeRobot(
20 Eigen::Matrix<double, 6, TOT_DOF>world_J_tip, Eigen::Vector3d w_forces, Eigen::Vector3d w_torques){
22 Eigen::Matrix<double, TOT_DOF, 1> deltayDot_eigen;
24 deltayDot_eigen = ( (world_J_tip.topRows<3>().transpose()) * w_forces ) +
25 ( (world_J_tip.bottomRows<3>().transpose()) * w_torques );
27 return deltayDot_eigen;
31 std::vector<double> CollisionPropagator::calculateCollisionDisturb(Eigen::Matrix<double, 6, ARM_DOF>world_J_veh_tip,
32 Eigen::Matrix4d wTpegtip, Eigen::Vector3d forces, Eigen::Vector3d torques){
34 Eigen::Matrix<double, 6, ARM_DOF>tip_J_veh_tip;
35 Eigen::Matrix3d pegtipRw = wTpegtip.topLeftCorner<3,3>().transpose();
36 tip_J_veh_tip.topRows<3>() = pegtipRw * world_J_veh_tip.topRows<3>();
37 tip_J_veh_tip.bottomRows<3>() = pegtipRw * world_J_veh_tip.bottomRows<3>();
39 Eigen::Matrix<double, ARM_DOF, 1> deltayDot_eigen =
40 CollisionPropagator::fromPegTipToWholeArm(tip_J_veh_tip, forces, torques);
42 return CONV::vector_eigen2std(deltayDot_eigen);
46 std::vector<double> CollisionPropagator::calculateCollisionDisturbVeh(Eigen::Matrix<double, 6, VEHICLE_DOF> world_J_veh_tip,
47 Eigen::Matrix4d wTpegtip, Eigen::Vector3d forces,
48 Eigen::Vector3d torques){
50 Eigen::Matrix<double, 6, VEHICLE_DOF>tip_J_veh_tip;
51 Eigen::Matrix3d pegtipRw = wTpegtip.topLeftCorner<3,3>().transpose();
52 tip_J_veh_tip.topRows<3>() = pegtipRw * world_J_veh_tip.topRows<3>();
53 tip_J_veh_tip.bottomRows<3>() = pegtipRw * world_J_veh_tip.bottomRows<3>();
55 Eigen::Matrix<double, VEHICLE_DOF, 1> deltayDotVeh_eigen =
56 CollisionPropagator::fromPegTipToVehicle(tip_J_veh_tip, forces, torques);
58 return CONV::vector_eigen2std(deltayDotVeh_eigen);
96 Eigen::Matrix<double, ARM_DOF, 1> CollisionPropagator::fromPegTipToWholeArm(
97 Eigen::Matrix<double, 6, ARM_DOF>tip_J_veh_tip, Eigen::Vector3d forces, Eigen::Vector3d torques){
99 Eigen::Matrix<double, ARM_DOF, 1> deltayDot_eigen;
101 deltayDot_eigen = ( (tip_J_veh_tip.topRows<3>().transpose()) * forces ) +
102 ( (tip_J_veh_tip.bottomRows<3>().transpose()) * torques );
104 return deltayDot_eigen;
114 Eigen::Matrix<double, VEHICLE_DOF, 1> CollisionPropagator::fromPegTipToVehicle(
115 Eigen::Matrix<double, 6, VEHICLE_DOF>tip_J_veh_tip, Eigen::Vector3d forces, Eigen::Vector3d torques){
117 Eigen::Matrix<double, VEHICLE_DOF, 1> deltayDotVeh_eigen;
119 deltayDotVeh_eigen = ( (tip_J_veh_tip.topRows<3>().transpose()) * forces ) +
120 ( (tip_J_veh_tip.bottomRows<3>().transpose()) * torques );
122 return deltayDotVeh_eigen;