Navigation Stack を理解する - 2.1 move_base: ROSで遊んでみる

# 目次
1. [導入](http://qiita.com/MoriKen/items/0b75ab291ab0d95c37c2)
2. move_base (ナビゲーション)
 3. [ROSで遊んでみる](http://qiita.com/MoriKen/items/8387b279e968368783f1)　← いまココ
 4. [ソフトウェア構成をみる](http://qiita.com/MoriKen/items/d5cd6208143d6c40caff)
3. amcl (自己位置推定)
 4. [ROSで遊んでみる](http://qiita.com/MoriKen/items/87be494f048ea03fdab8)
 4. [ソフトウェア構成をみる](http://qiita.com/MoriKen/items/26483e86fb556f0dc5ce)
 5. [原理をみる (準備編)](http://qiita.com/MoriKen/items/239f69df2921cc64bd62)
 6. [原理をみる (応用編)](http://qiita.com/MoriKen/items/dfb6eb168649873589f0)
4. gmapping (地図生成)
 1. [ROSで遊んでみる](http://qiita.com/MoriKen/items/74cbff9198f82f2b7ea8)
 2. [ソフトウェア構成をみる](http://qiita.com/MoriKen/items/65ac41abca9fdf6051be)
 3. [原理をみる(応用編)](http://qiita.com/MoriKen/items/0f2550a2adbdcd3da04e)
 4. 原理をみる(準備編 その1)
 5. 原理をみる(準備編 その2)

# はじめに
本節ではNavigation Stack の親分的存在である，[move_base](http://wiki.ros.org/move_base) について記述します．ソフトウェア構成内の位置づけとしては，下記の図に示すとおりです．

- ROS Wiki の図中
![00_位置づけ1.png](https://qiita-image-store.s3.amazonaws.com/0/110138/70b024c4-d3eb-b273-f816-008c4869afdd.png)


- 導入部で示したパッケージの図中
![00_位置づけ2.png](https://qiita-image-store.s3.amazonaws.com/0/110138/eaadb799-d9a5-d041-03cd-251a7f9d5349.png)

# 環境
- OS: Ubuntu 14.04
- ROS: Indigo
- モデル：[Husky](http://wiki.ros.org/Robots/Husky)
- パッケージ：[husky_navigation](http://wiki.ros.org/husky_navigation)
- チュートリアル：[Husky Move Base Demo](http://wiki.ros.org/husky_navigation/Tutorials/Husky%20Move%20Base%20Demo)
![husky-grass](http://wiki.ros.org/Robots/Husky?action=AttachFile&do=get&target=husky-grass.png)

# Husky Move Base Demo について
[move_base](http://wiki.ros.org/move_base) を使ってナビゲーションを行います．ただし，自己位置推定は動作モデルによるオドメトリのみに頼るものです．したがって，このチュートリアルでは，外乱によってオドメトリに誤差がのってもそれをリカバーする手段はありません．とにかく，まずはナビゲーションとはどんなものかを体感するために必要な最低限の要素で構成されたチュートリアルとなっています．まずはここから，という感じですね．

![00_位置づけ3.png](https://qiita-image-store.s3.amazonaws.com/0/110138/e576c8ac-13e6-d1a9-5403-6f05969a22f1.png)

# ROSで遊んでみる
というわけで，とりあえず遊んでみましょう．

## インストール
チュートリアルに従って淡々と．

```bash
$ sudo apt-get install ros-indigo-husky-navigation ros-indigo-husky-gazebo ros-indigo-husky-viz
```

## 各種launch ファイルの実行
i. Husky シミュレータの起動（gazebo）

```bash
$ roslaunch husky_gazebo husky_playpen.launch
```
![01.png](https://qiita-image-store.s3.amazonaws.com/0/110138/9507065d-fb12-948f-94e6-099662e1fdff.png)

ii. ビジュアライザの起動（rviz）

```bash
$ roslaunch husky_viz view_robot.launch
```
地図も無く，ロボットにとっての頼みの綱はオドメトリのみです．従って，ワールド座標系の原点は /odom フレームとしておきます．初期状態では，/odom フレームと /base_link フレームは一致しています．
![02_rviz.png](https://qiita-image-store.s3.amazonaws.com/0/110138/41207671-081a-c8fb-d0fc-2d4d247f5baf.png)

iii. move_base の起動

```bash
$ roslaunch husky_navigation move_base_mapless_demo.launch
```
これで，ナビゲーションが可能な状態となります．

## ナビゲーションを体感する
とりあえず目標位置を指定して，ロボットがその通りに動くか確認してみます．

1. rviz 上部にある「2D Nav Goal」というボタンをクリックします．
2. フィールド上の任意の位置でマウス左ボタンを押下すると目標位置が決まります．そのままドラッグして目標姿勢を定め，ボタンを上げます．

![03_rviz_goal.png](https://qiita-image-store.s3.amazonaws.com/0/110138/a8f73ae0-2b9f-be24-2df2-813f1643696d.png)

すると，ロボットが動き始め，指定した通りの位置・姿勢になるまで動き続ける様子を確認できます．
![04_rviz_goal_reach.png](https://qiita-image-store.s3.amazonaws.com/0/110138/66c0bd94-1047-5b42-7b0a-9365a91290ae.png)

# おわりに
これで遊んでいるだけで結構お腹いっぱい（？）かもしれませんが，次項でもう少し中を見てみようと思います．

Next: [2.2 move_base: ソフトウェア構成をみる](http://qiita.com/MoriKen/items/d5cd6208143d6c40caff)
Prev: [1. 導入](http://qiita.com/MoriKen/items/0b75ab291ab0d95c37c2)

# 参考文献
1. [S Thrun, et al., "Probabilistic Robotics", the MIT Press, 2005.](http://www.probabilistic-robotics.org/)
1. [原, "ROSの活用による屋外の歩行者空間に適応した自律移動ロボットの開発", ロボット工学セミナー, 2015.](http://www.slideshare.net/hara-y/ros-slam-navigation-rsj-seminar)
2. [ROS Wiki.](http://wiki.ros.org)
3. ["ros-planning/navigation", github.](https://github.com/ros-planning/navigation)
3. ["husky_navigation", github.](http://wiki.ros.org/husky_navigation/)