5 #include <VirtualRobot/MathTools.h>
14 nlohmann::json& defaultConfig,
15 const std::string& entryName,
19 if (userConfig.find(entryName) != userConfig.end())
21 auto vec = userConfig[entryName].get<std::vector<float>>();
24 return Eigen::Map<Eigen::VectorXf>(vec.data(), vec.size());
28 return Eigen::VectorXf::Ones(size) *
value;
31 <<
" have size 0, fall back to default";
34 auto vec = defaultConfig[entryName].get<std::vector<float>>();
35 return Eigen::Map<Eigen::VectorXf>(vec.data(), vec.size());
39 getEigenMatrix(nlohmann::json& userConfig,
const std::string& entryName, Eigen::MatrixXf& mat)
41 if (userConfig.find(entryName) != userConfig.end())
43 auto vec = userConfig[entryName].get<std::vector<std::vector<float>>>();
44 int rows = vec.size();
45 int cols = vec[0].size();
49 mat.resize(rows, cols);
50 for (
int i = 0; i < rows; i++)
52 for (
int j = 0; j < cols; j++)
54 mat(i, j) = vec[i][j];
67 Eigen::VectorXf defaultValue,
68 const std::string& entryName)
70 if (userConfig.find(entryName) != userConfig.end())
72 auto vec = userConfig[entryName].get<std::vector<float>>();
73 if (vec.size() == (unsigned)defaultValue.size())
75 return Eigen::Map<Eigen::VectorXf>(vec.data(), vec.size());
77 ARMARX_WARNING <<
"size of the user defined parameter " << entryName
78 <<
" doesn't correspond to default size, use default value instead";
85 Eigen::Vector3d& targetPosition,
90 Eigen::Matrix4d currentPosed = currentPose.cast<
double>();
91 Eigen::Vector3d currentPosid = currentPosed.block<3, 1>(0, 3);
92 posiError = (currentPosid - targetPosition).
norm();
95 oriError = targetQuaternion.angularDistance(currentOrientation);
98 oriError = 2 *
M_PI - oriError;
105 Eigen::Vector3f rpy = VirtualRobot::MathTools::eigen4f2rpy(pose);
106 datafields[name +
"_x"] =
new Variant(pose(0, 3));
107 datafields[name +
"_y"] =
new Variant(pose(1, 3));
108 datafields[name +
"_z"] =
new Variant(pose(2, 3));
109 datafields[name +
"_rx"] =
new Variant(rpy(0));
110 datafields[name +
"_ry"] =
new Variant(rpy(1));
111 datafields[name +
"_rz"] =
new Variant(rpy(2));
117 for (
int i = 0; i < vec.size(); i++)
126 j = nlohmann::json{{
"qw", fp.orientation->qw},
127 {
"qx", fp.orientation->qx},
128 {
"qy", fp.orientation->qy},
129 {
"qz", fp.orientation->qz},
130 {
"x", fp.position->x},
131 {
"y", fp.position->y},
132 {
"z", fp.position->z}};
138 j.at(
"qw").get_to(fp.orientation->qw);
139 j.at(
"qx").get_to(fp.orientation->qx);
140 j.at(
"qy").get_to(fp.orientation->qy);
141 j.at(
"qz").get_to(fp.orientation->qz);
142 j.at(
"x").get_to(fp.position->x);
143 j.at(
"y").get_to(fp.position->y);
144 j.at(
"z").get_to(fp.position->z);
157 to_json(nlohmann::json& j,
const PoseBasePtr& fp)
161 to_json(j, PosePtr::dynamicCast(fp));
190 Eigen::Matrix4f mat = VirtualRobot::MathTools::quat2eigen4f(
static_cast<float>(dvec[4]),
191 static_cast<float>(dvec[5]),
192 static_cast<float>(dvec[6]),
193 static_cast<float>(dvec[3]));
194 mat(0, 3) =
static_cast<float>(dvec[0]);
195 mat(1, 3) =
static_cast<float>(dvec[1]);
196 mat(2, 3) =
static_cast<float>(dvec[2]);
211 std::vector<double> result;
214 for (
size_t i = 0; i < 3; ++i)
216 result.at(i) =
static_cast<double>(mat(i, 3));
221 result.at(3) =
static_cast<double>(quat.w);
222 result.at(4) =
static_cast<double>(quat.x);
223 result.at(5) =
static_cast<double>(quat.y);
224 result.at(6) =
static_cast<double>(quat.z);
239 std::vector<float> result;
242 for (
size_t i = 0; i < 3; ++i)
244 result.at(i) = mat(i, 3);
249 result.at(3) = quat.w;
250 result.at(4) = quat.x;
251 result.at(5) = quat.y;
252 result.at(6) = quat.z;
261 for (
const double& d : dvec)
271 return Eigen::Map<Eigen::VectorXf>(vec.data(), vec.size());
275 sVecToString(
const std::vector<std::string>& vec,
const std::string& delimiter)
278 for (
size_t i = 0; i < vec.size(); ++i)