Chapter 5 Connection the Control Software

이번 section에서는 시뮬레이터에 control software를 연결하기 위해서 필요한 작업에 대해서 설명하고, adaption은 low-level hardware drivers와 timing component에만 필요하다는 것을 보이겠다. In other words, 실제 로봇을 위해 만들어진 control software 는 상당히 쉽게 refit될 수 있다. 더 나아가서 Sect. 5.2에서는, 더 abstract한 level에서 로봇을 시뮬레이션 할 수 있는 방법을 제시하겠다. 이러한 방법은 robot soccer game과 같은 multi-robot 시나리오에 적합하다. 공간상의 이유 때문에 우리는 간단한 outline과 concept만을 적고, 로봇 모델을 실제 적용하는데 필요한 기술적인 detail에 대해서는 다루지 않겠다. (페르마냐-_-..)

우리 시뮬레이션의 구조는 client/server concept를 따른다. simulation server는 시뮬레이션을 수행하고, 각 시뮬레이션 되는 로봇의 Player server의 분리된 instance를 수행한다. 각 로봇은 여러 machine에 퍼질 수 있는 control software의 instance로 제어된다. 이 것들을 simulation client라고 부른다.

기존에 존재하는 control software에 Player client를 integrate하는 general approach는 로봇의 hardware와 직접적으로 communicate하는 부분을 시뮬레이션에서도 해당하는 부분을 접근할 수 있게 하는 client library에 의해 제공되는 적절한 함수로 바꾸는 것이다. 예를 들면 카메라 이미지를 직접 얻는 것이 아니라 simulated camera에서 얻는 것이다. 시뮬레이션 서버에 의해 data가 exchange되기 전에 Player server로의 연결이 establish되어 있어야 한다. 이는 보통 control software를 초기화 할 때 이루어진다.

우리의 control software는 central blackboard의 의미를 갖는 communicating하는 여러 개의, asynchronous하게 돌아가는 모듈로 이루어져있다. 이러한 모듈들은 어떠한 모듈이 다른 모듈과 data를 exchange할지를 정해주는 hierarchy에 embedded되어 있다. 이 hierarchy의 최하단은 로봇의 hardware component와 interact하는 모듈이다. 위에서 나온 approach를 따라서 우리는 시뮬레이션과 communicate하는 모듈을 만들었고, 이것들이 실제 driver 대신에 작동된다. low-level 모듈을 바꾸는 것은 필요한 input data를 control software에게 제공하고 actuator에서 명령을 주는데 충분했다. 우리 실험 결과에서는 각 모듈마다 Player server에게 하나씩 연결하는 것은 너무 많은 overhead를 만들었고, simulation server를 확연히 느리게 만들었다. 그 해결로는 simulation server와 하나의 연결만을 하고 그것은 module이 나눠 갖게 하는 것이다. (이 방법은 os의 spinlock과 비슷, 이 부분을 HLA를 이용해서 해결해보고자 한다.) 우리는 monolithic control software를 Player server에 연결하는 것은 더 쉬울 것이라고 생각한다.

5.1 Synchronization

시뮬레이션에서 high-level과 마찬가지로 low-level component는 time과 duration을 decision-making에 한 부분으로 사용한다. 그러므로, 시간은 로봇의 행동에 major 연향을 미친다. 그 결과로, 모든 time-relate issue는 real-time clock대신에 simulation-time에 의해서 handle되어야한다. 이렇게 함으로서 시간적인(temporal) interval이 올바르게 계산될 수 있다.

로봇 control software에서는 일정 interval에 camera image를 grab하고 처리하는 등의 특정 event가 trigger되는 것은 꽤나 일반적이다. 만약 시뮬레이션 된 로봇이 control되고 있으면, 시뮬레이션이 일정하지 못한 속도로 진행되고 있을 때 문제가 생긴다. 이것은 interval timer가 일정치 못한 주기로 수행될 수 있다는 것이다. 그 대신에 interval time이 현재 시뮬레이션 속도에 맞춰져야한다. 시뮬레이션 속도가 변하는 이유는 특정 조건에서는 다음 state를 결정하기 위해서 더 많은 시간이 걸리기 때문이다. 예를 들면, 물체의 충동을 시뮬레이션 하는 것에서 그런 현상이 나타난다.

step-time은 시뮬레이션에서 각 step마다 걸리는 시간을 뜻한다. 현재의 step time과 이전의 step을 계산하는데 걸린 시간의 비를 instantaneous simulation speed라고 한다. Fig. 4.에서 보면 알 수 있듯이 instantaneous simulation speed는 상당히 많이, 자주 변하기 때문에 simulation time이 얼마나 증가할지를 정확하게 예측하는 것은 불가능하다. 그 remedy로 과거의 simulation speed의 고정된 수만큼의 평균을 현재 simulation 속도의 estimate로 여긴다. Fig4에는, 다른 수로 평균을 낸 결과가 나타나 있다. simulation speed의 측정값은 시뮬레이션이 얼마나 더 걸릴지를 예측하기 위해 사용된다. 이에 따라 Interval timer들이 특정 event를 trigger한다.

예상하듯이, interval의 길이가 길어질수록 예측의 정확도는 줄어든다. 우리는 10 msec에서 500 msec 까지 interval을 테스트했다. 10 msec에서 500 msec까지는(통상적으로 control software에서 많이 쓰인다.) 평균 예측 에러가 interval 길이의 2% 아래였다; 150msec에서 500msec까지라 해도 평균 예측 에러는 4%아래였다.