이정민 팀원과 같이 만들었습니다.https://jeongmin-lee.tistory.com/63
캡스톤2을 진행하면서 드론의 영상과 gps 데이터를 서버컴퓨터로 전송해야했습니다.
드론으로 dji spark 드론을 사용했습니다. spark 드론은 mobile sdk 만 지원했고 그에 맞춰서 java pthon 두 언어로 통신하는 코드를 만들었습니다.
java 를 client 로 python 을 sever 로 두고 만들었습니다.
python 으로 만든 서버 코드입니다.
소켓을 생성한 뒤 bind 부분에 ip와 포트번호를 넣어주고 listen 을 통해 몇 개의 연결을 대기시킬지 정하면 우리가 원하는 서버 소켓이 정의됩니다.
그런 다음 accept 를 하면 client에 연결 요청이 오기 전까지 대기상태가 됩니다. client 에 연결요청을 받으면 첫번째로 동영상을 받고 두번째로 gps 텍스트파일을 받습니다.
동영상은 용량이 커서 한번에 받을 수 없으므로 python 문법인 while else 문을 사용해서 소켓 버퍼에 데이터가 비워지는 시점까지 파일을 받습니다.
파일을 다 받으면 동영상을 opencv 를 통해 frame 단위로 잘라주고 dakent에 yolo 모델에 fit해서 이상이 있는 식물을 찾아냅니다.
다음은 안드로이드 환경 java 로 짜여진 client code 입니다. 먼저 파일 통신을 하기 위해 외부저장소를 읽는 권한이 있는지 확인하고 특정 버튼을 누르면 파일통신이 진행되도록 했습니다.
서버 주소와 포트번호를 입력하게 만들었고 입력받은 정보를 통해 소켓을 만듭니다.
특정 디렉토리에 있는 파일의 리스트를 가져와서 inputstream 에 파일을 outputstream 에 서버를 연결해주고 write 를 하게 되면 파일이 보내집니다. 저 형식을 통해서 첫 번째로는 동영상 파일을 두 번째로는 드론 ps 텍스트 데이터를 전송했습니다.
여기서 주의할점이 catch를 통해서 사용자에게 오류가 났을 경우 toast 를 보내는 코드를 넣으면 오류가 납니다. 찾아보니까 메인쓰레드가 아닌 곳에서 toast 를 보낼 경우 오류가 나기 때문에 다른 방법을 통해서 보내야한다고 합니다.
인터넷에 다른 언어들끼리 tcp통신하는 예제가 많이 보이지 않았습니다. 따라서 많은 시행착오를 거쳤습니다. 언어가 달라도 규격만 지켜주면 다른 언어와 환경에서 tcp 통신이 가능합니다.
'캡스톤_졸업작품' 카테고리의 다른 글
드론을 이용한 식물 이상탐지 - 드론 움직임 동작 제어 (0) | 2019.06.21 |
---|---|
드론을 이용한 식물 이상탐지 - dji spark drone (0) | 2019.06.21 |
드론을 이용한 식물 이상탐지 시스템 (0) | 2019.06.20 |
4. 라즈베리파이 블루투스 사용하기 (0) | 2018.12.23 |
3. 라즈베리파이 12V 모터 작동하기 (0) | 2018.12.23 |