Teleoperate atlas with a music mixer - modulabs/gazebo-tutorial GitHub Wiki

Overview

์ด๋ฒˆ ์žฅ์—์„œ๋Š” Atlas ๋ชจ๋ธ์„ ์›๊ฒฉ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ music mixer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช… ํ•  ๊ฒƒ์ด๋‹ค.

Hardware requirements

์ด๋ฒˆ ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์‚ฌ์šฉ๋œ ํˆด์€ KORG nanoKONTROL ์žฅ์น˜์ด๋‹ค. ์ด ์žฅ์น˜์˜ version 1๋งŒ ์˜ค์ง ํ…Œ์ŠคํŠธ ๋˜์—ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ด ๋ฒ„์ „์˜ ์žฅ์น˜๋Š” ๋”์ด์ƒ ์ƒ์‚ฐ๋˜์ง€ ์•Š์ง€๋งŒ Amazon์„ ํ†ตํ•ด ์˜จ๋ผ์ธ์œผ๋กœ ์—ฌ์ „ํžˆ ์ฃผ๋ฌธ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด ์žฅ์น˜์˜ ์ƒˆ๋กœ์šด ๋ฒ„์ „์ด ์ž‘๋™ ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋“œ๋ผ์ด๋ฒ„์˜ ์ฝ”๋“œ๊ฐ€ ์ผ๋ถ€ ์ˆ˜์ • ๋  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

Driver installation

pygame ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ ํ•˜์—ฌ๋ผ. ์ด๊ฒƒ์€ mixer์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

sudo apt-get install python-pygame

Simulation setup

์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์‹œ์ž‘ํ•˜์—ฌ๋ผ.

roslaunch drcsim_gazebo qual_task_2.launch

๋กœ๋ด‡๊ณผ ๋“œ๋ฆด์ด ๋†“์—ฌ ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Teleop package setup

  1. ROS ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑ ํ•˜์—ฌ๋ผ.

    cd ~/ros
    roscreate-pkg atlas_teleop osrf_msgs rospy
    roscd atlas_teleop
    mkdir scripts
    cd scripts
    
  2. atlas_teleop์— nanoKONTROL driver๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜์—ฌ๋ผ. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ์‹คํ–‰ ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒํ•œ์„ ์กฐ์ • ํ•˜์—ฌ๋ผ.

    wget https://bitbucket.org/osrf/drcsim/raw/default/drcsim_tutorials/atlas_teleop/nanokontrol.py
    chmod a+x nanokontrol.py
    

    ์ด ๋“œ๋ผ์ด๋ฒ„๋Š” mixer๋กœ ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ROS sensor_msgs/Joy ๋ฉ”์‹œ์ง€๋ฅผ ํผ๋ธ”๋ฆฌ์‹œ ํ•œ๋‹ค. ์ด๊ฒƒ์€ mixer๊ฐ€ ๋งŽ์€ ์ถ•๊ณผ ๋ฒ„ํŠผ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํฐ ์กฐ์ด์Šคํ‹ฑ ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“ ๋‹ค.

  3. atlas_teleop ํŒจํ‚ค์ง€์— Atlas teleop controller atlas_teleop.py๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์‹คํ–‰ ๋  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์ผ ๊ถŒํ•œ์„ ์กฐ์ •ํ•œ๋‹ค.

    wget https://bitbucket.org/osrf/drcsim/raw/default/drcsim_tutorials/atlas_teleop/atlas_teleop.py
    chmod a+x atlas_teleop.py
    

    ์ด ์ œ์–ด๊ธฐ๋Š” /joyํ† ํ”ฝ์— ROS sensor_msgs/Joy๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋ธŒ์Šคํฌ๋ผ์ด๋ธŒ ํ•œ๋‹ค. /atlas/joint_commands, /sandia_hands/l_hand/joint_commands, /sandia_hands/r_hand/joint_commands ํ† ํ”ฝ์— osrf_msgs/JointCommands๋ฉ”์‹œ์ง€๋ฅผ ํผ๋ธ”๋ฆฌ์‹œ ํ•จ์œผ๋กœ์จ Atals์™€ Sandia ์†์„ ์›€์ง์ธ๋‹ค. ๋ช…๋ น์–ด ๋ผ์ธ ์ธ์ž๋กœ์จ YAML configuration ํŒŒ์ผ์„ ํ•„์š”๋กœ ํ•œ๋‹ค. ๋“ค์–ด์˜ค๋Š” /joy ๋ฉ”์‹œ์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ๋กœ๋ด‡๊ณผ ์†์˜ ๋ช…๋ น์–ด๋กœ ๋งตํ•‘ ๋˜๋Š”์ง€ ๊ตฌ๋ถ„ํ•ด ์ค€๋‹ค.(์•„๋ž˜์— ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค.)

Finding your mixer device

  1. USB ํฌํŠธ์— KORG nanoKONTROL ์žฅ์น˜๋ฅผ ๊ฝ‚์•„๋ผ. Plug your KORG nanoKONTROL device into a free USB port. ์ปดํ“จํ„ฐ ์‚ฌ์–‘์— ๋”ฐ๋ผ mixer๋Š” ๋งŽ์€ ์ •์ˆ˜ ์•„์ด๋””๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””๋ฅผ ์ฐพ์•„์•ผ ํ•˜๊ณ  ๋ฐฉ๋ฒ•์€ ์ž‘๋™๋  ๋•Œ๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ์•„์ด๋””๋ฅผ ํ™•์ธ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ์ž‘ ํ•˜์—ฌ๋ผ.

    # ์ž‘๋™ ๋  ๋•Œ ๋“œ๋ผ์ด๋ฒ„ ํผ๋ธ”๋ฆฌ์‹œ ํ•  ๊ฒƒ์ด๊ณ  /joy ํ† ํ”ฝ์„ ํ™•์ธ ํ•˜์—ฌ๋ผ.Start a listener on the /joy topic, which the driver will publish to when it's working
    rostopic echo /joy &
    # Try the driver with ID 0
    rosrun atlas_teleop nanokontrol.py 0
    

    ๋งŒ์•ฝ nanokontrol.py๊ฐ€ ์ž˜๋ชป๋œ ์•„์ด๋””๋กœ ์—๋Ÿฌ๋กœ ์ฃฝ์œผ๋ฉด ๋‹ค์Œ ์•„์ด๋””๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ๋ผ.

      # It wasn't ID 0.  Try the driver with ID 1
     rosrun atlas_teleop nanokontrol.py 1
    

    ์˜ณ์€ ์•„์ด๋””๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ๋ผ. ๊ทธ๋ฆฌ๊ณ  ์•„์ด๋””๋ฅผ ๊ธฐ์–ตํ•˜์—ฌ๋ผ. ์—ฌ๊ธฐ์—์„œ๋Š” ์˜ณ์€ ์•„์ด๋””๊ฐ€ 3์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์„ค๋ช…ํ•œ๋‹ค.

  2. ์Šฌ๋ผ์ด๋”๋ฅผ ์ด๋™ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ros ํ† ํ”ฝ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

     ---
     header:
       seq: 7
       stamp:
         secs: 3073
         nsecs: 235000000
       frame_id: ''
     axes: [0.06299212574958801, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
     buttons: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
     ---
    
  3. ์ด๋Ÿฐ ์ถœ๋ ฅ๋ฌผ์„ ๋ณธ๋‹ค๋Š” ์˜ณ์€ ์•„์ด๋””๋ฅผ ์ฐพ์€ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋‹ค์Œ ์•„์ด๋””๋กœ ์ œ๋Œ€๋กœ ๋œ ์•„์ด๋””๋ฅผ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ๋ผ.

Pick up the drill

atlas_teleop.py ์ œ์–ด๊ธฐ๋Š” YAML file๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ์—ฌ๊ธฐ์— ์˜ˆ์ œ๊ฐ€ ์žˆ๋‹ค.

#  back       left leg      right leg      left arm      right arm                                     LH        RH
0: "0 0 0 0   0 0 0 0 0 0   0 0 0 0 0 0    0 0 0 0 0 0   0      0     0      0      0       0       cyl 0   cyl 0"
1: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.4271259903907776 1.262315034866333 1.4657480716705322 -0.9703150391578674 -0.2356692999601364 -0.6822677254676819  cyl 0   cyl 0"
2: "0 0 0 0   0 0 0 0 0 0   0 0 0 0 0 0    0 0 0 0 0 0   -1     1     0     -1      0       0       cyl 0   cyl 0"
3: "0 0 0 0   0 0 0 0 0 0   0 0 0 0 0 0    0 0 0 0 0 0   0      0     0      0      2.0     0       cyl 0   cyl 0"
4: "0 0 0 0   0 0 0 0 0 0   0 0 0 0 0 0    0 0 0 0 0 0   0      0     0      0     -2.0     0       cyl 0   cyl 0"
5: "0 0 0 0   0 0 0 0 0 0   0 0 0 0 0 0    0 0 0 0 0 0   0      0     0      0      0.0     2.0     cyl 0   cyl 0"
6: "0 0 0 0   0 0 0 0 0 0   0 0 0 0 0 0    0 0 0 0 0 0   0      0     0      0      0.0    -2.0     cyl 0   cyl 0"
7: "0 0 0 0   0 0 0 0 0 0   0 0 0 0 0 0    0 0 0 0 0 0   0      0     0      0      0       0       cyl 0   cyl 1"
8: "0 0 0 0   0 0 0 0 0 0   0 0 0 0 0 0    0 0 0 0 0 0   0      0     0      0      0       0       cyl 0   sph 1"

drill.yaml๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ•˜์—ฌ๋ผ.

wget http://bitbucket.org/osrf/gazebo_tutorials/raw/default/drcsim_atlas_mixer/files/drill.yaml

๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์—ฌ๋ผ.

# ์ •์ˆ˜์˜ ์ˆซ์ž๋Š” ์•„์ด๋””๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ์—ฌ๊ธฐ์„œ๋Š” 3์ด ์˜ณ์€ ์•„์ด๋””๋ผ๊ณ  ๊ฐ€์ • ํ•˜์˜€๋‹ค.
rosrun atlas_teleop nanokontrol.py 3 &
rosrun atlas_teleop atlas_teleop.py drill.yaml

์ด์ œ ์Šฌ๋ผ์ด๋”๋ฅผ ์›€์ง์—ฌ ๋ณด์•„๋ผ. 1~6๊นŒ์ง€ ์Šฌ๋ผ์ด๋”๋Š” ์˜ค๋ฅธ์ชฝ ํŒ”์„ ๋‹ค์–‘ํ•˜๊ฒŒ ์›€์ง์ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. 7,8 ์Šฌ๋ผ์ด๋”๋Š” ์˜ค๋ฅธ์ชฝ ์†์„ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์—ด๊ณ  ๋‹ซ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค.

์—ฐ์Šต์„ ํ•˜๋ฉด ์“ฐ๋ ˆ๊ธฐ ํ†ต์— ๋“œ๋ฆด์„ ์žก์•„์„œ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

Configuration file format

atlas_teleop.py์€ YAMLํŒŒ์ผ๋กœ ์“ฐ์—ฌ์ ธ ์žˆ๊ณ  ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๊ฐ ๊ฐ์˜ ๋ผ์ธ์€ ๋กœ๋ด‡์˜ ์ž์„ธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค:
    • ์ฒซ๋ฒˆ์งธ 28๊ฐœ์˜ ์ˆซ์ž๋Š” usual order์—์„œ ์ฃผ์–ด์ง„ Atlas ๋กœ๋ด‡์˜ ์กฐ์ธํŠธ ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค.
    • ๋‹ค์Œ ๋‘ ์š”์†Œ๋Š” ์™ผ์ชฝ ์†์˜ ์ฅ๋Š” ์ž์„ธ๋ฅผ ์ •์˜ ํ•œ๋‹ค.(๋‹ค์Œ์˜ ๋‘์š”์†Œ๋Š” ์˜ค๋ฅธ์ชฝ ์†์ด๋ฉฐ ์ฅ๋Š” ์ž์„ธ๋ฅผ ์ •์˜ํ•œ๋‹ค.):
      • ๋ฌธ์ž๋Š” ์ฅ๋Š” ์ž์„ธ๋ฅผ ์ •์˜ํ•˜๋ฉฐ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: cyl (cylindrical) or sph (spherical).
      • ์ˆซ์ž๋Š” ์ฅ๋Š” ์ž์„ธ์˜ ์ •๋„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ํŽด๋Š” ๊ฒƒ์€(0.0) ์™„์กดํžˆ ์ฅ๋Š” ๊ฒƒ์€(1.0)์ด๋‹ค.
  • The 0: ๋ผ์ธ์€ ์›์ ์˜ ์ž์„ธ๋ฅผ ์ •์˜ํ•œ๋‹ค๋Š” ์ ์—์„œ ํŠน๋ณ„ํ•˜๋‹ค.
  • 0์ด ์•„๋‹Œ ๊ฐ ๊ฐ์˜ ๋‹ค๋ฅธ ๋ผ์ธ์€ ์ฃผ์–ด์ง„ ์Šฌ๋ผ์ด๋”์— ๋Œ€ํ•ด ํƒ€๊ฒŸ ํฌ์ฆˆ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. (1, 2, etc.).
    • ์Šฌ๋ผ์ด๋”๊ฐ€ 0.0์ผ ๋•Œ ์›์  ์ž์„ธ๋ฅผ ๋ช…๋ นํ•œ๋‹ค. (๊ณ„์†ํ•ด์„œ)
    • ์Šฌ๋ผ์ด๋”๊ฐ€ 1.0์ผ ๋•Œ ํƒ€๊ฒŸ ์ž์„ธ๋ฅผ ๋ช…๋ นํ•œ๋‹ค. (๊ณ„์†ํ•ด์„œ)
    • ์Šฌ๋ผ์ด๋”๊ฐ€ 0.0 ์—์„œ 1.0 ์‚ฌ์ด์— ์žˆ์„ ๋•Œ, ์›์ ๊ณผ ํƒ€๊ฒŸ ์ž์„ธ ์‚ฌ์ด์— ์„ ํ˜•์ ์œผ๋กœ ๋ณด๊ฐ„ํ•˜๋Š” ๋ช…๋ น์„ ํ•œ๋‹ค.
  • ์Šฌ๋ผ์ด๋” ๋ช…๋ น์€ added์™€ ํ•จ๊ป˜ ํ•œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์‰ฝ๊ฒŒ ๋‹ค๋ฅธ ์ž์„ธ๋“ค์„ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.