[SLAM evaluation] evo tool 설치 및 활용
EVO package를 활용하여 SLAM trajectory를 Visualize 해보자!
논문에서도 많이 활용되고 직접 SLAM을 돌려보고 결과를 비교해볼 때 쓰면 좋은 패키지인 Evo tool을 소개해보고자 한다. 정말 사용하기 간편하게 되어 있고, 공식 Github repository에서도 설명을 잘 해놓았기 때문에 많은 사람들이 사용하고 있다고 생각한다.
우선 Evo tool의 공식 repository 링크는 다음과 같다.
- Evo : Github
EVO tool 설치
우선 현재 나는 Ubuntu 18.04에서 작업을 진행했다. Python package이기 때문에 설치하는 python의 version이 영향을 미칠 수 있는데 나같은 경우는 python 2.7에 설치를 진행했다. 그 이유는 Evo에서 ROS bag파일을 input으로 받고 Trajectory를 visualize할 수 있는 기능이 있는데 경험상 이 기능을 사용하려면 python 2.7로 해야 오류가 생기지 않았다.
따라서 아래와 같은 명령어로 패키지 설치를 진행했다.
pip2 install evo --upgrade --no-binary evo
이 명령어로 설치를 실패할 경우,
아래와 같은 명령어로도 설치가 가능하다.
pip install evo --upgrade --no-binary evo --target=/opt/ros/melodic/lib/python2.7/dist-packages
물론 Github 소스코드를 다운 받은 후, 빌드를 하는 방법으로도 설치가 가능하다.
출처 : Installation and problem solving of evo on ubuntu
ImportError: No module named rospkg
시각화 할 Trajectory 준비하기
Evo package를 활용하여 결과를 시각화할 trajectory file을 준비해야 한다.
Evo에서 제공하는 trajectory format은 다음과 같다.
- ‘TUM’ trajectory files
- ‘KITTI’ pose files
- ‘EuRoC MAV’ (.csv groundtruth and TUM trajectory file)
- ROS and ROS2 bagfile
여기서 현재 사용해본 format은 ‘TUM’ format과 ROS bagfile이다.
‘TUM’ format을 사용하려면 다음과 같은 규칙으로 .txt
파일이 만들어져 있어야 한다.
(꼭 .txt
형식이 아니여도 된다)
#timestamp x y z q_x q_y q_z q_w
x y z
는 Translation에 대한 값을 의미하고
q_x q_y q_z q_w
는 Roation에 대한 값을 쿼터니언으로 표현한 것이다.
여기서 주의할 점은 다음과 같다.
- 모든 원소 하나 하나가 공백으로 구분이 되어야 한다.
- 마지막 개행 뒤에는 공백이 있으면 안된다.
- 쿼터니언의 순서가 바뀌진 않았는지 주의해야 한다.
실제로 Visual-inertial SLAM 알고리즘 중 하나인 VINS-MONO를 돌리고 evo를 활용하여 했을 때, 쿼터니언 순서 문제와 원소 하나 하나가 공백이 아닌 ,(반점)으로 구분이 되어 있었기 때문에 이 부분을 수정 해주어야 VINS-MONO 결과를 정상적으로 Visualize할 수 있었다.
만약 아래와 같은 오류를 본다면 마지막 개행 뒤 공백을 확인하고 제거해주자.
[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space)
Bag 파일을 사용해서도 trajectory 결과를 visualize할 수 있는데 Bag file 안에 있는 Topic의 Format이 아래 중 하나가 포함되어야 한다.
geometry_msgs/PoseStamped
geometry_msgs/TransformStamped
geometry_msgs/PoseWithCovarianceStamped
nav_msgs/Odometry
TF messages를 이용하여 좌표계 변환도 용이하게 바꾸어 시각화를 진행할 수 있는데 아직 그 기능은 사용해보지 않았다…
자주 쓰이는 Command
지금까지 내가 자주 쓰는 명령어를 정리해보고자 한다.
아래의 명령어들은 Trajectory가 저장되어 있는 위치에서 터미널을 활용하여 사용하면 된다.
공식 Repository에 있는 Wiki page를 참고하면 더 많은 정보를 알 수 있다!
만약 tum
형식이 아니라면 kitti
, bag
, euroc
등등 맞는 Format으로 명령어를 입력해주면 된다.
- TUM format을 활용하여 하나의 Trajector 결과를 시각화하고 싶을 때
evo_traj tum [Trakectory.txt] -p
- TUM format을 활용하여 2차원으로 결과를 시각화 하고 싶을 때
evo_traj tum [Trakectory.txt] -p --plot_mode xy
- TUM format의 2개의 Trajectory 결과를 시각화하고 싶을 때 (Timestamp가 맞아야 한다!)
evo_traj tum [Trakectory1.txt] [Trakectory2.txt] -p
- TUM format의 Trajectory를 GT와 비교해보고 싶을 때 (
-a
는 align을 의미한다)
evo_traj tum [Trakectory.txt] -p -a --ref [GT.txt]
- TUM format의 Trajectory를 GT와 APE(Absolute pose error) 값을 비교해보고 싶을 때
evo_ape tum [GT.txt] [Trakectory.txt] -vap
- Bag file 형식을 TUM file 형식으로 변환
evo_traj bag [Trajectory.bag] [Trajectory를 원하는 Topic name] --save_as_tum
소소한 Tip
만약, evo tool을 활용해서 APE 값을 확인하는데, 동일한 trajectory data로 evo_traj
와 evo_ape
의 결과가 다르게 나오는 경우가 있다. 이럴 경우 align을 하는 부분을 의심해봐야 하는데 이 부분도 --t_max_diff
를 활용하면 쉽게 해결할 수 있다.
Reference : Issue #560
예를 들어,
evo_ape tum [GT.txt] [Trakectory.txt] -vap --t_max_diff 0.01
이상 포스팅을 마치겠다. EVO tool을 활용해서 SLAM 알고리즘을 시각화하는데 훨씬 편리해졌다. 😆😆
댓글남기기