์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

3. ์‹ค์Šต์„ ์œ„ํ•œ Gazebo ํ™˜๊ฒฝ๊ณผ ์‚ฌ์šฉ๋ฒ• ์†Œ๊ฐœ

Swimming_Kim 2021. 1. 29. 17:53
๐Ÿ’ป

3. ์‹ค์Šต์„ ์œ„ํ•œ Gazebo ํ™˜๊ฒฝ๊ณผ ์‚ฌ์šฉ๋ฒ• ์†Œ๊ฐœ

์•ž์„  ๊ณผ์ •์—์„œ, ROS ์„ค์น˜๋Š” ๋ชจ๋‘ ์™„๋ฃŒํ•˜์…จ๋‚˜์š”?? ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ์•ž์œผ๋กœ ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ๋กœ๋ด‡ ์‹œ๋ฎฌ๋ ˆ์ด์…˜, Gazebo ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด๋ณด๊ณ , ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•์„ ์†Œ๊ฐœ ํ•ด ๋ด…๋‹ˆ๋‹ค.

  • ์‹œ์ž‘ํ•˜๊ธฐ ์•ž์„œ catkin workspace๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค

ROS๋Š” catkin์ด๋ผ๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด c/c++ cross-platform ๊ฐœ๋ฐœ์„ ๊ฒฝํ—˜ํ•˜์…จ๋‹ค๋ฉด cmake์— ์ต์ˆ™ํ•˜์‹คํ…๋ฐ, ์ด์™€ ๋งค์šฐ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Ž

ํŒŒ์ผ ๊ตฌ์กฐ ๊ด€์ ์—์„œ, ROS Application์€ ์—ฌ๋Ÿฌ Package๋“ค๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

์ด๋“ค Package๊ฐ€ ์†Œ์Šค ํŒŒ์ผ์„ ๋‹ด๊ณ  ์žˆ๊ณ , catkin์ด ์ด๋“ค์„ ๋นŒ๋“œํ•˜์—ฌ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ๋งŒ๋“ค์ฃ .

์ด๋ฒˆ์—๋Š” catkin workspace๋ฅผ ๋งŒ๋“ค๊ณ , Github์—์„œ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ cloneํ•˜์—ฌ ๋นŒ๋“œ, ์‚ฌ์šฉํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

$ cd ~/
$ mkdir -p gcamp_ws/src
$ cd gcamp_ws/src
$ catkin_init_workspace
Creating symlink "/home/swimming/gcamp_ws/src/CMakeLists.txt" pointing to 
"/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"

$ cd ../
$ catkin_make
$ cma
# ํ•ญ์ƒ makeํ•œ ๋‹ค์Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด source!!
$ source devel/setup.bash
$ sds

๋‹ค์Œ๊ณผ ๊ฐ™์ด build, devel, src ํด๋”๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‚˜์š”??

๐Ÿ’ก
๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค๊ฑฐ๋‚˜ ํ„ฐ๋ฏธ๋„์— ๋นจ๊ฐ„์ค„์ด ๋‚˜์™”๋‹ค๋ฉด, ๋‹นํ™ฉํ•˜์ง€ ๋งˆ์‹œ๊ณ  ์ดˆ๊ธฐํ™” ํ›„ ์žฌ์‹คํ–‰ ์‹œ์ผœ๋ด…๋‹ˆ๋‹ค.
$ cd ~/
$ rm -rf gcamp_ws

# ๋‹ค์‹œ ์ด์ „ ๊ณผ์ • ๋ฐ˜๋ณต

G Camp World


  • Clone && Build
$ cd ~/gcamp_ws/src

$ git clone https://github.com/Road-Balance/gcamp_ros_basic.git
$ cd ~/gcamp_ws
$ catkin_make

# ํ•ญ์ƒ makeํ•œ ๋‹ค์Œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด source!!
$ source devel/setup.bash

  • Gazebo์— Model Path Add
$ gedit ~/.gazebo/gui.ini

# ๋‹ค์Œ ๋ถ€๋ถ„ ์ˆ˜์ •
[model_paths]
filenames=/home/<user_name>/gcamp_ws/src/gcamp_ros_basic/GazeboFiles/models

  • ๋Œ€๋ง์˜ launch!!
$ cd ~/gcamp_ws
$ roslaunch gcamp_gazebo gazebo_world.launch

Trouble Shooting


๐Ÿ’ก
์ดˆ๊ธฐ ์‹คํ–‰์‹œ์—๋Š” ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๋‹ค๊ณณ ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!!
๐Ÿ’ก
๋ฐ์Šคํฌํƒ‘ ํ™˜๊ฒฝ์—์„œ ์ž‘์—…ํ•˜๋Š” ์‹ค์Šต์ž…๋‹ˆ๋‹ค!! ์ ฏ์Šจ ๋‚˜๋…ธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค!!
๐Ÿ’ก
ros ์„ค์น˜ ์‹œ ros-melodic-desktop-full ๋กœ ์„ค์น˜ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค!!
๐Ÿ’ก
windows key๋ฅผ ๋ˆŒ๋Ÿฌ Gazebo๋ฅผ ์‹คํ–‰์‹œ์ผœ๋ณด์„ธ์š”, ์ด๋•Œ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ๋‹จ์ˆœํžˆ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ๊ธด ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๐Ÿ’ก
Anaconda์™€ ๊ฐ™์€ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด, ๋ฐ˜๋“œ์‹œ deactivate ์‹œ์ผœ์ฃผ์„ธ์š”!!

Gazebo ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

ํ„ฐ๋ฏธ๋„์„ ํ‹€๊ฑฐ๋‚˜, windowsํ‚ค๋ฅผ ๋ˆ„๋ฅธ ๋’ค gazebo๋ฅผ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• ์†Œ๊ฐœ

  • ๋งˆ์šฐ์Šค, ํœ  ์ปจํŠธ๋กค
  • View ์ „ํ™˜
  • Insert Model
  • ๋ฌผ์ฒด ์ด๋™์‹œํ‚ค๊ธฐ
  • ์ข…๋ฃŒ ๋ฐฉ๋ฒ•

Gazebo ์ขŒํ‘œ์ฒด๊ณ„


์šฐ๋ฆฌ์˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ธฐ์ค€, gazebo๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ขŒํ‘œ์ฒด๊ณ„๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.

teleoperation ์‹ค์Šต


๊ฐ„๋‹จํ•œ teleoperation(์›๊ฒฉ ์กฐ์ข…)์„ ํ•ด๋ณผ๊นŒ์š”?? ํ‚ค๋ณด๋“œ๋กœ ๋กœ๋ด‡์„ ์›€์ง์—ฌ ๋ด…๋‹ˆ๋‹ค.

# ์ƒˆ ํ„ฐ๋ฏธ๋„์—์„œ
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

Reading from the keyboard  and Publishing to Twist!
---------------------------
Moving around:
   u    i    o
   j    k    l
   m    ,    .

For Holonomic mode (strafing), hold down the shift key:
---------------------------
   U    I    O
   J    K    L
   M    <    >

t : up (+z)
b : down (-z)

anything else : stop

q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%

CTRL-C to quit

์•ž์œผ๋กœ์˜ ๊ณผ์ •


์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ์•ž์„œ ์‹คํ–‰์‹œ์ผœ๋ณธ Simulation์— ๊ธฐ๋ฐ˜ํ•ด์„œ ROS ๊ฐœ๋ฐœ์˜ ์ „๋ฐ˜์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ดํŽด๋ณด๊ณ , Python/C++์„ ํ†ตํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„ผ์„œ๋“ค์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•๋“ค์— ๋Œ€ํ•ด ๋ฐฐ์›๋‹ˆ๋‹ค.

๊ทธ ์ดํ›„, ์‹ค์ œ ๋กœ๋ด‡์„ ์กฐ๋ฆฝํ•ด๋ณด๊ณ , ํ•˜๋“œ์›จ์–ด + ์ ฏ์Šจ ๋‚˜๋…ธ + ROS์˜ ์กฐํ•ฉ์œผ๋กœ ์šฐ๋ฆฌ๋งŒ์˜ ๋กœ๋ด‡์„ ๋งŒ๋“ค์–ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.