petrone for python / Drone
Modified : 2018.11.26
drone 모듈을 소개합니다.
Drone 클래스
Drone 클래스 생성자
Drone 클래스의 생성자는 아래와 같습니다.
def __init__(self, flagCheckBackground = True, flagShowErrorMessage = False, flagShowLogMessage = False, flagShowTransferData = False, flagShowReceiveData = False):
이름 | 설명 |
---|---|
flagCheckBackground | 수신 받은 데이터를 백그라운드에서 확인 |
flagShowErrorMessage | 에러 메세지 표시 |
flagShowLogMessage | 로그 메세지 표시 |
flagShowTransferData | 송신 데이터 배열 표시 |
flagShowReceiveData | 수신 데이터 배열 표시 |
Drone 클래스 생성자 호출 시 인자를 입력하지 않으면 flagCheckBackground는 True가 되며, 나머지는 모두 False가 됩니다.
flagCheckBackground가 True인 경우에는 데이터를 받을 때마다 내부에서 check() 함수를 호출합니다. False인 경우에는 사용자가 직접 check() 함수를 호출하여 수신 받은 데이터를 처리해야 합니다.
Drone 클래스의 public 함수 구성
Drone 클래스의 외부에서 접근할 수 있는 함수 목록입니다.
이름 | 설명 |
---|---|
isOpen() | 시리얼 포트 연결 상태 반환 |
isConnected() | BLE 연결 상태 반환 |
open(portName) | 시리얼 포트 열기. 포트 이름을 지정하지 않으면 마지막에 검색된 장치에 연결. 포트가 열린 경우 True 반환 |
connect(portName, deviceName, flagSystemReset) | 시리얼 포트가 열리지 않은 경우 시리얼 포트를 열고, PETRONE을 검색하여 가장 신호가 강한 장치에 연결합니다. deviceName을 지정하였으면 지정한 장치가 검색되었을 때에만 연결합니다. flagSystemReset은 시리얼 통신 연결 후 처음 PETRONE LINK를 리셋하고 시작할 때 사용합니다. 기본값은 False 입니다. |
close() | 시리얼 포트 닫기 |
makeTransferDataArray(header, data) | 전송할 데이터 바이트 배열 생성 |
transfer(header, data) | 데이터 전송(내부에서 makeTransferDataArray 함수를 실행함) |
check() | 수신 받은 데이터 확인. 데이터를 받은 경우 DataType을 반환 |
checkDetail() | 수신 받은 데이터 확인. Header와 Data를 튜플로 반환 |
setEventHandler(dataType, eventHandler) | 특정 타입의 데이터를 수신했을 때 호출할 사용자 지정 함수 등록 |
getHeader(dataType) | 지정한 타입의 데이터와 함께 받은 헤더 반환 |
getData(dataType) | 지정한 타입의 데이터 반환(데이터가 없으면 None 반환) |
getCount(dataType) | 지정한 타입의 데이터를 받은 횟수를 반환(한 번도 받지 못한 경우 0 반환) |
Drone 클래스 데이터 수신 처리부
Drone 클래스의 데이터 수신 처리부는 아래와 같이 구성되어 있습니다.
이름 | 설명 |
---|---|
_receiving() | 데이터 수신 Thread, 수신 받은 데이터를 버퍼에 저장 |
check() | 버퍼에 저장된 데이터를 한 바이트씩 읽어 receiver에 전달. 하나의 데이터 블럭을 받은 경우 _handler()를 호출하여 받은 데이터를 파싱해서 저장하고 dataType을 반환. 받은 데이터가 없으면 DataType.None_ 반환 |
_handler() | 헤더를 내부에 저장. 데이터는 파싱하여 내부에 저장. 이벤트 처리 함수가 등록된 경우 해당 함수 호출 |
함수 목록
일반
이름 | 설명 |
---|---|
sendPing | 핑 전송 |
sendRequest | 데이터 요청 |
조종
이름 | 설명 |
---|---|
sendTakeOff | 이륙 |
sendLanding | 착륙 |
sendStop | 정지 |
sendControl | 비행 조종 |
sendControlWhile | 지정한 시간 동안 비행 조종 명령 전송 |
sendControlDrive | 자동차 조종 |
sendControlDriveWhile | 지정한 시간 동안 자동차 조종 명령 전송 |
설정
이름 | 설명 |
---|---|
sendCommand | 명령 전송 |
sendModeVehicle | Flight/Drive 모드 변경 |
sendHeadless | 헤드리스 설정 |
sendTrim | Trim 설정 |
sendTrimFlight | 비행 Trim 설정 |
sendTrimDrive | 주행 Trim 설정 |
sendFlightEvent | 비행 이벤트 실행 |
sendDriveEvent | 주행 이벤트 실행 |
sendClearTrim | Trim 초기화 |
sendClearGyroBias | 자이로 바이어스 초기화 |
sendUpdateLookupTarget | 펌웨어 정보 확인 |
모터
이름 | 설명 |
---|---|
sendMotor | 모터 동작 제어 |
적외선
이름 | 설명 |
---|---|
sendIrMessage | 적외선 데이터 전송 |
LED
이름 | 설명 |
---|---|
sendLightMode | 모드 설정(팔레트) |
sendLightModeCommand | 모드 설정(팔레트), 명령 |
sendLightModeCommandIr | 모드 설정(팔레트), 명령, 적외선 |
sendLightModeColor | 모드 설정(RGB) |
sendLightEvent | 이벤트 설정(팔레트) |
sendLightEventCommand | 이벤트 설정(팔레트), 명령 |
sendLightEventCommandIr | 이벤트 설정(팔레트), 명령, 적외선 |
sendLightEventColor | 이벤트 설정(RGB) |
LINK
이름 | 설명 |
---|---|
sendLinkModeBroadcast | LINK Broadcast 모드 변경 |
sendLinkSystemReset | LINK 리셋 |
sendLinkDiscoverStart | PETRONE 스캔 |
sendLinkDiscoverStop | PETRONE 스캔 중단 |
sendLinkConnect | PETRONE 연결 |
sendLinkDisconnect | PETRONE 연결 해제 |
sendLinkRssiPollingStart | RSSI 수집 시작 |
sendLinkRssiPollingStop | RSSI 수집 중단 |
함수 정의
sendPing
핑 전송
드론과의 연결 상태를 확인할 때 사용합니다. 응답으로 Ack를 받습니다.
def sendPing(self):
sendRequest
데이터 요청
데이터를 요청할 때 사용합니다.
def sendRequest(self, dataType):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
dataType | DataType | 데이터의 타입 |
sendTakeOff
이륙
비행 모드로 동작 시 이륙을 할 때 사용합니다.
def sendTakeOff(self):
sendLanding
착륙
비행 모드로 동작 시 착륙을 할 때 사용합니다.
def sendLanding(self):
sendStop
정지
드론 동작 모드에 관계없이 강제로 정지할 때 사용합니다.
def sendStop(self):
sendControl
비행 조종
비행 및 주행에 모두 사용할 수 있습니다.
def sendControl(self, roll, pitch, yaw, throttle):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
roll | -100 ~ 100 | Roll |
pitch | -100 ~ 100 | Pitch |
yaw | -100 ~ 100 | Yaw |
throttle | -100 ~ 100 | Throttle |
sendControlWhile
비행 조종
비행 및 주행에 모두 사용할 수 있습니다. timeMs에 지정한 ms동안 연속으로 조종 명령을 전송합니다.
def sendControlWhile(self, roll, pitch, yaw, throttle, timeMs):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
roll | -100 ~ 100 | Roll |
pitch | -100 ~ 100 | Pitch |
yaw | -100 ~ 100 | Yaw |
throttle | -100 ~ 100 | Throttle |
timeMs | 0 ~ 1,000,000 | 동작 시간(ms) |
sendControlDrive
자동차 조종
드론이 자동차 모드로 동작할 때 사용할 수 있습니다.
def sendControlDrive(self, wheel, accel):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
wheel | -100 ~ 100 | Wheel |
accel | -100 ~ 100 | Accel |
sendControlDriveWhile
자동차 조종
드론이 자동차 모드로 동작할 때 사용할 수 있습니다. timeMs에 지정한 ms동안 연속으로 조종 명령을 전송합니다.
def sendControlDriveWhile(self, wheel, accel, timeMs):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
wheel | -100 ~ 100 | Wheel |
accel | -100 ~ 100 | Accel |
timeMs | 0 ~ 1,000,000 | 동작 시간(ms) |
sendCommand
명령 전송
드론에 명령을 전달할 때 사용합니다.
option에는 각 형식의 value 값 또는 숫자 값을 넣으셔야 합니다.
def sendCommand(self, commandType, option = 0):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
commandType | CommandType | 명령 타입 |
option | ModeVehicle | 옵션 |
FlightEvent | ||
DriveEvent | ||
Headless | ||
Trim | ||
UInt8 |
sendModeVehicle
Vehicle 동작 모드 설정
드론을 비행 또는 주행 모드로 변경할 수 있습니다.
def sendModeVehicle(self, modeVehicle):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
modeVehicle | ModeVehicle | Vehicle 동작 모드 |
sendHeadless
Headless 설정
def sendHeadless(self, headless):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
headless | Headless | Headless 설정 |
sendTrim
Trim 설정
def sendTrim(self, trim):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
trim | Trim | 트림 설정 |
sendTrimFlight
비행 Trim 설정
def sendTrimFlight(self, roll, pitch, yaw, throttle):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
roll | -200 ~ 200 | Roll |
pitch | -200 ~ 200 | Pitch |
yaw | -200 ~ 200 | Yaw |
throttle | -200 ~ 200 | Throttle |
sendTrimDrive
주행 Trim 설정
def sendTrimDrive(self, wheel):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
wheel | -200 ~ 200 | Wheel |
sendFlightEvent
비행 이벤트 실행
def sendFlightEvent(self, flightEvent):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
flightEvent | FlightEvent | 비행 이벤트 |
sendDriveEvent
주행 이벤트 실행
def sendDriveEvent(self, driveEvent):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
driveEvent | DriveEvent | 주행 이벤트 |
sendClearTrim
비행, 주행 Trim 초기화
def sendClearTrim(self):
sendClearGyroBias
Accel, Gyro Bias 초기화
def sendClearGyroBias(self):
sendMotor
4개의 모터를 미리 지정된 방향으로 회전
def sendMotor(self, motor0, motor1, motor2, motor3):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
motor0 | 0 ~ 4095 | 왼쪽 앞 모터 속도 지정 |
motor1 | 0 ~ 4095 | 오른쪽 앞 모터 속도 지정 |
motor2 | 0 ~ 4095 | 오른쪽 뒤 모터 속도 지정 |
motor3 | 0 ~ 4095 | 왼쪽 뒤 모터 속도 지정 |
sendIrMessage
적외선 데이터 전송
def sendIrMessage(self, value):
변수 이름 | 형식 또는 범위 | 설명 |
---|---|---|
value | 0x00000000 ~ 0xFFFFFFFF | 적외선으로 전송할 데이터의 값 |
petrone for python
- Intro
- System
- Protocol
- Drone
- Examples - Information
- Examples - Imu
- Examples - Test Flight
- Examples - Light