ロボコン制御中級
自動制御
自動制御とは
人が操縦しなくても勝手に判断して動いてくれるように制御する
目標
オムニを自動制御する
流れ
- 自動制御動画
- フィードバック制御
- PID
- 内界センサ
- 外界センサ
- 自己位置推定
- 自動制御基礎
自動制御動画
https://twitter.com/Kotakku_07/status/1213015087033667584?s=20
具体的な目標
「1m前に進んで、左に1m進んで、斜めに戻ってくる」 というプログラムをかけ
- センサ等で今どこにいるか調べる
- 目標位置を通り過ぎたら、戻る
- 目標位置に届かなかったら、ちょっと進む
フィードバック制御
適当に5秒、PWM30%とかで動かしても、1mぴったりとか正確にはできない

よって、センサの値をフィードバックすることにより、1mぴったりに移動する
フィードバック制御とは 結果を入力にフィードバックし、結果と目標の差によって、入力を調整する制御方法
例1: 水道の蛇口をひねりすぎて水が跳ねるので、ちょっと閉めていい感じにする 例2: FPSのエイムコントロール
フィードバック制御で有名な手法がPID制御である
PID
PIDとは
- P: Proportional (比例)
- I: Integral (積分)
- D: Differential (微分)
の3つの制御を組み合わせた制御手法である
![]() | ![]() | ![]() |
|---|---|---|
| P制御 | PI制御 | PID制御 |
| モーターのPID制御法より |
このようにいい感じにいい感じに目標値に収束させることができる
また、いい感じのGIFがある
| PID制御アニメーション |
| Wikipedia Commonsより |
PIDを数式でモデル化すると以下のような感じになる は時間、は目標、は結果とする
偏差は以下で表される
P制御の入力は以下で表される
PI制御の入力は以下で表される
PID制御の入力は以下で表される
そのままである
内界センサ
IMUやオドメーター(エンコーダ)は内界センサと呼ばれる、ロボット本体の情報を計測するセンサである
外界センサ
カメラや赤外線センサ、超音波センサなどは外界の情報を取得するため、外界センサと呼ばれている
自己位置推定
PID制御により、ロボットの位置わかれば、その位置まで移動させることができることが分かった しかし、肝心の位置はどうしたら手に入れられるのだろう センサから持ってくればいいと思う人もいるだろうが、位置情報の取得方法にはいくつかある
弊部で通常、使っているのはIMUとオドメーターを使用した自己位置推定である
IMUは角速度と加速度などを計測できるセンサである ロボットの**角度()**を計算するのに使用する
**オドメーター(計測輪)によりX軸とY軸の移動距離(m)**を計算する 幣部ではエンコーダー、オムニホイール、リニアガイド、ばね等を使用し、オドメーターというものを自作している
![]() | ![]() |
|---|---|
| MPU6050 | 自作オドメーター |
| SWITCHSCIENCEより |
IMU1つと、 オドメーターX軸Y軸それぞれ1つずつにより、 オドメトリ(自己位置)を推定している
IMU
IMUセンサは加速度と角速度を得られる。 一般的にはこの2つをカルマンフィルタなどでセンサフュージョンし、角度を算出している。 個人的に気に入っているのはMadgwickフィルタである。 しかし、簡単に角度 () を出す方法として、角速度 () を積分する方法が使用される。 弊部では競技時間が概ね3分であるため、積分誤差があまり発生しないと考え、この方法を使用している。
オドメーター
オドメーターはオムニとエンコーダーで、オムニの移動距離を計測するものである。 エンコーダーより回転数 () を取得し、オムニの外形 ( )倍にすることで、移動距離 (L) を算出できる。
センサフュージョン
IMUとオドメーターの使い方はわかったが、これだけでは自己位置は推定することができない。 IMUとオドメーターのセンサフュージョンを行う必要がある。 情報を統合することで、XY座標系での現在の自分の位置を計算する。
まず、エンコーダーの回転数の値が、で変化した分をそれぞれ、とする。 オムニの直径をとする。 これからを求める。をロボットのX軸を測る方に配置していた場合、
となり、Yaw角速度 (rad/s) を使用して、
と計算できる。 このようにXY座標を計算し、はさっきの積分の式の通りに計算すれば、ロボットに必要な座標情報がすべて求まったことになる。
![]() |
|---|
| 自己位置推定 |
自動制御基礎
IMUやオドメーターにより、オドメトリを取得し、PID制御によっていい感じに制御せよ!





