๐Ÿ’ป Language/ROS : ๋กœ๋ด‡์‹œ์Šคํ…œ

[ROS2] TurtleBot3+ROS2(Foxy)+Gazebo Naviagtion2 Install

mxnxeonx 2022. 8. 9. 17:57
728x90
728x90

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 ์‹คํ–‰ํ•ด์„œ ์›€์ง์ด๋ฉด ์ง€๋„๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. ํ•œ ๋ฒˆ ํƒ์ƒ‰ํ•œ๋‹ค๊ณ  ์ง€๋„๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ฑฐ๋‹ˆ์™€, ๋งต์ด ์ƒ๋‹นํžˆ ๋„“๋‹ค๋ณด๋‹ˆ ์™„๋ฒฝํ•œ ์ง€๋„๋ฅผ ์ œ์ž‘ํ•˜๋Š” ๋ฐ์—๋Š” ์‹คํŒจํ–ˆ๋‹ค.

๋”๋ณด๊ธฐ

์ดํ‹€๋™์•ˆ ์ง€๋„ ์ œ์ž‘๋งŒ ํ•˜๋ฉด์„œ ์–ป์€.. ์†Œ์†Œํ•œ ํŒ

  1. ์ตœ๋Œ€ ์†๋„๊ฐ€ n์ด๋”๋ผ๋„ n์œผ๋กœ ์ฃผํ–‰ํ•˜๋ฉด ์ง€๋„๊ฐ€ ์™„๋ฒฝํžˆ ํƒ์ƒ‰๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ.
  2. ํšŒ์ „์€ ํ•ญ์ƒ ์ฃผ์˜ํ•˜์ž.. ์•ž๋’ค๋กœ๋Š” ํƒ์ƒ‰์ด ์ž˜ ๋˜๋Š”๋ฐ ํšŒ์ „ํ•˜๋ฉด ์ขŒํ‘œ๊ณ„๊ฐ€ ํ‹€์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ—ˆ๋‹คํ•จ
  3. ๋กœ๋ด‡ ๊ธฐ์ค€ ์ขŒ์šฐ๊ฐ€ ๊ฐ€์žฅ ํƒ์ƒ‰์ด ์ž˜ ๋œ๋‹ค. ๋กœ๋ด‡์ด ์ง€๋‚˜๊ฐ„ ๊ธธ(๋ฐœ๋ฐ‘)์€ ์ž˜ ํƒ์ƒ‰๋˜์ง€ ์•Š์œผ๋‹ˆ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ” ๋‹ค์‹œ ํƒ์ƒ‰ํ•˜๊ธฐ
  4. ์„ผ์„œ์˜ ๋์— ์žฅ์• ๋ฌผ์ด ๋‹ฟ์•„์žˆ์–ด์•ผ ์ธ์‹์ด ๋œ๋‹ค. ํ—ˆํ—ˆ๋ฒŒํŒ์„ ์ง€๋‚˜๊ฐ€๋ฉด ์ง€๋„๊ฐ€ ์•ˆ๋งŒ๋“ค์–ด์ง„๋‹ค.
  5. ํ•œ ๊ตฐ๋ฐ์— ์ง‘์ฐฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ๊ฒฝ๊ณ„์„ ์„ ๋จผ์ € ๋‹ค ๊ทธ๋ฆฐ ํ›„ ์•ˆ์œผ๋กœ ์ ์  ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  6. ์ขŒํ‘œ๊ณ„๊ฐ€ ํ‹€์–ด์กŒ์„ ๋• ์ ˆ๋งํ•˜์ง€ ๋ง๊ณ  ์ฃผ๋ณ€์„ ํ•œ ๋ฒˆ๋งŒ ๋‹ค์‹œ ๋Œ์•„๋ณด๋ฉด ๋Œ์•„์˜ค๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์‹ค ์ž˜ ์•ˆ๋Œ์•„์˜จ๋‹ค. ์ขŒํ‘œ๊ณ„ ํ•œ ๋ฒˆ ํ‹€์–ด์ง€๋ฉด ๊ทธ๋ƒฅ ์ ˆ๋งํ•˜๊ณ  ๋ฆฌ์…‹ ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ์•ผ ํ•œ๋‹ค. ์  ์žฅ
  7. ์ดํ‹€๋™์•ˆ Burger ๋ชจ๋ธ์„ ์ผ๋Š”๋ฐ, Waffle์ด ๋” ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. ์ „๋ฐฉ ์นด๋ฉ”๋ผ๋ฅผ Gazebo์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ชฐ๋ผ์„œ Burger๋งŒ ์“ฐ๋‹ค๊ฐ€ Waffle ์˜ค๊ณ  ๋„ˆ๋ฌด ํŽธํ–ˆ๋‹ค. ๊ทผ๋ฐ ๋‚˜์ค‘์—” Rviz์—์„œ๋„ ์นด๋ฉ”๋ผ ์ผœ๋†“๊ณ  ์Œ์นด๋ฉ”๋ผ ๋‹ค ๋ด„
  8. Teleop ์•ˆ์“ฐ๊ณ  Gazebo์—์„œ ๋กœ๋ด‡ ์˜ฎ๊ฒจ๋‹ค๋‹ˆ๋ฉด์„œ ํ•ด๋ณด๋ ค๋‹ค๊ฐ€ ์ขŒํ‘œ๊ณ„ ๋‹ค ํ‹€์–ด์กŒ๋‹ค. Teleop๋งŒ ์“ฐ๋Š” ๊ฒŒ ์ข‹๋‹ค.

์•ˆ ๊ทธ๋ž˜๋„ ์†๋„ ๋А๋ฆฐ๋ฐ ๋น ๋ฅด๊ฒŒ ํ•˜๋ฉด ์ขŒํ‘œ๊ณ„ ํ‹€์–ด์ง€๊ณ , ๋งต ๊นจ์ง€๊ณ  ๋‚œ๋ฆฌ๋„ ์•„๋‹ˆ๋‹ค.. ์ดํ‹€๋™์•ˆ ์ง„์งœ ๊ณ ์ƒํ–ˆ๋Š”๋ฐ ๊ฒฐ๊ตญ ์™„์„ฑ ๋ชปํ•˜๊ณ  ํฌ๊ธฐํ–ˆ๋‹ค. ๋งต์ด ์ข๊ณ  ๋‹จ์ดํ•˜๋ฉด? ํšŒ์ „ํ•˜๋Š” ๊ตฌ๊ฐ„๋ณด๋‹ค๋Š” ์ผ์ง์„ ์œผ๋กœ ๊ฐ”์„ ๋•Œ ํƒ์ƒ‰์ด ๋งŽ์ด ๋˜๋Š” ์›”๋“œ๊ฐ€ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ.

 

 

728x90
320x100