「初心者向け！」全自動ロボットの作り方　自己位置推定編




# おまえはだれ
鈴鹿高専3年　電子情報工学科
ロボコンのプロジェクトリーダー（部長）をしています（執筆時）
2021全国大会でペットボトルを飛ばしてたロボットの制御とチームリーダーをしていました

# 前書き
記事を開いていただきありがとうございます。
最初に謝らなければいけない点が二つほどあります。
一つは偉そうにタイトルに「全自動ロボットの作り方」などと書きましたがおそらくこの記事を読んでもロボットは作れませんしこれを読んで作れる人は読まなくても作れます。
ただ、少しでもロボットの分野に興味を持っていただければいいかなと思い執筆しました。

二つ目ですが、同じくタイトルに「自己位置推定編」と書いてありますがお察しの通り続編の執筆予定はありません。

以上のことが了承していただける心優しい方、最後まで読んでいただければ嬉しいです。

※筆者はこの分野の専門家ではないので（特に後半のセンサー）それっぽく噛み砕いて書いていますが解釈違いやうまく意訳できていない場合があるので自分で調べることをお勧めします。

# 全自動ロボットとは
コントローラーを用いて操縦をしないロボットのことを自動ロボットと呼び、試合中すべてのロボットがスタート以外の操作を行わなくていいロボットを全自動ロボットと呼んでいます（諸説あり）
実は鈴鹿高専は全自動技術~~に憑りつかれている~~を得意としています


### メリット
- ヒューマンエラーが起きない
- 操縦者が練習する（時間を確保する）必要がない
- **強い**
- 操作のための電波障害をきにしなくてよい
    - 全国大会会場では~~NHKのせいで~~電波障害が発生してロボットが暴走・停止するケースが多発します
   
### デメリット
- デバッグに膨大な時間を要する
- 制御が難しい
- 誤動作するともうリカバリーできない

## 製作手順（一例）
1. ロボット（機体）と回路を作る
1. 自己位置を推定する
1. とりあえず動かしてみる
1. 経路とシーケンスを考える
1. プログラムを書く
1. デバッグする
1. 動く



# 自己位置推定とは
>
自己位置推定とは、ロボットが今どこにいるのかを推定することである。 これには、動作開始地点からの位置をエンコーダーやGPSのセンサーで把握する方法や、自動運転においては、走行エリアの大きなマップの中で自車がどこにいるのかを搭載しているセンサーで補足することが行われる。
(https://www.zmp.co.jp/knowledge/words/s01#:~:text=%E8%87%AA%E5%B7%B1%E4%BD%8D%E7%BD%AE%E6%8E%A8%E5%AE%9A%E3%81%A8%E3%81%AF,%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E8%A1%8C%E3%82%8F%E3%82%8C%E3%82%8B%E3%80%82)
>

らしいです。
要はロボット自身が自分がどこにいるのかを把握するための手段とかを呼びます。

手動で操縦する場合、操縦者がロボットがどこにいるかを目で見ながら操作することができますが自動ロボットの場合そうはいきません。ロボットに自身がどこにいるかを知るすべを授けてあげる必要があります。

※ここでは高さ方向が無い二次元平面上で話を進めます


物体の位置は

- X座標
- Y座標
- 回転

であらわすことができますよね？
なのでこの三つの要素を知ることができれば自己位置が分かったことになります。

求めるためにはいくつかのセンサーを用います
ここでは代表的なものについて紹介します

## センサーの種類
### ロータリーエンコーダー（オドメーター)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1858205/a0b4a95b-d628-ba91-16f3-50f77bf65371.jpeg" width="250">
界隈でロリコンと呼ばれてるやつです
軸をくるくる回すと回転角度が測れるので積算することで移動距離を計算します。

使用するときはエンコーダーにタイヤを付けて地面に押し付けておきます
そうするとロボットの動きに合わせてタイヤが回転して計算から自分の位置を求めることができます。

### ジャイロセンサー
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1858205/17b22b82-7924-bb98-9f07-7a31f95fe415.jpeg" width="250">
別名 **角速度センサー** と呼ばれます。(加速度センサーとは違います）
軸まわりの角速度を取得することができます。
角速度を積分（積算していく）することで基準角度からそれだけ回転したかを知ること
ができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1858205/063b69f3-893d-55b5-c97a-0cf622f83464.png" width="250">

### レーザー距離計
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1858205/061a81ec-133e-b1e5-0761-309197773adf.jpeg" width="250">
レーザーを照射して反射して帰ってくるまでの時間を計測し、壁などとの距離を計測します。
あらかじめ壁などの位置関係がわかっている場合、こういった距離センサーを使用することができます。

### Lidar
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1858205/34cd8395-4a91-2d19-cea6-353b80971739.jpeg" width="250">
レーザー距離計は一次元のものを指しますが、Lidarはそれを二次元・三次元にしたもので周囲の物体の形状や距離を検出することができます。
壁の距離などから自己位置を検出することができます。
ロボットや自動操縦の分野において、SLAMと呼ばれる技術に使われることが多い。
>SLAM（スラム）とは、自己位置推定と環境地図作成を同時に行うことを言う。 正式名称は、Simultaneous Localization and Mapping。 ... 同時に移動体の移動量の推定を逐次的に行うことで環境地図上での自己位置推定も行われる。


### Visual SLAM
センサーの種類ではなく手法の話になりますが、先ほど話したSLAMをLidarではなくカメラを用いて画像情報から自己位置を取得する手法です。近年ドローンや無人搬送車などに使用されています。　一般的にセンサー自体が高価になるLidar SLAMと違い、安価なカメラを使用することができることにもメリットがあります。

# まとめ
このように自己位置推定にはいくつかの方法やセンサーがありますが、要求される条件（フィールドの状況、ロボットの速度、正確性など）によってこれらの手法を選択します。

センサーを用いて計測したデータを正しく計算し検証することで実際に使えるデータにすることができますが計算式が大量に並び誰でも幸せにならないと思ったのでここでは省略します。~~ただのセンサー紹介じゃねぇか~~

拙い文章でしたがここまでお読みいただきありがとうございました。