시나리오를 짰다가 지웠다가 하다보니 소득이 있었던 시나리오까지 다 까먹을 것 같다는 생각이 들었다. 그래서 정리를 좀 해두는게 좋을 것 같아서 적어보는 유의미한 시나리오 정리 내용!
1. 정지된 차량: 예를 들면 주차된 차량
2. 나의 속도보다 훨씬 느린 속도로 움직이는 차량들: 예를 들면 내가 30km/h 로 달릴 때, 속도가 5km/h 정도인 차량들이 줄지어 있는 경우
3. 움직이는 차량 높이보다 큰 static object 가 차량 앞에 놓인 경우
4. 매우 빽빽하게 밀집되어 이동이 없는 거대한 기차처럼 보이는 차량들
5. 높이가 비슷한 static object와 dynamic object가 혼합 되어있는 경우
6. 높이가 변화하는 구역을 지나는 경우: 예를 들면 언덕을 오르거나 내리는 상황
1. 듬성듬성 배치되었으며 나와 유사한 속도로 움직여 이동을 명확히 판단할 수 있는 차량들
2. 높이가 유사한 구역을 지나는 경우
carla의 semantic lidar 데이터를 뜯어보니 intesity 를 다음과 같은 semantic tag로 사용하고 있음을 발견했다.
이렇게 많아도 내가 필요한 정보는 10번 태그인 vehicles 만이 유일했다
10번 태그 vehicles 만 맵상에서 올바르게 소거 됐는지 아닌지를 일단 따지면 되므로, rviz 상에서 나타낼 때는 intensity 범위를 9 ~11로 한정했다. 그래서 앞으로 볼 화면에서 obstacle 차량은 초록색으로, 배경은 분홍색으로 나타남을 미리 언급하고 시작한다.
다음과 같은 시나리오들이 첫번째 사례에 해당한다.
다음 시나리오는 매우 느린속도로 움직이는 연속적인 차량들을 배치한 시나리오이다. 차량 행렬중에서도 상대적으로 밀집이 심한 중간 ~ 뒤 부분 차량들이 속도가 더 느리고, 앞 차량들은 상대적으로 속도가 빠르다.
erasor 적용 전 (초록색으로 표시된 부분이 차량)
erasor 적용 후
맨 앞에서 상대적으로 속도가 더 빠른 차량들을 제외하고는, 차량의 소거가 제대로 이뤄지지 않는다는 것을 확인 가능하다.
erasor 적용 전
시나리오 1번에서의 naive map이다. 차들을 듬성듬성 배치하고, 느리게 로터리를 돌도록 설정했다. 초록색 원은 돌고있는 연속적인 차들을 의미하고, 원 좌우로 보이는 수평 방향 초록색 궤적은 rotation 영역에서 직선 코스로 이동한 일부 차들을 의미한다. 원 내부의 빨간색 구조물은 차량의 높이보다 훨씬 높은 static object 에 해당한다.
erasor 적용 후
다음과 같이 차량의 높이보다 훨씬 높은 static object 앞에 배치된 차량들은 모두 소거가 된 반면, static object 뒤에 가려진 차량들은 소거가 되지 않은 것을 확인할 수 있다. 이를 확실하게 검증하기 위해 로터리에서의 시나리오를 두어개 더 짜보았다.
erasor 적용 전
시나리오 4번 에서의 naive map, 차들을 로터리에 듬성듬성하게 배치시키고 속도를 최소화하여 차량을 움직여보았다.
erasor 적용 후
마찬가지로 높이가 높은 static object 뒤에 가려진 차량들은 잘 지워지지 않는 것을 확인할 수 있다.
erasor 적용 전
이번엔 로터리에 차량을 매우 빽빽하게 배치하고, 차량의 속도를 더욱 최소화하고 관찰!
erasor 적용 후
역시나 반대방향만 안 지워진다.
erasor 적용 전
1차선에는 느리게 움직이는 차들을, 2차선에는 완전히 정지한 차들을 배치해보았다. 그래서 1차선 차량들은 연속적인 선으로, 2차선의 차들은 불연속적인 차량 형태가 그대로 나타난 것을 확인할 수 있다.
erasor 적용 후
놀랍게도 움직이는 1차선의 차량 말고 2차선의 정지된 차량이 지워지는 것을 확인할 수 있다.
고로 이 결과를 로터리에서 결과와 혼합해서 생각해보면, 높이가 비슷한 dynamic, static objects 가 혼재되어 있는 경우 / 높이가 더 높은 static object 가 높이가 낮은 dynamic object 들을 가리고 있는 경우 잘 지워지지 않는다는 사실을 추측해볼 수 있다. 일단은 시나리오만 짜놨지만 좀 더 확실하게 하려면 여러번 실험해보면 될 것 같다.
erasor 적용 전
맨 앞의 차량이 급정거한 차량이다.
erasor 적용 후
위와 같이, 특정 차량이 급 정거하고 완벽하게 정지하면 정지된 물체로 인식해서 소거가 안되는 것을 확인할 수 있다.
근데 급정거가 아니라 아래처럼 느린 속도로라도 더 이동하면 dynamic 으로 인식되어서 소거된다.
erasor 적용 전
erasor 적용 후
전부 소거가 된 모습
고로 차량이 빽빽하게 밀집되지 않았을 때도 지워지지 않으려면 차량이 확실하게 static 인 경우밖에 없는 듯 하다. 어찌 되었던 위 시나리오들에서 얻을 수 있는 유의미한 결과는 급정거와 같은 이유로 정지한 차량들 또한 ERASOR 에서 지워지지 않는 요소라는 것이다.
추가. 땅의 높이가 달라지는 경우에서의 erasor test
높이를 비교해서 장애물을 소거하는 방식이다보니까, 땅의 높이가 달라지는 경우에 차량 소거가 잘 이루어지지 않겠다는 생각이 들었다. 그래서 내가 높은 언덕에서 낮은 곳으로 내려가고, 장애물은 낮은 언덕에서 높은 언덕으로 올라오는 시나리오를 생각해보았다.
언덕은 약간 아래와 같은 느낌의 언덕이고
ego_vehicle은 그 언덕을 내려가는 방향으로, obstacle 차량은 언덕을 올라오는 상황을 생각해 보았다. (빨간색이 ego_vehicle, 무채색 차량들이 obstacle vehicle)
erasor 적용 전
마찬가지로 초록색이 장애물 차량에 해당한다. 이렇게 보니 언덕의 입체감이 안 와닿는데, intensity를 조정해서 다시 보자.
위와 같이 언덕에서 naive map을 형성했음을 확실히 해두고 가자.
erasor 적용 후
예상대로 높이가 변화하는 구간에서 차량이 안 지워진다. ego_vehicle이 이동하는 경로의 높이 변화에 따라 차량이 잘 지워지지 않는 이유는 VOI를 설정할 때, z의 범위를 거의 static 하게 두었기 때문이라 추측한다.
언덕을 내려감에 따라, 땅의 높이가 지속적으로 변화하는데 VOI의 z 범위는 고정적이다. 장애물은 언덕을 올라가는 중이기 때문에 VOI에서 벗어나는 obstacle 차량 부분이 생길 것이고, 이 때문에 완벽하게 지워지지 않는 것이라는 추측이 든다.
이에 대한 해결 방안은...
1. VOI 의 정의를 바꿔볼까?
2. 높이 차이를 기반으로 차량임을 탐지하는 것도 좋은 방법인데, 그 보다 확실하게 차량임을 판단하는 방법은 없을까?
이 것들은 조금 더 생각해볼 부분 ...