[ROS2] TurtleBot3+ROS2(Foxy)+Gazebo Naviagtion2 Install
Linux Ubuntu ํ๊ฒฝ์์ Gazebo ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ Turtlebot3์ผ๋ก Navigation2 Task๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
๊ด๋ จ ํจํค์ง๋ฅผ ์ค์นํ๊ธฐ ์ ์, OS ๋ฒ์ ๊ณผ ์ค์น๋ ROS ๋ฒ์ ์ ๋จผ์ ํ์ธํด์ผ ํ๋ค.
Ubuntu 20.04(focal)
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
ROS2 Foxy
$ printenv ROS_DISTRO
foxy
Gazebo 11
gazebo --version
Gazebo multi-robot simulator, version 11.11.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org
์ ๋ฆฌํ๋ฉด, Ubuntu 20.04, ROS2 Foxy, Gazebo 11 ๋ฒ์ ์ด Install๋์ด ์๋ค. ๋ณธ์ธ์ ํ๊ฒฝ ๋ฒ์ ์ ๋ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ผ ํ๋ฏ๋ก ๋ฆฌ๋ ์ค๋ผ๋ฉด ๊ณตํต์ด์ง๋ง ํนํ ๋ก๋ณดํฑ์ค ์์ ์์๋ ๋ฒ์ ์ด ๊ผฌ์ด์ง ์๋๋ก ์ฃผ์ํ์ฌ ํ์ธํด์ฃผ์.
Install Package
Gazebo ํ์ฅ ํจํค์ง์ SLAM ์์ ์ ์ํ Cartographer, ์ํํ ํ์คํฌ์ธ Navigation2๋ฅผ Installํ๋ค.
$ apt install ros-foxy-gazebo-ros-pkgs ros-foxy-cartographer ros-foxy-cartographer-ros ros-foxy-navigation2 ros-foxy-nav2-bringup
๋ณธ Task์์ ์ฌ์ฉํ Turtlebot ๊ด๋ จ ํจํค์ง๋ฅผ Installํ๋ค.
$ apt install ros-foxy-turtlebot3-msgs ros-foxy-dynamixel-sdk ros-foxy-hls-lfcd-lds-driver
์์ผ๋ก Turtlebot+Gazebo ๋ก๋ณดํฑ์ค ๊ด๋ จ ํ์ผ๋ค์ด ์ ์ฅ๋๊ณ ์คํ๋ ์ํฌ์คํ์ด์ค๋ฅผ ํ๋ ์์ฑํ๋ค. cmake ํํ๋ก colcon build๊ฐ ์งํ๋๋๋ก ๊ตฌ์ฑํ ๊ฒ์ด๋ฏ๋ก, ์๋์ ๊ฐ์ด ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
$ mkdir -p ~/turtlebot_ws/src
$ cd ~/turtlebot3_ws/src
์์ฑํ ์ํฌ์คํ์ด์ค์ Turtlebot ๋ก๋ณดํฑ์ค ๊น์ Cloneํ๋ค.
$ git clone -b foxy-devel https://github.com/ROBOTIS_GIT/turtlebot3
$ git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations
Clone์ด ์๋ฃ๋์๋ค๋ฉด turtlebot_ws/src ์๋์ ๋ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ๋ณต์ ๋์ด ์์ ๊ฒ์ด๋ค. ๋น๋ํด์ฃผ์.
$ colcon build --symlink-install --parallel-workers 1
Operate Gazebo
Gazebo์์๋ Model PATH์ ์ฌ์ฉํ Turtlebot Model์ ์ ์ํด์ฃผ์ด์ผ ํ๋ค. ํฐ๋ฏธ๋์ ์๋ก ์ด ๋๋ง๋ค ๋งค๋ฒ exportํ๋ ๊ฒ์๋ ํ๊ณ๊ฐ ์์ผ๋ฏ๋ก bashrc์ ์์ฑํด์ฃผ๋ ๊ฒ์ด ํธํ๋ค.
~/.bashrc
export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH="~/turtlebot3_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models"
source ~/turtlebot3_ws/install/setup.bash
source /opt/ros/foxy/setup.bash
export ROS_MASTER_URI=http://localhost:11311
export ROS_HOSTNAME=localhost
export๋ก PATH๋ฅผ ์ง์ ํด์ฃผ๊ณ , ์ํฌ์คํ์ด์ค์ setup.bash๊น์ง ์คํ๋์๋ค๋ฉด(bashrc์ ์์ฑํ ๊ฒฝ์ฐ ํฐ๋ฏธ๋์ ๊ป๋ค ํค๊ฑฐ๋ source ๋ช ๋ น์ ์ด์ฉํ๋ฉด ๋๋ค.) ๋ณธ๊ฒฉ์ ์ผ๋ก Turtlebot World๋ฅผ ์คํํ ์ฐจ๋ก์ด๋ค.
$ ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
์ฌ๊ธฐ๊น์ง ์ ์ํ๋์๋ค๋ฉด Gazebo์ Turtlebot Example World ํ๊ฒฝ์ด ๋ณด์ฌ์ง ๊ฒ์ด๋ค. (์ก๊ฐํ ์๋์ ์๊ธฐ๋ฅ 9๊ฐ)
Teleop Turtlebot3
์๋์ ๋น์น๋ ํฐํ๋ด์ ์์ง์ฌ๋ณด์. ROS์ ๊ฐ์ฅ ๋ํ์ ์ด๋ผ๊ณ ํ ์ ์๋ Teleop์ ์ด์ฉํ ๊ฒ์ด๋ค.
$ ros2 run turtlebot3_teleop teleop_keyboard
Control Your TurtleBot3!
---------------------------
Moving around:
w
a s d
x
w/x : increase/decrease linear velocity (Burger : ~ 0.22, Waffle and Waffle Pi : ~ 0.26)
a/d : increase/decrease angular velocity (Burger : ~ 2.84, Waffle and Waffle Pi : ~ 1.82)
space key, s : force stop
CTRL-C to quit
ํค๋ณด๋์ wasdx ๋ฒํผ์ ํตํด ๋ก๋ด์ ์กฐ์ข ํ ์ ์๋ค. ROS1์์๋ qweasdzxc 9๊ฐ์ ๋ฒํผ์ ์ฌ์ฉํ ์ ์์๋๋ฐ, ROS2๋ก ๋์ด์ค๋ฉด์ 5๊ฐ๋ก ์ค์ด๋ ๊ฑด์ง ๋ค๋ฅธ ํจํค์ง๋ฅผ Installํ ๊ฒ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ์๋นํ ๋ถํธํ๋ค. Turtlebot3์์๋ Burger, Waffle ๋ ๊ฐ์ง ๋ชจ๋ธ์ด ์๋๋ฐ ์ ์์คํ ๋ฌธ๊ตฌ์ ์ถ๋ ฅ๋ ๋ฐ์ ๊ฐ์ด ์ต๋ ์๋๊ฐ ๋ค๋ฅด๋ฏ๋ก ๋ณธ์ธ์๊ฒ ํ์ํ ๊ฒ์ ์ฌ์ฉํ๋ฉด ๋๋ค. Burger๋ ์ต๋ ์ ์๋๊ฐ(์ฃผํ ์๋) ๋ฎ์ ๋์ ์ต๋ ๊ฐ์๋(ํ์ ์๋)๊ฐ ๋๋ค. ์ด์ธ์๋ ๋ง์ ์ฐจ์ด์ ์ด ์กด์ฌํ๋ ์์ธํ ๊ฒ์ ์ํค๋ฅผ ์ฐธ๊ณ ํ์.
์ ๋จ๊ณ๊น์ง๋ Gazebo ํ๊ฒฝ์์ Turtlebot3 ๋ชจ๋ธ๊ณผ ์๋๋ฅผ ๋ถ๋ฌ์ค๊ณ , ROS์ ํต์ ํ๋ ํ ์คํธ ์ ๋๋ก ์๊ฐํ๋ฉด ๋๋ค. ์ด์ Navigation Task๋ฅผ ์ํ SLAM ์์ ์ ์งํํด์ผ ํ๋ค.
SLAM & Save the map
Navigation์ ๋ก๋ด์ด A์ง์ ์์ B์ง์ ์ผ๋ก ๊ณํ๋ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ด๋ํ๋ ๊ฒ์ผ๋ก, ๊ฒฝ๋ก ๊ณํ๊ณผ ์ฅ์ ๋ฌผ ํํผ ๋ฑ์ ์ํด ๋ฏธ๋ฆฌ ํ์๋ ๋งต ํ์ผ์ด ํ์ํ๋ค. ์ฌ๊ธฐ์ ํ์ํ ๋งต ํ์ผ์ ์์ฑํ๊ธฐ ์ํด ํฐํ๋ด์ ์ง๋ ์ ์ ํ๋ก์ธ์ค๋ฅผ ์ด์ฉํ ๊ฒ์ด๋ค.
ํ์ํ ๋งต ํ์ผ๊ณผ ํฐํ๋ด์ด ํฌํจ๋ ์๋(Gazebo)๊ฐ ์คํ๋ ์ํ์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ผ ํ๋ค. (์ Operate Gazebo ์ฐธ์กฐ)
$ ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
์ ๋ช ๋ น์ ์คํํ๋ฉด ์๋์ ๊ฐ์ด RVIZ๊ฐ ์ผ์ง ๊ฒ์ด๋ค. ํ์ํ Display ์ต์ ๋ค์ ์ข์ธก์ ๋์ด๋์ด ์์ผ๋, ๋ค๋ฅธ ์ต์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ข์ธก ํ๋จ์ Add ๋ฒํผ์ ํด๋ฆญํ์ฌ ์ถ๊ฐํ๋ฉด ๋๋ค. ๋๋ TF Name์ด ์๋ ํฐํ๋ด์ผ๋ก ํํ๋ฅผ ๋ณด๊ธฐ ์ํด RobotModel์ ์ถ๊ฐํด์ฃผ์๋ค. (RobotModel Add ํ Topic์ File๋ก ๋ณ๊ฒฝ, ํด๋น ๋ชจ๋ธ์ URDF ํ์ผ์ ์ ํํด์ฃผ์ด์ผ ์ ์ฉ๋จ)
์์ด๊ตฌ LG ์ฌ์ฅ ํ๊ฒฝ์ Turtlebot Burger๋ฅผ ๋ฃ๊ณ Cartographer๋ฅผ ๊ตฌ๋ ์ค์ธ ํ๋ฉด์ด๋ค. Gazebo ์คํ > Cartographer ์คํ > Teleop ์คํํด์ ์์ง์ด๋ฉด ์ง๋๊ฐ ์์ฑ๋๋ค. ํ ๋ฒ ํ์ํ๋ค๊ณ ์ง๋๊ฐ ๊น๋ํ๊ฒ ์์ฑ๋๋ ๊ฒ๋ ์๋๊ฑฐ๋์, ๋งต์ด ์๋นํ ๋๋ค๋ณด๋ ์๋ฒฝํ ์ง๋๋ฅผ ์ ์ํ๋ ๋ฐ์๋ ์คํจํ๋ค.
์ดํ๋์ ์ง๋ ์ ์๋ง ํ๋ฉด์ ์ป์.. ์์ํ ํ
- ์ต๋ ์๋๊ฐ n์ด๋๋ผ๋ n์ผ๋ก ์ฃผํํ๋ฉด ์ง๋๊ฐ ์๋ฒฝํ ํ์๋์ง ์์ ์ ์์.
- ํ์ ์ ํญ์ ์ฃผ์ํ์.. ์๋ค๋ก๋ ํ์์ด ์ ๋๋๋ฐ ํ์ ํ๋ฉด ์ขํ๊ณ๊ฐ ํ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ํ๋คํจ
- ๋ก๋ด ๊ธฐ์ค ์ข์ฐ๊ฐ ๊ฐ์ฅ ํ์์ด ์ ๋๋ค. ๋ก๋ด์ด ์ง๋๊ฐ ๊ธธ(๋ฐ๋ฐ)์ ์ ํ์๋์ง ์์ผ๋ ์์น๋ฅผ ๋ฐ๊ฟ ๋ค์ ํ์ํ๊ธฐ
- ์ผ์์ ๋์ ์ฅ์ ๋ฌผ์ด ๋ฟ์์์ด์ผ ์ธ์์ด ๋๋ค. ํํ๋ฒํ์ ์ง๋๊ฐ๋ฉด ์ง๋๊ฐ ์๋ง๋ค์ด์ง๋ค.
- ํ ๊ตฐ๋ฐ์ ์ง์ฐฉํ๊ธฐ ๋ณด๋ค๋ ๊ฒฝ๊ณ์ ์ ๋จผ์ ๋ค ๊ทธ๋ฆฐ ํ ์์ผ๋ก ์ ์ ๋ค์ด๊ฐ๋ ๊ฒ์ด ์ข๋ค.
- ์ขํ๊ณ๊ฐ ํ์ด์ก์ ๋ ์ ๋งํ์ง ๋ง๊ณ ์ฃผ๋ณ์ ํ ๋ฒ๋ง ๋ค์ ๋์๋ณด๋ฉด ๋์์ค๋ ๊ฒฝ์ฐ๋ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ์ค ์ ์๋์์จ๋ค. ์ขํ๊ณ ํ ๋ฒ ํ์ด์ง๋ฉด ๊ทธ๋ฅ ์ ๋งํ๊ณ ๋ฆฌ์ ๋ฒํผ ๋๋ฌ์ผ ํ๋ค. ์ ์ฅ
- ์ดํ๋์ Burger ๋ชจ๋ธ์ ์ผ๋๋ฐ, Waffle์ด ๋ ์ข์ ๊ฒ ๊ฐ๋ค. ์ ๋ฐฉ ์นด๋ฉ๋ผ๋ฅผ Gazebo์์ ๋ณผ ์ ์๋ค. ๋ชฐ๋ผ์ Burger๋ง ์ฐ๋ค๊ฐ Waffle ์ค๊ณ ๋๋ฌด ํธํ๋ค. ๊ทผ๋ฐ ๋์ค์ Rviz์์๋ ์นด๋ฉ๋ผ ์ผ๋๊ณ ์์นด๋ฉ๋ผ ๋ค ๋ด
- Teleop ์์ฐ๊ณ Gazebo์์ ๋ก๋ด ์ฎ๊ฒจ๋ค๋๋ฉด์ ํด๋ณด๋ ค๋ค๊ฐ ์ขํ๊ณ ๋ค ํ์ด์ก๋ค. Teleop๋ง ์ฐ๋ ๊ฒ ์ข๋ค.
์ ๊ทธ๋๋ ์๋ ๋๋ฆฐ๋ฐ ๋น ๋ฅด๊ฒ ํ๋ฉด ์ขํ๊ณ ํ์ด์ง๊ณ , ๋งต ๊นจ์ง๊ณ ๋๋ฆฌ๋ ์๋๋ค.. ์ดํ๋์ ์ง์ง ๊ณ ์ํ๋๋ฐ ๊ฒฐ๊ตญ ์์ฑ ๋ชปํ๊ณ ํฌ๊ธฐํ๋ค. ๋งต์ด ์ข๊ณ ๋จ์ดํ๋ฉด? ํ์ ํ๋ ๊ตฌ๊ฐ๋ณด๋ค๋ ์ผ์ง์ ์ผ๋ก ๊ฐ์ ๋ ํ์์ด ๋ง์ด ๋๋ ์๋๊ฐ ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ.