RobotPlacement.cpp
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T),
5 * Karlsruhe Institute of Technology (KIT), all rights reserved.
6 *
7 * ArmarX is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
10 *
11 * ArmarX is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 *
19 * @author Simon Ottenhaus (simon dot ottenhaus at kit dot edu)
20 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21 * GNU General Public License
22 */
23
24#include "RobotPlacement.h"
25
26#include <VirtualRobot/math/Helpers.h>
27
28using namespace armarx;
29
33
34std::vector<Eigen::Matrix4f>
36 int minx,
37 int maxx,
38 float dy,
39 int miny,
40 int maxy,
41 float da,
42 int mina,
43 int maxa)
44{
45 std::vector<Eigen::Matrix4f> r;
46 for (int x = minx; x <= maxx; x++)
47 for (int y = miny; y <= maxy; y++)
48 for (int a = mina; a <= maxa; a++)
49 {
50 r.emplace_back(math::Helpers::CreatePose(
51 Eigen::Vector3f(x * dx, y * dy, 0),
52 Eigen::AngleAxisf(a * da, Eigen::Vector3f::UnitZ()).toRotationMatrix()));
53 }
54 return r;
55}
56
57std::vector<RobotPlacement::Result>
58RobotPlacement::evaluatePlacements(const std::vector<Eigen::Matrix4f>& robotPlacements,
60{
61 std::vector<RobotPlacement::Result> r;
62 std::vector<Eigen::Matrix4f> tcpTargets;
63 for (const Eigen::Matrix4f& pp : params.prePoses)
64 {
65 tcpTargets.emplace_back(pp);
66 }
67 std::vector<Eigen::Matrix4f> grasPoses = params.graspTrajectory->getAllKeypointPoses();
68
69 for (const Eigen::Matrix4f& placement : robotPlacements)
70 {
71 Eigen::Matrix4f invPlacement = placement.inverse();
72 std::vector<Eigen::Matrix4f> localPoses;
73 for (const Eigen::Matrix4f& tcpPose : tcpTargets)
74 {
75 localPoses.emplace_back(invPlacement * tcpPose);
76 }
77 DiffIKResult ikResult = ikProvider->SolveAbsolute(localPoses.at(0));
78 throw LocalException("not implemented");
79 }
80 return {};
81}
RobotPlacement(const DiffIKProviderPtr &ikProvider)
std::vector< Result > evaluatePlacements(const std::vector< Eigen::Matrix4f > &robotPlacements, const PlacementParams &params)
static std::vector< Eigen::Matrix4f > CreateGrid(float dx, int minx, int maxx, float dy, int miny, int maxy, float da, int mina, int maxa)
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::shared_ptr< class DiffIKProvider > DiffIKProviderPtr
std::vector< Eigen::Matrix4f > prePoses