드론 쿼드콥터

Mission Planner를 사용한 항공사진 Geotagging

하늘이푸른오늘 2016. 3. 25. 17:24

쿼드콥터에 사진기를 장착하고, 자동미션을 이용해 항공사진을 촬영하면, 일련의 사진이 촬영됩니다. 


이 사진들은 물론 그냥 사용할 수도 있지만, 대부분의 경우, 특히 항공사진측량의 경우에는 촬영된 위치와 방향이 중요합니다.


그런데, 제가 조립한 기체는 GPS가 따로 달려있지 않은 일반 똑딱이(Canon IXUS 870 IX)를 사용하여 촬영했기 때문에 촬영된 위치나 자세한 정보가 전혀 없습니다. 하지만, Pixhawk의 경우에는 모든 촬영중 발생하는 상황이 LOG 파일로 저장됩니다. 이 정보를 사용하면 사진에 촬영 위치를 넣을 수 있습니다. (이 과정을 Geotagging 이라고 합니다.) 이 글은 ardupilot.org/copter의 글을 참고하여 정리한 것입니다.


먼저 아래 좌측은 제가 맨 처음 시범 촬영한 사진들을 적당한 위치로 배열해 본 것입니다. 오른쪽은 다음 지도에서 동일한 지역을 복사한 것이고요. 


Mission Planner를 이용한 Geotagging 은 두 가지 방법이 있습니다. 하나는 로그에 들어 있는 CAM 메시지를 사용하는 방법이고, 다른 하나는 드론과 카메라의 시간을 동일하게 맞춘 뒤 이를 기준으로 위치를 끌어오는 방법입니다.


먼저 미션 플래너에서 Ctrl+F를 누르면 아래와 같은 화면이 뜹니다. (메뉴에는 없습니다.) 이중에서 맨 위에 있는 메뉴인 [Geo ref Images]를 사용하면 됩니다.



아래는 [Geo ref Images]를 눌렀을 때 나오는 화면입니다. 맨위에 있는 [Browse Log]는 촬영당시의 Log 파일을 찾아서 넣어주고, [Browse Pictures] 에는 촬영된 사진들을 넣어주면 됩니다. 이때 촬영때의 사진만 따로 넣어둔 폴더를 지정하면 됩니다. 이 폴더에는 다른 종류의 파일은 들어있어도 되지만, 사진은 오직 촬영당시의 사진만 존재해야 합니다. 그리고 사진들은 알파벳으로 정렬했을 때 처음 촬영된 사진이 맨 위로 올라오고 순서여야 합니다.



그 아래에 있는 Time offset 과 CAM Message Synchro 가 Geotagging  방식을 선택하는 겁니다. Pixhawk와 연동하여 촬영하면 CAM Message Synchro를 눌러주면 됩니다.


다 준비가 되면 Pre-Process를 눌러줍니다. 그러면 한참 계산을 하고 맨 아래에 Done 이라고 나타납니다. 



다음으로 [Location KML] 을 누르면 촬영된 위치가 맞는지 구글어스에서 확인할 수 있습니다. 아래는 시범 촬영한 사진을 확인해본 모습입니다. 여기에서 하얀줄은 드론의 비행 코스, 노란 핀은 촬영한 위치입니다.



마지막으로 [Geo Tag Images] 를 눌러주면 원본 사진이 있는 폴더 속에 Geotagged 라는 폴더가 생겨 있습니다.


===

위 촬영은 보시는 것처럼 3코스만 촬영했기 때문에 아무래도 부족하여 새로 촬영을 나갔습니다. 이 영상을 사용하여 위의 방법대로 지오태깅을 하려고 했는데 문제가 발생했습니다. Preprocessing을 누르면 아래처럼 사진 매수가 일치하지 않는다고 나오는 겁니다. 정확한 원인은 찾지 못했는데... 아무래도 중복도를 높이다보니(80%) 비행콘트롤러에서 촬영메시지를 자주 보내지만, 카메라에서 이를 처리하지 못했기 때문이 아닌가 하는 생각이 들었습니다. (다음에는 중복도를 좀 낮춰서 촬영해야 할 듯 싶습니다.)



아무튼... 그래서 여러가지를 고민하다가, 시간태그를 이용하는 방법으로 지오태깅을 하기로 했습니다. 이 방법은 [Geo Ref Images] 화면에서 아래와 같이 [Time offset]을 선택하고 [Estimate Offset]을 누르면 아래 알림창에 몇개의 사진을 기준으로 오프셋을 계산해 주는데, 이 값을 "Seconds offset"에 복사해 넣은 뒤 PreProcessing을 눌러주면 됩니다. 나머지 과정은 동일하고요.



그런데 제 경우엔 위에서 보는 것처럼 53.05를 넣으면 아주 이상한 위치로 나와서 촬영된 사진을 보면서 적당히 판독하여 -8로 넣어줬더니 대략 맞더군요.


그 다음도 위에 있는 방법과 동일합니다. [Preprocess]를 누르고 [Location KML]을 통해 위치가 맞는지 확인한 후 마지막으로 [GeoTag Images]를 눌러주면 됩니다.


아래는 이 방법으로 지오태깅을 하면서 만든 KML을 구글어스에서 돌리면서 녹화한 것입니다. 이번엔 총 6개의 코스가 잘 촬영됐네요. ㅎㅎㅎ



===

참고로... 원래 Pixhawk의 로그 파일에는 사진 촬영 당시의 위치 뿐만 아니라, 자세 (기체의 방향) 정보도 들어 있습니다. 아래는 로그파일 첫부분에 들어 있는 필드 정의에 관한 내용인데요, Lat, Lng, Alt 등 위치 뿐 만 아니라, Roll, Pitch, Yaw 등의 자세 정보도 함께 저장됨을 알 수 있습니다. 


- FMT, 148, 39, CAM, QIHLLeeccC, TimeUS,GPSTime,GPSWeek,Lat,Lng,Alt,RelAlt,Roll,Pitch,Yaw


예를 들어, 아래는 맨 첫 사진에 대한 로그입니다. 여기에서 경위도 및 높이는 (37.5154446, 126.8776732, 106.66) 이고, 각도는(<-6.60, -3.55, 21.24) 로 나와 있습니다. 


- CAM, 577738321, 458991000, 1888, 37.5154446, 126.8776732, 106.66, 99.75, -6.60, -3.55, 21.24

다만, 이 값은 그대로 활용하기는 곤란합니다. pixhawk의 IMU 는 Pixhawk 콘트롤러 내부에 들어 있어 카메라가 달려있는 방향과 일치하지도 않을 뿐 더러, 카메라가 별도로 흔들릴 수도 있고... 아주 완벽하게 일치된다고 해도 Pixhawk의 IMU 자체가 별로 정확하지 않기 때문입니다.


그래도... 전문가에겐 이런 정보가 없는 것보다는 도움이 되겠죠. 저도 언젠가 시간이 되면 천천히 한 번 뒤져보고 싶네요.


민, 푸른하늘

===

p.s. : DROTAG를 사용하면 한방에 해결된다네요. Pixhawk 의 Telemetry 포트에 연결만하면 된다는데.. 다만 사진 촬영간격이 최소 3초가 되어야 한다는데... 이건 개선되겠죠. 현재는 품절이라는데 좀더 기다려봐야겠습니다.




p.s. : Mission Planner 대신 UgCS를 사용하면 지오태깅은 해결할 수 있답니다. 이 글을 참고하세요. 무료버전도 가능합니다.