[SLAM evaluation] evo tool 설치 및 활용

EVO package를 활용하여 SLAM trajectory를 Visualize 해보자!

논문에서도 많이 활용되고 직접 SLAM을 돌려보고 결과를 비교해볼 때 쓰면 좋은 패키지인 Evo tool을 소개해보고자 한다. 정말 사용하기 간편하게 되어 있고, 공식 Github repository에서도 설명을 잘 해놓았기 때문에 많은 사람들이 사용하고 있다고 생각한다.

우선 Evo tool의 공식 repository 링크는 다음과 같다.

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_trajevo_ape의 결과가 다르게 나오는 경우가 있다. 이럴 경우 align을 하는 부분을 의심해봐야 하는데 이 부분도 --t_max_diff를 활용하면 쉽게 해결할 수 있다.

Reference : Issue #560

예를 들어,

evo_ape tum [GT.txt] [Trakectory.txt] -vap --t_max_diff 0.01

이상 포스팅을 마치겠다. EVO tool을 활용해서 SLAM 알고리즘을 시각화하는데 훨씬 편리해졌다. 😆😆

댓글남기기