본문 바로가기

ROS1 고군분투기

fast_lio 빌드하기

어찌 다른 카테고리와는 달리, ROS1 관련 쪽 글을 쓸 때마다 육두문자가 나오는지..

이거 해결하면 저기서 에러, 저거 깔면 디펜던시 에러...

 

아무튼 사담이 길었다. 오늘은 fast_lio를 빌드 하는데 겪은 에러를 공유하고자 한다.

잘은 모르지만 Git의 대부분이 중국어인 것으로 미루어본데, 중국 쪽에서 만든 코드 같다. 

그래서 그런지 한글로 된 문제 해결하기는커녕 영어로 된 문제 해결기도 보이지 않는다.

홀리..

 

fast_lio는 SLAM을 하는데 많이 사용된다. 설치 방법만 빠르게 설명하면

workspace로 쓸 폴더를 만들고, 그 안에 src 폴더를 만들어 준다.

나의 경우에는 home디렉토리에 SLAM을 만들고 그 안에 src 폴더를 생성했다.

>> cd

>> mkdir SLAM

>> cd SLAM

>> mkdir src

 

src 폴더로 들어가 fast_lio 소스를 Git에서 받아준다.

>> cd src

>> git clone https://github.com/Woogie-Boogie/fast_lio.git

 

그리고 상위 디렉토리로 나와 빌드

>> cd ..

>> catkin_make

 

상당히 간단한 과정이다. 그런데 에러가 뭐 이렇게 많은지...

 

우선 처음으로 만난 에러는 이런 느낌이었다.

 

fatal error: livox_ros_driver/CustomMsg.h: No such file or directory
    4 | #include <livox_ros_driver/CustomMsg.h>
       |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Invoking "make -j4 -l4" failed

 

찾아보니 이건 make 과정에서 생긴 devel, build 폴더를 지우고

될 때까지 다시 시도하다 보면 해결된다는 외국인들의 지혜(?)가 있더랬다.

 

10번을 더 지웠다 make 해봐도 같은 오류를 만들길래 다른 포럼을 좀 더 찾아보니 

가상머신의 사양 부족으로 빌드가 실패하는 경우가 왕왕 있다고 했다.

기존에는 CPU 1 core + RAM 4GB에서 4 core + 8GB로 늘려주었다.

 

그러니까 해결은 됐는데, 또 다른 에러가 발생하였다.

(만약 이래도 안된다 하면, catkin_make -j1 옵션으로 make 해보자)

 

ImportError: No module named 'em' 뭐 이런 느낌이었다.

아 이건 간단하지

 

>> pip install em

 

간단히 해결 후 넘어가니 최종 보스(?)인 에러를 직면하였다.

fatal error: fast_lio/Pose6D.h: No such file or directory
    8 | #include <fast_lio/Pose6D.h>
       |          ^~~~~~~~~~~~~~~~~~~
compilation terminated.

Invoking "make -j4 -l4" failed

 

간단(?) 히 해결하는 방법이 있다.

 

src/fast_lio/FAST_LIO에 CMakeLists.txt를 vsCode나 vim 등으로 열어보면 아래와 같은 코드 블럭이 있을 것이다.

find_package(catkin REQUIRED COMPONENTS
  geometry_msgs
  nav_msgs
  sensor_msgs
  roscpp
  rospy
  std_msgs
  pcl_ros
  tf
  livox_ros_driver
  message_generation
  eigen_conversions
)

여기 마지막 줄에 다음과 같이 genmsg를 추가해 주자.

find_package(catkin REQUIRED COMPONENTS
  geometry_msgs
  nav_msgs
  sensor_msgs
  roscpp
  rospy
  std_msgs
  pcl_ros
  tf
  livox_ros_driver
  message_generation
  eigen_conversions
  genmsg
)

 

그리고 아예 마지막 줄

target_include_directories(fastlio_mapping PRIVATE ${PYTHON_INCLUDE_DIRS}) 아래에

다음과 같은 코드를 추가한다.

add_dependencies(fastlio_mapping fast_lio_generate_messages_cpp)

 

다시 경건한 마음으로 SLAM 폴더에서 

>> catkin_make

 

해결!