로보틱스의 기본인 터틀봇!
ROS2 초보자가 도전하는 Turtlebot3 도전기이다.
OS 세팅
기본적으로 로보틱스 분야는 리눅스를 기반으로 작업한다.
모두 우분투를 준비하는걸로!
우분투는 USB만 있다면 간단하게 파티션 나눠서 만들 수 있으니 용량이 충분하다면 더블 OS를 시도해보는걸로!
물론 Window 만으로도 가능하다고 한다.
Window에서 Ubuntu를 사용하게 해주는 WSL 세팅을 해주면 된다고 하는데...
나는 가제보 세팅에서 오류가 계속 발생한다.
로컬에서 작업하려면 가제보가 필수이니 추후 작업 후 업로드하겠다.
ROBOTIS - 터틀봇 메뉴얼
본 블로그의 작성 글은 모두 아래 메뉴얼을 참고하여 작성한다!
ROBOTIS e-Manual
emanual.robotis.com
로보티즈 메뉴얼에서 가장 중요한 것은 어쩌면 버전 통일성이다.
4. SLAM과 같이 각 카테고리의 위에는 로봇 구동을 위한 버전이 제공된다.
Ubuntu의 버전에 따라 구동 가능한 버전이 정해져 있으니, 각자의 개발 환경을 고려하여 선택하면 된다.
나는 Ubuntu 20.04를 개발 환경으로 가지므로, Foxy 기준으로 설명한다.

개발 환경 세팅
버전을 정했다면 가이드와 동일하게 작업을 진행해보자!
본 포스터는 로봇이 아닌, 가제보에서의 시뮬레이션에서의 구동만을 목표하므로
OpenCR, 라즈베리파이 설정 등은 모두 스킵한다.
로보티즈 메뉴얼 PC setup대로 해도 모두 설치가 가능하지만,
나는 공식 문서를 참조해 foxy를 설치했다.
Ubuntu (Debian) — ROS 2 Documentation: Foxy documentation
Make sure you have a locale which supports UTF-8. If you are in a minimal environment (such as a docker container), the locale may be something minimal like POSIX. We test with the following settings. However, it should be fine if you’re using a differen
docs.ros.org
1. Locale 세팅
Locale이 UTF-8인지 확인하는 작업이라고 한다.
나는 처음부터 UTF-8로 설정되어 있어서 첫 locale 이후 모두 스킵했다.
locale # check for UTF-8
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale # verify settings
2. 기본 ROS2 install
source를 설정하고 ROS2 설치!
여기는 공식 문서에 잘 정리되어 있으니, 문서를 참고하며 작성해보자!
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
Source setting을 완료해주고!
sudo apt update
sudo apt upgrade
sudo apt install ros-foxy-desktop python3-argcomplete
sudo apt install ros-foxy-ros-base python3-argcomplete
sudo apt install ros-dev-tools
apt를 update/ upgrade과 기본적인 ros-foxy 세팅을 완료한다.
3. Turtlebot3 ROS2 install
다시 로보티즈 메뉴얼 PC setup으로 돌아와서 작업한다.
나는 혹시나 모를 기본 foxy 패키지를 한번 더 다운로드했다.
sudo apt-get install ros-foxy-gazebo-*
sudo apt install ros-foxy-cartographer
sudo apt install ros-foxy-cartographer-ros
sudo apt install ros-foxy-navigation2
sudo apt install ros-foxy-nav2-bringup
다 끝났다면 Turtlebot3 foxy 다운로드!
source ~/.bashrc
sudo apt install ros-foxy-dynamixel-sdk
sudo apt install ros-foxy-turtlebot3-msgs
sudo apt install ros-foxy-turtlebot3
이때 bashrc는 turminal이 실행될 때 작업하는 파일로, 아래와 같이 미리 추가해둔다면 앞으로의 작업이 매우 편해진다.
vim ~/.bashrc
bashrc를 vim이나 nano, gedit을 통해 열어준 후 아래 커맨드를 추가한다.
source /opt/ros/foxy/setup.bash # source foxy
export ROS_DOMAIN_ID=30 # TURTLEBOT3
export TURTLEBOT3_MODEL=burger # setting to buger
위 세개 이외에도 alias를 통해 간단 커맨드를 지정해줄 수 있다.
그건 다른 블로그를 참조하는걸로!
이렇게 Turtlebot3에 대한 개발환경 세팅이 종료되었다.
Turtlebot3 워크 스페이스 빌드
다음은 본격적으로 워크 스페이스를 세팅한다.
mkdir turtlebot3_ws
cd turtlebot3_ws
mkdir src
cd src
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
cd ../..
pwd # turtlebot3_ws에 위치하는지 확인
colcon build --symlink-install
위 커맨드를 차례로 클릭한다면 구동을 위한 모든 세팅이 준비된다!
만약 버전이 달라진다면 git의 branch를 ***-devel의 형태로 작업하면 될 것이다,
마지막으로 colcon build까지 완료하여 구동을 진행할 워크 스페이스의 빌드를 완료하자.
Turtlebot3 가제보 구동
이제 모든 세팅은 완료되었다!
가제보를 구동해보자.
1. source bash
기본 구동을 위해서 Turminal은 4개를 켜두자.
나는 다중 터미널 활용이 가능한 Terminator를 추천한다.
source ~/.bashrc
. ./install/local_setup.bash # 잘 안되면 ". ./install/setup.bash"로!
우선 모든 터미널에서 bash 파일을 source해준다.
install은 turtlebot3에서 진행되므로 . ./install/local_setup.bash로 했지만
절대경로로도 가능하니, 각자의 폴더 환경에 따라 작업하면 된다.
2. gazebo 구동
첫번째 터미널에서 gazebo를 구동한다.
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
여기서 turtlebot3_gazebo는 패키지, turtlebot3_world.launch.py는 런치 파일 이름을 의미한다.
가제보가 구동되면 world의 가장 기본적인 기둥 9개의 가제보 world가 실행될 것이다.
3. SLAM 구동, 맵을 만들어 쓰고 싶다면! (skip 가능)
Navigation 구동을 위해서는 map이 필수적이다.
우리는 map을 이미 가지고 있으므로, cartographer로 맵을 만들어서 사용해도 되고, 있는 map을 활용해도 된다.
# 맵을 만들어 활용한다면!
# terminal 2
ros2 launch turtlebot3_bringup robot.launch.py
# terminal 3
ros2 launch turtlebot3_cartographer cartographer.launch.py
# terminal 4
ros2 run turtlebot3_teleop teleop_keyboard
# 나는 terminal 4 (teleop)를 끄고 구동했다. ./map은 맵을 설치할 경로! 나는 turtlebot3_ws에 저장한다
ros2 run nav2_map_server map_saver_cli -f ./map
만약 맵을 제작하고 활용하려면 위 커맨드를 통해 rviz에서 맵을 확인하며
teleop를 통해 로봇을 움직이며 맵을 저장하자.
4. Navigation 구동
Navigation 구동을 위해서는 map이 필수적이다.
우리는 map을 이미 가지고 있으므로, cartographer로 맵을 만들어서 사용해도 되고, 있는 map을 활용해도 된다.
# terminal 2
ros2 launch turtlebot3_bringup robot.launch.py
# terminal 3 (./map.yaml 에 구동을 원하는 map.yaml 경로를 설정하면 된다.
ros2 launch turtlebot3_navigation2 navigation2.launch.py map:=./map.yaml
이후 Rviz2에서 가제보 위치를 확인하며 화살표로 로봇의 위치와 방향에 대한 initial pose를 설정하고,
nav2 goal 화살표를 지도에 찍어 로봇의 마지막 위치와 방향을 설정한다!
참고로 world는 아래 경로에 있으니, 헷갈리다면 아래 경로를 가보자!
turtlebot3_ws/src/turtlebot3/turtlebot3_navigation2/map