Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
transform.cpp
Go to the documentation of this file.
1#include "transform.hpp"
2
3Eigen::Vector3d rigidBodyVelocity(Eigen::Vector3d v, Eigen::Vector3d r, Eigen::Vector3d omega)
4{
5 return (v + omega.cross(r));
6}
7
8Eigen::Vector3d rigidBodyAcceleration(
9 Eigen::Vector3d a, Eigen::Vector3d r, Eigen::Vector3d omega, Eigen::Vector3d alpha)
10{
11 return (a + omega.cross(omega.cross(r)) + alpha.cross(r));
12}
13
14Eigen::Matrix3d eulerAnglesToRotMat(Eigen::Vector3d& angles)
15{
16 Eigen::AngleAxisd rollAngle(-angles.x(), Eigen::Vector3d::UnitX());
17 Eigen::AngleAxisd yawAngle(-angles.z(), Eigen::Vector3d::UnitZ());
18 Eigen::AngleAxisd pitchAngle(-angles.y(), Eigen::Vector3d::UnitY());
19
20 // rotation order matches with tf2
21 Eigen::Quaternion<double> q = rollAngle * pitchAngle * yawAngle;
22
23 Eigen::Matrix3d rotationMatrix = q.matrix();
24 return rotationMatrix;
25}
26
27Eigen::Vector3d inverseTranslation(Eigen::Vector3d trans, Eigen::Vector3d rot)
28{
29 Eigen::Matrix3d rotationMatrix = eulerAnglesToRotMat(rot);
30
31 return (-rotationMatrix * trans);
32}
33
34LandmarkList transformLmList(LandmarkList& in, Eigen::Vector3d trans, Eigen::Vector3d rot)
35{
36 Eigen::Matrix3d rotationMatrix = eulerAnglesToRotMat(rot);
37 Eigen::Vector3d transInverse = inverseTranslation(trans, rot);
38
39 LandmarkList out;
40 for (auto& lm : in.list)
41 {
42 Landmark temp = lm;
43 temp.position = rotationMatrix * lm.position;
44 temp.position += transInverse;
45 temp.id = lm.id;
46 out.list.push_back(temp);
47 }
48
49 return out;
50}
51
52Track transformTrack(Track& in, Eigen::Vector3d trans, Eigen::Vector3d rot)
53{
54 Eigen::Matrix3d rotationMatrix = eulerAnglesToRotMat(rot);
55 Eigen::Vector3d transInverse = inverseTranslation(trans, rot);
56
57 Track out = in;
59 out.left_lane.clear();
60 for (auto& lm : in.left_lane)
61 {
62 Landmark temp = lm;
63 temp.position = rotationMatrix * lm.position;
64 temp.position += transInverse;
65 temp.id = lm.id;
66 out.left_lane.push_back(temp);
67 }
68 out.right_lane.clear();
69 for (auto& lm : in.right_lane)
70 {
71 Landmark temp = lm;
72 temp.position = rotationMatrix * lm.position;
73 temp.position += transInverse;
74 temp.id = lm.id;
75 out.right_lane.push_back(temp);
76 }
77 out.unknown.clear();
78 for (auto& lm : in.unknown)
79 {
80 Landmark temp = lm;
81 temp.position = rotationMatrix * lm.position;
82 temp.position += transInverse;
83 temp.id = lm.id;
84 out.unknown.push_back(temp);
85 }
86
87 out.time_keeping_gates.clear();
88 for (auto& gate : in.time_keeping_gates)
89 {
90 Landmark temp1 = gate.first;
91 temp1.position = rotationMatrix * gate.first.position;
92 temp1.position += transInverse;
93 temp1.id = gate.first.id;
94 Landmark temp2 = gate.second;
95 temp2.position = rotationMatrix * gate.second.position;
96 temp2.position += transInverse;
97 temp2.id = gate.second.id;
98
99 out.time_keeping_gates.push_back(std::make_pair(temp1, temp2));
100 }
101
102 return out;
103}
int id
Definition types.hpp:25
Eigen::Vector3d position
Definition types.hpp:26
std::vector< Landmark > list
Definition types.hpp:51
std::vector< std::pair< Landmark, Landmark > > time_keeping_gates
Definition types.hpp:45
std::vector< Landmark > left_lane
Definition types.hpp:42
bool lanesFirstWithLastConnected
Definition types.hpp:41
std::vector< Landmark > unknown
Definition types.hpp:44
std::vector< Landmark > right_lane
Definition types.hpp:43
Eigen::Vector3d inverseTranslation(Eigen::Vector3d trans, Eigen::Vector3d rot)
Definition transform.cpp:27
LandmarkList transformLmList(LandmarkList &in, Eigen::Vector3d trans, Eigen::Vector3d rot)
Definition transform.cpp:34
Eigen::Vector3d rigidBodyVelocity(Eigen::Vector3d v, Eigen::Vector3d r, Eigen::Vector3d omega)
Definition transform.cpp:3
Track transformTrack(Track &in, Eigen::Vector3d trans, Eigen::Vector3d rot)
Definition transform.cpp:52
Eigen::Vector3d rigidBodyAcceleration(Eigen::Vector3d a, Eigen::Vector3d r, Eigen::Vector3d omega, Eigen::Vector3d alpha)
Definition transform.cpp:8
Eigen::Matrix3d eulerAnglesToRotMat(Eigen::Vector3d &angles)
Definition transform.cpp:14