@@ -127,15 +127,13 @@ class ControlBoardPositionDirectCoupledPendulumFixture : public ::testing::Test
127127protected:
128128 // void SetUp() override
129129 ControlBoardPositionDirectCoupledPendulumFixture ()
130- : testFixture{(std::filesystem::path (CMAKE_CURRENT_SOURCE_DIR )
131- / " coupled_pendulum_two_joints_coupled.sdf" )
132- .string ()}
133130 {
131+ yarp::os::NetworkBase::setLocalMode (true );
132+ testFixture = std::make_unique<gz::sim::TestFixture>(
133+ (std::filesystem::path (CMAKE_CURRENT_SOURCE_DIR ) / " coupled_pendulum_two_joints_coupled.sdf" ).string ());
134134 gz::common::Console::SetVerbosity (4 );
135-
136- testFixture.
137- // Use configure callback to get values at startup
138- OnConfigure ([&](const gz::sim::Entity& _worldEntity,
135+ // Use configure callback to get values at startup
136+ testFixture->OnConfigure ([&](const gz::sim::Entity& _worldEntity,
139137 const std::shared_ptr<const sdf::Element>& /* _sdf*/ ,
140138 gz::sim::EntityComponentManager& _ecm,
141139 gz::sim::EventManager& /* _eventMgr*/ ) {
@@ -162,6 +160,25 @@ class ControlBoardPositionDirectCoupledPendulumFixture : public ::testing::Test
162160 iEncoders = nullptr ;
163161 ASSERT_TRUE (driver->view (iEncoders));
164162
163+ yarp::os::Property prop;
164+ prop.put (" device" , " remotecontrolboardremapper" );
165+
166+ prop.addGroup (" axesNames" );
167+ auto & botAxesList = prop.findGroup (" axesNames" ).addList ();
168+ botAxesList.addString (" fixed_base" );
169+ botAxesList.addString (" upper_joint" );
170+ botAxesList.addString (" lower_joint" );
171+
172+ prop.addGroup (" remoteControlBoards" );
173+ auto & botRCBList = prop.findGroup (" remoteControlBoards" ).addList ();
174+ botRCBList.addString (" /coupledPendulumGazebo/body" );
175+
176+ prop.put (" localPortPrefix" ," /gz-sim-posdir-test" );
177+
178+ ASSERT_TRUE (remote_controlboard_remapper_driver.open (prop));
179+ ASSERT_TRUE (remote_controlboard_remapper_driver.view (posDirect_remapper));
180+ ASSERT_TRUE (posDirect_remapper != nullptr );
181+
165182 // Get joint1
166183 auto jointEntity0 = model.JointByName (_ecm, " upper_joint" );
167184 EXPECT_NE (gz::sim::kNullEntity , jointEntity0);
@@ -175,6 +192,7 @@ class ControlBoardPositionDirectCoupledPendulumFixture : public ::testing::Test
175192 // Set joint in torque control mode
176193 ASSERT_TRUE (iControlMode->setControlMode (0 , VOCAB_CM_POSITION_DIRECT ));
177194 ASSERT_TRUE (iControlMode->setControlMode (1 , VOCAB_CM_POSITION_DIRECT ));
195+ ASSERT_TRUE (iControlMode->setControlMode (2 , VOCAB_CM_POSITION_DIRECT ));
178196
179197 // Print number of joint configured
180198 int nJointsConfigured{};
@@ -187,21 +205,23 @@ class ControlBoardPositionDirectCoupledPendulumFixture : public ::testing::Test
187205 }
188206
189207 // Get SDF model name from test parameter
190- gz::sim::TestFixture testFixture;
208+ std::unique_ptr< gz::sim::TestFixture> testFixture;
191209 double linkMass{1 };
192210 double linkLength{1.0 };
193211 double linkInertiaAtLinkEnd{0.3352 }; // Computed with parallel axis theorem
194212 int plannedIterations{5000 };
195213 int iterations{0 };
196214 std::vector<std::vector<double >> trackingErrors{2 };
197- double acceptedTolerance{5e-2 };
215+ double acceptedTolerance{5e-1 };
198216 bool configured{false };
199217 gz::math::Vector3d gravity;
200218 gz::sim::Entity modelEntity;
201219 gz::sim::Model model;
202220 gz::sim::Joint joint0;
203221 gz::sim::Joint joint1;
204222 yarp::dev::PolyDriver* driver;
223+ yarp::dev::PolyDriver remote_controlboard_remapper_driver;
224+ yarp::dev::IPositionDirect* posDirect_remapper = nullptr ;
205225 yarp::dev::IPositionDirect* iPositionDirectControl = nullptr ;
206226 yarp::dev::IControlMode* iControlMode = nullptr ;
207227 yarp::dev::IEncoders* iEncoders = nullptr ;
@@ -219,19 +239,21 @@ TEST_F(ControlBoardPositionDirectFixture, CheckPositionTrackingUsingPendulumMode
219239 refTrajectory[i] = value;
220240 }
221241
222- double jointPosition;
242+ double jointPosition, jointRefPosition ;
223243
224244 testFixture
225245 .OnPreUpdate ([&](const gz::sim::UpdateInfo& _info, gz::sim::EntityComponentManager& _ecm) {
226246 // Set ref position
227247 iPositionDirectControl->setPosition (0 , refTrajectory[iterations]);
248+ iPositionDirectControl->getRefPosition (0 , &jointRefPosition);
249+ EXPECT_EQ (refTrajectory[iterations], jointRefPosition);
250+
228251 })
229252 .OnPostUpdate (
230253 [&](const gz::sim::UpdateInfo& _info, const gz::sim::EntityComponentManager& _ecm) {
231254 // std::cerr << "========== Iteration: " << iterations << std::endl;
232255
233256 iEncoders->getEncoder (0 , &jointPosition);
234-
235257 // std::cerr << "ref position: " << refTrajectory[iterations] << std::endl;
236258 // std::cerr << "joint position: " << jointPosition << std::endl;
237259
@@ -264,7 +286,7 @@ TEST_F(ControlBoardPositionDirectFixture, CheckPositionTrackingUsingPendulumMode
264286 std::cerr << " Average tracking error: " << avgTrackgingError << std::endl;
265287 EXPECT_LT (avgTrackgingError, acceptedTolerance);
266288}
267-
289+ # if defined GZ_SIM_YARP_PLUGINS_ENABLE_TESTS_WITH_ICUB_MAIN
268290TEST_F (ControlBoardPositionDirectCoupledPendulumFixture, CheckPositionTrackingUsingCoupledPendulumModel)
269291{
270292 // Generate ref trajectory
@@ -277,27 +299,32 @@ TEST_F(ControlBoardPositionDirectCoupledPendulumFixture, CheckPositionTrackingUs
277299 refTrajectory[i] = value;
278300 }
279301
280- yarp::sig::Vector jointPositions{0.0 , 0.0 };
302+ yarp::sig::Vector jointPositions{0.0 , 0.0 , 0.0 }, jointRefPositions{ 0.0 , 0.0 , 0.0 }, jointRefPositionsRemapper{ 0.0 , 0.0 , 0.0 };
281303
282- testFixture
283- .OnPreUpdate ([&](const gz::sim::UpdateInfo& _info, gz::sim::EntityComponentManager& _ecm) {
304+ testFixture->OnPreUpdate ([&](const gz::sim::UpdateInfo& _info, gz::sim::EntityComponentManager& _ecm) {
284305 // Set ref position
285- iPositionDirectControl->setPosition (0 , refTrajectory[iterations]);
286306 iPositionDirectControl->setPosition (1 , refTrajectory[iterations]);
307+ iPositionDirectControl->setPosition (2 , refTrajectory[iterations]);
308+ iPositionDirectControl->getRefPositions (jointRefPositions.data ());
309+ posDirect_remapper->getRefPositions (jointRefPositionsRemapper.data ());
310+ EXPECT_EQ (refTrajectory[iterations], jointRefPositions[1 ]);
311+ EXPECT_EQ (refTrajectory[iterations], jointRefPositions[2 ]);
312+ EXPECT_EQ (refTrajectory[iterations], jointRefPositionsRemapper[1 ]);
313+ EXPECT_EQ (refTrajectory[iterations], jointRefPositionsRemapper[2 ]);
287314 })
288315 .OnPostUpdate (
289316 [&](const gz::sim::UpdateInfo& _info, const gz::sim::EntityComponentManager& _ecm) {
290317 // std::cerr << "========== Iteration: " << iterations << std::endl;
291318
292319 iEncoders->getEncoders (jointPositions.data ());
293-
320+
294321 // std::cerr << "ref position: " << refTrajectory[iterations] << std::endl;
295322 // std::cerr << "joint position: " << jointPosition << std::endl;
296323
297324 // Tracking error
298325 // EXPECT_NEAR(jointPosition, refTrajectory[iterations], acceptedTolerance);
299- trackingErrors[0 ].push_back (abs (refTrajectory[iterations] - jointPositions[0 ]));
300- trackingErrors[1 ].push_back (abs (refTrajectory[iterations] - jointPositions[1 ]));
326+ trackingErrors[0 ].push_back (abs (refTrajectory[iterations] - jointPositions[1 ]));
327+ trackingErrors[1 ].push_back (abs (refTrajectory[iterations] - jointPositions[2 ]));
301328
302329 iterations++;
303330 })
@@ -314,7 +341,7 @@ TEST_F(ControlBoardPositionDirectCoupledPendulumFixture, CheckPositionTrackingUs
314341
315342 // Setup simulation server, this will call the post-update callbacks.
316343 // It also calls pre-update and update callbacks if those are being used.
317- testFixture. Server ()->Run (true , plannedIterations, false );
344+ testFixture-> Server ()->Run (true , plannedIterations, false );
318345 std::cerr << " Simulation completed" << std::endl;
319346 // Final assertions
320347 EXPECT_TRUE (configured);
@@ -332,5 +359,7 @@ TEST_F(ControlBoardPositionDirectCoupledPendulumFixture, CheckPositionTrackingUs
332359 EXPECT_LT (avgTrackgingError1, acceptedTolerance);
333360}
334361
362+ #endif // GZ_SIM_YARP_PLUGINS_ENABLE_TESTS_WITH_ICUB_MAIN
363+
335364} // namespace test
336365} // namespace gzyarp
0 commit comments