자율주행시스템 = 소프트웨어 + 하드웨어
다양한 컴포넌트들이 상호작용하려면 OS가 필요한데, 우리가 쓰는 ROS를 중심으로 알아보자.
< 복잡한 자율주행시스템 >
- 센싱 - GPS/ LiDAR/ Camera
- 센서는 주변 환경에서 데이터를 수집
- 인지와 동작 연산을 수행하는 컴퓨터 플랫폼으로 전달
- 인지 - 로컬라이제이션/ 개체 인식/ 개체 추적
- 의사결정 - 예측/ 경로 계획/ 장애물 회피
- 동작 계획 생성
- 제어 플랫폼으로 전달
이 전체를 통합하는 것은 클라이언트 시스템 위에서 이뤄지며, 클라이언트 시스템은 다시 OS와 하드웨어 플랫폼으로 구성된다. OS가 무엇을 하느냐? 데이터가 증가할 수록 시스템 자원을 할당하기 힘들어지는데 OS가 각 컴포넌트마다 사용할 수 있는 자원의 양을 제한해준다.
<자율 주행을 위한 OS>
- OS의 두 가지 핵심 기능
- 통신
- 자원할당
- ROS
- 노드 node: 노드는 어떤 일을 수행하는 과정이다. ex. 모터 제어 노드는 모터에 대한 정보를 읽어서 모터의 회전을 제어한다. 경로 계획 노드는 모바일 플랫폼의 동작 계획(motion planning)을 구현하는데 사용된다.
- 노드 관리자 node manager/ 마스터 master: 다른 노드를 관리한다. 각 노드마다 자신에 대한 정보를 노드 관리자에 등록해야 한다. 노드 관리자는 노드 운영에 관련된 설정 매개변수를 중앙에 저장.
- 매개변수 서버 parameter server: 매개변수 서버는 시스템에 있는 노드의 운영에 관련된 설정 매개변수를 중앙에 저장
- 메시지 message: 노드끼리 주고받는 정보
- 토픽 topic: 발행-구독 방식의 통신 메커니즘, 어떤 노드가 특정 토픽에 메시지를 발행하면 이 토픽을 구독하던 다른 노드는 그 노드가 발행한 메시지를 받게 됨.
- 서비스 service:1 대 1 통신 메커니즘, 노드가 서비스 노드에서 제공하는 서비스를 요청하면 두 노드 사이의 통신 채널을 만들어줌.
- 시스템 신뢰성
- 시스템의 견고성 robustness와 신뢰성을 높이도록 마스터 노드를 분산하는 것이 필요
- 어떻게? 주키퍼 ZooKeeper 활용
- 여러 개의 마스터 노드를 구동해 하나는 액티브 마스터 노드로 작동하고 나머지는 백업용으로 구동
- 액티브 마스터 노드가 뻗을 경우, 백업 마스터 노드 중 하나를 새로운 액티브 마스터 노드로 선정해서 작동시키면 됨! -> 견고성 확보
- 모든 노드의 상태를 감시하는 모니터 노드를 추가해야 함.
- 각 시스템에 있는 노드는 ZooKeeper에게 심박Heartbeat message를 주기적으로 보내는데, 일정 시간동안 심박 메시지를 받지 못했다면 그 노드는 죽었다고 간주
- 그러면 ZooKeeper는 모니터 노드에게 그 노드가 죽었으니 새로 구동하라고 알려줌
- 상태 / 무상태 두 경우가 있고, 상태를 저장하면 재구동 시 마지막 저장 상태를 이어서 시작 (-> 심박메시지를 보낼 때 상태 정보를 함께 보내기도 함)
- 자원 관리 및 보완
- 노드 중 하나가 공격을 당했다! ->
<컴퓨팅 플랫폼>
자율 주행 자동차에 장착된 센서들은 초당 2GB 이상의 데이터를 생성 및 전송
-> 컴퓨팅 플랫폼의 설계 방식이 실시간 성능뿐만 아니라 자율 주행 시스템의 견고성에 직접적인 영향을 미침
* 문제는: 비용, 전력 소비량, 방열heat dissipation
- 컴퓨팅 플랫폼 구현 [4]
- 기존 컴퓨팅 플랫폼
- 기존 컴퓨팅 솔루션
- 자율 주행을 위한 GPU 솔루션 중 가장 대표적인 엔비디아 PX 솔루션
- PX2에는 2개의 테그라 Tegra SoC와 2개의 파스칼 Pascal 그래픽스 프로세서 장착
- AlexNet을 구동할 때 초당 2800개 이미지 처리 가능
- DSP 기반 솔루션인 텍사스 인스트러먼츠 Texas Instuments의 TDA
- TPGA기반 솔루션
- ASIC 기반 솔루션
- 컴퓨터 아키텍쳐 설계 분석
- 부하 workload 종류에 따라 가장 적합한 컴퓨팅 장치
- 극단적인 경우 자율 주행에 관련된 태스크를 수행하는 데 있어 모바일 프로세서로도 충분한지 여부
- 자율 주행을 위한 효율적인 컴퓨팅 플랫폼을 설계하는 방법
이 세 가지를 고려해 컴퓨팅 플랫폼을 구성해야 한다.
- 부하 workload 종류에 따라 가장 적합한 컴퓨팅 장치
- = convolution과 feature extration에 적합한 장치
- CPU, GPU, DSP에서 convolution, feature extraction을 수행해보고 성능과 에너지 소비량을 비교해보겠음
- 컨볼루션) GPU가 가장 성능이 좋고(빠름), 에너지 소비량도 적음
- 특징 추출) DSP가 가장 성능이 좋고(빠름), 에너지 소비량도 적음
- 로컬라이제이션, 계획, 장애물 회피같은 자율 주행 관련 태스크에 대해서는 실험하지 않았는데, 이것들은 주로 제어 연산이라 CPU가 당연히 좋을 듯
- 모바일 프로세서 기반의 자율 주행
- 자율주행 시스템의 한계를 알아보자. ARM모바일 SoC에서 어느 정도 성능을 보여주는지
- 센서 데이터 처리 (특징 추출, 옵티컬 플로우) -> DSP
- 딥러닝 (개체 인식) -> GPU
- 로컬라이제이션 -> 2개의 CPU 스레드
- 1 -> 실시간 경로 계획
- 2 -> 장애물 회피
- ARM SoC에서 그럭저럭 잘 됨
- 로컬라이제이션 -> 25개 이미지/s
- 딥 러닝 -> 2~3개/s
- 계획 및 제어 -> 하나의 경로를 계획하는데 6ms 이내에 처리
- 전체 시스템의 평균 에너지 소비량 = 11W
- 컴퓨팅 플랫폼 설계
- 각 태스크마다 에너지 소비량과 성능 측면에서 가장 효율적인 컴퓨팅 장치를 적용하도록 이종 컴퓨팅 자원을 최대한 활용했기 때문에 >>>좋은 성능을 낼 수 있었다.<<<
- 컴퓨팅 플랫폼
- I/O 서브시스템: SoC 아키텍쳐와 프론트엔드 센서 상호작용
- DSP: 특징 추출을 위해 이미지 스트림을 전처리
- GPU: 개체 인식과 몇 가지 딥 러닝 태스크 수행
- CPU: 계획 및 제어와 상호작용 태스크를 수행하는 멀티코어
- FPGA: 데이터 압축과 업로드, 개체 추적, 트래픽 예측 등을 위한 동적 재설정/ 시분할 지원
No comments:
Post a Comment