CartesianImpedanceController.h
Go to the documentation of this file.
1#pragma once
2
3#include <Eigen/Geometry>
4
5#include <VirtualRobot/VirtualRobot.h>
6
7namespace armarx
8{
9 class SensorValue1DoFActuatorTorque;
10 class SensorValue1DoFActuatorVelocity;
11 class SensorValue1DoFActuatorPosition;
12
14 {
15 public:
16 struct Config
17 {
18 Eigen::Vector3f desiredPosition;
20 Eigen::Vector3f Kpos;
21 Eigen::Vector3f Dpos;
22 Eigen::Vector3f Kori;
23 Eigen::Vector3f Dori;
24 Eigen::VectorXf Knull;
25 Eigen::VectorXf Dnull;
26 Eigen::VectorXf desiredJointPosition;
28 };
29
30 //state for debugging
31 struct Debug
32 {
34 float posiError;
35 Eigen::Vector3f tcpDesiredForce;
36 Eigen::Vector3f tcpDesiredTorque;
37 };
38
39 private:
40 Eigen::VectorXf qpos;
41 Eigen::VectorXf qvel;
42 Eigen::VectorXf tcptwist;
43 Eigen::VectorXf nullqerror;
44 Eigen::VectorXf nullspaceTorque;
45 Eigen::VectorXf targetJointTorques;
46
47 Eigen::MatrixXf I;
48
49 VirtualRobot::DifferentialIKPtr ik;
50 VirtualRobot::RobotNodePtr tcp;
51
52 const float lambda = 2;
53
54 public:
56
57 int bufferSize() const;
58 void initialize(const VirtualRobot::RobotNodeSetPtr& rns);
59 const Eigen::VectorXf&
60 run(const Config& cfg,
61 std::vector<const SensorValue1DoFActuatorTorque*> torqueSensors,
62 std::vector<const SensorValue1DoFActuatorVelocity*> velocitySensors,
63 std::vector<const SensorValue1DoFActuatorPosition*> positionSensors);
64 };
65} // namespace armarx
void initialize(const VirtualRobot::RobotNodeSetPtr &rns)
const Eigen::VectorXf & run(const Config &cfg, std::vector< const SensorValue1DoFActuatorTorque * > torqueSensors, std::vector< const SensorValue1DoFActuatorVelocity * > velocitySensors, std::vector< const SensorValue1DoFActuatorPosition * > positionSensors)
Quaternion< float, 0 > Quaternionf
This file offers overloads of toIce() and fromIce() functions for STL container types.