OMOROBOT/ROS 일반

[ros] ubuntu 20.04&ros noetic에 cartographer 설치 및 사용하기

mle21 2023. 8. 3. 06:00
반응형

ros, ros2와 일반적으로 조합이 되는 ubuntu는 다음과 같다. ros melodic은 ubuntu 18.04이고 ros2 foxy는 ubuntu 20.04이다. 근래 ros 보다는 ros2로 다 넘어가는 경향이 있어 주로 ubuntu 20.04에 ros2를 설치하여 사용한다. 그런데 종종 ros를 사용할 일도 생긴다. 이때 ubuntu 18.04에 ros를 설치해서 ros2와 별도로 관리해도 되지만 ros2가 설치된 ubuntu 20.04에 ros noetic을 설치해도 된다. 즉 ubuntu 20.04에 ros noetic & ros2 foxy를 동시에 설치해서 사용하면 된다.


그런데 여기서 문제가 생긴다. ros melodic의 경우 sudo apt install -y ros-melodic-cartographer-ros 와 같이 간단하게 cartographer를 설치하여 사용할 수 있지만 ros noetic은 cartographer 바이너리를 공식 지원하지 않아 설치가 불가능 하다. 그래서 별도로 설치해서 사용해야 한다. 그 방법에 대해서 알아보자.

 

1. ros noetic과 필요한 추가패키지들은 알아서 설치하자.

 

noetic/Installation/Ubuntu - ROS Wiki

If you rely on these packages, please support OSRF. These packages are built and hosted on infrastructure maintained and paid for by the Open Source Robotics Foundation, a 501(c)(3) non-profit organization. If OSRF were to receive one penny for each downlo

wiki.ros.org

 

2. cartographer를 별도의 워크스페이스에 빌드하기

sudo apt update

sudo apt install -y python3-wstool python3-rosdep ninja-build stow libceres-dev liblua5.2-dev

# 일반적으로 사용하는 work space(ex. catkin_ws) 아님 별도로 생성
mkdir -p ~/ros_catkin_ws
cd ~/ros_catkin_ws

wstool init src

wstool merge -t src https://raw.githubusercontent.com/cartographer-project/cartographer_ros/master/cartographer_ros.rosinstall

wstool update -t src

rosdep update

#rosdep install --from-paths src --ignore-src --rosdistro=noetic -y
source /opt/ros/noetic/setup.bash

sed -i -e "s%<depend>libabsl-dev</depend>%<\!--<depend>libabsl-dev</depend>-->%g" src/cartographer/package.xml

rosdep install --from-paths src --ignore-src -r -y

src/cartographer/scripts/install_abseil.sh

catkin_make_isolated --install --use-ninja -j$(($(nproc) - 1)) -l$(($(nproc) - 1))

 

3. source 하여 사용하기

# 일반 워크스페이스
source ~/catkin_ws/devel/setup.bash

# cartographer용 워크스페이스
source ~/ros_catkin_ws/install_isolated/setup.bash --extend

 

4. 참고로 공부하며 정리만 했고 실제 설치해보지는 않았다. 나중에 설치해보고 수정사항 생기면 수정하겠음.


728x90