東京工業大学 ロボット技術研究会

東京工業大学の公認サークル「ロボット技術研究会」のブログです。 当サークルの日々の活動の様子を皆さんにお伝えしていきます。たくさんの人に気軽に読んでもらえると嬉しいです。
新歓特設ページ        ロボット技術研究会 HP        ロボット技術研究会 twitter公式アカウント

id研

「ロボット技術研究会」通称「ロ技研」は、その名前の通りロボットの制作や研究はもとより、電子工作や機械工作、プログラミングなどの幅広い分野にわたるものつくり活動を行っています。

カテゴリ一覧: loading

玉乗りロボット(4) 制御について

井土です。
玉乗りロボットがとりあえず動きました。
今回はその動画と制御についてです。

まずはこちらの動画をご覧ください。
4月の新入生歓迎展示でのデモの様子です。
一緒に映っているのは、
去年作ったNAND(74HC00)ロジックのみで作ったNAND計と後輩の作った電源装置です。




ふらふらしていたり、座布団を敷いていますがバスケットボールにちゃんと乗っています。
とりあえずはこれで完成です。

今回は今までに紹介してきた回路・機械を統合して、
どう制御しているかに焦点を当てたいと思います。
このロボットは下の図のような感じでセンサの値を使って制御をしています。

 ctrl

加速度センサとジャイロセンサからいい感じにx方向の傾きとy
方向の傾きを計算し、
PIDコントローラでその傾きが0になるようにxy方向それぞれへの出力(トルク)を計算します。
最後に、このロボットはオムニホイールを3つ使っているので
x,y方向の出力をオムニホイール×3の出力に変換してモーターに出力します。

ここに出てきたPID制御相補フィルタとは何でしょうか。
今回の玉乗りロボットの制御に関してはその2つが特徴であるので、どんなものかを簡単に説明します。


◯PID制御
まずPID制御とはフィードバック制御の一つの手法です。
そもそもフィードバック制御とは何なのでしょうか。

例えば今、モーターを10の速さで回す制御するとします。
自分がモーターを"10の速さ"で回そうとしていても、
外乱によって"7の速さ"でしか回っていないかもしれません。
そこでモータの速さをセンサで検出して目標値とのズレを考慮して制御するのが
フィードバック制御です。
今回の例では、目標値("10の速さ")とセンサから得られた実際の状態("7の速さ")
ズレは"3の速さ"なので、
そのズレ3が0になるように制御をします。

ズレた値を使ってそのズレが0になるようにするにはどうしたら良いのでしょうか?
そこでPID制御です。
色々な手法がありますが、PID制御はとても良く使われます。
(とある先生によると工業製品に使われる制御の9割がPID制御だとか)
PIDとは比例(P),積分(I),微分(D)のことで、ズレを比例,積分,微分した値を制御出力としてモーターなどに出力します。

pid

・比例(P)は今のズレを制御に反映
・積分(I)は今までのズレを制御に反映
・微分(D)はこれから起こりそうなズレを制御に反映 
  します。

この3つの成分には重み付けができ、それが
KP,KI,KDという3つのパラメータです。
これをうまく決めてやることで制御できるようにします。
制御対象をモデル化できればKP,KI,KDの値をある程度計算やシミュレーションで
決められるのですが、
今回はいきなり玉乗りロボットに実装して
パラメータを色々変えて試行錯誤することでいい感じの値を決めました。

一応限界感度法ステップ応答法といったPIDパラメータを決める手法がありますが、
うまくいかない場合はロボットの動きなどをよく観察してパラメータを調整していきます。 

イメージとしては
・P成分:不安定にならない程度になるべく上げる
・I成分:ズレが定常的に残るときに上げる
・D成分:ちょっとズレた時、すぐに戻したいときに上げる 

みたいな感じです。


◯相補フィルタ
3軸ジャイロから得られる角速度を積分すればそれ一つでロールピッチヨー全ての角度を得られそうですが、
センサの出力にオフセットが乗っていたり、温度変化でズレたり(温度ドリフト)、積分誤差で
正確な値を計算するのは難しいです。
そこで加速度センサも用いて最もらしい値を推定します。
加速度センサを使えば、重力の方向を計算することでヨー以外の姿勢角を知ることはできます。
ただ、並進運動をした時に並進加速度の分だけズレてしまします。

これらを見方を変えて、以下の様な仮定をします。
・ジャイロセンサの定常値はオフセットが乗っていたりするが、変化成分は正確
・加速度センサの定常値は正確だが、変化成分は並進運動が加わっている可能性がある


定常値は低周波成分であり、変化分は高周波成分です。
これらのセンサの特徴を活かして
加速度センサにはLPF(ローパスフィルタ)を掛けて低周波成分を取り出し
ジャイロセンサにはHPF(ハイパスフィルタ)を掛けて高周波成分を取り出して
この2つを足す。
ということをすると割といい感じの値が得られます。
comp_filter

相補フィルタとは、このように複数の信号にフィルタを掛けて
足しあわせ、より精度の高い計測を行う信号処理です。
(ただし任意の周波数においてフィルタの利得の和は1になるようにする) 

複数のセンサを組み合わせて精度よく計測する方法は
センサフュージョンとか言われていて、
他にもカルマンフィルタパーティクルフィルタなど色々あります。
今回は実験してみた結果、相補フィルタが一番いい感じだったので採用しました。 


現状の玉乗りロボットの制御はPIDパラメータを試行錯誤で適当に決めた適当制御です。
ロボットの物理モデルを解析したわけでもなく、よくわからないけど立っている状態です。
動画でもロボットはまだふらふらしていて、もっと安定化させたいと思っています。 
今度は現代制御理論を用いてちゃんと制御し、定量的に制御する予定です(秋か冬くらい)。 
 

玉乗りロボット(3) 機械工作

井土です。
今回は玉乗りロボットの機械部分についてです。

じつはフライスとか旋盤を使ってものを作るのは初めてなのですが、
ロ技研の詳しい人に教えてもらいながらでできちゃいました。
今回は製作過程を紹介していきます。

まず3DCAD(inventor)で設計します。
今回はボールに上手く接することが重要なので面倒臭かったです。(結局ずれた)

名称未設定

設計データを元にアルミを加工していくのですが、
ロ技研の部室にはHAKUというNCフライスがあるので、
CADでデータを作ると自動でアルミ板を削ってくれます。
47

これはモーターを斜めに固定する部品です。
31

こんな感じで部品が削り終わるので、折り曲げて組み立てていきます。
03
 
次はタイヤの軸部品です。
タイヤの軸部品はフライス盤・旋盤で加工します。
21

 18
 
そして合体
ちなみにタイヤはこれ http://store.kornylak.com/ProductDetails.asp?ProductCode=FXA357
モーターはこれ http://www.robotshop.com/en/pololu-12v-50-1-gear-motor-encoder.html
を使用しました。
22
このタイヤはオムニホイールと呼ばれるもので、
モーターの回転方向にはグリップしますが軸方向にはフリー回転するので、
3つのタイヤを三角形みたいに並べると全方向に移動できます。

前回紹介した制御回路を上に乗せて、玉乗りロボットが完成です。
01

 
次回は実際の動作と制御関連の紹介をする予定です。 

玉乗りロボット(2) 制御回路

id研の井土です。
まず玉乗りロボットの進捗ですが、とりあえずハードウェアは完成しました。
44


今回はロボットを制御するための回路について書きます。
こちらがロボットを制御する回路たち
 07

左から順に
モータードライバ(マイコンからの指令を増幅してモーターを動かす)
メインボード(マイコンとモータードライバ、センサなどをつなぐ)
マイコンボードSTBee(マイコンが載ってる) 
となっています。

◯マイコン・メインボードについて
スペック
・CPUにSTM32F103VET6(ARM Cortex-M3 72MHz)を使用
・3軸加速度と3軸ジャイロ(MPU6050)を搭載
・SDmicroカードを搭載(SPI通信+FatFs)
・Bluetooth 通信可能(SBDBTを使用)
・ロータリーエンコーダ(タイヤの回転を計測)を3個接続可能
・モーターを4個まで動かす信号を出力可能

SDカードが使えると、センサのログとかがパソコンでも読めるファイルで残せるので色々と捗ります。
Bluetooth機能はスマホとかで操作できるようにするためです。

メインボードは今回しか使わないので、ユニバーサル基板(秋月のBサイズ)で作りました。
そのため基板の裏面はこんな感じ
18


◯モータードライバ(iDriver)について
モータードライバは基板を外注してみました。
名づけて『iDriver ver1.0』
12V10Aのモーターが4個動かせます。

回路自体は特に工夫のない普通なやつです。
22

ここからパターンを設計して
15

Elecrowという基板製造サービスに発注すると
05

こんな感じできれいな両面のプリント基板が届きます。
今回は10cm×10cm以下のカテゴリで10枚発注しましたが、料金はこんなかんじです。
$23.9(製造費) + $9.14(送料) = $33.04
Seeed StudioのFusionPCBとだいだい同じくらいの値段ですが、
Elecrowは追加料金なしで基板に色を付けられるのはいいですね。 
運送に関しては郵便小包で頼んだので安いのですが、2週間くらいかかりました。 

あとははんだ付けをして完成です。 
秋月のBサイズのユニバーサル基板と重ねられるようなサイズになっています。
42

iDriver ver1.0は動かしてみて色々ダメなところがあったので、そのうちアップグレードします。


次回は機械部分について書きます。

玉乗りロボット(1) 概要・制御とは

id研の井土です。
実は先月、今年度のロボット技術研究会の部長になりました。 

それはさておき、今回の記事のテーマは
現在製作中の「玉乗りロボット」と「制御するとは」です。
 
まず、玉乗りロボットを作ろうと思ったきっかけでもある以下の動画を見てください。
 


これは東北学院大学の熊谷正朗先生が研究されているロボットです。
このロボットは傾きをセンサーで計測して、
傾かないようにモーターを回して制御しているので倒れません。
タイヤはオムニホイールという変わったタイヤを使っています。
 
12月頃に制御の勉強も兼ねて、動画のような玉乗りロボットを作ろうと思いました。

私が何か作り始めるときはだいたい
「作るのが面白そう」
とか
「完成したらかっこいい」 
が理由になっています。
 
現在は、理論的な部分と制御する回路がだいたい出来たところです。
機械部分(経験がほとんど無いので苦手)はこれから作っていきます。



さて、次は「制御する」とはどういうことかについてです。
それを説明するのに「手のひらに棒を乗せて倒れないようにする」例がよく使われます。
 
人間に
「棒が倒れないようにして」
と伝えれば、なんとなくので手を動かして棒を倒れないようにする事ができます。
 
しかし、ロボット(の頭脳であるコンピュータ)に
「棒が倒れないようにして」
と言っても彼らは理解できません。

そこで人間がで行っていることを数式などを使って厳密に表現してやります。 
image 
 
いわゆる人間のを数学的なモデルで表現し、
ロボット(コンピュータ)に命令していくことを「制御する」 ことだと私は考えています。
また、をいかに数式モデルにするかを研究するのが制御工学だと思っています。
 
玉乗りロボットも「傾かないようにする」ということを数学的モデルで表現して、
モーターをいい感じに回すことで倒れないようになっています。


次回は現在製作中の玉乗りロボットの回路部分について書きます。
ギャラリー
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • MakerFaireTokyo2017に出展します
  • たのしいロボット帝国 製作物紹介
  • たのしいロボット帝国 製作物紹介
  • たのしいロボット帝国 製作物紹介
記事検索
最新コメント