KVILImpedanceController.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package TaskSpaceActiveImpedanceControl::ArmarXObjects::NJointTaskSpaceImpedanceController
17  * @author zhou ( you dot zhou at kit dot edu )
18  * @date 2018
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
27 
28 
30 {
31 NJointControllerRegistration<NJointKVILImpedanceMPController> registrationControllerNJointKVILImpedanceMPController("NJointKVILImpedanceMPController");
32 
34  const RobotUnitPtr& robotUnit,
35  const NJointControllerConfigPtr& config,
36  const VirtualRobot::RobotPtr& robot):
38  mp::MPPool{}
39 {
40  {
41  ConfigPtrT cfg = ConfigPtrT::dynamicCast(config);
42  auto configData = ::armarx::fromAron<AronDTO, BO>(cfg->config);
43  validateConfigData(configData);
44  bufferUserToAdditionalTask.reinitAllBuffers(configData);
45  bufferUserToRt.reinitAllBuffers(configData);
46  ARMARX_IMPORTANT << VAROUT(configData.mpConfig.mpList.size());
47  createMPs(configData.mpConfig);
48 
49 // configureConstraints(configData.constraintList);
50  }
51  ARMARX_IMPORTANT << "NJointTSImpedanceMPController construction done";
52 // const auto& cfg = bufferUserToAdditionalTask.getUpToDateReadBuffer();
53 // createMPs(cfg.mpConfig);
54 // configureConstraints(cfg);
55 }
56 
57 std::string NJointKVILImpedanceMPController::getClassName(const Ice::Current &) const
58 {
59  return "NJointKVILImpedanceMPController";
60 }
61 
62 //void NJointKVILImpedanceMPController::reconfigureController(const std::string &filename, const Ice::Current &)
63 //{
64 // NJointKeypointsImpedanceController::reconfigureController(filename);
65 // reconfigureMPs(filename);
66 //}
67 
69 {
71  if (isFinished()){
73  reconfigureMPs(cfg.mpConfig);
74 // configureConstraints(cfg);
75  }
76 }
77 
78 //void NJointKVILImpedanceMPController::configureConstraints(const std::vector<Constraint>& c)
79 //{
80 // n_constraints = c.numPoints;
81 // for (int i = 0; i < n_constraints; i ++)
82 // {
83 // std::string name = "mp_"+std::to_string(i);
84 // auto c = mp_cfg[name];
85 // ConstraintPtr constraint(new Constraint());
86 // constraint->type = c["constraint_type"];
87 // ARMARX_INFO << VAROUT(constraint->type);
88 //
89 // constraint->localFrameOrigin = c["local_frame_origin_obs"];
90 // ARMARX_CHECK_EQUAL(constraint->localFrameOrigin.size(), 3);
91 // ARMARX_INFO << VAROUT(constraint->localFrameOrigin);
92 //
93 // constraint->localFrameRotMat = c["local_frame_rot_mat_obs"];
94 // ARMARX_CHECK_EQUAL(constraint->localFrameRotMat.cols(), 3);
95 // ARMARX_CHECK_EQUAL(constraint->localFrameRotMat.rows(), 3);
96 // ARMARX_INFO << VAROUT(constraint->localFrameRotMat);
97 //
98 // constraint->vmpStart = common::getEigenVec(c, c, "vmp_start");
99 // ARMARX_INFO << VAROUT(constraint->vmpStart);
100 // if (c["manifold"] == "linear")
101 // {
102 // constraint->pcaMean = c["pca_mean"];
103 // constraint->pcaComponents = c["pca_components"];
104 // ARMARX_CHECK_EQUAL(constraint->pcaMean.size(), 3);
105 // ARMARX_CHECK_EQUAL(constraint->pcaComponents.cols(), 3);
106 // ARMARX_CHECK_EQUAL(constraint->pcaComponents.rows(), 3);
107 // ARMARX_IMPORTANT << VAROUT(constraint->pcaMean) << VAROUT(constraint->pcaComponents);
108 // }
109 // else
110 // {
111 // constraint->pcaMean.setZero();
112 // constraint->pcaComponents.setZero();
113 // }
114 // if (constraint->type == "p2c")
115 // {
116 // // constraint->pcaMean = c["pca_mean"];
117 // constraint->pm_scale = c["pm_scale"];
118 // constraint->pm_init_proj_point = common::getEigenVec(c, c, "pm_init_proj_point");
119 // constraint->pm_init_tangent_vec = common::getEigenVec(c, c, "pm_init_tangent_vec");
120 // constraint->pm_init_proj_value = c["pm_init_proj_value"];
121 //
122 // ARMARX_INFO << VAROUT(constraint->pm_init_proj_point)
123 // << VAROUT(constraint->pm_init_tangent_vec)
124 // << VAROUT(constraint->pm_init_proj_value);
125 //
126 // NonlinearManifoldInfoStruct curve_info;
127 // curve_info.pm_proj_point = constraint->pm_init_proj_point;
128 // curve_info.pm_proj_point_to_mean_distance = constraint->pm_init_proj_value;
129 // curve_info.pm_tangent_vec = constraint->pm_init_tangent_vec;
130 // nl_mani_buffer.reinitAllBuffers(curve_info);
131 //
132 // p2CStruct p2c_data;
133 // p2c_data.curve_kpt_position = common::getEigenVec(c, c, "pm_imit_kpts_position_local");
134 // kpt_status_buffer.reinitAllBuffers(p2c_data);
135 //
136 // // ARMARX_CHECK_EQUAL(constraint->pcaMean.size(), 3);
137 // // ARMARX_IMPORTANT << VAROUT(constraint->pcaMean);
138 // }
139 // if (constraint->type == "p2l" or constraint->type == "p2P" or constraint->type == "p2c")
140 // {
141 // constraint->priority = c["priority"];
142 // constraint->density_std_dev = c["density_std_dev"];
143 // constraint->density_weights = getEigenVec(c, c, "density_weights");
144 // ARMARX_IMPORTANT << VAROUT(constraint->priority) << VAROUT(constraint->density_std_dev) << VAROUT(constraint->density_weights);
145 // getEigenMatrix(c, "density_mu", constraint->density_mu);
146 // ARMARX_IMPORTANT << VAROUT(constraint->density_mu);
147 // ARMARX_CHECK_EQUAL(constraint->density_mu.rows(), constraint->density_weights.size());
148 // // ARMARX_CHECK_EQUAL(constraint->density_mu.cols(), 1);
149 // }
150 // else
151 // {
152 // constraint->density_mu = Eigen::Matrix1f::Zero();
153 // constraint->density_weights.setZero(0);
154 // }
155 // constraint->spatial_scale = c["spatial_scale"];
156 // constraints.insert({name, constraint});
157 // ARMARX_INFO << " -- added constraint: " << name;
158 // }
159 // ARMARX_IMPORTANT << "--------------------------------------- Done! ---------------------------------------";
160 //}
161 
162 void NJointKVILImpedanceMPController::setCurveProjection(const Eigen::Vector3f &curve_proj_point_, float proj_value_, const Eigen::Vector3f &curve_vec_, const Ice::Current &)
163 {
164  nl_mani_buffer.getWriteBuffer().pm_proj_point = curve_proj_point_;
165  nl_mani_buffer.getWriteBuffer().pm_proj_point_to_mean_distance = proj_value_;
166  nl_mani_buffer.getWriteBuffer().pm_tangent_vec = curve_vec_;
167  nl_mani_buffer.commitWrite();
168  // curve_proj_point = curve_proj_point_;
169  // curve_proj_point_to_mean_distance = proj_value_;
170  // vec_to_min_on_curve = curve_vec_;
171  // curve_set.store(true);
172 }
173 
175 {
176  return kpt_status_buffer.getUpToDateReadBuffer().curve_kpt_position;
177 }
178 
180 {
181 // Eigen::VectorXf kptsPosition = controlStatusBuffer.getReadBuffer().filteredKeypointPosition;
182 // Eigen::VectorXf kptsVelocity = controlStatusBuffer.getReadBuffer().currentKeypointVelocity;
183 // double deltaT = controlStatusBuffer.getReadBuffer().deltaT;
184 // ARMARX_CHECK_EQUAL(kptsPosition.size(), n_constraints * 3);
185 // ARMARX_CHECK_EQUAL(kptsVelocity.size(), n_constraints * 3);
186 //
187 // /// parse arguments and run mp
188 //// ARMARX_INFO << VAROUT(controller.s.numPoints) << VAROUT(kptsPosition) << VAROUT(kptsVelocity) << VAROUT(deltaT);
189 // for (int i = 0; i < n_constraints; i++)
190 // {
191 // std::string name = "mp_"+std::to_string(i);
192 // mp::KeypointsMPInputPtr in = std::dynamic_pointer_cast<mp::KeypointsMPInput>(mps[name].input);
193 //
194 // auto c = constraints[name];
195 // Eigen::Vector3f kptPositionLocal = c->localFrameRotMat.transpose() * (kptsPosition.segment(3*i, 3) - c->localFrameOrigin);
196 // Eigen::Vector3f kptVelocityLocal = c->localFrameRotMat.transpose() * kptsVelocity.segment(3*i, 3);
197 // if (c->type == "p2p"/* or c->type == "p2c"*/)
198 // {
199 // in->keypointPosition = kptPositionLocal;
200 // in->keypointVelocity = kptVelocityLocal;
201 // }
202 //
203 //
204 // else if (c->type == "p2c")
205 // {
206 // kpt_status_buffer.getWriteBuffer().curve_kpt_position = kptPositionLocal;
207 // kpt_status_buffer.commitWrite();
208 //
209 // Eigen::Vector3f devi_vec = kptPositionLocal - nl_mani_buffer.getUpToDateReadBuffer().pm_proj_point;
210 // float dist = devi_vec.norm();
211 // devi_vec /= dist;
212 // float vel_proj = kptVelocityLocal.dot(devi_vec);
213 // in->keypointPosition(0) = dist; // c->pcaComponents.row(0).cross(kptPositionLocal - c->pcaMean).norm();
214 // in->keypointVelocity(0) = vel_proj;
215 // }
216 //
217 //
218 //
219 // else if (c->type == "p2l")
220 // {
221 // Eigen::Vector3f line_vec = c->pcaComponents.row(0);
222 // float proj_value = line_vec.dot(kptPositionLocal - c->pcaMean);
223 // Eigen::Vector3f proj_point = c->pcaMean + proj_value * line_vec;
224 // Eigen::Vector3f devi_vec = kptPositionLocal - proj_point;
225 // float dist = devi_vec.norm();
226 // devi_vec /= dist;
227 // float vel_proj = kptVelocityLocal.dot(devi_vec);
228 // in->keypointPosition(0) = dist; // c->pcaComponents.row(0).cross(kptPositionLocal - c->pcaMean).norm();
229 // in->keypointVelocity(0) = vel_proj;
230 // }
231 // else if (c->type == "p2P")
232 // {
233 // Eigen::Vector3f plane_norm_vec = c->pcaComponents.row(2);
234 // in->keypointPosition(0) = plane_norm_vec.dot(kptPositionLocal - c->pcaMean);
235 // in->keypointVelocity(0) = plane_norm_vec.dot(kptVelocityLocal);
236 // }
237 // in->deltaT = deltaT;
238 // }
239 // {
240 // // null space mp
241 // mp::JSMPInputPtr in = std::dynamic_pointer_cast<mp::JSMPInput>(mps["null"].input);
242 // in->angleRadian = controlStatusBuffer.getReadBuffer().qpos;
243 // in->angularVel = controlStatusBuffer.getReadBuffer().qvel;
244 // in->deltaT = controlStatusBuffer.getReadBuffer().deltaT;
245 // }
246 //
247 // runMPs();
248 //
249 // Eigen::VectorXf targetKeypointPosition;
250 // Eigen::VectorXf targetKeypointVelocity;
251 // Eigen::VectorXf targetDensityForce;
252 // targetKeypointPosition.setZero(kptsPosition.size());
253 // targetKeypointVelocity.setZero(kptsPosition.size());
254 // targetDensityForce.setZero(kptsPosition.size());
255 // /// parse mp target
256 // for (int i = 0; i < n_constraints; i++)
257 // {
258 // std::string name = "mp_"+std::to_string(i);
259 // mp::KeypointsMPOutputPtr out = std::dynamic_pointer_cast<mp::KeypointsMPOutput>(mps[name].output);
260 //
261 // auto c = constraints[name];
262 // Eigen::Vector3f kptPositionLocal = c->localFrameRotMat.transpose() * (kptsPosition.segment(3*i, 3) - c->localFrameOrigin);
263 //
264 // Eigen::Vector3f targetPosition;
265 // Eigen::Vector3f targetVelocity;
266 // Eigen::Vector3f density_force = Eigen::Vector3f::Zero();
267 //
268 // if (c->type == "p2p"/* or c->type == "p2c"*/)
269 // {
270 // targetPosition = out->keypointPosition;
271 // targetVelocity = out->keypointVelocity;
272 // }
273 //
274 //
275 // else if (c->type == "p2c")
276 // {
277 //// LockGuardType guard {curveDataMutex};
278 //// if (curve_set.load())
279 //// {
280 //
281 // Eigen::Vector3f curve_proj_point = nl_mani_buffer.getUpToDateReadBuffer().pm_proj_point;
282 // Eigen::Vector3f curve_tangent_vec = nl_mani_buffer.getUpToDateReadBuffer().pm_tangent_vec;
283 // float curve_proj_point_to_mean_distance = nl_mani_buffer.getUpToDateReadBuffer().pm_proj_point_to_mean_distance;
284 //
285 // Eigen::Vector3f devi_vec = kptPositionLocal - curve_proj_point;
286 // float dist = devi_vec.norm();
287 // devi_vec /= dist;
288 //
289 // /// density force
290 // // float kp = 0.0f;
291 // // if (curve_proj_point_to_mean_distance > 100.0f)
292 // // {
293 // // kp = std::signbit(curve_proj_point_to_mean_distance) ? -1 : 1 * 100.0f;
294 // // }
295 // // else
296 // // {
297 // // kp = curve_proj_point_to_mean_distance;
298 // // }
299 // Eigen::Vector3f base_force = - curve_tangent_vec * curve_proj_point_to_mean_distance * 0.0000015f;
300 // base_force = c->localFrameRotMat * base_force;
301 //
302 // Eigen::Vector1f prob_derivative = Eigen::Vector1f::Zero();
303 // Eigen::Vector1f data {curve_proj_point_to_mean_distance};
304 // for (int i = 0; i < c->density_mu.rows(); i++)
305 // {
306 // prob_derivative = prob_derivative + pdf_gradient(c->density_mu.row(i), c->density_std_dev, data);
307 // }
308 // density_force = prob_derivative(0) * curve_tangent_vec * 10.0f;
309 // density_force = c->localFrameRotMat * density_force;
310 //
311 // if (base_force.norm() > density_force.norm())
312 // {
313 // ARMARX_RT_LOGF_INFO("use base force");
314 // density_force = base_force;
315 // }
316 //
317 // /// priority
318 // if (c->priority > 0)
319 // {
320 // if (constraints["mp_0"]->type == "p2p")
321 // {
322 // /// already in root frame
323 // Eigen::Vector3f devi = kptsPosition.segment(3*i, 3) - kptsPosition.segment(0, 3);
324 // Eigen::Vector3f line_vec_root = c->localFrameRotMat * curve_tangent_vec;
325 // Eigen::Vector3f tang_vec = devi.cross(line_vec_root).cross(devi);
326 // tang_vec.normalize();
327 // float force_proj = density_force.dot(tang_vec);
328 // density_force = force_proj * tang_vec;
329 // }
330 // }
331 //
332 // targetPosition = curve_proj_point + devi_vec * out->keypointPosition(0);
333 // targetVelocity = devi_vec * out->keypointVelocity(0);
334 //
335 // // }
336 // // else
337 // // {
338 // // targetPosition = kptsPosition.segment(3*i, 3);
339 // // targetVelocity.setZero();
340 // // }
341 // }
342 //
343 //
344 // else if (c->type == "p2l")
345 // {
346 // Eigen::Vector3f line_vec = c->pcaComponents.row(0);
347 // float proj_value = line_vec.dot(kptPositionLocal - c->pcaMean);
348 // Eigen::Vector3f proj_point = c->pcaMean + proj_value * line_vec;
349 // Eigen::Vector3f devi_vec = kptPositionLocal - proj_point;
350 // float dist = devi_vec.norm();
351 // devi_vec /= dist;
352 //
353 // /// density force
354 // float kp = 0.0f;
355 // if (abs(proj_value) > 100.0f)
356 // {
357 // kp = std::signbit(proj_value) ? -1 : 1 * 100.0f;
358 // }
359 // else
360 // {
361 // kp = proj_value;
362 // }
363 // Eigen::Vector3f base_force = - c->pcaComponents.row(0) * proj_value * 0.0000015f;
364 // base_force = c->localFrameRotMat * base_force;
365 //
366 // Eigen::Vector1f prob_derivative = Eigen::Vector1f::Zero();
367 // Eigen::Vector1f data {proj_value};
368 // for (int i = 0; i < c->density_mu.rows(); i++)
369 // {
370 // prob_derivative = prob_derivative + pdf_gradient(c->density_mu.row(i), c->density_std_dev, data);
371 // }
372 // density_force = prob_derivative(0) * c->pcaComponents.row(0) * 10.0f;
373 // density_force = c->localFrameRotMat * density_force;
374 //
375 // if (base_force.norm() > density_force.norm())
376 // {
377 // ARMARX_RT_LOGF_INFO("use base force");
378 // density_force = base_force;
379 // }
380 //
381 // /// priority
382 // if (c->priority > 0)
383 // {
384 // if (constraints["mp_0"]->type == "p2p")
385 // {
386 // /// already in root frame
387 // Eigen::Vector3f devi = kptsPosition.segment(3*i, 3) - kptsPosition.segment(0, 3);
388 // Eigen::Vector3f line_vec_local = c->pcaComponents.row(0);
389 // Eigen::Vector3f line_vec_root = c->localFrameRotMat * line_vec_local;
390 // Eigen::Vector3f tang_vec = devi.cross(line_vec_root).cross(devi);
391 // tang_vec.normalize();
392 // float force_proj = density_force.dot(tang_vec);
393 // density_force = force_proj * tang_vec;
394 // }
395 // }
396 //
397 // targetPosition = proj_point + devi_vec * out->keypointPosition(0);
398 // targetVelocity = devi_vec * out->keypointVelocity(0);
399 // }
400 // else if (c->type == "p2P")
401 // {
402 // Eigen::Vector3f proj_value_vec = c->pcaComponents * (kptPositionLocal - c->pcaMean);
403 // Eigen::Vector3f plane_norm_vec = c->pcaComponents.row(2);
404 // Eigen::Vector3f proj_point = kptPositionLocal - plane_norm_vec * proj_value_vec(2);
405 //
406 // /// density force
407 // Eigen::Vector2f proj_value_on_plane = proj_value_vec.head(2);
408 // proj_value_on_plane.normalize();
409 //
410 // Eigen::Vector3f base_force = - c->pcaComponents.row(0) * proj_value_on_plane(0) - c->pcaComponents.row(1) * proj_value_on_plane(1);
411 // base_force = c->localFrameRotMat * base_force;
412 //
413 // Eigen::Vector2f prob_derivative = Eigen::Vector2f::Zero();
414 // Eigen::Vector2f data = proj_value_vec.head(2);
415 // for (int i = 0; i < c->density_mu.rows(); i++)
416 // {
417 // prob_derivative = prob_derivative + pdf_gradient(c->density_mu.row(i), c->density_std_dev, data);
418 // }
419 // density_force = (prob_derivative(0) * c->pcaComponents.row(0) + prob_derivative(1) * c->pcaComponents.row(1)) * 10.0f;
420 // density_force = c->localFrameRotMat * density_force;
421 //
422 // if (base_force.norm() > density_force.norm())
423 // {
424 // ARMARX_RT_LOGF_INFO("use base force");
425 // density_force = base_force;
426 // }
427 //
428 // /// handle priority
429 // if (c->priority > 0)
430 // {
431 // if (constraints["mp_0"]->type == "p2p")
432 // {
433 // Eigen::Vector3f devi = kptsPosition.segment(3*i, 3) - kptsPosition.segment(0, 3);
434 // Eigen::Vector3f plane_norm_vec_root = c->localFrameRotMat * plane_norm_vec;
435 // Eigen::Vector3f tang_vec = devi.cross(plane_norm_vec_root);
436 // tang_vec.normalize();
437 // float force_proj = density_force.dot(tang_vec);
438 // density_force = force_proj * tang_vec;
439 // }
440 // }
441 //
442 //
443 // targetPosition = proj_point + plane_norm_vec * out->keypointPosition(0);
444 // targetVelocity = out->keypointVelocity(0) * plane_norm_vec;
445 // }
446 // targetKeypointPosition.segment(3*i, 3) = c->localFrameRotMat * targetPosition + c->localFrameOrigin;
447 // targetKeypointVelocity.segment(3*i, 3) = c->localFrameRotMat * targetVelocity;
448 // targetDensityForce.segment(3*i, 3) = density_force;
449 // }
450 // ARMARX_CHECK_EQUAL(targetKeypointPosition.size(), n_constraints * 3);
451 // ARMARX_CHECK_EQUAL(targetKeypointVelocity.size(), n_constraints * 3);
452 // ARMARX_CHECK_EQUAL(targetDensityForce.size(), n_constraints * 3);
453 // getWriterControlStruct().desiredKeypointPosition = targetKeypointPosition;
454 // getWriterControlStruct().desiredKeypointVelocity = targetKeypointVelocity;
455 // getWriterControlStruct().desiredDensityForce = targetDensityForce;
456 // {
457 // mp::JSMPOutputPtr out = std::dynamic_pointer_cast<mp::JSMPOutput>(mps["null"].output);
458 // getWriterControlStruct().desiredNullspaceJointAngles = out->angleRadian;
459 // }
460 // writeControlStruct();
461 }
462 
464 {
465 // ARMARX_IMPORTANT << "rt pre activate: reinitialize the mp input output, as well as the rt related buffer values";
466 // NJointKeypointsImpedanceController::rtPreActivateController();
467 // for (int i = 0; i < controller.s.numPoints; i++)
468 // {
469 // std::string name = "mp_"+std::to_string(i);
470 //
471 // ARMARX_INFO << "initialize " << name;
472 //
473 // auto in = std::dynamic_pointer_cast<mp::KeypointsMPInput>(mps[name].input);
474 // auto out = std::dynamic_pointer_cast<mp::KeypointsMPOutput>(mps[name].output);
475 // auto c = constraints[name];
476 //
477 // in->keypointPosition = c->vmpStart;
478 // out->keypointPosition = c->vmpStart;
479 //
480 // if (c->type == "p2p")
481 // {
482 // in->keypointVelocity = controller.s.currentKeypointVelocity;
483 // out->keypointVelocity = controller.s.currentKeypointVelocity;
484 // }
485 // else if (c->type == "p2l")
486 // {
487 // in->keypointVelocity = Eigen::Vector1f::Zero();
488 // out->keypointVelocity = Eigen::Vector1f::Zero();
489 // }
490 // else if (c->type == "p2P")
491 // {
492 // in->keypointVelocity = Eigen::Vector1f::Zero();
493 // out->keypointVelocity = Eigen::Vector1f::Zero();
494 // }
495 // else if (c->type == "p2c")
496 // {
497 // in->keypointVelocity = Eigen::Vector1f::Zero();
498 // out->keypointVelocity = Eigen::Vector1f::Zero();
499 // }
500 // }
501 // {
502 // ARMARX_IMPORTANT << "initialize input output buffers between nullspace mp";
503 // auto in = std::dynamic_pointer_cast<mp::JSMPInput>(mps["null"].input);
504 // auto out = std::dynamic_pointer_cast<mp::JSMPOutput>(mps["null"].output);
505 // in->angleRadian = controller.s.qpos;
506 // in->angularVel = controller.s.qvel;
507 // in->deltaT = 0.0;
508 // out->angleRadian = controller.s.qpos;
509 // out->angularVel = controller.s.qvel;
510 // }
511 }
512 } /// namespace armarx::control::njoint_mp_controller::task_space
KVILImpedanceController.h
armarx::control::njoint_controller::task_space::NJointKeypointsImpedanceController::robotUnit
RobotUnitPtr robotUnit
Definition: KeypointsImpedanceController.h:115
armarx::TripleBuffer::getWriteBuffer
T & getWriteBuffer()
Definition: TripleBuffer.h:90
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:183
armarx::control::njoint_controller::task_space::NJointKeypointsImpedanceController
Brief description of class NJointKeypointsImpedanceController.
Definition: KeypointsImpedanceController.h:52
armarx::control::njoint_mp_controller::task_space::NJointKVILImpedanceMPController::NJointKVILImpedanceMPController
NJointKVILImpedanceMPController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &)
Definition: KVILImpedanceController.cpp:33
armarx::TripleBuffer::commitWrite
void commitWrite()
Definition: TripleBuffer.h:146
armarx::control::NJointKVILImpedanceMPControllerInterface::getCurveKeypointPosition
Eigen::Vector3f getCurveKeypointPosition()
math.h
armarx::control::njoint_mp_controller::task_space::NJointKVILImpedanceMPController::updateConfig
void updateConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
Definition: KVILImpedanceController.cpp:68
armarx::control::njoint_mp_controller::task_space::registrationControllerNJointKVILImpedanceMPController
NJointControllerRegistration< NJointKVILImpedanceMPController > registrationControllerNJointKVILImpedanceMPController("NJointKVILImpedanceMPController")
utils.h
armarx::control::njoint_mp_controller::task_space
This file is part of ArmarX.
Definition: AdmittanceController.cpp:28
armarx::control::common::mp::MPPool::reconfigureMPs
void reconfigureMPs(const MP::MPListConfig &mpListConfig)
Definition: MPPool.cpp:62
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::control::njoint_mp_controller::task_space::NJointKVILImpedanceMPController::rtPreActivateController
void rtPreActivateController() override
This function is called before the controller is activated.
Definition: KVILImpedanceController.cpp:463
VAROUT
#define VAROUT(x)
Definition: StringHelpers.h:182
armarx::control::njoint_controller::task_space::NJointKeypointsImpedanceController::updateConfig
void updateConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
NJointController interface.
Definition: KeypointsImpedanceController.cpp:189
armarx::control::njoint_mp_controller::task_space::NJointKVILImpedanceMPController::setCurveProjection
void setCurveProjection(const Eigen::Vector3f &curve_proj_point_, float proj_value_, const Eigen::Vector3f &curve_vec_, const Ice::Current &) override
Definition: KVILImpedanceController.cpp:162
armarx::control::njoint_mp_controller::task_space::NJointKVILImpedanceMPController::additionalTask
void additionalTask() override
Definition: KVILImpedanceController.cpp:179
armarx::control::common::mp::MPPool
Definition: MPPool.h:45
armarx::control::njoint_mp_controller::task_space::NJointKVILImpedanceMPController::bufferUserToAdditionalTask
TripleBuffer< BO > bufferUserToAdditionalTask
Definition: KVILImpedanceController.h:124
aron_conversions.h
armarx::TripleBuffer::getUpToDateReadBuffer
const T & getUpToDateReadBuffer() const
Definition: TripleBuffer.h:108
armarx::control::njoint_mp_controller::task_space::NJointKVILImpedanceMPController::getClassName
std::string getClassName(const Ice::Current &) const override
Definition: KVILImpedanceController.cpp:57
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:18
armarx::control::common::mp::MPPool::isFinished
bool isFinished(const std::string &mpName="all", const Ice::Current &iceCurrent=Ice::emptyCurrent) override
Definition: MPPool.cpp:210