이유진

좌표+고도 이동 (2대의 드론)

1 +# step 2 : 높이 + 위치조정
2 +import CoDrone
3 +import keyboard
4 +from CoDrone.system import Direction
5 +from time import sleep
6 +
7 +
8 +errorRange = 50 # 오차범위
9 +moveRange = 150 # 움직였다고 판단할 거리
10 +
11 +
12 +def setHeight(_mHeight, _slave):
13 + while True:
14 + _sHeight = _slave.get_height()
15 + if _mHeight - errorRange <= _sHeight <= _mHeight + errorRange:
16 + print('hit')
17 + return
18 + elif _sHeight < _mHeight - errorRange:
19 + _slave.go(Direction.UP)
20 + sleep(0.2)
21 + print('up')
22 + elif _sHeight > _mHeight + errorRange:
23 + _slave.go(Direction.DOWN)
24 + sleep(0.2)
25 + print('down')
26 +
27 +
28 +def main():
29 + master = CoDrone.CoDrone()
30 + master.connect("None", "COM5", False)
31 + slave = CoDrone.CoDrone()
32 + slave.connect("None", "COM6", False)
33 +
34 + bHeight = master.get_height() # 고도
35 + if bHeight > 20: # 마스터의 높이가 20이상이면 slave 날기 시작
36 + slave.takeoff()
37 +
38 + while True:
39 + # master
40 + mPosition = master.get_opt_flow_position() # 상대좌표 (시작 0,0)
41 + mHeight = master.get_height() # 고도
42 + # slave
43 + sPosition = slave.get_opt_flow_position()
44 + sHeight = slave.get_height()
45 + print("master [x={} y={} z={}] slave [x={} y={} z={}]"
46 + .format(mPosition.X, mPosition.Y, mHeight, sPosition.X, sPosition.Y, sHeight)) # 좌표출력/단위(mm)
47 +
48 + # 키보드로 콘솔창에 'q'를 누르면 드론이 착륙하게 만드는 코드인데
49 + # 한 번 성공하고 그 이후로 안 되네요
50 + # $pip3 install keyboard
51 + # 로 keyboard를 설치한 다음 실행해야 합니다.
52 + if keyboard.is_pressed('q'):
53 + print('드론을 착륙시킵니다.')
54 + slave.land()
55 + print('land')
56 + # slave.emergency_stop()
57 + # print('emergency_stop')
58 + break
59 +
60 + # master의 전 높이 대비 moveRange 만큼의 차이가 있으면 slave가 움직이도록
61 + if abs(mHeight-bHeight) > moveRange:
62 + setHeight(mHeight, slave)
63 +
64 + # master의 좌표가 moveRange만큼 차이가 생기면 움직이도록
65 + if abs(bX - mPosition.X) > moveRange or abs(bY - mPosition.Y) > moveRange:
66 + slave.move(mPosition.Y - bY, bX - mPosition.X, 0, 0) # move(roll 좌우, pitch 전후, yaw = 0, throttle = 0)
67 +
68 + # master의 이전 좌표값 저장
69 + bHeight = mHeight
70 + bX = mPosition.X
71 + bY = mPosition.Y
72 +
73 +
74 +if __name__ == '__main__':
75 + main()