김영기

Upload new file

1 +#step 3 : slave드론의 접촉에 의한 반응으로 master드론 움직이기
2 +import CoDrone
3 +import keyboard
4 +from CoDrone.system import Direction
5 +from CoDrone.system import Mode
6 +from time import sleep
7 +
8 +errorRange = 50 # 오차범위
9 +heightRange = 30 # 움직였다고 판단할 거리 height
10 +posiRange = 10 # position (x, y) 변화 인지 거리
11 +
12 +def setHeight(_sHeight, _master):
13 + while True:
14 + _mHeight = _mlave.get_height()
15 + if _sHeight - errorRange <= _mHeight <= _sHeight + errorRange:
16 + print('[hit]')
17 + return
18 + elif _mHeight < _sHeight - errorRange:
19 + _master.go(Direction.UP)
20 + sleep(0.2)
21 + print('[up]')
22 + elif _mHeight > _sHeight + errorRange:
23 + _master.go(Direction.DOWN)
24 + sleep(0.2)
25 + print('[down]')
26 +
27 +def main():
28 + master = CoDrone.CoDrone()
29 + master.connect("None", "COM3", False)
30 + slave = CoDrone.CoDrone()
31 + slave.connect("None", "COM5", False)
32 +
33 +
34 + master.takeoff()#master 드론 이륙
35 + slave.takeoff()#slave 드론 이륙
36 + slave.hover(60)
37 + bHeight = slave.get_height() # bHeight = slave의 높이
38 +
39 + # slave의 이전 좌표값(움직임 추적용) 초기화
40 + bHeight = 0
41 +
42 +
43 + while True:
44 + # master
45 + mPosition = master.get_opt_flow_position() # 상대좌표 (시작 0,0)
46 + mHeight = master.get_height() # master고도
47 + # slave
48 + sPosition = slave.get_opt_flow_position()
49 + sHeight = slave.get_height() # slave고도
50 + print("master [x={} y={} z={}] slave [x={} y={} z={}]"
51 + .format(mPosition.X, mPosition.Y, mHeight, sPosition.X, sPosition.
52 +
53 + # slave의 전 높이 대비 heightRange 만큼의 차이가 있으면 master가 움직이도록
54 + if abs(sHeight - bHeight) > heightRange:
55 + print('[height change!]')
56 +
57 + setHeight(sHeight, master)# master의 높이 이동
58 +
59 + # slave의 이전 좌표값 저장
60 + bHeight = sHeight
61 +
62 +
63 +
64 +
65 +if __name__ == '__main__':
66 + main()
67 +
68 +
69 +