オープンキャンパスプロジェクト2010
Beauto Balancer Duoによる二輪倒立ロボットプロジェクト2010
(金澤・鈴木(康)・田代・横塚)
目次
はじめに
目的
Beauto Balancer Duoとは?
プログラミング環境
動作説明
PID制御
実演内容
各走行モードの紹介ページ(別ページ)
レースの様子はこちら(動画ファイル)
はじめに
2010年8月1日に行われた宇都宮大学オープンキャンパスにて, 平田研究室では二輪倒立ロボットの実演をしました。 このページではオープンキャンパス当日の様子や, 二輪倒立ロボットの製作にあたった学部4年生による実演内容を紹介します。
目的
本プロジェクトでは,二輪ロボットが倒立をしたままレースをすることを目的としました。 これを通じて,モノを"制御"するためのしくみや, 実際動かそうとした際に生じる問題などの勉強, また作製したロボットを紹介することで高校生などに興味を持ってもらうことを目的としました。
Beauto Balancer Duoとは?
本プロジェクトでは,
Beauto Balancer Duo
という倒立振子制御学習教材を用いました。
Beauto Balancer DuoとはVstone社が開発したロボット製作モジュールです。
2つのセンサ(ジャイロセンサとロータリーエンコーダ)の入力値を用いて車輪を制御する
モータの出力値を調整することで,不安定な倒立振子を安定して立たせることができます。
またオプションパーツとしてライントレース用センサや無線操作用のコントローラを取り付けることが出来ます。
今回使用したセンサ>
・ジャイロセンサ … 角度や角速度を検出・ロータリーエンコーダ … モータの回転角を検出
・ライントレース用センサ … 反射した光の量を検出
プログラミング環境
今回はHEW(High-performance Embedded Workshop)というプログラミング環境を用いて
プログラミングをおこないました。
エディタ,コンパイラ,エミュレータなど組み込みアプリケーション開発に必要なルネサス製ツールを統合したフレームワークで,それらのツールが互いに使いやすくなっています。
このツールを用いることで,マイコンのプログラミングをC言語で簡単に行うことが出来ます。
以下で説明するプログラムはVstone社のBeauto Balancer Duo製品ページのC言語サンプルソース
「倒立振子」一式よりダウンロードした2wheels_Duoというプログラムを改変しました。
動作説明
今回のプログラムでは,コースに合わせて速度を変化させています。まずはコースについて説明します。
コース
白い紙の上に黒いビニールテープ(幅19mm)でコースを作成しました。
コースは緩やかなカーブと直角,直線で構成されています。
また今回はあらかじめコースの形状をプログラムしてあるロボットと,
マーカーを読み取ることでコーナーの位置を知ることができるロボットに分けてレースをしました。 ロボットの速度変化の方法は,倒立振子とライントレースをするプログラムをベースに2パターンの手法を考えました。 まず,以下でベースプログラムの概要を説明した後,各走行モードについて説明します。 |
ベースプログラムの流れ
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 これらの処理によって算出された値を左右のモータに出力しています。 |
走行モードの差別化
オープンキャンパスで発表を行うにあたり,1つの動作をさせるのにもさまざまな制御方法があることを知ってもらうために, ライントレース用センサの特徴やベースプログラムを生かして以下の2種類のライントレース方法を考えました。- 設定A(フィードバック)…ライントレースセンサからの信号の状態に応じてスピードを変化させる方法
- 設定B(フィードフォワード)…もともとコースの形を知っているものとして, 設定時間に応じてスピードを変化させる方法
レースの様子はこちら(動画ファイル
PID制御
今回の発表では,レースの他に制御手法の中で一般的であるPID制御の原理を説明しました。
初めて聞く人には理解しづらい部分もあると考え,実際にロボットを動かしながら紹介することにしました。
- P(比例)動作……偏差の大きさに比例した出力を出す『即応追従』
- I(積分)動作……過去の偏差の累積値に応じた修正量を出す『継続追従』
- D(微分)動作……偏差が大きくなる前に目標値に戻すよう動作『予見追従』
P制御
ジャイロセンサからの出力値θと目標値θ*との偏差(θ*-θ)をゼロにするように制御をします。 しかしP動作のみではモータの動特性に対応できないため,出力が振動的になったり発散してしまいます。二輪倒立ロボットをP制御を用いて倒立させた動画はこちら
PI制御
P制御では取り除くことが出来ないわずかなずれを,偏差を積分し累積することで取り除きます。 しかしI動作はある程度時間が経過しないと働かないため,出力値を目標値に戻すために時間がかかります。二輪倒立ロボットをPI制御を用いて倒立させた動画はこちら
PID制御
I制御で遅れてしまった応答を,D制御により偏差の変化量を考慮することで目標値にすばやく収束させます。二輪倒立ロボットをPID制御を用いて倒立させた動画はこちら