Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
gripMap.cpp
Go to the documentation of this file.
1#include "track/gripMap.hpp"
2
3gripMap::gripMap(std::shared_ptr<Logger> logger) { this->logger = logger; }
4
5void gripMap::loadConfig(std::string path)
6{
7 Config cfg(path);
8 ConfigElement config = cfg.getElement("grip_map");
9 config.getElement<double>(&this->total_scale, "total_scale");
10
11 std::vector<ConfigElement> gripPoints;
12 config["points"].getElements(&gripPoints);
13
14 if (gripPoints.size() == 0)
15 {
16 this->logger->logFatal("No gripMap points provided!");
17 std::abort();
18 }
19
20 for (auto& point : gripPoints)
21 {
22 double gripValue;
23 std::vector<double> position;
24 point.getElement<std::vector<double>>(&position, "position");
25 Eigen::Vector3d positionEigen(position.at(0), position.at(1), position.at(2));
26 point.getElement<double>(&gripValue, "value");
27
28 this->mapPoints.push_back(std::make_pair(positionEigen, gripValue));
29 }
30}
31
32Wheels gripMap::getGripValues(std::array<Eigen::Vector3d, 4> in)
33{
34 std::array<double, 4> temp;
35 for (int i = 0; i < 4; ++i)
36 {
37 auto el = in.at(i);
38 auto bestPoint = std::min_element(std::begin(this->mapPoints), std::end(this->mapPoints),
39 [&el](const std::pair<Eigen::Vector3d, double>& a, const std::pair<Eigen::Vector3d, double>& b)
40 { return (a.first - el).norm() < (b.first - el).norm(); });
41 temp[i] = ((*bestPoint).second);
42 }
43
44 Wheels ret;
45 ret.FL = this->total_scale * temp[0];
46 ret.FR = this->total_scale * temp[1];
47 ret.RL = this->total_scale * temp[2];
48 ret.RR = this->total_scale * temp[3];
49
50 return ret;
51}
52
53void gripMap::transformPoints(Eigen::Vector3d trans, Eigen::Vector3d rot)
54{
55 Eigen::Matrix3d rotationMatrix = eulerAnglesToRotMat(rot);
56 Eigen::Vector3d transInverse = inverseTranslation(trans, rot);
57
58 for (int i = 0; i < this->mapPoints.size(); ++i)
59 {
60 this->mapPoints[i].first = rotationMatrix * this->mapPoints[i].first;
61 this->mapPoints[i].first += transInverse;
62 }
63}
ConfigElement getElement(string elementName)
vector< ConfigElement > getElements()
Wheels getGripValues(std::array< Eigen::Vector3d, 4 > in)
Definition gripMap.cpp:32
gripMap(std::shared_ptr< Logger > logger)
Definition gripMap.cpp:3
double total_scale
Definition gripMap.hpp:17
std::shared_ptr< Logger > logger
Definition gripMap.hpp:16
void transformPoints(Eigen::Vector3d trans, Eigen::Vector3d rot)
Definition gripMap.cpp:53
void loadConfig(std::string path)
Definition gripMap.cpp:5
std::vector< std::pair< Eigen::Vector3d, double > > mapPoints
Definition gripMap.hpp:18
std::shared_ptr< Logger > logger
Eigen::Vector3d inverseTranslation(Eigen::Vector3d trans, Eigen::Vector3d rot)
Definition transform.cpp:27
Eigen::Matrix3d eulerAnglesToRotMat(Eigen::Vector3d &angles)
Definition transform.cpp:14