mirror of
https://github.com/modelec/TCPSocketServer.git
synced 2026-01-18 16:37:29 +01:00
change aruco finder
This commit is contained in:
@@ -429,7 +429,8 @@ void TCPServer::startGame() {
|
|||||||
for (int i = whereAmI; i < stratPatterns.size(); i++) {
|
for (int i = whereAmI; i < stratPatterns.size(); i++) {
|
||||||
|
|
||||||
auto time = std::chrono::system_clock::now();
|
auto time = std::chrono::system_clock::now();
|
||||||
if (time - gameStart > std::chrono::seconds(85)) {
|
// TODO check for the bbest timing to return to the spawn
|
||||||
|
if (time - gameStart > std::chrono::seconds(80)) {
|
||||||
this->goEnd();
|
this->goEnd();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -643,7 +644,6 @@ void TCPServer::goToAruco(const ArucoTag &arucoTag, const int pince) {
|
|||||||
double robotPosY = this->robotPose.pos.y;
|
double robotPosY = this->robotPose.pos.y;
|
||||||
double theta = this->robotPose.theta;
|
double theta = this->robotPose.theta;
|
||||||
double decalage;
|
double decalage;
|
||||||
double rotate;
|
|
||||||
if (pince < 0 || pince > 2) {
|
if (pince < 0 || pince > 2) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -651,19 +651,15 @@ void TCPServer::goToAruco(const ArucoTag &arucoTag, const int pince) {
|
|||||||
switch (pince) {
|
switch (pince) {
|
||||||
case 0:
|
case 0:
|
||||||
decalage = 60;
|
decalage = 60;
|
||||||
rotate = -0.07;
|
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
decalage = 0;
|
decalage = 0;
|
||||||
rotate = 0;
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
decalage = -60;
|
decalage = -60;
|
||||||
rotate = 0.07;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
decalage = 0;
|
decalage = 0;
|
||||||
rotate = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -767,6 +763,26 @@ std::optional<ArucoTag> TCPServer::getBiggestArucoTag(float borneMinX, float bor
|
|||||||
return found ? std::optional(biggestTag) : std::nullopt;
|
return found ? std::optional(biggestTag) : std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::optional<ArucoTag> TCPServer::getMostCenteredArucoTag(float borneMinX, float borneMaxX, float borneMinY, float borneMaxY) {
|
||||||
|
bool found = false;
|
||||||
|
ArucoTag mostCenteredTag = ArucoTag();
|
||||||
|
for (const auto & tag : arucoTags) {
|
||||||
|
if (tag.getNbFind() < 2) break;
|
||||||
|
|
||||||
|
if (!found) {
|
||||||
|
if (tag.pos()[0] > borneMinX && tag.pos()[0] < borneMaxX && tag.pos()[1] > borneMinY && tag.pos()[1] < borneMaxY) {
|
||||||
|
mostCenteredTag = tag;
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
} else if (distanceToTag(tag) < distanceToTag(mostCenteredTag)) {
|
||||||
|
mostCenteredTag = tag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return found ? std::optional(mostCenteredTag) : std::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
void TCPServer::handleEmergency(int distance, double angle) {
|
void TCPServer::handleEmergency(int distance, double angle) {
|
||||||
this->handleEmergencyFlag = true;
|
this->handleEmergencyFlag = true;
|
||||||
|
|
||||||
@@ -871,13 +887,13 @@ void TCPServer::findAndGoFlower(StratPattern sp) {
|
|||||||
|
|
||||||
this->arucoTags.clear();
|
this->arucoTags.clear();
|
||||||
this->broadcastMessage("strat;aruco;get aruco;1\n");
|
this->broadcastMessage("strat;aruco;get aruco;1\n");
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 4; i++) {
|
||||||
usleep(400'000);
|
usleep(250'000);
|
||||||
this->broadcastMessage("strat;aruco;get aruco;1\n");
|
this->broadcastMessage("strat;aruco;get aruco;1\n");
|
||||||
}
|
}
|
||||||
usleep(100'000);
|
usleep(100'000);
|
||||||
|
|
||||||
std::optional<ArucoTag> tag = getBiggestArucoTag(100, 800, -200, 200);
|
std::optional<ArucoTag> tag = getMostCenteredArucoTag(100, 800, -200, 200);
|
||||||
|
|
||||||
if (tag.has_value()) {
|
if (tag.has_value()) {
|
||||||
if (pinceState[1] == NONE) {
|
if (pinceState[1] == NONE) {
|
||||||
@@ -980,7 +996,7 @@ void TCPServer::dropFlowers() {
|
|||||||
this->setSpeed(130);
|
this->setSpeed(130);
|
||||||
|
|
||||||
this->go(whiteDropPosition[0], 0);
|
this->go(whiteDropPosition[0], 0);
|
||||||
usleep(1'000'000);
|
usleep(2'000'000);
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
if (pinceState[i] == WHITE_FLOWER) {
|
if (pinceState[i] == WHITE_FLOWER) {
|
||||||
|
|||||||
@@ -177,6 +177,8 @@ public:
|
|||||||
|
|
||||||
std::optional<ArucoTag> getBiggestArucoTag(float borneMinX, float borneMaxX, float borneMinY, float borneMaxY);
|
std::optional<ArucoTag> getBiggestArucoTag(float borneMinX, float borneMaxX, float borneMinY, float borneMaxY);
|
||||||
|
|
||||||
|
std::optional<ArucoTag> getMostCenteredArucoTag(float borneMinX, float borneMaxX, float borneMinY, float borneMaxY);
|
||||||
|
|
||||||
void handleEmergency(int distance, double angle);
|
void handleEmergency(int distance, double angle);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -92,3 +92,7 @@ std::ostream& operator<<(std::ostream& os, const ArucoTag& tag) {
|
|||||||
os << "ArucoTag{id=" << tag.id() << ", name=" << tag.name() << ", pos=[" << tag.pos()[0] << ", " << tag.pos()[1] << "], rot=[" << tag.rot()[0] << ", " << tag.rot()[1] << ", " << tag.rot()[2] << "]}";
|
os << "ArucoTag{id=" << tag.id() << ", name=" << tag.name() << ", pos=[" << tag.pos()[0] << ", " << tag.pos()[1] << "], rot=[" << tag.rot()[0] << ", " << tag.rot()[1] << ", " << tag.rot()[2] << "]}";
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double distanceToTag(const ArucoTag& tag) {
|
||||||
|
return std::sqrt(pow(tag.pos()[0], 2) + pow(tag.pos()[1], 2));
|
||||||
|
}
|
||||||
3
utils.h
3
utils.h
@@ -5,6 +5,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
#define PI 3.14159265358979323846
|
#define PI 3.14159265358979323846
|
||||||
|
|
||||||
@@ -64,3 +65,5 @@ private:
|
|||||||
std::array<float, 3> _rot = {0, 0, 0};
|
std::array<float, 3> _rot = {0, 0, 0};
|
||||||
int nbFind = 0;
|
int nbFind = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
double distanceToTag(const ArucoTag& tag);
|
||||||
Reference in New Issue
Block a user