Merge branch 'master' of https://git.efi.th-nuernberg.de/gitea/yasarba71520/Line-Following-Robot
This commit is contained in:
commit
ea33e0b065
@ -4,7 +4,7 @@ ControlModule::ControlModule(): ControlModule(0.0, 1.0, 1.0)
|
||||
{
|
||||
}
|
||||
|
||||
ControlModule::ControlModule(float maxSpeed, float rotateSpeed, float moveSideSpeed)
|
||||
ControlModule::ControlModule(double maxSpeed, double rotateSpeed, double moveSideSpeed)
|
||||
{
|
||||
motors[0] = 0.0;
|
||||
motors[1] = 0.0;
|
||||
@ -41,15 +41,15 @@ void ControlModule::adjustSpeed(){
|
||||
};
|
||||
|
||||
void ControlModule::moveSide(int imageColumsMiddle, int contourColumsMiddle){
|
||||
float speed = moveSideSpeed * static_cast<float>(contourColumsMiddle - imageColumsMiddle)/static_cast<float>(imageColumsMiddle);
|
||||
double speed = moveSideSpeed * static_cast<double>(contourColumsMiddle - imageColumsMiddle)/static_cast<double>(imageColumsMiddle);
|
||||
motors[0] += speed;
|
||||
motors[1] -= speed;
|
||||
motors[2] -= speed;
|
||||
motors[3] += speed;
|
||||
}
|
||||
|
||||
void ControlModule::rotate(int angle){
|
||||
float speed = rotateSpeed * (static_cast<float>(angle) + 90.0f)/90.0f;
|
||||
void ControlModule::rotate(double angle){
|
||||
double speed = rotateSpeed * (angle + 90.0)/90.0;
|
||||
motors[0] += speed;
|
||||
motors[1] -= speed;
|
||||
motors[2] += speed;
|
||||
@ -57,7 +57,7 @@ void ControlModule::rotate(int angle){
|
||||
}
|
||||
|
||||
void ControlModule::unit(){
|
||||
float max = 1.0E-6;
|
||||
double max = 1.0E-6;
|
||||
for(int i = 0; i <= sizeof(motors)/sizeof(int); i++){
|
||||
if(motors[i] > max)
|
||||
max = motors[i];
|
||||
@ -73,7 +73,7 @@ void ControlModule::unit(){
|
||||
|
||||
}
|
||||
|
||||
void ControlModule::calcSpeeds(int imageColumsMiddle, int contourColumsMiddle, int angle){
|
||||
void ControlModule::calcSpeeds(int imageColumsMiddle, int contourColumsMiddle, double angle){
|
||||
std::unique_lock<std::mutex> lock(mtx);
|
||||
//moveSide(imageColumsMiddle, contourColumsMiddle);
|
||||
rotate(angle);
|
||||
@ -81,8 +81,8 @@ void ControlModule::calcSpeeds(int imageColumsMiddle, int contourColumsMiddle, i
|
||||
adjustSpeed();
|
||||
}
|
||||
|
||||
std::vector<float> ControlModule::readMotors()
|
||||
std::vector<double> ControlModule::readMotors()
|
||||
{
|
||||
std::unique_lock<std::mutex> lock(mtx);
|
||||
return std::vector<float> {motors[0], motors[1], motors[2], motors[3]};
|
||||
return std::vector<double> {motors[0], motors[1], motors[2], motors[3]};
|
||||
}
|
@ -7,19 +7,19 @@ class ControlModule
|
||||
{
|
||||
private:
|
||||
mutable std::mutex mtx;
|
||||
float motors[4]; //LeftFront; RightFront; LeftBack; RightBack
|
||||
float maxSpeed;
|
||||
float rotateSpeed;
|
||||
float moveSideSpeed;
|
||||
double motors[4]; //LeftFront; RightFront; LeftBack; RightBack
|
||||
double maxSpeed;
|
||||
double rotateSpeed;
|
||||
double moveSideSpeed;
|
||||
public:
|
||||
ControlModule(/* args */);
|
||||
ControlModule(float maxSpeed, float rotateSpeed, float moveSideSpeed);
|
||||
ControlModule(double maxSpeed, double rotateSpeed, double moveSideSpeed);
|
||||
~ControlModule();
|
||||
void adjustSpeed();
|
||||
void moveSide(int imageColumsMiddle, int contourColumsMiddle);
|
||||
void rotate(int angle);
|
||||
void rotate(double angle);
|
||||
void unit(); //Brings the max Value to 1.0
|
||||
|
||||
void calcSpeeds(int imageColumsMiddle, int contourColumsMiddle, int angle); //Funktion to be called
|
||||
std::vector<float> readMotors();
|
||||
void calcSpeeds(int imageColumsMiddle, int contourColumsMiddle, double angle); //Funktion to be called
|
||||
std::vector<double> readMotors();
|
||||
};
|
@ -1,6 +1,6 @@
|
||||
find_package( OpenCV REQUIRED )
|
||||
|
||||
add_library(Utils SHARED utils.cpp)
|
||||
add_library(Utils utils.cpp)
|
||||
set_target_properties(Utils PROPERTIES VERSION ${PROJECT_VERSION})
|
||||
|
||||
target_include_directories(Utils PRIVATE ${OpenCV_INCLUDE_DIRS})
|
||||
|
@ -1,7 +1,5 @@
|
||||
#include "utils.h"
|
||||
|
||||
#define PI 3.14159265359
|
||||
|
||||
LFRPoint::LFRPoint(/* args */) : x(0.0), y(0.0)
|
||||
{
|
||||
}
|
||||
@ -31,6 +29,22 @@ LFRVector::~LFRVector()
|
||||
{
|
||||
}
|
||||
|
||||
double LFRVector::angle(const LFRVector& other) const
|
||||
{
|
||||
return acos(dot(other)/(this->norm()*other.norm())) * (180.0/M_PI);
|
||||
}
|
||||
|
||||
double LFRVector::dot(const LFRVector& other) const
|
||||
{
|
||||
return x*other.x + y*other.y;
|
||||
}
|
||||
|
||||
double LFRVector::norm() const
|
||||
{
|
||||
return sqrt(x*x+y*y);
|
||||
}
|
||||
|
||||
|
||||
LFRLine::LFRLine(/* args */) : start(), dir()
|
||||
{
|
||||
}
|
||||
@ -55,7 +69,7 @@ int Calcs::calcAngle(int deltaX, int deltaY){
|
||||
int refAngle = 0;
|
||||
|
||||
if(deltaX > 10E-12){
|
||||
refAngle = (int)((atan(deltaY/deltaX) * 180.0/PI) + 0.5 - (refAngle<0)); //Here 0.5 (or -0.5) is added to round a float number to int right
|
||||
refAngle = (int)((atan(deltaY/deltaX) * 180.0/M_PI) + 0.5 - (refAngle<0)); //Here 0.5 (or -0.5) is added to round a float number to int right
|
||||
|
||||
// convert from img coordinates to regbot coordinates
|
||||
refAngle = -(refAngle);
|
||||
|
@ -1,6 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <opencv2/opencv.hpp>
|
||||
#include <cmath>
|
||||
#define _USE_MATH_DEFINES
|
||||
#include <math.h>
|
||||
|
||||
using namespace cv;
|
||||
using namespace std;
|
||||
@ -30,6 +33,10 @@ public:
|
||||
LFRVector(const LFRPoint& pt);
|
||||
~LFRVector();
|
||||
|
||||
double angle(const LFRVector& other) const;
|
||||
double dot(const LFRVector& other) const;
|
||||
double norm() const;
|
||||
|
||||
};
|
||||
|
||||
class LFRLine
|
||||
@ -60,7 +67,7 @@ public:
|
||||
std::vector<cv::Rect> boundingBoxes;
|
||||
std::vector<cv::Point> leftEdges;
|
||||
std::vector<cv::Point> middlePoints;
|
||||
int angle; //Angle of the contour the robot has to follow to
|
||||
double angle; //Angle of the contour the robot has to follow to
|
||||
int index; //Index of the contour the robot has to follow to
|
||||
|
||||
FrameData(): contours(), boundingBoxes(), leftEdges(), middlePoints() {}
|
||||
|
@ -22,7 +22,7 @@ struct LFR_Result
|
||||
cv::Mat rawImage;
|
||||
cv::Mat processedImage;
|
||||
FrameData data;
|
||||
std::vector<float> motorSignals;
|
||||
std::vector<double> motorSignals;
|
||||
};
|
||||
|
||||
class LFR
|
||||
|
Loading…
x
Reference in New Issue
Block a user