|
1 year ago | |
---|---|---|
readme.md | 1 year ago |
SNITS_simulation
("SNITS_RealTimeSignals"의 readme 파일을 그대로 복사함)
목차
단위시간마다 신호정보를 생성하고 이를 통해 SUMO로 시뮬레이션하는 프로젝트입니다.
이것은 SNITS(성남 지능형 교통체계, Seong-nam Intelligent Transport System)의 일환입니다.
다음은 상세한 내용입니다.
모든 것에 앞서서 네트워크 파일이 구축되어 있어야 합니다.
네트워크 파일은 [filename].net.xml
와 같은 형태의 파일명을 가집니다.
tiberoDB로부터 데이터(테이블)들을 수령받습니다.
수령받아야 하는 핵심적인 테이블들은 다음의 세 종류입니다.
하루 단위로 현시구성 테이블을 받습니다.
SNITS_INT\S_INT_PHASE_CONFIG
에 담겨있습니다.하루 단위로 신호계획 테이블를 받습니다.
SNITS_INT\SNITS_INT_TPLAN
에 담겨있습니다.
그 외에 그룹 일계획, 그룹주간계획이 이 테이블을 보완할 수 있고, 연동과 관련된 테이블들도 이 테이블를 보완할 수 있습니다.단위시간마다 신호이력 테이블을 받습니다.
SNITS_INT\S_TOD_HIS
에 담겨있습니다.이 세 형식의 테이블를 수령받는 방식은 다음의 두 가지입니다.
Scripts\fetch_tables_all.py
를 실행하면 SNITS
, SNITS_IF
, SNITS_INT
스키마에 속한 모든 테이블을 받아옵니다.
이 스크립트가 실행되는 데 걸리는 시간은 약 7분입니다.Scripts\fetch_tables_nec.py
를 실행하면 꼭 필요한 테이블들만 받아옵니다.
이 스크립트가 실행되는 데 걸리는 시간은 약 1.2초입니다.이 데이터로부터 신호를 만들어냅니다. 만들어내는 신호는 일반신호와 유턴신호, 그리고 비보호 좌회전 신호입니다.
신호생성 스크립트는 .\Scripts\RealTimeSignals.py
에 담겨있습니다.
이 스크립트에 RealTimeSignals
라는 클래스가 정의되며 다음의 세 단계를 거치게 됩니다.
다음은 세 단계에 대한 설명입니다.
pd.DataFrame
형태로 저장합니다.
각각의 컬럼들을 어떤 dtype으로 저장할 지에 대한 이슈가 있고, 이를 위해 별도의 함수를 만들 필요도 있습니다.pd.DataFrame
을 얻어냅니다.
signals
)plans
)history
)dict
)pd.DataFrame
을 가지고 programs
라는 객체를 만들어냅니다.programs
는 딕셔너리로서, (node_id, program_id)
가 주어지면 program
에 대응시킵니다.
또 program
은 그 자체로 딕셔너리인데, (A_no, B_no, color)
가 주어지면 signal
에 대응시킵니다.
이때, signal
은 문자 'g', 'G', 'r', 'y
가 유한 개 나열된 문자열입니다.
signal
의 예시는 gGGgrgrgrr
같은 것이 될 수 있습니다.programs
는 딕셔너리의 딕셔너리이며, 이 객체가 잘 생성되기만 하면, 각 프로그램에 대한 모든 신호를 제대로 만들어낸 셈이니다.SN.tll.xml
)programs
를 통해 신호파일을 만들어냅니다.[filename].tll.xml
, [filename].add.xml
의 형태의 파일이 생성됩니다.[filename].tll.xml
에는 각 교차로별, 각 시간대별 신호프로그램을 기록됩니다.
만들어진 두 신호파일들 중 주요 신호파일입니다.[filename].add.xml
는 소위 '스위치 파일'이라고 불리는 것 같습니다.
각각의 신호프로그램을 어떤 offset을 통해 적용할지 특정합니다.[filename].rou.xml
와 같은 형태의 통행배정 파일이 있어야 합니다.sumo-gui -n [filename].net.xml -r [filename].rou.xml -a [filename].tll.xml,[filename].add.xml
와 같은 명령어를 prompt에 입력하여 사용하여 SUMO를 통한 시뮬레이션을 진행합니다.SNITS_RealTimeSignals는 다음과 같은 하위폴더들을 가집니다. 각각의 하위폴더명은 rts(가상환경 폴더)를 제외하면 첫글자가 대문자가 됨을 원칙으로 합니다.
Analysis
: 데이터의 분석 결과나 중간 결과물, 그래프 등을 저장하는 폴더입니다.Archives
: 이전 버전의 사용하지 않는 코드, 데이터 등을 보관하기 위한 폴더입니다.
프로젝트의 이전 상태를 참조하거나 백업하기 위해 사용될 수 있습니다.Data
: 사용될 데이터를 보관하는 폴더입니다.
sumo
: 구축해놓은 네트워크들이 담기는 폴더입니다.tiberoDB
: DB에서 받은 테이블들이 담기는 폴더입니다.
tables_all
: DB에서 가져올 수 있는 데이터 중 SNITS
, SNITS_IF
, SNITS_INT
스키마에 포함된 모든 테이블이 이곳에 저장됩니다.tables_nec
: 신호생성에 꼭 필요한 테이블들이 이곳에 저장됩니다.int2node.json
: 교차로와 노드를 대응시키는 json파일입니다.link2edge.json
: 링크와 엣지를 대응시키는 json파일입니다.Draft
: 성남시 DB 데이터를 수령받기 전에 임시 데이터들을 만들고 코드를 만들어놓은 폴더입니다.
박산하 과장님의 작업물들을 기반으로 합니다.Reports
: 분석 결과나 리포트, 만들어낸 문서(document)들을 넣기 위한 폴더입니다.rts
: 파이썬 가상환경 폴더입니다.
virtualenv
로 만든 가상환경입니다.Scripts
: 실행가능한 스크립트, 코드를 저장합니다.
데이터를 가져오는(fetch) 스크립트, 신호를 생성하는 스크립트 등이 담기게 됩니다.
credentials.json
: DB에 테이블 호출시 필요한 접속정보 (id, pw 등)가 담겨있습니다.fetch_tables_all.py
: DB에서 SNITS
, SNITS_IF
, SNITS_INT
스키마에 해당하는 모든 테이블들을 .\Data\tiberoDB\tables_all
에 저장합니다.fetch_tables_nec.py
: DB에서 신호 생성과 관련된 테이블들을 .\Data\tiberoDB\tables_nec
에 저장합니다.RealTimeSignals.py
: 신호파일을 생성하는 스크립트입니다.