omniwheel lib

Dependents:   NHK2017_octopus NHK2017_octopus2 NHK2017_octopus2_drive 2018NHK_gakugaku_robo ... more

Committer:
UCHITAKE
Date:
Thu Sep 14 05:51:25 2017 +0000
Revision:
0:952a0ff1bf46
Child:
1:e9b590a5b27a
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
UCHITAKE 0:952a0ff1bf46 1 #include "wheel.h"
UCHITAKE 0:952a0ff1bf46 2
UCHITAKE 0:952a0ff1bf46 3 Wheel::Wheel() :
UCHITAKE 0:952a0ff1bf46 4 radian(0),
UCHITAKE 0:952a0ff1bf46 5 distance(1.0)
UCHITAKE 0:952a0ff1bf46 6 {
UCHITAKE 0:952a0ff1bf46 7 }
UCHITAKE 0:952a0ff1bf46 8
UCHITAKE 0:952a0ff1bf46 9 Wheel::Wheel(double radian) :
UCHITAKE 0:952a0ff1bf46 10 radian(radian),
UCHITAKE 0:952a0ff1bf46 11 distance(1.0)
UCHITAKE 0:952a0ff1bf46 12 {
UCHITAKE 0:952a0ff1bf46 13 }
UCHITAKE 0:952a0ff1bf46 14
UCHITAKE 0:952a0ff1bf46 15 Wheel::Wheel(double radian, double distance) :
UCHITAKE 0:952a0ff1bf46 16 radian(radian),
UCHITAKE 0:952a0ff1bf46 17 distance(distance)
UCHITAKE 0:952a0ff1bf46 18 {
UCHITAKE 0:952a0ff1bf46 19 }
UCHITAKE 0:952a0ff1bf46 20
UCHITAKE 0:952a0ff1bf46 21 Wheel::Wheel(const Wheel &a) :
UCHITAKE 0:952a0ff1bf46 22 radian(a.radian),
UCHITAKE 0:952a0ff1bf46 23 distance(a.distance)
UCHITAKE 0:952a0ff1bf46 24 {
UCHITAKE 0:952a0ff1bf46 25 }
UCHITAKE 0:952a0ff1bf46 26
UCHITAKE 0:952a0ff1bf46 27 Wheel &Wheel::operator=(const Wheel &a)
UCHITAKE 0:952a0ff1bf46 28 {
UCHITAKE 0:952a0ff1bf46 29 if(this != &a) {
UCHITAKE 0:952a0ff1bf46 30 radian = a.radian;
UCHITAKE 0:952a0ff1bf46 31 distance = a.distance;
UCHITAKE 0:952a0ff1bf46 32 }
UCHITAKE 0:952a0ff1bf46 33 return *this;
UCHITAKE 0:952a0ff1bf46 34 }
UCHITAKE 0:952a0ff1bf46 35
UCHITAKE 0:952a0ff1bf46 36 Wheel &Wheel::operator=(double value)
UCHITAKE 0:952a0ff1bf46 37 {
UCHITAKE 0:952a0ff1bf46 38 setOutput(value);
UCHITAKE 0:952a0ff1bf46 39 return *this;
UCHITAKE 0:952a0ff1bf46 40 }
UCHITAKE 0:952a0ff1bf46 41
UCHITAKE 0:952a0ff1bf46 42 Wheel::operator double()
UCHITAKE 0:952a0ff1bf46 43 {
UCHITAKE 0:952a0ff1bf46 44 return output;
UCHITAKE 0:952a0ff1bf46 45 }
UCHITAKE 0:952a0ff1bf46 46
UCHITAKE 0:952a0ff1bf46 47 Wheel::operator float()
UCHITAKE 0:952a0ff1bf46 48 {
UCHITAKE 0:952a0ff1bf46 49 return float(output);
UCHITAKE 0:952a0ff1bf46 50 }
UCHITAKE 0:952a0ff1bf46 51
UCHITAKE 0:952a0ff1bf46 52 void Wheel::setRadian(double tRadian)
UCHITAKE 0:952a0ff1bf46 53 {
UCHITAKE 0:952a0ff1bf46 54 radian = tRadian;
UCHITAKE 0:952a0ff1bf46 55 }
UCHITAKE 0:952a0ff1bf46 56
UCHITAKE 0:952a0ff1bf46 57 void Wheel::setDistance(double tDistance)
UCHITAKE 0:952a0ff1bf46 58 {
UCHITAKE 0:952a0ff1bf46 59 distance = tDistance;
UCHITAKE 0:952a0ff1bf46 60 }
UCHITAKE 0:952a0ff1bf46 61
UCHITAKE 0:952a0ff1bf46 62 void Wheel::setOutput(double value)
UCHITAKE 0:952a0ff1bf46 63 {
UCHITAKE 0:952a0ff1bf46 64 output = value;
UCHITAKE 0:952a0ff1bf46 65 }
UCHITAKE 0:952a0ff1bf46 66
UCHITAKE 0:952a0ff1bf46 67 double Wheel::calculateShift(double r, double theta)
UCHITAKE 0:952a0ff1bf46 68 {
UCHITAKE 0:952a0ff1bf46 69 outputShift = sin(theta + radian) * r;
UCHITAKE 0:952a0ff1bf46 70 return outputShift;
UCHITAKE 0:952a0ff1bf46 71 }
UCHITAKE 0:952a0ff1bf46 72
UCHITAKE 0:952a0ff1bf46 73 double Wheel::calculateRotate(double X, double Y, double value)
UCHITAKE 0:952a0ff1bf46 74 {
UCHITAKE 0:952a0ff1bf46 75 outputRotate = fabs(X + tan(radian) * Y - cos(radian) - sin(radian) * tan(radian)) / hypot(1.0, tan(radian));
UCHITAKE 0:952a0ff1bf46 76 outputRotate *= value;
UCHITAKE 0:952a0ff1bf46 77 return outputRotate;
UCHITAKE 0:952a0ff1bf46 78 }
UCHITAKE 0:952a0ff1bf46 79
UCHITAKE 0:952a0ff1bf46 80 double Wheel::getOutput()
UCHITAKE 0:952a0ff1bf46 81 {
UCHITAKE 0:952a0ff1bf46 82 return output;
UCHITAKE 0:952a0ff1bf46 83 }