이유진

최종파일 업로드

# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/JSH_Project7.iml" filepath="$PROJECT_DIR$/.idea/JSH_Project7.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
import CoDrone
import keyboard
from CoDrone.system import Direction
from CoDrone.system import Mode
from time import sleep
errorRange = 50 # 오차범위
moveRange = 150 # 움직였다고 판단할 거리
heightRange = 70 # 움직였다고 판단할 거리 height
# 키보드로 콘솔창에 'q'를 누르면 드론이 착륙하게 만드는 코드
def stop(_master, _slave):
if keyboard.is_pressed('q'): # 키보드에서 'q'가 입력되면 while문 탈출
print('[Keyboard input occur: Quit!]')
# 착륙에 성공할 때까지 LED 효과
_master.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
_slave.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
return True
elif not _slave.isConnected(): # slave 연결이 끊기면 프로그램 종료
print('[Slave Disconnected]')
return True
def setHeight(_master, _mHeight, _slave):
print('목표높이 : ', _mHeight)
while True:
_master.hover()
print('hover')
_sHeight = _slave.get_height()
print('현재높이 : ', _sHeight)
if stop(_master, _slave):
return
if _mHeight - errorRange <= _sHeight <= _mHeight + errorRange:
print('[hit]')
return
elif _sHeight < _mHeight - errorRange:
_slave.go(Direction.UP, 0, 100)
# sleep(0.2)
print('[up]')
elif _sHeight > _mHeight + errorRange:
_slave.go(Direction.DOWN, 0, 100)
# sleep(0.2)
print('[down]')
def main():
master = CoDrone.CoDrone()
master.connect("None", "COM7", False)
slave = CoDrone.CoDrone()
slave.connect("None", "COM5", False)
bHeight = master.get_height() # 고도
if bHeight > 20: # 마스터의 높이가 20이상이면 slave 날기 시작
slave.takeoff()
while True:
master.arm_off()
slave.arm_off()
# master
mPosition = master.get_opt_flow_position() # 상대좌표 (시작 0,0)
mHeight = master.get_height() # 고도
# slave
sPosition = slave.get_opt_flow_position()
sHeight = slave.get_height()
print("master [x={} y={} z={}] slave [x={} y={} z={}]"
.format(mPosition.X, mPosition.Y, mHeight, sPosition.X, sPosition.Y, sHeight)) # 좌표출력/단위(mm)
if stop(master, slave):
break
# master의 전 높이 대비 +- moveRange 만큼의 차이가 있으면 slave가 움직이도록
if abs(mHeight - bHeight) > heightRange:
print('[height change!]')
# LED 효과
master.arm_strobe()
slave.arm_strobe()
setHeight(master, mHeight, slave)
print('Land')
slave.land() # 착륙
master.arm_off()
slave.arm_off()
# 연결해제 -> 여기까지 성공했다면 배터리 안 빼도 다시 연결 됩니다.
slave.disconnect()
master.disconnect()
if __name__ == '__main__':
main()
# step 2 : 높이 + 위치조정 (민감버전)
import CoDrone
import keyboard
from CoDrone.system import Direction
from CoDrone.system import Mode
from time import sleep
def stop(_master, _slave):
if keyboard.is_pressed('q'): # 키보드에서 'q'가 입력되면 while문 탈출
print('[Keyboard input occur: Quit!]')
# 착륙에 성공할 때까지 LED 효과
_master.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
_slave.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
return True
elif not _slave.isConnected(): # slave 연결이 끊기면 프로그램 종료
print('[Slave Disconnected]')
return True
def main():
master = CoDrone.CoDrone()
master.connect("None", "COM5", False)
slave = CoDrone.CoDrone()
slave.connect("None", "COM6", False)
bHeight = master.get_height() # 고도
if bHeight > 20: # 마스터의 높이가 20이상이면 slave 날기 시작
slave.takeoff()
print('slave take off!!!')
# master의 이전 좌표값(움직임 추적용) 초기화
bHeight = 0
bX = 0
bY = 0
while True:
master.arm_off()
slave.arm_off()
slave.takeoff()
# master
mPosition = master.get_opt_flow_position() # 상대좌표 (시작 0,0)
mHeight = master.get_height() # 고도
# slave
sPosition = slave.get_opt_flow_position()
sHeight = slave.get_height()
print("master [x={} y={} z={}] slave [x={} y={} z={}]"
.format(mPosition.X, mPosition.Y, mHeight, sPosition.X, sPosition.Y, sHeight)) # 좌표출력/단위(mm)
if stop(master, slave):
break
# master의 전 높이 대비 heightRange 만큼의 차이가 있으면 slave가 움직이도록
# if abs(mHeight - bHeight) > heightRange:
# print('[height change!]')
# # LED 효과
# master.arm_strobe()
# slave.arm_strobe()
# setHeight(mHeight, slave)
if mPosition.X > bX:
slave.go(Direction.FORWARD, 1)
print('[Move Forward]')
elif mPosition.X < bX:
slave.go(Direction.BACKWARD, 1)
print('[Move Backward]')
# elif mPosition.Y > bY:
# slave.go(Direction.LEFT, 0.4)
# print('[Move Left]')
# elif mPosition.Y < bY:
# slave.go(Direction.RIGHT, 0.4)
# print('[Move Right]')
# master의 이전 좌표값 저장
bHeight = mHeight
bX = mPosition.X
bY = mPosition.Y
# slave.hover()
print('드론을 착륙시킵니다.')
slave.arm_pattern() # LED 효과
print('Land')
slave.land() # 착륙
master.arm_off()
slave.arm_off()
# 연결해제 -> 여기까지 성공했다면 배터리 안 빼도 다시 연결 됩니다.
slave.disconnect()
master.disconnect()
if __name__ == '__main__':
main()
......@@ -33,10 +33,11 @@ def main():
master.takeoff()#master 드론 이륙
slave.takeoff()#slave 드론 이륙
slave.hover(60)
bHeight = slave.get_height() # bHeight = slave의 높이
# slave의 이전 좌표값(움직임 추적용) 초기화
# bHeight = 0
bHeight = 0
while True:
......
......@@ -14,7 +14,7 @@ def main():
drone.takeoff()
getPosition(drone)
drone.move(-5, 4, 0, 0) # move(roll 좌우, pitch 전후, yaw, throttle)
drone.move(5, 0, 0, 0) # move(roll 좌우, pitch 전후, yaw, throttle)
# drone.go(Direction.FORWARD, 0.5)
# print('forward')
# getPosition(drone)
......
import CoDrone
import keyboard
from CoDrone.system import Direction
from CoDrone.system import Mode
from time import sleep
errorRange = 50 # 오차범위
moveRange = 150 # 움직였다고 판단할 거리
heightRange = 70 # 움직였다고 판단할 거리 height
# 키보드로 콘솔창에 'q'를 누르면 드론이 착륙하게 만드는 코드
def stop(_master, _slave):
if keyboard.is_pressed('q'): # 키보드에서 'q'가 입력되면 while문 탈출
print('[Keyboard input occur: Quit!]')
# 착륙에 성공할 때까지 LED 효과
_master.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
_slave.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
return True
elif not _slave.isConnected(): # slave 연결이 끊기면 프로그램 종료
print('[Slave Disconnected]')
return True
def setHeight(_master, _mHeight, _slave):
print('목표높이 : ', _mHeight)
while True:
_master.hover()
print('hover')
_sHeight = _slave.get_height()
print('현재높이 : ', _sHeight)
if stop(_master, _slave):
return
if _mHeight - errorRange <= _sHeight <= _mHeight + errorRange:
print('[hit]')
return
elif _sHeight < _mHeight - errorRange:
_slave.go(Direction.UP, 0, 100)
# sleep(0.2)
print('[up]')
elif _sHeight > _mHeight + errorRange:
_slave.go(Direction.DOWN, 0, 100)
# sleep(0.2)
print('[down]')
def main():
master = CoDrone.CoDrone()
master.connect("None", "COM7", False)
slave = CoDrone.CoDrone()
slave.connect("None", "COM5", False)
bHeight = master.get_height() # 고도
if bHeight > 20: # 마스터의 높이가 20이상이면 slave 날기 시작
slave.takeoff()
while True:
master.arm_off()
slave.arm_off()
# master
mPosition = master.get_opt_flow_position() # 상대좌표 (시작 0,0)
mHeight = master.get_height() # 고도
# slave
sPosition = slave.get_opt_flow_position()
sHeight = slave.get_height()
print("master [x={} y={} z={}] slave [x={} y={} z={}]"
.format(mPosition.X, mPosition.Y, mHeight, sPosition.X, sPosition.Y, sHeight)) # 좌표출력/단위(mm)
if stop(master, slave):
break
# master의 전 높이 대비 +- moveRange 만큼의 차이가 있으면 slave가 움직이도록
if abs(mHeight - bHeight) > heightRange:
print('[height change!]')
# LED 효과
master.arm_strobe()
slave.arm_strobe()
setHeight(master, mHeight, slave)
print('Land')
slave.land() # 착륙
master.arm_off()
slave.arm_off()
# 연결해제 -> 여기까지 성공했다면 배터리 안 빼도 다시 연결 됩니다.
slave.disconnect()
master.disconnect()
if __name__ == '__main__':
main()
# step 2 : 높이 + 위치조정
# step 2 : 높이 + 위치조정 (master도 날 때)
import CoDrone
import keyboard
from CoDrone.system import Direction
......@@ -11,9 +11,31 @@ heightRange = 30 # 움직였다고 판단할 거리 height
posiRange = 5 # position (x, y) 변화 인지 거리
def setHeight(_mHeight, _slave):
def stop(_master, _slave):
# 키보드로 콘솔창에 'q'를 누르면 드론이 착륙하게 만드는 코드
# $pip3 install keyboard
# 로 keyboard를 설치한 다음 실행해야 합니다.
# 성공 : q를 계속 누르고 계세요! ex) qqqqqqqqqqqqqq
if keyboard.is_pressed('q'): # 키보드에서 'q'가 입력되면 while문 탈출
print('[Keyboard input occur: Quit!]')
# 착륙에 성공할 때까지 LED 효과
_master.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
_slave.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
return True
elif not _slave.isConnected(): # slave 연결이 끊기면 프로그램 종료
print('[Slave Disconnected]')
return True
def setHeight(_master, _mHeight, _slave):
print('목표높이 : ', _mHeight)
while True:
_sHeight = _slave.get_height()
print('현재높이 : ', _sHeight)
if stop(_master, _slave):
return
if _mHeight - errorRange <= _sHeight <= _mHeight + errorRange:
print('[hit]')
return
......@@ -31,8 +53,9 @@ def main():
master = CoDrone.CoDrone()
master.connect("None", "COM5", False)
slave = CoDrone.CoDrone()
slave.connect("None", "COM6", False)
slave.connect("None", "COM7", False)
master.takeoff()
bHeight = master.get_height() # 고도
if bHeight > 20: # 마스터의 높이가 20이상이면 slave 날기 시작
slave.takeoff()
......@@ -54,19 +77,8 @@ def main():
print("master [x={} y={} z={}] slave [x={} y={} z={}]"
.format(mPosition.X, mPosition.Y, mHeight, sPosition.X, sPosition.Y, sHeight)) # 좌표출력/단위(mm)
# 키보드로 콘솔창에 'q'를 누르면 드론이 착륙하게 만드는 코드
# $pip3 install keyboard
# 로 keyboard를 설치한 다음 실행해야 합니다.
# 성공 : q를 계속 누르고 계세요! ex) qqqqqqqqqqqqqq
if keyboard.is_pressed('q'): # 키보드에서 'q'가 입력되면 while문 탈출
print('[Keyboard input occur: Quit!]')
# 착륙에 성공할 때까지 LED 효과
master.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
slave.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
if stop(master, slave):
break
elif not slave.isConnected(): # slave 연결이 끊기면 프로그램 종료
print('[Slave Disconnected]')
return
# master의 전 높이 대비 heightRange 만큼의 차이가 있으면 slave가 움직이도록
if abs(mHeight - bHeight) > heightRange:
......@@ -74,7 +86,7 @@ def main():
# LED 효과
master.arm_strobe()
slave.arm_strobe()
setHeight(mHeight, slave)
setHeight(master, mHeight, slave)
# master의 좌표가 posiRange만큼 차이가 생기면 움직이도록
if abs(bX - mPosition.X) + abs(bY - mPosition.Y) > posiRange:
......@@ -82,7 +94,7 @@ def main():
# LED 효과
master.arm_strobe()
slave.arm_strobe()
slave.move(mPosition.Y - bY, bX - mPosition.X, 0, 0) # move(roll 좌우, pitch 전후, yaw = 0, throttle = 0)
slave.move(abs(mPosition.Y - bY)/20, abs(bX - mPosition.X)/20, 0, 0) # move(roll 좌우, pitch 전후, yaw = 0, throttle = 0)
# master의 이전 좌표값 저장
bHeight = mHeight
......
# step 2 : 높이 + 위치조정 (민감버전)
import CoDrone
import keyboard
from CoDrone.system import Direction
from CoDrone.system import Mode
from time import sleep
def stop(_master, _slave):
if keyboard.is_pressed('q'): # 키보드에서 'q'가 입력되면 while문 탈출
print('[Keyboard input occur: Quit!]')
# 착륙에 성공할 때까지 LED 효과
_master.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
_slave.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
return True
elif not _slave.isConnected(): # slave 연결이 끊기면 프로그램 종료
print('[Slave Disconnected]')
return True
def main():
master = CoDrone.CoDrone()
master.connect("None", "COM5", False)
slave = CoDrone.CoDrone()
slave.connect("None", "COM6", False)
bHeight = master.get_height() # 고도
if bHeight > 20: # 마스터의 높이가 20이상이면 slave 날기 시작
slave.takeoff()
print('slave take off!!!')
# master의 이전 좌표값(움직임 추적용) 초기화
bHeight = 0
bX = 0
bY = 0
while True:
master.arm_off()
slave.arm_off()
slave.takeoff()
# master
mPosition = master.get_opt_flow_position() # 상대좌표 (시작 0,0)
mHeight = master.get_height() # 고도
# slave
sPosition = slave.get_opt_flow_position()
sHeight = slave.get_height()
print("master [x={} y={} z={}] slave [x={} y={} z={}]"
.format(mPosition.X, mPosition.Y, mHeight, sPosition.X, sPosition.Y, sHeight)) # 좌표출력/단위(mm)
if stop(master, slave):
break
# master의 전 높이 대비 heightRange 만큼의 차이가 있으면 slave가 움직이도록
# if abs(mHeight - bHeight) > heightRange:
# print('[height change!]')
# # LED 효과
# master.arm_strobe()
# slave.arm_strobe()
# setHeight(mHeight, slave)
if mPosition.X > bX:
slave.go(Direction.FORWARD, 1)
print('[Move Forward]')
elif mPosition.X < bX:
slave.go(Direction.BACKWARD, 1)
print('[Move Backward]')
# elif mPosition.Y > bY:
# slave.go(Direction.LEFT, 0.4)
# print('[Move Left]')
# elif mPosition.Y < bY:
# slave.go(Direction.RIGHT, 0.4)
# print('[Move Right]')
# master의 이전 좌표값 저장
bHeight = mHeight
bX = mPosition.X
bY = mPosition.Y
# slave.hover()
print('드론을 착륙시킵니다.')
slave.arm_pattern() # LED 효과
print('Land')
slave.land() # 착륙
master.arm_off()
slave.arm_off()
# 연결해제 -> 여기까지 성공했다면 배터리 안 빼도 다시 연결 됩니다.
slave.disconnect()
master.disconnect()
if __name__ == '__main__':
main()
# step 2 : 높이 + 위치조정
import CoDrone
import keyboard
from CoDrone.system import Direction
from CoDrone.system import Mode
from time import sleep
errorRange = 50 # 오차범위
heightRange = 30 # 움직였다고 판단할 거리 height
posiRange = 20 # position (x, y) 변화 인지 거리
posiErrorRange = 10 # position 오차범위
# 키보드로 콘솔창에 'q'를 누르면 드론이 착륙하게 만드는 코드
def stop(_master, _slave):
if keyboard.is_pressed('q'): # 키보드에서 'q'가 입력되면 while문 탈출
print('[Keyboard input occur: Quit!]')
# 착륙에 성공할 때까지 LED 효과
_master.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
_slave.arm_default_pattern(0, 125, 155, Mode.DOUBLE_BLINK, 10)
return True
elif not _slave.isConnected(): # slave 연결이 끊기면 프로그램 종료
print('[Slave Disconnected]')
return True
def setHeight(_mHeight, _slave):
while True:
_sHeight = _slave.get_height()
if _mHeight - errorRange <= _sHeight <= _mHeight + errorRange:
print('[hit]')
return
elif _sHeight < _mHeight - errorRange:
_slave.go(Direction.UP)
sleep(0.2)
print('[up]')
elif _sHeight > _mHeight + errorRange:
_slave.go(Direction.DOWN)
sleep(0.2)
print('[down]')
def setPosition(_master, _tox, _toy, _slave):
print('목표좌표 : x:{} y:{}'.format(_tox, _toy))
# x좌표 먼저 (눈 방향)
print('(1) X 좌표 맞추기')
while True:
if stop(_master, _slave):
return
position = _slave.get_opt_flow_position()
print("x={} y={}".format(position.X, position.Y)) # 단위(mm)
if _tox - posiErrorRange <= position.X <= _tox + posiErrorRange:
print('[hit]')
break
elif position.X < _tox - posiErrorRange:
_slave.go(Direction.BACKWARD)
print('[Move Backward]')
elif position.X > _tox + posiErrorRange:
_slave.go(Direction.FORWARD)
print('[Move Forward]')
# y 좌표
print('(2) Y 좌표 맞추기')
while True:
if stop(_master, _slave):
return
position = _slave.get_opt_flow_position()
print("x={} y={}".format(position.X, position.Y)) # 단위(mm)
if _toy - posiErrorRange <= position.Y <= _toy + posiErrorRange:
print('[hit]')
print('!!! slave move success !!!')
return
elif position.Y < _toy - posiErrorRange:
_slave.go(Direction.RIGHT)
print('[Move right]')
elif position.Y > _toy + posiErrorRange:
_slave.go(Direction.LEFT)
print('[Move left]')
def main():
master = CoDrone.CoDrone()
master.connect("None", "COM5", False)
slave = CoDrone.CoDrone()
slave.connect("None", "COM6", False)
bHeight = master.get_height() # 고도
if bHeight > 20: # 마스터의 높이가 20이상이면 slave 날기 시작
slave.takeoff()
print('slave take off!!!')
# master의 이전 좌표값(움직임 추적용) 초기화
bHeight = 0
bX = 0
bY = 0
while True:
master.arm_off()
slave.arm_off()
slave.takeoff()
# master
mPosition = master.get_opt_flow_position() # 상대좌표 (시작 0,0)
mHeight = master.get_height() # 고도
# slave
sPosition = slave.get_opt_flow_position()
sHeight = slave.get_height()
print("master [x={} y={} z={}] slave [x={} y={} z={}]"
.format(mPosition.X, mPosition.Y, mHeight, sPosition.X, sPosition.Y, sHeight)) # 좌표출력/단위(mm)
stop(master, slave)
# master의 전 높이 대비 heightRange 만큼의 차이가 있으면 slave가 움직이도록
# if abs(mHeight - bHeight) > heightRange:
# print('[height change!]')
# # LED 효과
# master.arm_strobe()
# slave.arm_strobe()
# setHeight(mHeight, slave)
# master의 좌표가 posiRange만큼 차이가 생기면 움직이도록
if abs(bX - mPosition.X) + abs(bY - mPosition.Y) > posiRange:
print('[position change!]')
# LED 효과
master.arm_strobe()
slave.arm_strobe()
setPosition(master, mPosition.X, mPosition.Y, slave)
# master의 이전 좌표값 저장
bHeight = mHeight
bX = mPosition.X
bY = mPosition.Y
slave.hover()
print('드론을 착륙시킵니다.')
slave.arm_pattern() # LED 효과
print('Land')
slave.land() # 착륙
master.arm_off()
slave.arm_off()
# 연결해제 -> 여기까지 성공했다면 배터리 안 빼도 다시 연결 됩니다.
slave.disconnect()
master.disconnect()
if __name__ == '__main__':
main()
......@@ -6,8 +6,8 @@ from CoDrone.system import Mode
from time import sleep
errorRange = 50 # 오차범위
heightRange = 30 # 움직였다고 판단할 거리 height
errorRange = 100 # 오차범위
heightRange = 70 # 움직였다고 판단할 거리 height
posiRange = 5 # position (x, y) 변화 인지 거리
fbRange = 15 # 피드백받을 slave의 높이 범위
......@@ -31,6 +31,8 @@ def stop(_master, _slave):
def setHeight(_master, _mHeight, _slave):
print('목표높이 : ', _mHeight)
while True:
_master.hover()
print('hover')
_sHeight = _slave.get_height()
print('현재높이 : ', _sHeight)
......@@ -61,6 +63,7 @@ def main():
# master의 이전 좌표값(움직임 추적용) 초기화
bHeight = 0
sbHeight = 0
bX = 0
bY = 0
......@@ -81,6 +84,10 @@ def main():
if stop(master, slave):
break
# slave의 이전 좌표값 저장
sbHeight = sHeight
# master의 전 높이 대비 heightRange 만큼의 차이가 있으면 slave가 움직이도록
if abs(mHeight - bHeight) > heightRange:
print('[height change!]')
......@@ -101,10 +108,6 @@ def main():
if abs(sHeight - sbHeight) > fbRange:
print('[slave feedback!]')
setHeight(slave, sHeight, master) # master의 높이 이동
# slave의 이전 좌표값 저장
sbHeight = sHeight
# master의 이전 좌표값 저장
bHeight = mHeight
bX = mPosition.X
......@@ -114,6 +117,7 @@ def main():
slave.arm_pattern() # LED 효과
print('Land')
master.land()
slave.land() # 착륙
master.arm_off()
slave.arm_off()
......
import CoDrone
import keyboard
from CoDrone.system import Direction
from time import sleep
errorRange = 50 # 오차범위
moveRange = 150 # 움직였다고 판단할 거리
def setHeight(_mHeight, _slave):
while True:
_sHeight = _slave.get_height()
if _mHeight - errorRange <= _sHeight <= _mHeight + errorRange:
print('hit')
return
elif _sHeight < _mHeight - errorRange:
_slave.go(Direction.UP)
sleep(0.2)
print('up')
elif _sHeight > _mHeight + errorRange:
_slave.go(Direction.DOWN)
sleep(0.2)
print('down')
def main():
master = CoDrone.CoDrone()
master.connect("None", "COM5", False)
slave = CoDrone.CoDrone()
slave.connect("None", "COM6", False)
bHeight = master.get_height() # 고도
if bHeight > 20: # 마스터의 높이가 20이상이면 slave 날기 시작
slave.takeoff()
while True:
# master
mPosition = master.get_opt_flow_position() # 상대좌표 (시작 0,0)
mHeight = master.get_height() # 고도
# slave
sPosition = slave.get_opt_flow_position()
sHeight = slave.get_height()
print("master [x={} y={} z={}] slave [x={} y={} z={}]"
.format(mPosition.X, mPosition.Y, mHeight, sPosition.X, sPosition.Y, sHeight)) # 좌표출력/단위(mm)
# 키보드로 콘솔창에 'q'를 누르면 드론이 착륙하게 만드는 코드인데
# 한 번 성공하고 그 이후로 안 되네요
# $pip3 install keyboard
# 로 keyboard를 설치한 다음 실행해야 합니다.
if keyboard.is_pressed('q'):
print('드론을 착륙시킵니다.')
slave.land()
print('land')
# slave.emergency_stop()
# print('emergency_stop')
break
# master의 전 높이 대비 +- moveRange 만큼의 차이가 있으면 slave가 움직이도록
if mHeight > bHeight + moveRange or mHeight < bHeight - moveRange:
setHeight(mHeight, slave)
bHeight = mHeight # 이전 높이 저장
if __name__ == '__main__':
main()