オープンキャンパスプロジェクト2011
Beauto Balancer Duoによる二輪倒立ロボットプロジェクト2011
(厚木・有江・伊藤・竹内・田中)
目次
はじめに
目的
Beauto Balancer Duoとは?
プログラミング環境
動作説明
PID制御
デモンストレーション
はじめに
2011年7月24日に行われた宇都宮大学オープンキャンパスにて, 平田研究室では二輪倒立ロボットの実演をしました。 このページではオープンキャンパス当日の様子や, 二輪倒立ロボットの製作にあたった学部4年生による実演内容を紹介します。
目的
本プロジェクトでは,倒立をしたまま走る二輪ロボットを用いたレースを行いました。 これを通じて,モノを"制御"するためのしくみや, 実際に動かそうとした際に生じる問題などを学び, また,手動で操作を行うロボットとレースを行うことで, 自動制御の性能や重要性を体験してもらうことを目的としました。
Beauto Balancer Duoとは?
本プロジェクトでは,
Beauto Balancer Duo
という倒立振子制御学習教材を用いました。
Beauto Balancer DuoとはVstone社が開発したロボット製作モジュールです。
2つのセンサ(ジャイロセンサとロータリーエンコーダ)の入力値を用いて車輪を制御する
モータの出力値を調整することで,不安定な倒立振子を安定して立たせることができます。
またオプションパーツとしてライントレース用センサや無線操作用のコントローラを取り付けることが出来ます。
<今回使用したセンサ>
・ジャイロセンサ … 角度や角速度を検出
・ロータリーエンコーダ … モータの回転角を検出
・ライントレース用センサ … 反射した光の量を検出
また,Duo本体に受信機を取り付け,付属のコントローラを使用することで,
Duoを倒立させたまま任意の方向に移動させることも可能になっています。
プログラミング環境
今回はHEW(High-performance Embedded Workshop)というプログラミング環境を用いてプログラミングを行いました。
エディタ,コンパイラ,エミュレータなど組み込みアプリケーション開発に必要なルネサス製ツールを統合したフレームワークで,それらのツールが互いに使いやすくなっています。
このツールを用いることで,マイコンのプログラミングをC言語で簡単に行うことが出来ます。
以下で説明するプログラムはVstone社のBeauto Balancer Duo製品ページのC言語サンプルソース
「倒立振子」一式よりダウンロードした2wheels_Duoというプログラムを改変しました。
動作説明
今回のデモンストレーションでは,機体は床に描かれた黒いラインに沿って走行するようにプログラムされています。 まずはコースについて説明します。
コース
白い紙の上に黒いビニールテープ(幅19mm)とピンクの画用紙でコースを作成しました。
コースは直線とカーブ,S字クランクによって構成されています。 黒いラインが自動制御された機体用のレーンとなっており,センサーを用いることでラインを感知し,それに沿うように走行します。 ピンクのラインは手動操作を行う機体用のレーンとなっており,手動操作する機体はセンサーの代わりに 操縦者が目視でこのラインに沿うように操作を行う必要があります。 また,手動操作側のレーンにはショートカットコースが設けられています。ショートカットコースは通常のコースよりも細く作られて いるため,ラインに沿って走行することが難しくなっています。 参加者は走りやすい通常コースと走行距離の短いショートカットコースのうちいずれかを選択してレースを行うことができます。 |
ベースプログラムの流れ
step.1 各パラメータを初期値にリセットします。 step.2 ライントレースの動作をします。 step.3 電池の消耗による各モータの速度の低下を抑えるため, マイコンのA/D変換器で読み取った電池の電圧をフィードバックして電源電圧を一定に保つようにしています。 step.4 モータの出力の算出について,各モータの速度制御はエンコーダを用いてPD制御を用い, 倒立の角度制御はジャイロセンサを用いてPID制御を行っています。ここで,エンコーダは各モータに取り付けられており, マイコンの割り込み処理を用いてカウントを行いモータの回転角を検出しています。 ジャイロセンサはマイコンボード上に取り付けられており,傾き角をA/D変換器で検出しています。 ここで,手動制御を行う機体はエンコーダを用いた速度制御の代わりに,コントローラからの入力を基に速度を決定しています。 step.5 プログラム上では8bitの値を扱っているため,step.4より算出された値が8bitを上回ると, オーバーフローを起こしてエラーが生じてしまいます。そこで,それを防ぐために8bitを上回る出力がされると, 出力値を8bitの最大値に抑える処理を行っています。 step.6 転倒した時はモータの回転を止める必要があるので,モータスピードの最高速が1秒間続いた場合は 転倒とみなしてモータへの出力値を0にします。 step.7 これらの処理によって算出された値を左右のモータに出力しています。 |
PID制御
今回の発表では,レースの他に制御手法の中で一般的であるPID制御の原理を説明しました。
発表資料では時間の都合上簡単にまとめてありますが,詳しくは以下のような原理となっています。
- P(比例)動作……偏差の大きさに比例した出力を出す『即応追従』
- I(積分)動作……過去の偏差の累積値に応じた修正量を出す『継続追従』
- D(微分)動作……偏差が大きくなる前に目標値に戻すよう動作『予見追従』
P制御
ジャイロセンサからの出力値θと目標値θ*との偏差(θ*-θ)をゼロにするように制御をします。 しかしP動作のみではモータの動特性に対応できないため,出力が振動的になったり発散してしまいます。PI制御
P制御では取り除くことができないわずかなずれを,偏差を積分し累積することで取り除きます。 しかしI動作はある程度時間が経過しないと働かないため,出力値を目標値に戻すために時間がかかります。PID制御
I制御で遅れてしまった応答を,D制御により偏差の変化量を考慮することで目標値にすばやく収束させます。デモンストレーション
デモンストレーションとして行ったレースのルールは以下のようになっています。
ルール
1.参加者1名が手動操作するDuoを用いて自動制御されたDuoと定められたコースでレースを行う。2.自動制御されたDuoは両車輪がラインから外れる。または、転倒した場合失格とする。
3.参加者が操作するDuoは操作が難しいことも考慮し両車輪がラインから外れても失格にはしない。 しかし、あまりにも大きくコースから外れたり、他のマシンを妨害するようであれば強制的にコースへ戻す。 また、参加者はマシンが転倒してもその場所からのからやり直しを認める。
4.スタート時に1台でも転倒、コースアウト等をしてしまった場合はやり直しとする。
5.参加者がショートカットコースを通った場合などに,他のマシンと接触,転倒した場合には 接触した側,された側双方がその場からやり直すことを認める。
オープンキャンパスで使用した発表資料はこちら(PDFファイル)
レースの様子はこちら(動画ファイル)