28 const armarx::NJointControllerConfigPtr& config,
31 ARMARX_INFO <<
"creating task-space admittance dmp controller";
34 cfg = DeprecatedNJointTaskSpaceAdmittanceDMPControllerConfigPtr::dynamicCast(config);
38 VirtualRobot::RobotNodeSetPtr rns =
rtGetRobot()->getRobotNodeSet(cfg->nodeSetName);
40 for (
size_t i = 0; i < rns->getSize(); ++i)
42 std::string jointName = rns->getNode(i)->getName();
43 jointNames.push_back(jointName);
47 targets.push_back(ct->
asA<ControlTarget1DoFActuatorTorque>());
49 const SensorValue1DoFActuatorVelocity* velocitySensor =
50 sv->
asA<SensorValue1DoFActuatorVelocity>();
51 const SensorValue1DoFActuatorPosition* positionSensor =
52 sv->
asA<SensorValue1DoFActuatorPosition>();
63 velocitySensors.push_back(velocitySensor);
64 positionSensors.push_back(positionSensor);
68 ik.reset(
new VirtualRobot::DifferentialIK(
69 rns,
rtGetRobot()->getRootNode(), VirtualRobot::JacobiProvider::eSVDDamped));
70 ik->setDampedSvdLambda(0.0001);
71 numOfJoints = targets.size();
72 qvel_filtered.setZero(targets.size());
73 torqueLimit = cfg->jointTorqueLimit;
77 robotUnit->getSensorDevice(cfg->forceSensorName)->getSensorValue();
81 Eigen::Vector3f tcpCoMInForceSensorFrame;
82 tcpCoMInForceSensorFrame.setZero();
84 enableTCPGravityCompensation.store(cfg->enableTCPGravityCompensation);
86 if (enableTCPGravityCompensation.load())
88 tcpMass = cfg->tcpMass;
89 tcpCoMInForceSensorFrame = cfg->tcpCoMInForceSensorFrame;
92 forceOffset.setZero();
93 torqueOffset.setZero();
94 filteredForce.setZero();
95 filteredTorque.setZero();
96 filteredForceInRoot.setZero();
97 filteredTorqueInRoot.setZero();
105 taskSpaceDMPConfig.
DMPMode = cfg->dmpMode;
106 taskSpaceDMPConfig.
DMPStyle = cfg->dmpType;
119 kinematic_chain = cfg->nodeSetName;
122 useNullSpaceJointDMP = cfg->useNullSpaceJointDMP;
123 nullSpaceJointDMPPtr.reset(
new DMP::UMIDMP(100));
124 isNullSpaceJointDMPLearned =
false;
128 virtualAcc.setZero();
129 virtualVel.setZero();
130 virtualPose = Eigen::Matrix4f::Identity();
136 CtrlParams initParams = {cfg->kpImpedance,
143 Eigen::Vector3f::Zero(),
144 Eigen::Vector3f::Zero(),
146 tcpCoMInForceSensorFrame};
147 ctrlParams.reinitAllBuffers(initParams);
262 const IceUtil::Time& sensorValuesTimestamp,
263 const IceUtil::Time& timeSinceLastIteration)
266 Eigen::Matrix4f currentPose = tcp->getPoseInRootFrame();
267 Eigen::MatrixXf jacobi =
268 ik->getJacobianMatrix(tcp, VirtualRobot::IKSolver::CartesianSelection::All);
270 Eigen::VectorXf qpos(positionSensors.size());
271 Eigen::VectorXf qvel(velocitySensors.size());
272 for (
size_t i = 0; i < positionSensors.size(); ++i)
274 qpos(i) = positionSensors[i]->position;
275 qvel(i) = velocitySensors[i]->velocity;
277 qvel_filtered = (1 - cfg->qvelFilter) * qvel_filtered + cfg->qvelFilter * qvel;
278 Eigen::VectorXf currentTwist = jacobi * qvel_filtered;
279 jacobi.block(0, 0, 3, numOfJoints) =
280 0.001 * jacobi.block(0, 0, 3, numOfJoints);
282 double deltaT = timeSinceLastIteration.toSecondsDouble();
286 rt2MPBuffer.getWriteBuffer().currentPose = currentPose;
287 rt2MPBuffer.getWriteBuffer().currentTwist = currentTwist;
288 rt2MPBuffer.getWriteBuffer().deltaT = deltaT;
289 rt2MPBuffer.getWriteBuffer().currentTime += deltaT;
290 rt2MPBuffer.commitWrite();
292 rt2InterfaceBuffer.getWriteBuffer().currentTcpPose = currentPose;
293 rt2InterfaceBuffer.commitWrite();
297 Eigen::Vector6f kpImpedance = ctrlParams.getUpToDateReadBuffer().kpImpedance;
298 Eigen::Vector6f kdImpedance = ctrlParams.getUpToDateReadBuffer().kdImpedance;
300 Eigen::Vector6f kpAdmittance = ctrlParams.getUpToDateReadBuffer().kpAdmittance;
301 Eigen::Vector6f kdAdmittance = ctrlParams.getUpToDateReadBuffer().kdAdmittance;
304 Eigen::VectorXf knull = ctrlParams.getUpToDateReadBuffer().knull;
305 Eigen::VectorXf dnull = ctrlParams.getUpToDateReadBuffer().dnull;
307 float tcpMass = ctrlParams.getUpToDateReadBuffer().tcpMass;
308 Eigen::Vector3f tcpCoMInFTFrame =
309 ctrlParams.getUpToDateReadBuffer().tcpCoMInForceSensorFrame;
312 Eigen::Vector3f forceBaseline = ctrlParams.getUpToDateReadBuffer().forceBaseline;
313 Eigen::Vector3f torqueBaseline = ctrlParams.getUpToDateReadBuffer().torqueBaseline;
316 forceTorque.setZero();
317 tcpGravityCompensation.setZero();
320 Eigen::Matrix4f targetPose;
322 Eigen::VectorXf targetNullSpaceJointValues =
325 if (rtFirstRun.load())
327 rtReady.store(
false);
328 rtFirstRun.store(
false);
329 timeForCalibration = 0;
330 forceOffset.setZero();
331 torqueOffset.setZero();
333 targetPose = currentPose;
334 previousTargetPose = currentPose;
335 virtualPose = currentPose;
337 Eigen::Matrix4f forceFrameInRoot =
338 rtGetRobot()->getSensor(cfg->forceSensorName)->getRobotNode()->getPoseInRootFrame();
339 forceFrameInTCP.block<3, 3>(0, 0) =
340 currentPose.block<3, 3>(0, 0).transpose() * forceFrameInRoot.block<3, 3>(0, 0);
341 tcpCoMInTCPFrame = forceFrameInTCP.block<3, 3>(0, 0) * tcpCoMInFTFrame;
343 <<
VAROUT(targetPose) <<
"\nTCP CoM Vec (in TCP frame): \n"
344 <<
VAROUT(tcpCoMInTCPFrame);
348 if (enableTCPGravityCompensation.load())
354 targetPose = previousTargetPose;
356 (1 - cfg->forceFilter) * forceOffset +
357 cfg->forceFilter * (forceSensor->force - tcpGravityCompensation.head<3>());
359 (1 - cfg->forceFilter) * torqueOffset +
360 cfg->forceFilter * (forceSensor->torque - tcpGravityCompensation.tail<3>());
361 timeForCalibration = timeForCalibration + deltaT;
362 if (timeForCalibration > cfg->waitTimeForCalibration)
366 <<
VAROUT(forceOffset) <<
"\n"
367 <<
VAROUT(torqueOffset) <<
"\n"
368 <<
VAROUT(tcpGravityCompensation);
375 kmAdmittance = ctrlParams.getUpToDateReadBuffer().kmAdmittance;
379 if ((previousTargetPose.block<3, 1>(0, 3) - targetPose.block<3, 1>(0, 3)).norm() >
383 <<
VAROUT(targetPose) <<
"\nis too far away from\n"
384 <<
VAROUT(previousTargetPose);
385 targetPose = previousTargetPose;
387 previousTargetPose = targetPose;
395 Eigen::VectorXf poseError(6);
396 poseError.head<3>() = virtualPose.block<3, 1>(0, 3) - targetPose.block<3, 1>(0, 3);
397 Eigen::Matrix3f objDiffMat =
398 virtualPose.block<3, 3>(0, 0) * targetPose.block<3, 3>(0, 0).transpose();
399 poseError.tail<3>() = VirtualRobot::MathTools::eigen3f2rpy(objDiffMat);
404 acc = kmAdmittance.cwiseProduct(forceTorque) - kpAdmittance.cwiseProduct(poseError) -
405 kdAdmittance.cwiseProduct(virtualVel);
406 vel = virtualVel + 0.5 * deltaT * (acc + virtualAcc);
407 Eigen::VectorXf deltaPose = 0.5 * deltaT * (vel + virtualVel);
410 virtualPose.block<3, 1>(0, 3) += deltaPose.head<3>();
411 Eigen::Matrix3f deltaPoseMat =
412 VirtualRobot::MathTools::rpy2eigen3f(deltaPose(3), deltaPose(4), deltaPose(5));
413 virtualPose.block<3, 3>(0, 0) = deltaPoseMat * virtualPose.block<3, 3>(0, 0);
420 Eigen::Matrix3f diffMat =
421 virtualPose.block<3, 3>(0, 0) * currentPose.block<3, 3>(0, 0).transpose();
422 poseErrorImp.head<3>() =
423 0.001 * (virtualPose.block<3, 1>(0, 3) - currentPose.block<3, 1>(0, 3));
424 currentTwist.head<3>() *= 0.001;
425 poseErrorImp.tail<3>() = VirtualRobot::MathTools::eigen3f2rpy(diffMat);
427 kpImpedance.cwiseProduct(poseErrorImp) - kdImpedance.cwiseProduct(currentTwist);
430 Eigen::VectorXf nullspaceTorque =
431 knull.cwiseProduct(targetNullSpaceJointValues - qpos) - dnull.cwiseProduct(qvel);
434 Eigen::MatrixXf I = Eigen::MatrixXf::Identity(targets.size(), targets.size());
435 Eigen::MatrixXf jtpinv = ik->computePseudoInverseJacobianMatrix(jacobi.transpose(), 2.0);
436 Eigen::VectorXf jointDesiredTorques = jacobi.transpose() * forceImpedance +
437 (I - jacobi.transpose() * jtpinv) * nullspaceTorque;
441 for (
size_t i = 0; i < targets.size(); ++i)
443 targets.at(i)->torque = jointDesiredTorques(i);
444 if (!targets.at(i)->isValid() || isnan(targets.at(i)->torque))
446 targets.at(i)->torque = 0.0f;
450 if (fabs(targets.at(i)->torque) > fabs(torqueLimit))
452 targets.at(i)->torque =
453 fabs(torqueLimit) * (targets.at(i)->torque / fabs(targets.at(i)->torque));
457 debugRTBuffer.getWriteBuffer().desired_torques[jointNames[i]] = targets.at(i)->torque;
458 debugRTBuffer.getWriteBuffer().desired_nullspaceJoint[jointNames[i]] =
459 targetNullSpaceJointValues(i);
465 debugRTBuffer.getWriteBuffer().forceDesired_x = forceImpedance(0);
466 debugRTBuffer.getWriteBuffer().forceDesired_y = forceImpedance(1);
467 debugRTBuffer.getWriteBuffer().forceDesired_z = forceImpedance(2);
468 debugRTBuffer.getWriteBuffer().forceDesired_rx = forceImpedance(3);
469 debugRTBuffer.getWriteBuffer().forceDesired_ry = forceImpedance(4);
470 debugRTBuffer.getWriteBuffer().forceDesired_rz = forceImpedance(5);
472 debugRTBuffer.getWriteBuffer().ft_InRoot_x = filteredForce(0);
473 debugRTBuffer.getWriteBuffer().ft_InRoot_y = filteredForce(1);
474 debugRTBuffer.getWriteBuffer().ft_InRoot_z = filteredForce(2);
475 debugRTBuffer.getWriteBuffer().ft_InRoot_rx = filteredTorque(0);
476 debugRTBuffer.getWriteBuffer().ft_InRoot_ry = filteredTorque(1);
477 debugRTBuffer.getWriteBuffer().ft_InRoot_rz = filteredTorque(2);
479 debugRTBuffer.getWriteBuffer().ft_FilteredInRoot_x = forceTorque(0);
480 debugRTBuffer.getWriteBuffer().ft_FilteredInRoot_y = forceTorque(1);
481 debugRTBuffer.getWriteBuffer().ft_FilteredInRoot_z = forceTorque(2);
482 debugRTBuffer.getWriteBuffer().ft_FilteredInRoot_rx = forceTorque(3);
483 debugRTBuffer.getWriteBuffer().ft_FilteredInRoot_ry = forceTorque(4);
484 debugRTBuffer.getWriteBuffer().ft_FilteredInRoot_rz = forceTorque(5);
486 debugRTBuffer.getWriteBuffer().targetPose_x = targetPose(0, 3);
487 debugRTBuffer.getWriteBuffer().targetPose_y = targetPose(1, 3);
488 debugRTBuffer.getWriteBuffer().targetPose_z = targetPose(2, 3);
489 VirtualRobot::MathTools::Quaternion targetQuat =
490 VirtualRobot::MathTools::eigen4f2quat(targetPose);
491 debugRTBuffer.getWriteBuffer().targetPose_qw = targetQuat.w;
492 debugRTBuffer.getWriteBuffer().targetPose_qx = targetQuat.x;
493 debugRTBuffer.getWriteBuffer().targetPose_qy = targetQuat.y;
494 debugRTBuffer.getWriteBuffer().targetPose_qz = targetQuat.z;
496 debugRTBuffer.getWriteBuffer().virtualPose_x = virtualPose(0, 3);
497 debugRTBuffer.getWriteBuffer().virtualPose_y = virtualPose(1, 3);
498 debugRTBuffer.getWriteBuffer().virtualPose_z = virtualPose(2, 3);
499 VirtualRobot::MathTools::Quaternion virtualQuat =
500 VirtualRobot::MathTools::eigen4f2quat(virtualPose);
501 debugRTBuffer.getWriteBuffer().virtualPose_qw = virtualQuat.w;
502 debugRTBuffer.getWriteBuffer().virtualPose_qx = virtualQuat.x;
503 debugRTBuffer.getWriteBuffer().virtualPose_qy = virtualQuat.y;
504 debugRTBuffer.getWriteBuffer().virtualPose_qz = virtualQuat.z;
508 debugRTBuffer.getWriteBuffer().currentPose_x = currentPose(0, 3);
509 debugRTBuffer.getWriteBuffer().currentPose_y = currentPose(1, 3);
510 debugRTBuffer.getWriteBuffer().currentPose_z = currentPose(2, 3);
511 VirtualRobot::MathTools::Quaternion currentQuat =
512 VirtualRobot::MathTools::eigen4f2quat(currentPose);
513 debugRTBuffer.getWriteBuffer().currentPose_qw = currentQuat.w;
514 debugRTBuffer.getWriteBuffer().currentPose_qx = currentQuat.x;
515 debugRTBuffer.getWriteBuffer().currentPose_qy = currentQuat.y;
516 debugRTBuffer.getWriteBuffer().currentPose_qz = currentQuat.z;
517 debugRTBuffer.getWriteBuffer().deltaT = deltaT;
519 debugRTBuffer.getWriteBuffer().currentKpos_x = kpImpedance(0);
520 debugRTBuffer.getWriteBuffer().currentKpos_y = kpImpedance(1);
521 debugRTBuffer.getWriteBuffer().currentKpos_z = kpImpedance(2);
522 debugRTBuffer.getWriteBuffer().currentKori_x = kpImpedance(3);
523 debugRTBuffer.getWriteBuffer().currentKori_y = kpImpedance(4);
524 debugRTBuffer.getWriteBuffer().currentKori_z = kpImpedance(5);
525 debugRTBuffer.getWriteBuffer().currentKnull_x = knull.x();
526 debugRTBuffer.getWriteBuffer().currentKnull_y = knull.y();
527 debugRTBuffer.getWriteBuffer().currentKnull_z = knull.z();
529 debugRTBuffer.getWriteBuffer().currentDpos_x = kdImpedance(0);
530 debugRTBuffer.getWriteBuffer().currentDpos_y = kdImpedance(1);
531 debugRTBuffer.getWriteBuffer().currentDpos_z = kdImpedance(2);
532 debugRTBuffer.getWriteBuffer().currentDori_x = kdImpedance(3);
533 debugRTBuffer.getWriteBuffer().currentDori_y = kdImpedance(4);
534 debugRTBuffer.getWriteBuffer().currentDori_z = kdImpedance(5);
535 debugRTBuffer.getWriteBuffer().currentDnull_x = dnull.x();
536 debugRTBuffer.getWriteBuffer().currentDnull_y = dnull.y();
537 debugRTBuffer.getWriteBuffer().currentDnull_z = dnull.z();
539 debugRTBuffer.getWriteBuffer().kmAdmittance = kmAdmittance;
540 debugRTBuffer.getWriteBuffer().gravityCompensation = tcpGravityCompensation;
541 debugRTBuffer.getWriteBuffer().forceOffset = forceOffset;
542 debugRTBuffer.getWriteBuffer().torqueOffset = torqueOffset;
543 debugRTBuffer.getWriteBuffer().forceBaseline = forceBaseline;
544 debugRTBuffer.getWriteBuffer().torqueBaseline = torqueBaseline;
546 debugRTBuffer.commitWrite();
820 auto values = debugRTBuffer.getUpToDateReadBuffer().desired_torques;
821 for (
auto& pair : values)
823 datafields[
"torqueDesired_" + pair.first] =
new Variant(pair.second);
826 auto values_null = debugRTBuffer.getUpToDateReadBuffer().desired_nullspaceJoint;
827 for (
auto& pair : values_null)
829 datafields[
"nullspaceDesired_" + pair.first] =
new Variant(pair.second);
832 datafields[
"canVal"] =
new Variant(debugRTBuffer.getUpToDateReadBuffer().currentCanVal);
833 datafields[
"mpcfactor"] =
new Variant(debugRTBuffer.getUpToDateReadBuffer().mpcfactor);
834 datafields[
"targetPose_x"] =
835 new Variant(debugRTBuffer.getUpToDateReadBuffer().targetPose_x);
836 datafields[
"targetPose_y"] =
837 new Variant(debugRTBuffer.getUpToDateReadBuffer().targetPose_y);
838 datafields[
"targetPose_z"] =
839 new Variant(debugRTBuffer.getUpToDateReadBuffer().targetPose_z);
840 datafields[
"targetPose_qw"] =
841 new Variant(debugRTBuffer.getUpToDateReadBuffer().targetPose_qw);
842 datafields[
"targetPose_qx"] =
843 new Variant(debugRTBuffer.getUpToDateReadBuffer().targetPose_qx);
844 datafields[
"targetPose_qy"] =
845 new Variant(debugRTBuffer.getUpToDateReadBuffer().targetPose_qy);
846 datafields[
"targetPose_qz"] =
847 new Variant(debugRTBuffer.getUpToDateReadBuffer().targetPose_qz);
849 datafields[
"virtualPose_x"] =
850 new Variant(debugRTBuffer.getUpToDateReadBuffer().virtualPose_x);
851 datafields[
"virtualPose_y"] =
852 new Variant(debugRTBuffer.getUpToDateReadBuffer().virtualPose_y);
853 datafields[
"virtualPose_z"] =
854 new Variant(debugRTBuffer.getUpToDateReadBuffer().virtualPose_z);
855 datafields[
"virtualPose_qw"] =
856 new Variant(debugRTBuffer.getUpToDateReadBuffer().virtualPose_qw);
857 datafields[
"virtualPose_qx"] =
858 new Variant(debugRTBuffer.getUpToDateReadBuffer().virtualPose_qx);
859 datafields[
"virtualPose_qy"] =
860 new Variant(debugRTBuffer.getUpToDateReadBuffer().virtualPose_qy);
861 datafields[
"virtualPose_qz"] =
862 new Variant(debugRTBuffer.getUpToDateReadBuffer().virtualPose_qz);
864 datafields[
"currentPose_x"] =
865 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentPose_x);
866 datafields[
"currentPose_y"] =
867 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentPose_y);
868 datafields[
"currentPose_z"] =
869 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentPose_z);
870 datafields[
"currentPose_qw"] =
871 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentPose_qw);
872 datafields[
"currentPose_qx"] =
873 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentPose_qx);
874 datafields[
"currentPose_qy"] =
875 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentPose_qy);
876 datafields[
"currentPose_qz"] =
877 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentPose_qz);
879 datafields[
"currentKpos_x"] =
880 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentKpos_x);
881 datafields[
"currentKpos_y"] =
882 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentKpos_y);
883 datafields[
"currentKpos_z"] =
884 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentKpos_z);
885 datafields[
"currentKori_x"] =
886 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentKori_x);
887 datafields[
"currentKori_y"] =
888 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentKori_y);
889 datafields[
"currentKori_z"] =
890 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentKori_z);
891 datafields[
"currentKnull_x"] =
892 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentKnull_x);
893 datafields[
"currentKnull_y"] =
894 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentKnull_y);
895 datafields[
"currentKnull_z"] =
896 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentKnull_z);
898 datafields[
"currentDpos_x"] =
899 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentDpos_x);
900 datafields[
"currentDpos_y"] =
901 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentDpos_y);
902 datafields[
"currentDpos_z"] =
903 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentDpos_z);
904 datafields[
"currentDori_x"] =
905 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentDori_x);
906 datafields[
"currentDori_y"] =
907 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentDori_y);
908 datafields[
"currentDori_z"] =
909 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentDori_z);
910 datafields[
"currentDnull_x"] =
911 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentDnull_x);
912 datafields[
"currentDnull_y"] =
913 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentDnull_y);
914 datafields[
"currentDnull_z"] =
915 new Variant(debugRTBuffer.getUpToDateReadBuffer().currentDnull_z);
917 datafields[
"forceDesired_x"] =
918 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceDesired_x);
919 datafields[
"forceDesired_y"] =
920 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceDesired_y);
921 datafields[
"forceDesired_z"] =
922 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceDesired_z);
923 datafields[
"forceDesired_rx"] =
924 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceDesired_rx);
925 datafields[
"forceDesired_ry"] =
926 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceDesired_ry);
927 datafields[
"forceDesired_rz"] =
928 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceDesired_rz);
930 datafields[
"ft_InRoot_x"] =
new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_InRoot_x);
931 datafields[
"ft_InRoot_y"] =
new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_InRoot_y);
932 datafields[
"ft_InRoot_z"] =
new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_InRoot_z);
933 datafields[
"ft_InRoot_rx"] =
934 new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_InRoot_rx);
935 datafields[
"ft_InRoot_ry"] =
936 new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_InRoot_ry);
937 datafields[
"ft_InRoot_rz"] =
938 new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_InRoot_rz);
940 datafields[
"ft_FilteredInRoot_x"] =
941 new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_FilteredInRoot_x);
942 datafields[
"ft_FilteredInRoot_y"] =
943 new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_FilteredInRoot_y);
944 datafields[
"ft_FilteredInRoot_z"] =
945 new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_FilteredInRoot_z);
946 datafields[
"ft_FilteredInRoot_rx"] =
947 new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_FilteredInRoot_rx);
948 datafields[
"ft_FilteredInRoot_ry"] =
949 new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_FilteredInRoot_ry);
950 datafields[
"ft_FilteredInRoot_rz"] =
951 new Variant(debugRTBuffer.getUpToDateReadBuffer().ft_FilteredInRoot_rz);
953 datafields[
"deltaT"] =
new Variant(debugRTBuffer.getUpToDateReadBuffer().deltaT);
955 datafields[
"kmAdmittance_x"] =
956 new Variant(debugRTBuffer.getUpToDateReadBuffer().kmAdmittance(0));
957 datafields[
"kmAdmittance_y"] =
958 new Variant(debugRTBuffer.getUpToDateReadBuffer().kmAdmittance(1));
959 datafields[
"kmAdmittance_z"] =
960 new Variant(debugRTBuffer.getUpToDateReadBuffer().kmAdmittance(2));
961 datafields[
"kmAdmittance_rx"] =
962 new Variant(debugRTBuffer.getUpToDateReadBuffer().kmAdmittance(3));
963 datafields[
"kmAdmittance_ry"] =
964 new Variant(debugRTBuffer.getUpToDateReadBuffer().kmAdmittance(4));
965 datafields[
"kmAdmittance_rz"] =
966 new Variant(debugRTBuffer.getUpToDateReadBuffer().kmAdmittance(5));
968 datafields[
"gravityCompensation_x"] =
969 new Variant(debugRTBuffer.getUpToDateReadBuffer().gravityCompensation(0));
970 datafields[
"gravityCompensation_y"] =
971 new Variant(debugRTBuffer.getUpToDateReadBuffer().gravityCompensation(1));
972 datafields[
"gravityCompensation_z"] =
973 new Variant(debugRTBuffer.getUpToDateReadBuffer().gravityCompensation(2));
974 datafields[
"gravityCompensation_rx"] =
975 new Variant(debugRTBuffer.getUpToDateReadBuffer().gravityCompensation(3));
976 datafields[
"gravityCompensation_ry"] =
977 new Variant(debugRTBuffer.getUpToDateReadBuffer().gravityCompensation(4));
978 datafields[
"gravityCompensation_rz"] =
979 new Variant(debugRTBuffer.getUpToDateReadBuffer().gravityCompensation(5));
982 datafields[
"ft_offset_x"] =
983 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceOffset(0));
984 datafields[
"ft_offset_y"] =
985 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceOffset(1));
986 datafields[
"ft_offset_z"] =
987 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceOffset(2));
988 datafields[
"ft_offset_rx"] =
989 new Variant(debugRTBuffer.getUpToDateReadBuffer().torqueOffset(0));
990 datafields[
"ft_offset_ry"] =
991 new Variant(debugRTBuffer.getUpToDateReadBuffer().torqueOffset(1));
992 datafields[
"ft_offset_rz"] =
993 new Variant(debugRTBuffer.getUpToDateReadBuffer().torqueOffset(2));
995 datafields[
"ft_Baseline_x"] =
996 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceBaseline(0));
997 datafields[
"ft_Baseline_y"] =
998 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceBaseline(1));
999 datafields[
"ft_Baseline_z"] =
1000 new Variant(debugRTBuffer.getUpToDateReadBuffer().forceBaseline(2));
1001 datafields[
"ft_Baseline_rx"] =
1002 new Variant(debugRTBuffer.getUpToDateReadBuffer().torqueBaseline(0));
1003 datafields[
"ft_Baseline_ry"] =
1004 new Variant(debugRTBuffer.getUpToDateReadBuffer().torqueBaseline(1));
1005 datafields[
"ft_Baseline_rz"] =
1006 new Variant(debugRTBuffer.getUpToDateReadBuffer().torqueBaseline(2));
1008 std::string channelName = cfg->nodeSetName +
"_TaskSpaceAdmittanceControl";
1009 debugObs->setDebugChannel(channelName, datafields);