Subversion Repositories shark

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1215 giacomo 1
#include <kernel/kern.h>
2
#include <math.h>
3
 
4
#include "servo.h"
5
 
6
#define LEG_A 10.0
7
#define LEG_B 10.0
8
 
9
const double c0 = LEG_A * LEG_A;
10
const double c1 = LEG_A * LEG_A - LEG_B * LEG_B;
11
const double todeg = 180.0 / PI;
12
 
13
int set_leg_position(double px, double py, double pz)
14
{
15
 
16
  double px2 = px * px;
17
  double py2 = py * py;
18
  double pz2 = pz * pz;
19
 
20
  double pxz2 = pz2 + px2;
21
  double gamma1 = asin(pz/sqrt(pxz2)) * todeg;
22
 
23
  double s = pxz2 + py2;
24
  double k = c1 + s;
25
  double k2 = k * k;
26
 
27
  double delta_xy = py2 * k2 - s * (k2 - 4.0 * pxz2 * c0);
28
  double y1,dsqrt;
29
  double alfa1,beta1,alfa2,beta2;
30
  int alfa = 0, beta = 0, gamma = 0;
31
 
32
  if (delta_xy >= 0.0) {
33
    dsqrt = sqrt(delta_xy);
34
    y1 = (py * k + dsqrt) / (2.0 * s);
35
    alfa1 = asin(y1/LEG_A) * todeg;
36
    beta1 = asin((y1 - py)/LEG_B) * todeg + alfa1;
37
    y1 = (py * k - dsqrt) / (2.0 * s);
38
    alfa2 = asin(y1/LEG_A) * todeg;
39
    beta2 = asin((y1 - py)/LEG_B) * todeg + alfa2;
40
    cprintf("Alfa1 = %d Beta1 = %d\n",(int)alfa1,(int)beta1);
41
    cprintf("Alfa2 = %d Beta2 = %d\n",(int)alfa2,(int)beta2);
42
    if ((alfa1 >= -90.0 && alfa1 <= 90.0) && (beta1 >= 0.0 && beta1 <= 180.0)) {
43
      alfa = (int)(alfa1 * 3600.0);
44
      beta = (int)(beta1 * 3600.0);
45
      gamma = (int)(gamma1 * 3600.0);
46
      cprintf("Alfa Sec = %d Beta Sec = %d Gamma Sec = %d\n",alfa,beta,gamma);
47
      return 0;
48
    } else if ((alfa2 >= -90.0 && alfa2 <= 90.0) && (beta2 >= 0.0 && beta2 <= 180.0)) {
49
      alfa = (int)(alfa2 * 3600.0);
50
      beta = (int)(beta2 * 3600.0);
51
      gamma = (int)(gamma1 * 3600.0);
52
      cprintf("Alfa Sec = %d Beta Sec = %d Gamma Sec = %d\n",alfa,beta,gamma);
53
      return 0;
54
    } else {
55
      cprintf("No possible !\n");
56
      return 1;
57
    }
58
  } else {
59
    cprintf("No possible !\n");
60
    return 1;
61
  }
62
 
63
}