이 글은 라이다 스캔을 통해 얻은 데이터를 이용해 실시간 SLAM 처리하는 알고리즘을 파이썬으로 라이브러리화한 pyLiDAR-SLAM 사용 방법을 간략히 공유한다.
설치
우분투 리눅스 운영체제에서 실행하므로, 아래 링크 등을 참고해 실행 환경을 미리 준비한다.
다음 메뉴얼을 참고해 설치한다. 의존하고 있는 패키지 pycp_icp (python3 binding 필요), pyviz3d, opencv, g2o, open3d 모두 메뉴얼을 참고해 설치한다.
pip install --force-reinstall virtualenvpip3 install --force-reinstall virtualenvvirtualenv venv_pylidar
source ./venv_pylidar/bin/activate
- cmake 처리 시 virtualenv를 제대로 인식해 python3를 못찾을 수 있다. 이 경우, 아래와 같이 경로를 지정해 준다.
cmake .. -DPYTHON_EXECUTABLE=/home/ktw/Projects/pyLiDAR-SLAM/venv_pylidar/bin/python3
- 의존 패키지가 사용하는 github 소스코드 빌드 처리를 위해, github 로그인을 위한 계정, RSA 암호 키 등을 아래 링크를 참고해 터미널에서 설정한다.
- 몇몇 의존 패키지에서 사용하는 라이브러리에 에러가 발생할 수 있다. 아래는 이와 관련해 설치한 라이브러리이다.
pip install pygamepip install hydra-core --upgrade
pip install PyOpenGLpip install PyOpenGL-acceleratepip install omegaconf
- Eigen 패키지에서 버전 차이로 인해 Quaternion에서 컴파일 에러가 발생할 수 있다. 아래와 같이 처리한다.
/* .def("x", (NonConstCoeffReturnType (Eigen::Quaterniond::*) () const) &Eigen::Quaterniond::x()).def("y", (NonConstCoeffReturnType (Eigen::Quaterniond::*) () const) &Eigen::Quaterniond::y()).def("z", (NonConstCoeffReturnType (Eigen::Quaterniond::*) () const) &Eigen::Quaterniond::z()).def("w", (NonConstCoeffReturnType (Eigen::Quaterniond::*) () const) &Eigen::Quaterniond::w()) */
설치가 끝나면 다음과 같다.
사용
python3 run.py -m num_workers=1 slam/initialization=NI slam/preprocessing=none slam/odometry=ct_icp_robust_shaky, icp_odometry slam.odometry.viz_debug=True slam/loop_closure=none slam/backend=none dataset=rosbag dataset.main_topic=horizontal_laser_3d dataset.accumulate_scans=True dataset.file_path=./b3-2016-04-05-15-51-36.bag hydra.run.dir=./TEST_DOC
혹은 아래와 같이 실행할 수도 있다.
python3 run.py num_workers=1 slam/initialization=NI slam/preprocessing=none slam/odometry=ct_icp_robust_shaky slam.odometry.viz_debug=True slam/loop_closure=none slam/backend=none dataset=rosbag dataset.main_topic=horizontal_laser_3d dataset.accumulate_scans=True dataset.file_path=./b3-2016-04-05-15-51-36.bag hydra.run.dir=./TEST_DOC
참고로, 이 프로그램의 형식은 다음과 같다.
python3 run.py num_workers=1 / # The number of process workers to load the dataset
slam/initialization=NI / # The initialization (NI=No Initialization / CV=Constant Velocity)
slam/preprocessing=grid_sample / # Preprocessing on the point clouds
slam/odometry=icp_odometry / # The Odometry algorithm
slam.odometry.viz_debug=True / # Whether to launch the visualization of the odometry
slam/loop_closure=none / # The loop closure algorithm selected (none by default)
slam/backend=none / # The backend algorithm (none by default)
dataset=rosbag / # The dataset selected (a simple rosbag here)
dataset.main_topic=horizontal_laser_3d / # The pointcloud topic of the rosbag
dataset.accumulate_scans=True / # Whether to accumulate multiple messages
dataset.file_path=./b3-2016-04-05-15-51-36.bag / # The path to the rosbag file
hydra.run.dir=./TEST_DOC # The log directory where the trajectory will be saved
실행 시 다음과 같이 hydra 패키지에서 에러가 발생할 수 있다.
사용 후에는 반듯이 가상환경을 빠져나와 패키지 설치 환경이 오염되지 않도록 한다.
deactivate
레퍼런스
댓글 없음:
댓글 쓰기