Skip to content

Commit 0a2246c

Browse files
committed
Added IMU client to drive controller, as well as minor changes
1 parent dce102b commit 0a2246c

File tree

2 files changed

+57
-27
lines changed

2 files changed

+57
-27
lines changed

controller/drive.py

+55-26
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,52 @@
33
SLIGHT_TIME = 0.1
44
TURN_TIME = 0.75
55

6+
class IMUProtocol(asyncio.Protocol):
7+
def __init__(self, up):
8+
self.up = up
9+
10+
def data_received(self, data):
11+
text = data.decode().strip().split()[-1]
12+
rgbc = tuple([int(i) for i in text.split(",")])
13+
self.up._received(rgbc)
14+
15+
class IMU:
16+
def __init__(self):
17+
self.loop = asyncio.get_event_loop()
18+
self.data = (0,0,0)
19+
self.initial = False
20+
self._mark = 0
21+
self.loop.run_until_complete(self.connect())
22+
23+
@asyncio.coroutine
24+
def connect(self):
25+
yield from self.loop.connect_read_pipe(
26+
lambda up=self: IMUProtocol(up), open("/var/run/euler0"))
27+
28+
def _received(self, euler):
29+
self.data = euler
30+
self.heading = euler[0]
31+
if not initial:
32+
self.initial = euler
33+
34+
def mark(self):
35+
self._mark = self.heading
36+
37+
@property
38+
def from_start(self):
39+
return self.heading - self.initial[0]
40+
@property
41+
def from_mark(self):
42+
return self.heading - self._mark
43+
644
class DriveMotors:
745
def __init__(self, left=0, right=1):
846
self.loop = asyncio.get_event_loop()
947
self._left = open("/var/run/motor{}".format(left),"w")
1048
self._right = open("/var/run/motor{}".format(right),"w")
1149
self.__left = 0
1250
self.__right = 0
51+
self.imu = IMU()
1352
self.loop.run_until_complete(self.connect())
1453
self.__handle = None
1554

@@ -25,7 +64,7 @@ def left(self):
2564
@left.setter
2665
def left(self, val):
2766
self.cancel()
28-
val = val * 0.999
67+
#val = val * 0.999
2968
self.__left = val
3069
#if val == 0:
3170
#traceback.print_stack()
@@ -38,50 +77,40 @@ def right(self):
3877
@right.setter
3978
def right(self, val):
4079
self.cancel()
41-
val = val * 0.9
80+
#val = val * 0.9
4281
self.__right = val
4382
self._right.write("{}\n".format(val).encode())
4483

4584
def cancel(self):
4685
if self.__handle: self.__handle.cancel()
4786

87+
def __set(self, right, left, t=None):
88+
self.imu.mark()
89+
self.right = right
90+
self.left = left
91+
if t:
92+
self.__handle = self.loop.call_later(t, self.forward)
93+
4894
def stop(self):
49-
self.right = 0
50-
self.left = 0
95+
self.__set(0, 0)
5196

5297
def forward(self):
53-
self.right = -1
54-
self.left = 1
98+
self.__set(-1, 1)
5599

56100
def backward(self, t=None):
57-
self.right = 1
58-
self.left = -1
59-
if t:
60-
self.__handle = self.loop.call_later(t, self.forward)
101+
self.__set(1, -1, t)
61102

62103
def turnright(self, t=TURN_TIME):
63-
self.right = 1
64-
self.left = 1
65-
if t:
66-
self.__handle = self.loop.call_later(t, self.forward)
104+
self.__set(1, 1, t)
67105

68106
def turnleft(self, t=TURN_TIME):
69-
self.right = -1
70-
self.left = -1
71-
if t:
72-
self.__handle = self.loop.call_later(t, self.forward)
107+
self.__set(-1, -1, t)
73108

74109
def slightright(self, t=SLIGHT_TIME):
75110
print("Slight right")
76-
self.right = -0.09
77-
self.left = 1
78-
if t:
79-
self.__handle = self.loop.call_later(t, self.forward)
111+
self.__set(-0.09, 1, t)
80112

81113
def slightleft(self, t=SLIGHT_TIME):
82114
print("Slight left")
83-
self.right = -1
84-
self.left = 0.09
85-
if t:
86-
self.__handle = self.loop.call_later(t, self.forward)
115+
self.__set(-1, 0.09, t)
87116

debug_control.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def display_iterable(scr, iterable, start, x=10, name=None):
3939
for i in iterable:
4040
curses.setsyx(start, x)
4141
scr.clrtoeol()
42-
scr.addstr(start, x, str(i))
42+
scr.addstr(start, x, str(round(i,2)))
4343
start += 1
4444
curses.setsyx(sy, sx)
4545
scr.refresh()
@@ -76,6 +76,7 @@ def main():
7676
key = scr.getch()
7777

7878
if key == Q:
79+
dm.stop()
7980
break
8081

8182
{

0 commit comments

Comments
 (0)