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
-
ROS ํจํค์ง๋ฅผ ์์ฑ ํ์ฌ๋ผ.
cd ~/ros roscreate-pkg atlas_teleop osrf_msgs rospy roscd atlas_teleop mkdir scripts cd scripts -
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๊ฐ ๋ง์ ์ถ๊ณผ ๋ฒํผ๋ค์ ๊ฐ์ง๊ณ ์๋ ํฐ ์กฐ์ด์คํฑ ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ง๋ ๋ค.
-
atlas_teleopํจํค์ง์ Atlas teleop controlleratlas_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
-
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์ด๋ผ๊ณ ๊ฐ์ ํ๊ณ ์ค๋ช ํ๋ค.
-
์ฌ๋ผ์ด๋๋ฅผ ์ด๋ํ๋ฉด ๋ค์๊ณผ ์ ์ฌํ 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] --- -
์ด๋ฐ ์ถ๋ ฅ๋ฌผ์ ๋ณธ๋ค๋ ์ณ์ ์์ด๋๋ฅผ ์ฐพ์ ๊ฒ์ด๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ค์ ์์ด๋๋ก ์ ๋๋ก ๋ ์์ด๋๋ฅผ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณตํ์ฌ๋ผ.
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) orsph(spherical). - ์ซ์๋ ์ฅ๋ ์์ธ์ ์ ๋๋ฅผ ๋ํ๋ธ๋ค. ํด๋ ๊ฒ์(0.0) ์์กดํ ์ฅ๋ ๊ฒ์(1.0)์ด๋ค.
- ๋ฌธ์๋ ์ฅ๋ ์์ธ๋ฅผ ์ ์ํ๋ฉฐ ๋ค์๊ณผ ๊ฐ๋ค:
- The
0:๋ผ์ธ์ ์์ ์ ์์ธ๋ฅผ ์ ์ํ๋ค๋ ์ ์์ ํน๋ณํ๋ค. - 0์ด ์๋ ๊ฐ ๊ฐ์ ๋ค๋ฅธ ๋ผ์ธ์ ์ฃผ์ด์ง ์ฌ๋ผ์ด๋์ ๋ํด ํ๊ฒ ํฌ์ฆ๋ฅผ ๋ํ๋ธ๋ค. (1, 2, etc.).
- ์ฌ๋ผ์ด๋๊ฐ 0.0์ผ ๋ ์์ ์์ธ๋ฅผ ๋ช ๋ นํ๋ค. (๊ณ์ํด์)
- ์ฌ๋ผ์ด๋๊ฐ 1.0์ผ ๋ ํ๊ฒ ์์ธ๋ฅผ ๋ช ๋ นํ๋ค. (๊ณ์ํด์)
- ์ฌ๋ผ์ด๋๊ฐ 0.0 ์์ 1.0 ์ฌ์ด์ ์์ ๋, ์์ ๊ณผ ํ๊ฒ ์์ธ ์ฌ์ด์ ์ ํ์ ์ผ๋ก ๋ณด๊ฐํ๋ ๋ช ๋ น์ ํ๋ค.
- ์ฌ๋ผ์ด๋ ๋ช ๋ น์ added์ ํจ๊ป ํ๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ฝ๊ฒ ๋ค๋ฅธ ์์ธ๋ค์ ํฉ์น ์ ์๋ค.