이 시스템은 원격에서 자동차를 제어할 수 있는 환경을 제공합니다. 이 프로젝트는 진성근 교수님의 실험실에서 나온 발췌입니다.
이 저장소에는 reader.sh를 비롯한 쉘로만 동작하는 초기 프로토타입 스크립트 몇 개를 제외하면 (reader.sh, car_controllser.sh, writer.sh, pod_car_run.sh와 같은 것) 쉘 스크립트, yaml, Go, C 모두 본인이 작성한 코드만 있으며, 타인의 코드는 포함되어 있지 않습니다. 전체 초기 파일은 깃허브에서 직접 작성자를 확인해야 하나 일부를 정리하자면
프로젝트의 다른 일부에서 기여했던 구성원들이 있으나, 대부분의 자료는 유실된 상태입니다.
프론트엔드 및 상위 관리 구조는 김경빈, Abduolimov Alisherbek(@alisherfw) 가 맡았습니다.
구조 설계는 주로 김경빈이 담당했으며, 세부 아이디어는 저를 비롯하여, Abduolimov Alisherbek, Akhmad Kholmurodov가 기여했습니다. (예: 디바이스 드라이버 구조, TCP 흐름도, 통합 관리 아이디어 등)
기본적으로 모든 소스는 본인이 직접 구현했으며, 아이디어는 실험실 구성원 전체의 것입니다.
.
├── driver-real-car
│ └── driver
├── config
│ └── k8s-deploy
├── exec
│ ├── cluster_pod_man
│ └── k8s_car_man
├── pod
│ ├── driver
│ └── tunnel
└── car
├── common
├── controller
├── driver
├── real-car
├── runner
├── sonic
├── tunnel
├── virt-carcon
└── virt-cartun
Kubernetes Pod 배포 설정 파일
자동차의 디바이스 드라이버 및 제어 프로그램
물리 자동차 디바이스 드라이버 초기 설계 및 터널링 정보 송수신용 스크립트
자동차 제어용 쉘 스크립트. 대부분 초기 프로토타입임.
shelljs로 호출되던 실제 실행 타겟들이 위치함.
이 프로젝트의 초기 및 추상적 구조 설계
실험 당시의 구조는, 드래그 앤 드롭으로 주행 방향 계산 어플리케이션의 실행 위지를 엣지 서버, 혹은 클러스터에 등록된 물리 자동차 기기로 지연 없이 옮기는 것이었습니다.
자동차 혹은 엣지 서버를 실행하기 위한 칸으로 드래그 앤 드롭을 하면, car/controller에 위치한 적절한 타겟 스크립트를 shelljs에서 호출, html 웹에서 가상, 물리 자동차의 로그 파일을 읽어서 보여 주는 형태의 웹서버였습니다.
실험 당시, Edge Server를 초기에는 AMD64 컴퓨터로 하였으나 네이티브 아키텍처를 서로 일치시켜 불필요한 Endianness 변환을 피하기 위해 라즈베리 파이 클러스터를 사용하였고, 실험 말기에는 M! 맥북에 AsahiLinux Kernel + Pearl Bootloader + Pearl 부트로더 Repo에 같이 첨부된 Debian 이미지로 진행하였습니다.
Tunnel Buffer의 최적화가 충분하지 않아 Sawtooth Pattern이 일부 관찰되었으며, 후속 과제가 확실하게 저지연 통신을 보장하는 것이었습니다.
후속 과제로 제대로 이어지지 못한 채 실험이 종료되어 지금 올리는 프로토타입 정도가 남았고, 당시 적절한 요소 제거가 정의되지 않은 배열 기반의 고정 크기 버퍼를 사용하였으나 그 코드는 유실되어 현재는 Linked List 기반으로 요소 삽입 공간이 부족할 때 FIFO로 요소를 버리는 구현으로 대체하였으나 메트릭 측정은 아직 하지 못했습니다(충분한 엣지 서버 역시 존재하지 않는 것이 문제입니다).