JSKのプログラムをインストールして動かすところまでのメモ

# 必要なPC環境

- Ubuntu 14.04
- ROS indigo

http://wiki.ros.org/indigo/Installation/Ubuntu にしたがって，indigoが入っていることを想定．

``sudo apt install ros-indigo-desktop`` 的なことを既にやってあるという意味．

# Install

本当は https://github.com/jsk-ros-pkg/jsk_common のREADME.mdに書いてあるコマンドを打てば良い（＝＝``jsk.rosbuild``をそのまま実行すれば良い）が，今回必要ないものも大量に入ってきて時間がかかりすぎるので，最小構成でインストールを進めるよう微修正する．

手順としては
1. 何も入っていないUbuntuに，一発で環境構築してくれる便利スクリプト``jsk.rosbuild``をダウンロードする
2. その便利スクリプトを最小構成でインストールできるように微修正する
3. そのスクリプトを実行する
4. ``catkin build``をする

で，30分くらい？かかる．

## STEP 1: 何も入っていないUbuntuに，一発で環境構築してくれる便利スクリプトをダウンロードする

何も入っていない，というのはROSのインストールもやってくれるという意味だけで，ROSが既に入っていたり何か変なソフトが入っていたりしても大丈夫（なはず）．

```sh
wget -q -O /tmp/jsk.rosbuild https://raw.github.com/jsk-ros-pkg/jsk_common/master/jsk.rosbuild
```

をして，``jsk.rosbuild``という名前のスクリプトを``/tmp``以下にダウンロードする．

## STEP 2: 最小構成でインストールできるように``jsk.rosbuild``を微修正する

```sh
emacs -nw /tmp/jsk.rosbuild
```

して，一番下の``# main program``のところを見る．
微修正せずに実行すると

- ``setup-ros``
- ``install-jsk-ros-pkg``
- ``compile-jsk-ros-pkg``

の順に呼ばれるが，``setup-ros``と``compile-jsk-ros-pkg``を省きたいので，**コメントアウトする**．

※ ``bash``スクリプトなので``#``をつけたらコメントアウトできる


``setup-ros``を省く理由は，既にROSが入っているPCのためROSを入れる過程をスキップしたい＋javaを入れたくないから．
``compile-jsk-ros-pkg``を省く理由は，ビルドは自分でやりたいから．

次に，``function install-pkg``という関数のところに移動して，関数の先頭に，

```sh
read -p "hoge"
read -p "hoge"
read -p "hoge"
read -p "hoge"
read -p "hoge"
```

と5行くらい**キー入力を待つ**ようにする．

微修正は以上の2つでおしまい．


## STEP 3: 修正した``jsk.rosbuild``を実行する

まず

```bash
sudo easy_install pip
sudo pip install --upgrade pip setuptools
sudo apt install python-rosdep python-wstool python-catkin-tools
sudo rosdep init
rosdep update
```

をしておく．（本来はこれらは``jsk.rosbuild``の``setup-ros``という関数の内部で呼ばれていたが，今回はその関数をコメントアウトしたので手動で行う．）

で，

```sh
source /opt/ros/indigo/setup.bash
bash /tmp/jsk.rosbuild --from-source --rtm indigo
```

をする．

最初の方はY or Nを聞かれるかもしれないので，聞かれたらyes．

何分か待つと，STEP2で仕込んだ``read -p "hoge"``のところに到達して，キー入力待ちになる．
先ほど5行ほど追加したのは，ここで急いで1回Enterしてしまっても大丈夫なように保険をかけただけ．
ここで一旦別のことをするので，このターミナルは一旦放置．

別ターミナルで``/tmp``を見ると``rosinstall.xxx``というファイルがいくつか出来ている．

``rosinstall.xxx``というファイルは3つくらいあるので，その中で一番行数が長いやつを開いて，

```yaml
#\n
- git:
    uri: https://github.com/start-jsk/rtmros_tutorials.git
    local-name: rtm-ros-robotics/rtmros_tutorials
- git:
    uri: https://github.com/start-jsk/rtmros_gazebo.git
    local-name: rtm-ros-robotics/rtmros_gazebo
# rosinstall file for https://github.com/jsk-ros-pkg
# use #@# for special comment out, due to jsk.rosbuild specification
#

# jsk-ros-pkg
- git:
    uri: https://github.com/jsk-ros-pkg/jsk_roseus.git
    local-name: jsk-ros-pkg/jsk_roseus
    version: master
- git:
    uri: https://github.com/jsk-ros-pkg/jsk_robot.git
    local-name: jsk-ros-pkg/jsk_robot
    version: master
- git:
    uri: https://github.com/jsk-ros-pkg/jsk_pr2eus.git
    local-name: jsk-ros-pkg/jsk_pr2eus
    version: master
- git:
    uri: https://github.com/jsk-ros-pkg/jsk_model_tools.git
    local-name: jsk-ros-pkg/jsk_model_tools
    version: master
- git:
    uri: https://github.com/jsk-ros-pkg/jsk_common.git
    local-name: jsk-ros-pkg/jsk_common
    version: master
- git:
    uri: https://github.com/jsk-ros-pkg/jsk_common_msgs.git
    local-name: jsk-ros-pkg/jsk_common_msgs
    version: master
- git:
    uri: https://github.com/jsk-ros-pkg/jsk_3rdparty.git
    local-name: jsk-ros-pkg/jsk_3rdparty
    version: master

- git:
    uri: https://github.com/start-jsk/rtmros_common.git
    local-name: rtm-ros-robotics/rtmros_common
- git:
    uri: https://github.com/start-jsk/rtmros_hironx.git
    local-name: rtm-ros-robotics/rtmros_hironx
- git:
    uri: https://github.com/tork-a/rtmros_nextage.git
    local-name: rtm-ros-robotics/rtmros_nextage
```

となるように修正する．
ここでやったことは，``git clone``する数を減らしているイメージ．これをしないと最小構成にならない．

で，``jsk.rosbuild``を走らせていて``read -p "hoge"``で止まっているターミナルに戻ってEnterを連打して``read``を抜けて``jsk.rosbuild``を続ける．

ちょっと待つと終わる．
正常に終わるはず．

これでソースコードをゲット出来た．
``$HOME/ros``以下にいろいろあるはず．

次に，これらのソースコードが依存しているpackgeをaptやpipで入れるために``rosdep install``をする．

```sh
source /opt/ros/indigo/setup.bash
cd ~/ros/indigo/src
rosdep install -q -y -n -r --ignore-src --from-paths $HOME/ros/indigo_parent/src $HOME/ros/indigo/src .
```

で，手元に落としてきたソースが依存しているパッケージをaptやpipで入れてくれる．
何個かエラーが出るが，気にしなくて良い（プライベートレポジトリにアクセスできないから，とかそんな感じの理由でエラーは出るけど問題ない）

## STEP 4: ビルドする

```sh
source /opt/ros/indigo/setup.bash
cd ~/ros/indigo_parent/
catkin build
# 待つ
cd ~/ros/indigo/
source ~/ros/indigo_parent/devel/setup.bash
catkin build
# 待つ
```

でok．

parentが付くほうが，ROS非依存のもの（hrpsys / openhrp3 / euslispなど）で，parentが付かない方が普通のros package．

``/opt/ros/indigo/setup.bash``をソースしてからparentの方をまずビルドして，parentのdevelのsetup.bashをソースしてから普通の方をビルドすることで，チェーンが出来ていろいろと良いことがある．


ビルドがエラー無く終わったら，完成．

``emacs -nw ~/.bashrc``をして，最後に``source $HOME/ros/devel/setup.bash``を書いておく．





# 動かしてみる

用語を説明すると

- hrpsys: 歩行軌道生成とか安定化制御とかのRTCを持っている人
- hrpsys-simulator：動力学シミュレータその1
- roseus: ipythonみたいなやつ
- choreonoid：動力学シミュレータその2
- gazebo：動力学シミュレータその3


## hrpsys + hrpsys-simulatorを試す

```sh
roscd hrpsys
cd launch
roslaunch samplerobot.launch
```

でシミュレータが起動する．

```sh
roscd hrpsys
cd sample/SampleRobot
ipython -i samplerobot_auto_balancer.py
```

でロボットがいろいろと動く．

samplerobot_auto_balancer.pyの中身やそのディレクトリにあるhoge.pyを試してみると，いろいろ動く．



## hrpsys + hrpsys-simulator + roseusを試す

```sh
rtmlaunch hrpsys_ros_bridge samplerobot.launch RUN_RVIZ:=false
```

したらシミュレータが起動する．

別ターミナルで

```sh
emacs -nw -f shell
roscd hrpsys_ros_bridge
cd euslisp
roseus samplerobot-interface.l
```

するとeuslispでロボットを動かせる．

http://wiki.ros.org/rtmros_common/Tutorials に比較的詳し目に書いてある

euslispで可視化しつつ姿勢を作って，それをhrpsys-simulatorに送ると，動きが簡単に作れて楽しい．

![a.gif](https://qiita-image-store.s3.amazonaws.com/0/25325/706ff236-cb36-da6b-e7e8-2df6cb1dd427.gif)


## hrpsys + choreonoid + roseusを試す

``choreonoid hrpsys``でググるとやり方が出てくる気がする．

## hrpsys + gazebo + roseusを試す

http://wiki.ros.org/rtmros_common/Tutorials に比較的詳し目に書いてある．