-
TraceRoute - GPS 데이터를 지도에 표시하기api 2026. 3. 5. 16:27
시작하기 전에
- Tlog100x는 일반 CAN/LIN-to-USB 인터페이스 하드웨어 기능과 로거 기능이 동합된 하드웨어이다. USB로 PC와 연결된 상태에서는 인터페이스로 작동한다. USB로 연결되지 않은 상태로 전원이 공급되면 로거로 작동한다. Tlog100x에는 GPS가 있다. 로거로 작동할 때는, GPS 좌표가 측정되어 데이터 파일에 CAN/LIN 데이터와 함께 저장된다.
- 차를 타고 이동할 때 로거로 데이터를 측정했다. 데이터 관리를 제대로 못해서 어느 blf 파일이 어디 다녀올 때 측정한 것인지 알 수 없게 되었다. TSMaster에서 하나씩 열어보며 확인할 수 있다. 시간이 제법 들 것이다. 브라우저에서 지도 위에 경로를 표시하는 앱이 있으면 좋겠다는 생각을 했다. Streamlit이라는 파이썬으로 웹 앱을 만드는 프레임워크가 있다는 것을 알고 있었다. 클로드 ai의 도움을 받아 TraceRoute라는 웹 앱을 만들었다. TraceRoute에 관해 설명한다.

개요
- blf 파일에서 GPS 데이터 추출하기
- TSMaster API를 이용하여 blf 파일을 asc 파일로 변환하기
- GPS 데이터를 지도에 표시하기
- 코드
- 결론
blf 파일에서 GPS 데이터 추출하기
- python-can 이라는 모듈을 이용하면 단 몇 줄의 명령어로 blf 파일을 열고, 파일에서 CAN 데이터를 프레임별로 읽을 수 있다. 그런데 파일에 있는 GPS 데이터는 읽을 수 없다는 것을 확인했다.
- 바리너리 포맷의 blf 파일을 텍스트 포맷의 asc로 변환하면 아래와 같이 GPS 데이터를 볼 수 있다.
... 6.847068 1 111 Rx d 8 00 80 00 FF 63 A1 09 1C ← CAN 프레임 15420325273.003979 GPS 1 232327 1 36.658138 127.370087 0.330000 106.440002 80.199997 17 45 00 ← GPS 프레임 6.847309 1 112 Rx d 8 FF F0 00 00 FF A1 09 00 ← CAN 프레임 ...- asc 파일을 읽어서, "GPS"라는 단어가 들어있는 줄들만 추출하면 GPS 트레이스를 만들 수 있다.
15420325273.003979 GPS 1 232327 1 36.658138 127.370087 0.330000 106.440002 80.199997 17 45 00
GPS GPS 데이터 표시 36.658138 위도 127.370087 경도 - GPS 프레임의 타임스탬프를 알 수 없다. GPS 프레임은 바로 위와 아래 CAN 프레임들의 타임스탬프의 평균으로 하기로 한다. 위 예제의 경우 (6.847068 + 6.847309) / 2 = 6.847189 라고 계산할 수 있다. 충분히 정확하다고 생각한다.
- blf 파일들이 여기저기 디렉토리들에 흩어져 있다. TSMaster에서 경로를 열어서 blf 파일을 하나씩 선택해서 변환할 수 있으나, 파일 선택에 시간을 쓰고 싶지 않았다. TSMaster API 문서를 보니, tsapi.tslog_blf_to_asc() 함수가 있다. 이 함수를 이용하면 blf to asc 변환을 자동화 할 수 있을 것 같다.
TSMaster API를 이용하여 blf 파일을 asc 파일로 변환하기
- TSMaster를 설치한 후, 파이썬의 tsmasterapi 모듈을 설치하면, TSMaster의 기능들을 프로그램에서 호출하여 사용할 수 있다.

- TSMaster에는 blf 파일을 asc 파일로 변환하는 기능이 있다.

메인 메뉴/ Analysis/ Log Converter를 이용하면 blf 파일을 asc 등으로 변환할 수 있다. 
Log Conveter . Source File에서 blf 파일을 선택한다. Destination File에 asc를 선택한다. Convert 버튼으로 변환한다. - Log Converter 기능을 프로그램에서 사용하기 위해서 아래 TSMaster API의 함수들을 차례로 호출하면 된다.
from TSMasterApi import TSAPI as tsapi from TSMasterApi.TSCallback import TReadProgressCallback # TSMaster API를 사용하기 위해 초기화한다. ret_init = tsapi.initialize_lib_tsmaster(b"TraceRoute") # blf 파일을 asc 파일로 변환한다. ret = tsapi.tslog_blf_to_asc( None, str(blf_path).encode("utf-8"), # blf 파일 경로 str(asc_path).encode("utf-8"), # asc 파일 경로 cb, ) # TSMaster API 사용을 종료한다. tsapi.finalize_lib_tsmaster()GPS 데이터를 지도에 표시하기
- 파이썬 plotly 모듈에는 지도를 그리고, 지도 위에 GPS 데이터를 표시하는 Scattermapbox()라는 기능이 있다. (GPS 데이터를 파이썬 pandas의 데이터프레임(df)으로 만들어서 Scattermapbox()에 입력으로 사용한다.)
# 지도를 표시한 plolty의 Figure 오브젝트 만든다. fig = go.Figure() # Scattermapbox 기능을 이용하여 지도를 그린다. fig.add_trace(go.Scattermapbox( lat=df["latitude"], # df는 pandas의 데이터프레임이다. lon=df["longitude"], # df에는 위도(latitutde)와 경도(longtitude) 데이터가 있다. mode="markers", marker=dict( size=5, color=df[color_by], colorscale=colorscale, showscale=True, colorbar=dict(title=color_by, thickness=14), ), name="Route", customdata=df[color_by], hovertemplate=( "<b>Route</b><br>" "Lat: %{lat:.6f}<br>" "Lon: %{lon:.6f}<br>" f"{color_by}: %{{customdata:.2f}}" "<extra></extra>" ), ))코드
- 첨부 zip 파일의 파이썬 코드를 드라이브에 저장한 후 아래 명령으로 프로그램 실행에 필요한 파이썬 모듈들을 설치한다.
pip install -r requirements.txt- 코드가 저장된 디렉토리에서 커맨드 창을 연다. 아래 명령으로 웹 앱을 실행한다.
streamlit run TraceRoute.py- BLF 파일 변환의 입력 창에 변환할 blf 파일의 경로를 입력한다.
- 변환 시작 버튼을 클릭하면 지도에 경로가 표시된다.

지도를 보면 전체 경로 중에 끊어진 부분들이 있다. 일부는 터널 구간을 통과해서 그럴 것이다. 내 느낌으로 이 원인은 전체 끊어진 구간의 10% 정도도 해명을 못할 것 같다. Tlog100x의 펌웨어 개선이 필요한 것으로 보인다.- 지도에 경로가 끊어진 부분들은 GPS 데이터를 추출할 때 오류가 있었기 때문으로 밝혀졌다. GPS 데이터 중에 헥사 데이터가 있는데 이를 정수로 변환하는 과정에서 에러가 발생했고, 에러가 발생한 GPS 프레임들은 버려졌고 지도에 끊어진 부분들이 생겼다. 오류를 수정하니 그래프는 아래와 같이 출력된다.

GPS 데이터 변환 오류를 수정한 후 전체 경로가 표시된다. 결론
- Tlog100x로 측정한 blf 파일에는 GPS 데이터가 포함되어 있다. (GPS 데이터 포함 여부를 사용자가 설정한다.)
- API를 이용하여 TSMaster의 blf 파일을 asc 파일로 변환하는 기능을 프로그램에서 호출할 수 있다.
- plotly의 Sacttermapbox() 기능을 이용하면 간단하게 GPS 데이터를 지도에 표시할 수 있다.
'api' 카테고리의 다른 글
libTSCAN API - Python 설명서 (0) 2026.03.04 libTSCAN의 CAN 메시지 전송 주기 정확도 살펴보기 (0) 2026.02.17 libTSCAN 예제 코드 (0) 2026.02.05 libTSCAN 함수 목록 (0) 2026.02.05