|  | 
| 20 | 20 | #include "random_generator_utils.hpp" | 
| 21 | 21 | #include "transmission_interface/differential_transmission.hpp" | 
| 22 | 22 | 
 | 
|  | 23 | +using hardware_interface::HW_IF_CURRENT; | 
| 23 | 24 | using hardware_interface::HW_IF_EFFORT; | 
|  | 25 | +using hardware_interface::HW_IF_FORCE; | 
| 24 | 26 | using hardware_interface::HW_IF_POSITION; | 
| 25 | 27 | using hardware_interface::HW_IF_TORQUE; | 
| 26 | 28 | using hardware_interface::HW_IF_VELOCITY; | 
| @@ -128,6 +130,8 @@ TEST(ConfigureTest, FailsWithBadHandles) | 
| 128 | 130 |   testConfigureWithBadHandles(HW_IF_VELOCITY); | 
| 129 | 131 |   testConfigureWithBadHandles(HW_IF_EFFORT); | 
| 130 | 132 |   testConfigureWithBadHandles(HW_IF_TORQUE); | 
|  | 133 | +  testConfigureWithBadHandles(HW_IF_FORCE); | 
|  | 134 | +  testConfigureWithBadHandles(HW_IF_CURRENT); | 
| 131 | 135 |   testConfigureWithBadHandles(HW_IF_ABSOLUTE_POSITION); | 
| 132 | 136 | } | 
| 133 | 137 | 
 | 
| @@ -225,6 +229,9 @@ TEST_F(BlackBoxTest, IdentityMap) | 
| 225 | 229 |       testIdentityMap(transmission, input_value, HW_IF_VELOCITY); | 
| 226 | 230 |       testIdentityMap(transmission, input_value, HW_IF_EFFORT); | 
| 227 | 231 |       testIdentityMap(transmission, input_value, HW_IF_TORQUE); | 
|  | 232 | +      testIdentityMap(transmission, input_value, HW_IF_FORCE); | 
|  | 233 | +      // testIdentityMap(transmission, input_value, HW_IF_CURRENT); | 
|  | 234 | +      // testIdentityMap(transmission, input_value, HW_IF_ABSOLUTE_POSITION); | 
| 228 | 235 |     } | 
| 229 | 236 |   } | 
| 230 | 237 | } | 
| @@ -293,6 +300,30 @@ TEST_F(WhiteBoxTest, DontMoveJoints) | 
| 293 | 300 |     EXPECT_THAT(0.0, DoubleNear(j_val[1], EPS)); | 
| 294 | 301 |   } | 
| 295 | 302 | 
 | 
|  | 303 | +  // Force interface | 
|  | 304 | +  { | 
|  | 305 | +    auto a1_handle = ActuatorHandle("act1", HW_IF_FORCE, a_vec[0]); | 
|  | 306 | +    auto a2_handle = ActuatorHandle("act2", HW_IF_FORCE, a_vec[1]); | 
|  | 307 | +    auto joint1_handle = JointHandle("joint1", HW_IF_FORCE, j_vec[0]); | 
|  | 308 | +    auto joint2_handle = JointHandle("joint2", HW_IF_FORCE, j_vec[1]); | 
|  | 309 | +    trans.configure({joint1_handle, joint2_handle}, {a1_handle, a2_handle}); | 
|  | 310 | +    trans.actuator_to_joint(); | 
|  | 311 | +    EXPECT_THAT(0.0, DoubleNear(j_val[0], EPS)); | 
|  | 312 | +    EXPECT_THAT(0.0, DoubleNear(j_val[1], EPS)); | 
|  | 313 | +  } | 
|  | 314 | + | 
|  | 315 | +  // Current interface | 
|  | 316 | +  { | 
|  | 317 | +    auto a1_handle = ActuatorHandle("act1", HW_IF_CURRENT, a_vec[0]); | 
|  | 318 | +    auto a2_handle = ActuatorHandle("act2", HW_IF_CURRENT, a_vec[1]); | 
|  | 319 | +    auto joint1_handle = JointHandle("joint1", HW_IF_CURRENT, j_vec[0]); | 
|  | 320 | +    auto joint2_handle = JointHandle("joint2", HW_IF_CURRENT, j_vec[1]); | 
|  | 321 | +    trans.configure({joint1_handle, joint2_handle}, {a1_handle, a2_handle}); | 
|  | 322 | +    trans.actuator_to_joint(); | 
|  | 323 | +    EXPECT_THAT(0.0, DoubleNear(j_val[0], EPS)); | 
|  | 324 | +    EXPECT_THAT(0.0, DoubleNear(j_val[1], EPS)); | 
|  | 325 | +  } | 
|  | 326 | + | 
| 296 | 327 |   // Absolute position interface | 
| 297 | 328 |   { | 
| 298 | 329 |     auto a1_handle = ActuatorHandle("act1", HW_IF_ABSOLUTE_POSITION, a_vec[0]); | 
| @@ -365,6 +396,30 @@ TEST_F(WhiteBoxTest, MoveFirstJointOnly) | 
| 365 | 396 |     EXPECT_THAT(0.0, DoubleNear(j_val[1], EPS)); | 
| 366 | 397 |   } | 
| 367 | 398 | 
 | 
|  | 399 | +  // Force interface | 
|  | 400 | +  { | 
|  | 401 | +    auto a1_handle = ActuatorHandle("act1", HW_IF_FORCE, a_vec[0]); | 
|  | 402 | +    auto a2_handle = ActuatorHandle("act2", HW_IF_FORCE, a_vec[1]); | 
|  | 403 | +    auto joint1_handle = JointHandle("joint1", HW_IF_FORCE, j_vec[0]); | 
|  | 404 | +    auto joint2_handle = JointHandle("joint2", HW_IF_FORCE, j_vec[1]); | 
|  | 405 | +    trans.configure({joint1_handle, joint2_handle}, {a1_handle, a2_handle}); | 
|  | 406 | +    trans.actuator_to_joint(); | 
|  | 407 | +    EXPECT_THAT(400.0, DoubleNear(j_val[0], EPS)); | 
|  | 408 | +    EXPECT_THAT(0.0, DoubleNear(j_val[1], EPS)); | 
|  | 409 | +  } | 
|  | 410 | + | 
|  | 411 | +  // Current interface | 
|  | 412 | +  { | 
|  | 413 | +    auto a1_handle = ActuatorHandle("act1", HW_IF_CURRENT, a_vec[0]); | 
|  | 414 | +    auto a2_handle = ActuatorHandle("act2", HW_IF_CURRENT, a_vec[1]); | 
|  | 415 | +    auto joint1_handle = JointHandle("joint1", HW_IF_CURRENT, j_vec[0]); | 
|  | 416 | +    auto joint2_handle = JointHandle("joint2", HW_IF_CURRENT, j_vec[1]); | 
|  | 417 | +    trans.configure({joint1_handle, joint2_handle}, {a1_handle, a2_handle}); | 
|  | 418 | +    trans.actuator_to_joint(); | 
|  | 419 | +    EXPECT_THAT(20.0, DoubleNear(j_val[0], EPS)); | 
|  | 420 | +    EXPECT_THAT(0.0, DoubleNear(j_val[1], EPS)); | 
|  | 421 | +  } | 
|  | 422 | + | 
| 368 | 423 |   // Absolute position interface | 
| 369 | 424 |   { | 
| 370 | 425 |     auto a1_handle = ActuatorHandle("act1", HW_IF_ABSOLUTE_POSITION, a_vec[0]); | 
| @@ -437,6 +492,30 @@ TEST_F(WhiteBoxTest, MoveSecondJointOnly) | 
| 437 | 492 |     EXPECT_THAT(400.0, DoubleNear(j_val[1], EPS)); | 
| 438 | 493 |   } | 
| 439 | 494 | 
 | 
|  | 495 | +  // Force interface | 
|  | 496 | +  { | 
|  | 497 | +    auto a1_handle = ActuatorHandle("act1", HW_IF_FORCE, a_vec[0]); | 
|  | 498 | +    auto a2_handle = ActuatorHandle("act2", HW_IF_FORCE, a_vec[1]); | 
|  | 499 | +    auto joint1_handle = JointHandle("joint1", HW_IF_FORCE, j_vec[0]); | 
|  | 500 | +    auto joint2_handle = JointHandle("joint2", HW_IF_FORCE, j_vec[1]); | 
|  | 501 | +    trans.configure({joint1_handle, joint2_handle}, {a1_handle, a2_handle}); | 
|  | 502 | +    trans.actuator_to_joint(); | 
|  | 503 | +    EXPECT_THAT(0.0, DoubleNear(j_val[0], EPS)); | 
|  | 504 | +    EXPECT_THAT(400.0, DoubleNear(j_val[1], EPS)); | 
|  | 505 | +  } | 
|  | 506 | + | 
|  | 507 | +  // Current interface | 
|  | 508 | +  { | 
|  | 509 | +    auto a1_handle = ActuatorHandle("act1", HW_IF_CURRENT, a_vec[0]); | 
|  | 510 | +    auto a2_handle = ActuatorHandle("act2", HW_IF_CURRENT, a_vec[1]); | 
|  | 511 | +    auto joint1_handle = JointHandle("joint1", HW_IF_CURRENT, j_vec[0]); | 
|  | 512 | +    auto joint2_handle = JointHandle("joint2", HW_IF_CURRENT, j_vec[1]); | 
|  | 513 | +    trans.configure({joint1_handle, joint2_handle}, {a1_handle, a2_handle}); | 
|  | 514 | +    trans.actuator_to_joint(); | 
|  | 515 | +    EXPECT_THAT(0.0, DoubleNear(j_val[0], EPS)); | 
|  | 516 | +    EXPECT_THAT(20.0, DoubleNear(j_val[1], EPS)); | 
|  | 517 | +  } | 
|  | 518 | + | 
| 440 | 519 |   // Absolute position interface | 
| 441 | 520 |   { | 
| 442 | 521 |     auto a1_handle = ActuatorHandle("act1", HW_IF_ABSOLUTE_POSITION, a_vec[0]); | 
| @@ -514,6 +593,30 @@ TEST_F(WhiteBoxTest, MoveBothJoints) | 
| 514 | 593 |     EXPECT_THAT(520.0, DoubleNear(j_val[1], EPS)); | 
| 515 | 594 |   } | 
| 516 | 595 | 
 | 
|  | 596 | +  // Force interface | 
|  | 597 | +  { | 
|  | 598 | +    auto a1_handle = ActuatorHandle("act1", HW_IF_FORCE, a_vec[0]); | 
|  | 599 | +    auto a2_handle = ActuatorHandle("act2", HW_IF_FORCE, a_vec[1]); | 
|  | 600 | +    auto joint1_handle = JointHandle("joint1", HW_IF_FORCE, j_vec[0]); | 
|  | 601 | +    auto joint2_handle = JointHandle("joint2", HW_IF_FORCE, j_vec[1]); | 
|  | 602 | +    trans.configure({joint1_handle, joint2_handle}, {a1_handle, a2_handle}); | 
|  | 603 | +    trans.actuator_to_joint(); | 
|  | 604 | +    EXPECT_THAT(140.0, DoubleNear(j_val[0], EPS)); | 
|  | 605 | +    EXPECT_THAT(520.0, DoubleNear(j_val[1], EPS)); | 
|  | 606 | +  } | 
|  | 607 | + | 
|  | 608 | +  // Current interface | 
|  | 609 | +  { | 
|  | 610 | +    auto a1_handle = ActuatorHandle("act1", HW_IF_CURRENT, a_vec[0]); | 
|  | 611 | +    auto a2_handle = ActuatorHandle("act2", HW_IF_CURRENT, a_vec[1]); | 
|  | 612 | +    auto joint1_handle = JointHandle("joint1", HW_IF_CURRENT, j_vec[0]); | 
|  | 613 | +    auto joint2_handle = JointHandle("joint2", HW_IF_CURRENT, j_vec[1]); | 
|  | 614 | +    trans.configure({joint1_handle, joint2_handle}, {a1_handle, a2_handle}); | 
|  | 615 | +    trans.actuator_to_joint(); | 
|  | 616 | +    EXPECT_THAT(8.0, DoubleNear(j_val[0], EPS)); | 
|  | 617 | +    EXPECT_THAT(-2.0, DoubleNear(j_val[1], EPS)); | 
|  | 618 | +  } | 
|  | 619 | + | 
| 517 | 620 |   // Absolute position interface | 
| 518 | 621 |   { | 
| 519 | 622 |     auto a1_handle = ActuatorHandle("act1", HW_IF_ABSOLUTE_POSITION, a_vec[0]); | 
|  | 
0 commit comments