Kuon  1.1.3
RoadNarrows Robotics Large Outdoor Mobile Robot Project
KuonControl.c
1 #include "Kuon/RS160DControl.h"
2 #include "rnr/hid/360Controller.h"
3 #include "rnr/rnrconfig.h"
4 #include "rnr/log.h"
5 
6 #define PERCENT 1
7 
8 struct Control360 hid360;
9 int error;
10 
11 int GetLeftValue(int Why, int Ex) {
12  int Return;
13  if(Why == 0) {
14  Return = (-.6)*Ex;
15  Return = Return * PERCENT;
16  return Return;
17  }
18  Return = (.7 * Why) - (.6 * Ex);
19  Return = Return * PERCENT;
20  return Return;
21 }
22 
23 int GetRightValue( int Why, int Ex) {
24  int Return;
25  if(Why == 0) {
26  Return = .6 * Ex;
27  Return = Return * PERCENT;
28  return Return;
29  }
30  Return = (.7 * Why) + (.6 * Ex);
31  Return = Return * PERCENT;
32  return Return;
33 }
34 
35 int main() {
36  struct RS160Ds MyMotors;
37  bool_t coast = false;
38  int error;
39  LOGDIAG2("Testing");
40  error = RS160DOpenConnection("/dev/ttyUSB0",&(MyMotors.m_fdFront));
41  if(error < 0) {
42  LOGDIAG2("Failed to open front motor controller");
43  exit(1);
44  }
45  error = RS160DOpenConnection("/dev/ttyUSB1",&(MyMotors.m_fdRear));
46  if(error < 0) {
47  exit(1);
48  }
49  error = RS160DSetToSerial(MyMotors.m_fdFront);
50  if(error < 0) {
51  exit(1);
52  }
53  error = RS160DSetToSerial(MyMotors.m_fdRear);
54  if(error < 0) {
55  exit(1);
56  }
57  Init360Controller(&hid360);
58 
59  while(hid360.Controller_Connected){
60  Update360ControllerValues();
61  if(hid360.Center_X) {
62  printf("****Exiting****\n");
63  hid360.Controller_Connected = 0;
64  }
65  if((hid360.Right_Trig_Val >= 100) && !coast) {
66  RS160DAlterBraking(0,MyMotors.m_fdFront,0);
67  RS160DAlterBraking(0,MyMotors.m_fdFront,1);
68  RS160DAlterBraking(0,MyMotors.m_fdRear,0);
69  RS160DAlterBraking(0,MyMotors.m_fdRear,1);
70  RS160DAlterSlew(40,MyMotors.m_fdRear,0);
71  RS160DAlterSlew(40,MyMotors.m_fdRear,1);
72  RS160DAlterSlew(40,MyMotors.m_fdFront,0);
73  RS160DAlterSlew(40,MyMotors.m_fdFront,1);
74  coast = true;
75  }
76  if((hid360.Right_Trig_Val < 100) && coast) {
77  RS160DAlterBraking(31,MyMotors.m_fdFront,0);
78  RS160DAlterBraking(31,MyMotors.m_fdFront,1);
79  RS160DAlterBraking(31,MyMotors.m_fdRear,0);
80  RS160DAlterBraking(31,MyMotors.m_fdRear,1);
81  RS160DAlterSlew(0,MyMotors.m_fdRear,0);
82  RS160DAlterSlew(0,MyMotors.m_fdRear,1);
83  RS160DAlterSlew(0,MyMotors.m_fdFront,0);
84  RS160DAlterSlew(0,MyMotors.m_fdFront,1);
85  coast = false;
86  }
87 
88  RS160DUpdateMotorSpeeds(GetLeftValue(hid360.Left_Y_Val,
89  hid360.Left_X_Val), MyMotors.m_fdFront,
90  1);
91  RS160DUpdateMotorSpeeds(-1*GetRightValue(hid360.Left_Y_Val,
92  hid360.Left_X_Val), MyMotors.m_fdFront,
93  0);
94  RS160DUpdateMotorSpeeds(GetLeftValue(hid360.Left_Y_Val,
95  hid360.Left_X_Val), MyMotors.m_fdRear,
96  1);
97  RS160DUpdateMotorSpeeds(-1*GetRightValue(hid360.Left_Y_Val,
98  hid360.Left_X_Val), MyMotors.m_fdRear,
99  0);
100  }
101  RS160DEStop(MyMotors.m_fdFront, MyMotors.m_fdRear);
102  RS160DClose(MyMotors.m_fdFront);
103  RS160DClose(MyMotors.m_fdRear);
104  Kill360Controller(&hid360);
105  return 0;
106 }