ロボット基礎技術
ここまで、ロボットの動作を検討するための、代表的な理論を扱ってきました。 しかし、ロボットを実現するためには、理論に加えて様々な技術が必要になってきます。 そこで、ここでは、ロボットを構成するための基本的な技術にふれます。
ロボットを構成する要素は、大きく分けて三つです。
  • 骨格等構造部・駆動・機構要素
  • センシング要素
  • 制御・情報処理・判断要素
別の見方では、
  • メカ(構造、機構、駆動部品、センサ保持部など)
  • 電子回路(駆動回路、センサ回路、マイコン、コンピュータ周辺回路)
  • ソフトウエア(制御、情報処理、判断等)
とも分けられます。 これまで扱ってきた理論は、主に三つ目のソフトウエア的な部分に組み込まれ、またロボットを設計するときに必要となるものであって、実際につくるとなると、さらに多くの知識、経験を動員する必要があります。
たとえば、車輪移動型ロボットを例にすると、作るまでには
  • 開発目的の設定、仕様決定
  • 方式選定、モータの選定、速度、トルク、車輪直径、車輪間隔、駆動系設計、取り付け方法、部品製作、組み立て
  • モータ駆動回路設計、コンピュータとの入出力部分の設計、製作
  • センサ種類選定、センサ周辺回路の設計製作、センサ取り付け部の設計製作
  • モータ制御方法の決定、ソフトウエア実装
  • センサ情報処理方法の決定、ソフトウエア実装
  • ロボット運用ソフトウエアの基盤設計および実装、ロボット動作決定部の設計および実装
などなどが必要となります(実際には簡単には区分できず密接に関連するものが多い)。 もちろん、ロボットの規模によって異なりますし、一つ決めると連鎖して決定される要素もありますが、たったモータ2個のロボットであっても、様々な要素がでてきます。

以下では、それぞれの要素について簡単にまとめていきます。

ロボットに動きを産み出す駆動装置をアクチュエータといいます。

出力を得る方向の分類:

  • 回転:一般的なモータ類
  • 直動:リニアモータ、油圧シリンダ、ソレノイド
一般に、回転出力のものはその回転回数に制限はありませんが、ぜんまいのようなバネ系の要素が入っているもの、バネ+電磁石のような構造のものは往復運動になります。 直動については、一般には往復運動です。 石川研のリニアパラメトリックモータのようなモータ、リニア地下鉄のモータなどはリアクションプレート(コイルと対になる金属板)さえあれば一般的な感覚の「往復」のサイズよりも長い運動ができます。

エネルギー源の分類:

  • 直流電流:直流モータ、直流サーボモータ、ソレノイド、ボイスコイル(スピーカ、光学ドライブのへッドなど、コイル+磁石系)
  • 交流電流:交流モータ、誘導モータ、交流サーボモータ、リニアモータ
  • パルス電流:ステッピングモータ
  • 電圧(静電気力):超小型モータ、DMD(DLP、ディジタル映画のプロジェクタなど)
  • 油圧:油圧シリンダ、油圧モータ
  • 空気圧:エアタービン(歯医者の工具など)、空気圧シリンダ
いまの主流は電気で、産業用には交流系が主流になっているようです。 電気を使うときは一般にコイルで磁力にして、最終的には磁気的な吸引反発で力をだしますが、電圧を直接力として使う静電気力は、「小さな世界」でしばしば用いられます(磁気よりも支配的になるため)。 油圧は大出力を使うところでもっぱらつかわれます。

動作のリニアさ:

  • かなりリニア:サーボモータ、ボイスコイル型アクチュエータ、油圧(サーボバルブ併用)、空気圧(圧縮性を考慮)
  • そこそこ単調傾向:ふつうのモータ
  • マクロにはリニア、ミクロには非リニア:ステッピングモータ
  • 非リニア:普通のソレノイド(スイッチオンのみ)
制御のしやすさを考えると、線形さが非常に重要です。 そのため、ロボットに用いるモータは、おもちゃにつかう模型用マブチモータとは異なり、線形性を重視した設計になっています。 具体的には、マブチモータが3極モータ(コイルが3セット)なのに対して、サーボモータは極数が大幅に増やしてあったり、コイルを巻く鉄芯の形の設計、コイルの巻き方を工夫してあったりします。 このようなモータは「サーボモータ」と区別して呼ばれます。 なお、サーボモータという場合、電子回路もセットで、ラジコンで使われる「ラジコンサーボ(モータ)」を指すことも最近は増えてきたので、意識して区別する必要があります。
(サーボ制御で使うモータ/サーボ制御されたモータ)
リニアじゃないのはロボットに使えないかというとそうでもなく、例えば手先を開く/閉じるだけでいい場合などは単純にオンオフだけできればいいアクチュエータを使うことがあります。
制御しやすいように線形性を重視したモータで、直流サーボモータと交流サーボモータがあります。 交流サーボモータは回転に応じた交流電流を適切に流す必要があるため、扱いがやっかいで、専用の駆動回路とセットで使うことが一般的ですが、直流サーボモータは直流電流を流せばいいだけなので、自前の適当な回路でも簡単に回すことができます。
ちなみに、たとえば24V用のサーボモータが乾電池一本でもゆっくりですがなめらかに回るくらい、リニアです。

電磁石系のアクチュエータ全般に言えますが、その出力トルク(力)は電流に比例します。 直流サーボモータの基本となる式は、

と表されます。ここで、比例定数 KTはトルク定数などと呼ばれます。

磁界の中でコイルを動かすと、コイルには電圧が発生(誘導)します。 モータに電源をつなぐかわりに、モータを外部から回転させると電気が発生する=発電機になるということはこれによります。 これはモータに電流を流して回転させているときにも同じことが起きていて、逆起電力と呼ばれています。逆起電力は

と表され、回転角速度(一般には、1分あたりの回転数RPMでスペック表記)に比例した電圧が発生します。

モータを電子回路的に見ると、コイルなどの電気抵抗、コイルのインダクタンス成分、それに逆起電力を発生する電池が直列につながったように表すことができます。 その端子電圧は

となります。ここで、R,Lはモータの等価的な抵抗、インダクタンス成分です。

以上の3つの式を組み合わせるとモータの特性を説明できます。
たとえば、止まっているモータにある電源をつないだとき、キュィィィンと加速して、ある回転数に落ち着きます(こういう基本的なところはサーボモータもマブチモータも違いなし)。 これは、電源をつないだ直後は角速度が低いため、モータのコイルにはほぼ V/Rの電流が流れ(コイル分の影響は一般に瞬間的に大きいのみ)、KT倍のトルクが発生します。 このトルクで、モータ自身、その先のメカを加速します。 その結果、徐々に逆起電力が増加してきます。 最終的には、「摩擦力とトルクが釣り合う電流」にRを乗じて電源電圧からひいた電圧=逆起電力となるところで、加速が止まります。

モータというと、なんとなく電圧を入力する部品に思えますが、このように電流を入力する部品です。 そのため、モータを本格的に駆動する場合には、電流でモータを駆動できるような回路をつくります(電流を検出して、目的値になるように電圧をフィードバック制御)。 コイルがいくつかあり、それに順次電流を流すと、一定角度ずつ回転するモータです。 コイルごとにはパルス的な電流がくるので、パルスモータとも呼ばれます(他、ステップモータなど)。 よくあるスペックとしては、コイルが4本、1ステップ1.8(=360/200)度などです。

このモータの特徴は、狙った角度の回転が簡単なことです。 コイルを一回切り替えるごとに1ステップずつ回転するため、目的の角度をステップ角度で割った回数だけ通電切り替えをすればいいわけです(切り替え速度を決めれば、速度を決められる)。 それに対して、電流を流すと回る普通のモータは、別途回転角度センサをつけて、それをフィードバックしなければ目的の角度を出すことはできません。 このフィードバックが要らない(オープンループ)、狙った角度、速度が出しやすいという特性を活かして、駆動系の簡略化を測る目的でステッピングモータが使われることがよくあります。 身近な例ではプリンタのへッドを左右に動かしたり、紙送りをするところにはステッピングモータがよく使われます。
そのほか、一つのコイルに電流を流しっぱなしにすれば、一定の角度でホールドできるという特徴もあります。また、回転速度は遅いかわりにトルクが案外大きいため、減速系を省略できることもあります。

ただし、欠点もあります。

  • 必要な出力を得るために、大きく、重くなりがちである。
  • エネルギー効率がわるい。
  • 脱調する。
最後の脱調というのはコイルの切り替えにトルク不足などで回転が追い付かない状態になったとき、ごそっと目的の角度からずれがでることです。 条件によっては回転が停止します。 ステッピングモータはオープンループで使うために採用されることが多く、センサがついていません。 その場合、脱調したことも操作側はしらないことになります。 このような欠点のため、ステッピングモータは、電力に余裕があり、多少重くともかまわず、それほど負荷が大きくない用途に用いることが一般的です。 ただ、扱いが非常に簡単であるため、簡単に車輪移動ロボットを作る際などに用いられます。
リニアモータは、一般にモータというと回転式なのに対して、リニア(直線の)モータです。 また、モータならその駆動原理を問わずに直線にしたらリニアモータです。 このあたりは非常に社会的には誤解を招いているところで、仙台市で導入しようとしているリニア地下鉄が磁気で浮いたり地上側にコイルをたくさん並べるから高くなると主張する人がわりといたりします。 原因はマスコミが「リニアモーターカー(磁気浮上式鉄道)」なんて書きまくったことでしょうが...。

リニアモータにもいくつかの方式がありますが、

  • 移動側が永久磁石(超伝導電磁石)、固定側にコイルをならべて、順次切り替えてひっぱる
  • 移動側にコイル、固定側に誘導電流を発生させる板を置き、コイルで発生した交流磁界と、誘導した電流による交流磁界の吸引反発を利用
の様式がメジャーです。

リニアモータの特徴は、「最初からリニア」ということです。工作機械など、直線運動が要求される機械は案外あります。 従来は、回転式のモータとボールネジ、台形ネジなどの回転−直動変換機構で構成していましたが、こういうメカが介在するとどうしてもガタがでます(ガタは必須)。 そうすると動作にずれがでたり、力のかかり方の変化のたびにガタの分だけ動いたりと不都合がでます。 最初からリニアならこういう問題はおきません。 そのため、工作機械などで使われ始めています。
欠点は、現在のところ出力のわりに重く、制御装置も専用のものが必要であるため、ロボットにつむにはまだ不適であること(たとえば、パトレイバーのAV98式は超伝導リニアモータ(SCLM)駆動なんですけど)があげられます。また、回転式のモータはしっかり入れ物にいれられますが、リニアモータは一般に剥き出しなので、たとえば工作機械の場合は切屑がひっつかないようにとか気を使うことです。

ちなみに、鉄道にリニアモータが使われる理由はちょっと違います。 現行の鉄道では、駆動も制動もレールと車輪の摩擦力に頼っています。 両方とも鉄であるため、耐久性も走行抵抗も低く押さえられますが、鉄同士の摩擦はそれほど大きくなく、すべらないようにするには駆動力、制動力に制限がでます。そのため、あまり急勾配(人間や自動車にはあまり急ではない)にもできません。また、高速運転する場合も空気抵抗に打ち勝つだけの駆動力を出すのがたいへんになります。 これがリニアモータになると、車輪は支えるだけでよくなり、駆動力はダイレクトに発生させるので、こういう制約がなくなります(いわゆる磁気浮上のリニアモーターカーは加えて、浮かせることで地上との摩擦を低減)。 そのため、町中からいきなり青葉山を上ることで急勾配になる仙台市の地下鉄東西線では、従来のものより有利と考えられています。 ついでに、車輪もある程度小さくできるし、床下の機器も小さくできるしで、トンネル断面が小さくなって安上がりという効果もあるようです。 油圧というのはお馴染の油圧です。 ただ、建築機械のようにレバーで入切するだけではなく、制御用にはサーボバルブというリニアに細かな制御の効くバルブで油の圧力制御をします(電流に比例とか)。 電気式モータの高性能化とロボットの自立指向化に伴い、最近はロボットのアクチュエータとしては見掛けなくなってきましたが、用途によっては使われています。

油圧の特徴は、油圧の発生源と、実際に動作をするアクチュエータの部分を分離できることです。 この油圧の発生源であるポンプが大きく、重くなり易いためにロボットに積むことは容易ではありませんが、「積まない」ことにしてしまえば、アクチュエータの単位重量辺りの出力が大きなものと見なすことができます。 もちろん、油圧のホースをロボットまで引っ張る必要があるので、自立ロボットにはなりません。 この単位重量辺りの出力の大きさのため、以前は人型の歩行ロボット(早稲田大学)につかわれたこともありますし、本体を軽くする必要のある跳躍ロボットKenken(東北大学)にも採用されています。

同じように圧力を使うものに水圧、空気圧があります。 水圧は本質的には油圧と同じです(吹き出しても汚れないけど、ものが錆びる)が、空気圧は異なります。

  • 油は圧縮されないが空気は圧縮される
    →油圧の場合はかっちり力が伝わる、空気圧は力の伝達に遅れがでたり、圧縮される分だけ出力の力が下がる
    →空気圧は制御の点から扱いにくいものの、人に当ったときなどに適当に衝撃吸収してよけてくれる
  • 油はもれるといや、空気はもれても汚染しない
  • 油は油を戻すためのパイプも必要なのに対して、空気は使ったら大気中に捨てればいいので行きのパイプだけでいい
    ついでに、その空気を冷却にも使える
ロボットではあまり使いませんが、空気圧はタービンと組み合わせると他のアクチュエータに比べて高速回転が可能です。 歯医者の削る機械はあの先に小さなタービンが入っていて高速回転します。 また、機械工作用でも、高速切削用にそういうタービンがあります。
モータの動きは一般にそのままでは使えないことが多く、何らかの伝達機構を介在させます。 特に、多くのサーボモータは回転数は高い一方、トルクは小さめなので、なにか作業をさせる場合には減速機で回転数をトルクに変換する必要があります(回転数×トルク=動力=電力)。
(特殊な例では高トルクに設計したダイレクトドライブモータという品種もあり。高めの洗濯機などにもつかわれている)

単純に回転運動のまま減速するには

  • 平歯車減速:平行軸
    1段で減速できる比率があまり大きくないため、大きく落とすには何段か組み合わせる必要がある。
  • 遊星歯車:同軸
    平歯車を複数種組み合わせて、1段で大きく減速できるようにした歯車。 入力軸と出力軸が同軸になることが特徴=多段に組み合わせることも容易。
  • ウォーム減速機:直交軸
    歯車とウォーム歯車(ネジ状の歯車)を組み合わせたもので、1段で大きく(例えば1/40など)減速できることが特徴。ただし、これについてはバックドライバビリティが皆無に近いのでロボットにつかうと問題がおきることがある。
  • ハーモニックドライブ:同軸
    特殊な減速機。同軸でかつ一段で大きな減速ができ、バックドライバビリティもあるという非常に便利な減速機であるため、最近の歩行ロボットにはよく使用されている。
    参考:ハーモニックドライブの原理@ハーモニックドライブシステムズ社
などをつかいます。

運動を変換しつつ減速する場合には

  • ボールネジ・台形ネジ:
    ネジとナット。ナットを回らないように押さえつつ、ネジをまわせばナットが直動する。 台形ネジはネジ山の断面が台形、ボールネジはネジ、ナットともに半円の溝が掘ってあって、間を玉が転動する(ボールベアリングのように)。 ボールネジは台形ネジより高価であるが、摩擦がすくなく、ガタも少なく、伝達効率もよい。
  • クランクスライダ機構:
    直線−回転運動の変換機構としてメジャー。 エンジンのピストンの運動とクランクシャフトの運動の変換にもつかわれる。 ただし、回転と直動の移動量の関係が非線型になるのが難点。 また、クランクの角度によって減速比が変化するのも難点であるが、うまく設計すれば効果的に使えることがある。
などがあります。
このようにいろいろあるわけですが、目的やスキルに応じて、どんなアクチュエータ、機構を使うか選んだら、今度はその詳細な選定が必要です。

アクチュエータについては、目的の出力に応じて選定します。 サーボモータを採用する場合は一般にトルクが足りなくて回転数が高いということになりますので、減速系をつけることが前提です。 選定の目安ですが、駆動対象の必要とする動力、つまり最大速度×最大力or最大角速度×最大トルクをだせるモータを選定します。定常的に必要な場合は定格値を基準に、最大出力がときどき必要になるような条件の場合は定格値の2〜3倍程度(瞬間出力)を基準に選定します。 なお、このとき、減速機の伝達効率を加味する必要があります。 また、モータの専用駆動回路をいっしょに買ってきて使う場合はいいのですが、自作する場合は回路が供給できる電圧、電流によっても制約を受け、モータの性能が十分発揮できないことがあるため、注意が必要です(逆に、制約にならない回路を作るときは保護機能に注意)。

機構については、速度が問題になることはあまりなく、減速比、力、トルクに耐えられるかが主な条件になります。 まず、モータの回転、トルクと駆動対象での条件を合わせるために減速比を設定します。 加えて、減速機にはかならず許容トルクなどがあるため、ロボット全体の仕様から概算される最大出力トルクに余裕を見て選定します。 もっとも、許容トルクの大きな減速機は一般に重く、その分ロボット全体が重くなって必要な出力が大きくなってと悪循環に陥ることはよくあります。

こういったことを考慮して、ロボットのメカを設計する必要があります。

ロボットを作る場合に、センサが全くないというケースは稀です。 ラジコンサーボのような、センサ&制御回路内蔵の賢い?アクチュエータを使用する場合や、ステッピングモータを使った簡単なロボットの場合はセンサがないこともありますが、多少でも状況判断を加える場合は、その情報を得るためのセンサが必要になります。

センサは大きく内界センサと外界センサにわかれます。 内界センサはロボット自身の状態を知るためのセンサで、外界センサはロボット外の情報を知るためのものです。 ロボット自身を知るための内界センサは以下のようなものがポピュラーです。

  • 関節角度位置センサ(ロータリー/リニアエンコーダ、ポテンショメータ、スイッチ)
    ロボットの関節そのもの、もしくは駆動用のモータに角度or位置センサをとりつけ、関節角度からロボットの姿勢(リンクの状態)を求めると同時に、各関節が目標角度になるようにフィードバック制御を行う。 屈曲関節に取りつける場合はポテンショメータが使われることもあるが、回転数が多い場合やモータに取りつける場合にはロータリーエンコーダが常用される。
    一般的なロータリーエンコーダ(インクリメンタル型)は電源投入時からの相対的な回転角度しか測定できない。また、ステッピングモータを用いる場合も初期角度は不明である。 そのため、これらを使う場合は一般に基準点を示すスイッチ(原点スイッチ)を取りつける。
  • 姿勢角度センサ(ジャイロ、傾斜計、加速度計、地磁気センサ)
    ロボットの傾斜姿勢を求める。 歩行ロボットで姿勢制御を行う場合や、自律移動ロボットが進行方向を検出するために必要。 一般にジャイロと言った場合はレートジャイロ(角速度計)を示すことが多く、積分して角度とする。ただし、センサ出力にずれがあると積分結果がどんどんずれていくため、以下のセンサで補正を行う。 傾斜計は振り子の傾きをポテンショメータなどで測定し、鉛直方向を検出するセンサである。 加速度計も「重力加速度」を検出することで鉛直方向を検出できる。 地磁気センサは使える条件が限られるが、鉛直軸回りの旋回角度を補正するために使用できる。
  • 加速度センサ
    加速度センサが加速度センサとして使われることはすくなく、上記姿勢のセンサとして使われることが多い。 加速度センサを用いてロボットの位置を得るには、一度積分して速度に、もう一度積分して位置にする必要があるが、上述のようにセンサ出力にずれがあると誤差が積算してしまう。 それを二重に行うことの危険性は容易に想定される。
    ただし、ロボットの各部に加わった衝撃のセンシングには使えるため、危険状態の判定に使用できる。
  • 歪みセンサ(ひずみゲージ)
    ひずみゲージとは、フィルム上に形成した金属膜を、フィルムごと測定対象に張り付け、対象の伸び縮みに応じて抵抗値が変化する素子である。 ロボットの構造材に取りつけることで異常加重が検出できる他、ロボットの部材の振動が検出できるため、振動制御(制振)に用いることがある。
  • 温度センサ
    モータや駆動回路は、無理な使い方や長時間の運用で発熱する。 ある程度の発熱は設計の範囲であっても、関節に無理な力がかかり続けたりすると定常的に過電流になり、発熱することがある(制御側でもある程度判断可能)。 部品には温度の上限があり、デバイスの損傷や焼損、寿命短縮の原因にもなるため、過熱状態は危険である。 そのため、温度センサによる保護回路を搭載することがある。
サーボモータに最初からセットで搭載されることの多い角度センサです。 軸に、スリットを等間隔に多数切った円盤をとりつけ、スリットを光センサなどで読み取ります。 光センサの出力は回転量に応じてオンオフを繰り返すため、その回数を数えれば回転量を得ることができます。 その角度分解能はスリットの数に依存し、一般的にモータ制御に使われる範囲では 200-2000程度です。
ただ、それだけでは回転角度が変わったこともわかりませんし、スリットのそばで小刻に動いても回転したことになってしまいます。 これを区別するため、普通は位置をずらして2個のセンサを取りつけます。 その位置関係を工夫すると、cosとsinのように、位相のずれた信号を得ることができ、その位相もチェックすることで、回転方向がわかります。 これを2相のエンコーダといい、一般にA相、B相といいます。 それに加えて、C相とか、Z相と呼ばれる、軸一回転につき1パルス出る出力があるものもあります。 この信号をつかうと正確に原点を出すことができるなど、便利です。

ちなみに、玉の入っているマウスには、このエンコーダの小さいのが入っています。
ちなみに(2)、サーボモータ用のエンコーダは案外電気を食うものがあります。電源容量に気をつける必要が場合によってはあります。 ポテンショメータは直訳すると「位置計」なので、方式までは文字には入っていませんが、一般にポテンショメータというと位置に応じて抵抗が変化する素子のことが多いです。

ポテンショメータには回転式と直動式があります。 いずれの場合も、一般的なものは、抵抗板とそこをこするブラシ(擦動子)です。 抵抗板の両端には固定の電極(図A,B)がついていて、ブラシ(C)と両端の電極の間の抵抗値(A-C or B-C)が、ブラシの位置によって変化します。 この抵抗変化を一般には電圧変化として取り出します。 回転式はこの板が円状(角度の大きな扇形)に取りつけられ、直動式は単に長方形の抵抗板です。 この方式の問題点は「こする」という動作のため、なんども動かしているうちに接触が悪くなったり、雑音が出たりします。 オーディオのボリュームは基本的には同じ作りの部品で、これもまた古くなってくるとつまみをまわすとガリガリいったりしますが、それと同じことがおこるわけです。

この問題を解決するために非接触のポテンショメータもあります。 軸には磁石を取り付け、そばに磁気で抵抗が変化する素子(MR素子,Magneto-resistive)を取りつけます。 この場合、寿命が非常に長くなり、また擦る摩擦力がなくなるため回転が軽くなります。

いずれにしても、その構造から、ポテンショメータは回転式であっても無制限には回転できません。 一般には角度と抵抗変化が直線的になる部分が±45度などと、制約があります。 また、機械的には可能でも、一回転させると値に継ぎ目ができたりします。 そのため、ポテンショメータを関節角度の測定に使用することはできても、多回転のモータの測定には使えないことになります。 ジャイロスコープと言った場合、普通は回転のセンサです。 そのうちで、単にセンサの「ジャイロ」と言った場合は、角速度を検出するためのレートジャイロを一般的に指します。 このレートジャイロはいくつか方式がありますが、圧電素子を用いたものが一般的です。 圧電素子とは電圧を加えると変形して、逆に変形させると電圧が発生する素子です。 腕時計のアラームやゲームウォッチ(古っ)のぴっという音を発生させるスピーカも圧電素子、電子ライターの火花を飛ばすための電圧発生も圧電素子です。 この圧電素子に交流電圧をかけて振動させます。 その状態で角速度を与えると、コリオリ力によって振動方向が微妙にずれがでます。 そのずれを検出することで、角速度を得るという方式です。 小型で手頃なので、カメラの手振れ補正やカーナビなどにも使われています。

その他、昔ながらのコマが回るジャイロスコープのタイプのものもあります。 また、リングレーザジャイロ、光ファイバジャイロという、レーザ光線で右回りと左回りの輪をつくって、回転させたことで生じる速度差を利用して測定します。非常に高精度ですが、非常に高価です。

レートジャイロはその出力を積分しなければなりません。 しかし、センサ素子は一般にゼロ点はずれるものと思う必要があります。 製造上避けられないずれは、静止状態で測定すれば得られますが、温度変化することで発生するずれ(温度ドリフト)などもあり、使いはじめてしばらくするとずれています。 積分して使うということは、この誤差も積分してしまうことを意味します。 たとえば、0.1度/s というずれができたとき、10秒たったら1度ずれます。 だいたい角度を測りたい用途では1度の角度誤差でも困ることが一般的です。 そのため、平均的に角度がゼロであることがわかっているような用途では、ハイパスフィルタを用いて直流に近い成分を捨ててしまいます。これによってずれの影響を低減できます。 そうでない場合は、傾斜計、加速度計などの重力方向がわかるセンサや、地磁気センサによって補正を行う必要があります。 この場合、あくまで「補正」でジャイロが主役です。 傾斜計、加速度計も応答性がいいものはありますが、どちらも「加速度」を計測するセンサであるため、重力の他に、ロボットが移動する加速度もひろってしまいます。 そのため、そのまま傾斜角度としてつかうとトラブルの元です。 歩行ロボットの場合は、小刻に加速度がゆれますが、全体的には加速し続けることもないため、うまく補正ができます。

参考:圧電ジャイロの技術@村田製作所 加速度センサは一般に、センサ内部に加速度による慣性力をうけて変位する小物体と、その変位を測定するためのセンサからなっています。 昔はメカ的に作られていましたが、最近は半導体加工技術の進歩によって、半導体としてつくることが出来るようになり、小型、高性能、手軽になりました。

加速度センサはその検出レンジで大きく2系統にわかれます。 一つは加速度センサとしてつかうもので、検出の上限は重力加速度の数倍、分解能は1/100程度などです。これはロボットの姿勢センサとしてもつかえます。 もう一つはどちらかというと衝撃(衝撃は瞬間的な大加速度)の大きさを検出するセンサで、重力加速度の数十〜数千まで測定できますが、もちろん細かくは測れません。 用途に応じてどちらかを選択する必要があります。 ロボットの周囲、および周囲との接点の情報を得るための外界センサには以下のようなものがあります。

  • タッチスイッチ、バンパスイッチ(スイッチ、圧力センサ+チューブ)
    単なるスイッチに適当な機構を付加したもの。 本来は「触る前」に対処すべきであるが、外界に当ってしまった場合にも最悪の事態を避けるためのセンサが必要である。 そのため、考えようによってはもっとも信頼性の要求されるセンサであり、simple is best。 普通は単なるスイッチを用いるが、広くカバーすることは容易ではない。 その解決策の一つとして提案されているのが圧力センサとチューブの使用である。 一端を閉じたチューブをロボットに取り付け、もう一端に圧力センサを取りつける。 なにか障害物がチューブに当ると突発的な圧力変化が発生するため、衝突がわかる。 また、チューブの材質を選べば、それ自体が緩衝剤にもなる。
  • 距離センサ(超音波TOF、光TOF、光三角測量) 障害物までの距離を測ったり、追跡対象までの距離を測ったりするのに使用する。 測定には、パルス状に発射した音/光が返ってくるまでの時間を測定するTimeOfFlight(TOF)か、三角測量が用いられる。
    音は比較的低速であるため扱いやすく、超音波による距離測定は非常にポピュラーである。 また、距離の分解能は比較的高く、mm単位の測定も可能である。 ただし、時として 340m/sという速度は遅く、測定の制約になることがある。 また、音は広がりやすいため、横方向に細かな測定には向かない。
    一方、光は非常に速く、直進性もいいため、ポイントの距離を瞬間的に測定することができる。 しかし、その速さゆえに、距離方向の分解能を高めることは困難である。 例えば、15cm(往復30cm)の分解能を得るには、10億分の1秒単位(1GHz)での測定が必要であり、これは自作するには非常にやっかいな領域である。
    光の場合には、その直進性を利用して、三角測量を行うこともできる。 ロボット側の2点から同一対象を観測し、その角度を得る。 すると、三角形を規定する条件の一つ、一辺とその両頂点の角度が得られ、2点と観測対象を結ぶ三角形が規定され、頂点位置が得られる。
  • 力センサ(接触力、接地力)
    歩行ロボットが脚の接地状況を判断する際に良く用いるものが力センサである。 足裏に接触圧を測定するセンサを複数取りつけ、その出力をもとに接地の重心位置を検出する。 たとえば、足裏の中央付近に重心があれば倒れるまでに余裕があるが、縁にある場合はその方向に倒れつつあるか、倒れるギリギリである。
    また、なにかを手先で扱うようなロボットの手首に働いている力を3方向の力と3軸方向のモーメントで測定する6軸力センサもある。 特に、人間と強調するような目的の場合、ものを通して人間の意図を読み取るためにこのようなセンサが使われることが多い。 また、歩行ロボットでも足首にこの種のセンサを入れることがある。
  • 画像(単一、ステレオビジョン)
    画像(カメラ、映像)は2種類の意味合いを持つ。 一つは「絵」として周囲の様子を取得し、それを解釈することによって様々な情報を引き出す。 もう一つの面は、多数の光センサの集合体である点に着目し、各点ごとの計測を同時に行うという使い方で、画像を2枚利用して全画面の距離情報をえるステレオビジョンや、特殊な光源を併用して距離を求める手法などがある。
もっともポピュラーな移動ロボットの外界センサの一つです。 どのくらいポピュラーかというと、障害物をよけながら動くロボットのおそらく5割以上が装備しているのではないかというくらいポピュラーです。
使われるのには理由があります。
  • 原理が単純
  • 簡単な工作でそれなりに動くものがつくれる
  • 障害物までの距離が細かく比較的正確に測定できる

原理は、ごく短時間(1msとか)の超音波(一般には40kHz)を送信機からとばし、対象に当って跳ね返ってきた音を受信機で受けて、送信からの経過時間を測定します。 時間差をΔt、音速をVとすると、

で求まります。ここで、最後の/2は往復なので、片道に直しています。 音速は厳密には温度の関数(331.5+0.6*温度)なので、厳密さが必要ならば補正する必要があります。

この方式の利点はその単純さから、コスト的にも利用しやすいという点です。 ただし、いくつか欠点があります。 まず、音を使うのでうるさいところではつかえません。 最悪の場合、ロボット自身が出す音で誤動作することがあります。 また、屋外でつかうと風の影響を受けることもあります。 出力の面でも、音速の面でも、簡単に実用になる距離はせいぜい5メートルくらいです。 出力をあげれば、それ以上の測定もできますが、今度は時間がかかるようになります。 たとえば、東北大学江村研で開発した装置は大出力の超音波を出して、最大で50メートル先の障害物を発見できます。 しかし、それには0.3秒ほどかかります。 つまり、余裕を見ると秒2回くらいしか測定できないことになります。

超音波の距離測定の発展版としては、送信音波をパルスから符号化した信号に変更して、雑音の影響を受けにくくする方法が提案されています。 また、複数の受信機をつかって、その時間差から反射してきた位置=障害物の位置を検出する方法も提案されています。

参考:超音波距離測定の原理@キーエンス 光を使った距離センサには超音波同様、発射してから返ってくるまでの時間を測定する方法もあり、長距離を測定するのに適していますが、簡単に作れるものではなく、販売されているものも安くて数十万円です。
それに対して、光の直進性だけを利用する三角測量のセンサがあります。

まず測定対象に光を発射します(パルスの必然性はなし)。 次に、対象から返ってきた光が、PSD(Position Sensitive Detector)などの「光が当った位置がわかるセンサ」をつかって、どの方向から返ってきたかを調べます。 遠くからの反射光であれば、発射した光とほぼ平行に返ってきます。近くで反射すれば、角度を持って返ってきます。その角度と距離は一対一に対応するため、距離がわかるという仕掛けです。

この手のセンサは以前は高価だったり扱いにくかったりしたのですが、3年ほど前に距離測定モジュールとして、電源をつなげばすぐに距離が電圧で得られる小型のセンサ部品が開発されました。 数百円という値段の手頃さと扱いやすさから、移動ロボットのセンサとして急速に勢力を拡大しています。 参考:三角測距式の原理@キーエンス カメラを用いる場合、映像はコンピュータに取り込んで処理しますが、映像として使うことはあまりなく、その中のひとこまを切り出してきて画像として使うことが一般的です。 処理したあとで前後のコマの処理結果とつきあわせて、動きを求めることはあります。

画像の処理によって得られる情報は膨大です。しかし、その情報の信頼性という観点では、単純なセンサに及ばないことはよくあります。 そもそも、画像は非常に多くの情報を含んでいます。 含まれる情報が多く、複雑に混ざってしまっているために、単一の情報を確実に分離することが困難なわけです。 人間の得る外界情報の9割以上は視覚に頼っているともいわれ、人間並みの視覚を実現できたら、ロボットにとってはバラ色です。

画像の利用の一つは、1枚の画像による形状や表面、模様などの認識/確認です。 たとえば、道路の風景から交通標識を見つけ出して、制限速度を読み取るといった用途、 工場の製造ラインで製品が正しく組上がっているかをチェックするシステム、 また、農作物の品質分類などにもつかわれています。 このなかで、道路はやっかいな例です。周りになにがいっしょに映るか、明るさやコントラストはどう映るかが全く未知です。 そのため、いまもって、これだという方法は提案されていません。 さまざまな状況に対応はできますが、どんどん手法がややこしくなってしまいます。 それに対して、工場や屋内では、明るさを適切な固定値に設定でき、また周りに映るものも固定であるため、かなり実用的に使うことができます。

もう一つは複数の画像や、単一画像とスリット光などの特殊光源を組み合わせ、三角測量で画面全体や特定の対象までの距離を測定する手法です。 上述のPSD系のセンサは一点についての測定ですが、2枚の画像で同じものがどこに映っているかを同定できれば、同じように三角測量ができます。
たとえば、右図のように2個のカメラで対象物(○)を観測した場合、撮像面にはそれぞれ違う位置に映ります。 このずれ(視差)や、映った位置をもとに距離と方向を得ることができます。 ただ、その両カメラに映る同一物の判定がやはりたいへんです。 特徴のないノッペリした面は対応が取れません。 逆に物体の境界は特徴豊富なものの、奥にあるものが異なって脇に見えてしまうため、やはり対応がとりにくくなります。 また、画像の処理は根本的に繰り返し量が多いため、時間がかかります。 人間がみればいっぱつなのに...と、こういう処理をやるとつくづく人間に感心してしまいます。 代表的なセンサについてまとめてみました。 実際にはもっといろんな種類のセンサがあります。 ロボットをつくるのでなくとも、なにかの計測をするという場合は将来もあると思いますので、どんなセンサがあるかを知っておくだけでも、なんならかの足しになると思います。

ロボットを制御するには、コンピュータが必要です。 電子回路だけでもある程度のことはできますが、修正が面倒だったり、ちょっとした判断をするにも手間がかかります。 その点、センサやアクチュエータをすべてコンピュータに接続して、あとの処理をソフトウエアで行うようにすると、複雑な処理をしやすくなったり、なにかあったときにプログラムの修正で済ませることが出来るようになります。 ロボットに積むコンピュータは、小さいものから大きいものまで多種多様です。 大きく分けると、マイコン系とパソコン系にわけられます(独断)。

パソコン系は文字通り、ロボットの中にパソコンを積んでしまいます。 といっても、箱形のパソコンをつむわけではなく、パソコンと同等の機能を持ったコンピュータ基板を積みます(一般のマザーボードをつんでしまうこともよくありますが)。 この場合、演算処理能力はかなり高く、また画面などをつけやすいため、対人情報の入出力は非常にやりやすくなります。 ネットワークなどにも容易に対応できます。 そのかわり、どうしても大きめであること(小型にしたものもありますが)、大きな電源を要求することが面倒な点です(普通のパソコンは+5,+3.3,+12,-12で20Aとか要求することがある)。
そのため、パソコン系は大きめのロボットで重さや電源に余裕がある場合で、複雑な処理が必要な場合に採用されることが多いようです。

マイコン系は四則演算のみの電卓並から、パソコンに匹敵するようなものまで非常に幅広い品種がありますが、多くの場合はLSI一個でほとんどの処理ができるようにコンパクトにまとめられています。 特徴は

  • 小型。場所も電気もくわない(5Vのみ、数十mAなど)。
  • 入出力機能(後述のインタフェイス)をいろいろ内蔵していて、センサを直結できたりする。
  • プログラムはマイコン本体に内蔵することが多い。 また、電源を入れたらほぼ瞬時に仕事ができる(低機能の場合)。
  • 非常に他品種であるが、マイコン本体の機能(CPUアーキテクチャ)はメーカごと少数に統一されて、プログラムの作り方には違いは少ない。演算性能、記憶容量、入出力機能などの違いで品種が多い。
パソコンの場合は、だいたいは予算の許す範囲でCPUとかメモリの容量を見て買いますが、マイコンの場合は入出力機能なども含めて選定します。 実験室で使う分には大きめのを買えばよいのですが、量産しようと思った場合には過剰スペックがコストに直接跳ね返るため、ぎりぎりのものを選定します(聞くところでは、最初にマイコンが渡されてこれで収まるように、と言われることもあるとか)。

そのほか、ロボット本体は最低限の機能だけ(場合によってはメカとセンサだけ)にて、電線をひっぱったり、無線で指示を飛ばしたりして、高度な処理はすべて外部でおこなってしまうという構成もあります。 量産したり手軽な本格運用するためには、システムが二つあることは不利ですが、ロボットの開発段階ではいろいろと便利です。 ロボット本体を単純化できるため、メンテナンスが簡単なほか、重量制限を気にせずにいろいろな機能を盛り込むことができます(もちろん、単体にするにはその小型化が別途必要)。
また、一般にマイコンを搭載した場合はソフトウエアの修正作業が、パソコンの上でプログラムをつくってそのまま実行するのに比べて手間がかかり、実行中のソフトウエアの状態を監視することも困難です(最近はかなり楽になりましたが)。 ロボット外においたパソコンでプログラム作成&制御をすると、このような開発作業が簡単になります。
最近では大きめのロボットはパソコンそのものを積んでしまうことが多く、このような場合はネットワーク経由でログインして、その上で開発や監視作業をできるようになっていて便利です。 本来、コンピュータは計算することしかできないため、外になにかをつけようと思った場合にはインタフェイスと呼ばれる回路を別途追加する必要があります。 たとえば、パソコンの場合は画面に映像を出す回路、キーボードやマウス、プリンタなどとやりとりする回路、ネットワークの回路などです。
ロボットを制御するためには、一般に次のようなものが必要です。

  • パラレル入出力(ディジタル):
    ディジタル信号を一本ずつもしくは数本を束ねて入出力するためのインタフェイス。 スイッチのオンオフを入力したり、モータのオンオフ、ステッピングモータの各コイルのオンオフ操作、確認用のランプの点灯などに用いる。
    選定条件:本数
  • AD変換:
    アナログ電圧を取り込む回路。多くのセンサはアナログ電圧を出力するため(もしくは回路で前処理した結果がアナログ電圧)、それをコンピュータに取り込むために必要。 たとえば、0〜5Vを0-255(8bit)の整数に変換したりする。
    選定条件:変換分解能(ビット数)、精度、変換速度、電圧範囲(回路で変更可能)、本数(速度が十分なら切り替えて使用可能)
  • DA変換:
    ADと逆にアナログ電圧を出力する回路。 モータの出力をアナログ電圧で決めたり、音を出力したい場合などに使用する。 また、内部の状態を電圧として出力すると、オシロスコープなどで動作状態を監視することにも使える。
    選定条件:変換分解能(ビット数)、精度、変換速度、電圧範囲(回路で変更可能)、本数(速度が十分なら切り替えて使用可能)
  • カウンタ:
    パルスの数を数える回路。 エンコーダにつないで回転角度を得るためにも使用する。 2相エンコーダの場合は、専用のエンコーダカウンタと呼ばれる回路を使用すると、回転方向に応じてカウントアップ/ダウンしてくれるため、直接値を利用できて便利である。
    選定条件:ビット数(計数上限)、本数、最高パルス速度
  • PWM出力:
    モータなどの出力を操作する方法には二つある。 一つはアナログの電圧などを可変して操作する方法でこの場合はDAを使用する。 ただし、そのための回路の効率は悪く発熱する。 もう一方は、モータに流す電流を高速でON-OFFして出力を操作する方法である。 もちろん、ONの時間比率が高い方が平均的に出力が高くなる。 この場合は回路の損失が少なく、効率がいいため、現在主流の方法である。 この高速でON-OFFする信号がPWM信号(Pulse Width Modulation)と呼ばれている。 実際には、PWM出力専用の回路というより、汎用のパルス出力回路の一機能でPWMを作ることが多い。
    最近の小型ロボットで採用されることが多くなってきたラジコン用のサーボモータ(上のDC/ACサーボとは別物なので注意)にも、PWM信号で角度を指令する。
    選定条件:パルス生成能力(周波数、分解能)、本数
  • 通信:
    外部の装置やマイコン同士で通信するために、通信回路が必要な場合がある。 古くから&いまも、RS-232Cという通信規格が主に使用されている。 それに加えて、パソコンではネットワーク(Ethernet,100BASE-TXなど)が標準になり、マイコンではI2CやCANといった通信方式が使われるようになってきた。
    選定条件:通信方式、通信速度、内部のバッファ、本数
これらのインタフェイスの扱いは、パソコン系とマイコン系で大きく異なります。
パソコン系は、パソコンとしての入出力は標準で備えているものの、ロボット用の入出力は普通は皆無です。 そのため、これらのインタフェイスボードを増設する必要があります。
参考:アドテックシステムサイエンス  株式会社インタフェース
一方、マイコン系はマイコンを買ってくる段階で必要な機能を備えたものを選定します。 マイコン系は最初からこれらの機能を内蔵していることが一般的である反面、外に追加することが困難だったりコストパフォーマンスが大幅に低下したりすることが多いためです。
たとえば、ロボット工作でもっともメジャーな部類の、ルネサステクノロジのH8/3052というマイコンの場合、パラレル入出力が数十本、ADが10bit×8、DAが8bit×2、カウンタおよびPWMを扱うユニット(ITU)×5、通信(RS232C型)×2といった性能をもっています。 これで機能が余る場合は量産目的ならより小機能のマイコンを選んできますが、プログラムは大きくは変わりません。一方、足りない場合はやっかいです。3052はH8シリーズの中でも機能がもっとも多い部類なので、これより増やすことは困難です。その場合はロボット側を工夫して必要な機能を減らす、複数のマイコンを連携させて使う、などを考える必要があります。
ロボット用のソフトウエアというのは、非常に多岐にわたるため、それだけで講義が1セットできてしまうくらいです。 ただし、その根底にある概念は二つです。
  • 一定周期での制御演算の実行
  • ハードウエアのアクセス

ロボットの制御は、モータなどのフィードバック制御と、より上位の判断を下す部分からなります。 モータのフィードバック制御は制御工学で習うような手法、PD制御、PID制御、状態フィードバックなどをプログラムで行います。 ところが、これらの理論は基本的に時間が連続であることを前提にし、微分や積分を使います。 それに対して、コンピュータで制御演算を行う場合はどうしても時間は有限です。 「センサで状態の取り込み」→「制御演算」→「出力」で処理には時間がかかります。 そのため、一般にはこれらの処理を一定の時間間隔(Δt、サンプリング周期、制御周期)で行うことにします。 そのため、時間の関数 x(t) は時間とびとびのデータになって「i番目のデータ」x[i]になります。さらに、

で代用します。 このため、処理間隔が一定であることが重要になります。

一定間隔で処理を行うためには、いくつか手法があります。 やるべき処理がこの一定時間間隔の処理のみならば、一回処理してから次の処理までひたすら時計を見ながら待つ、という方法があります。 たとえると、10分おきにデータを取るために、時計をにらみ続けるようなものです。
ところが、実際にはそれだけで済むことはすくなく、他の仕事もしたいことがあります。 この場合は「タイマ割り込み」という手法も導入します。 タイマというのは目覚まし時計のようなもの、割り込みというのは外部からの刺激によって、いまのしている処理をいったん中断して、予め指定しておいた処理を開始させる仕掛けです。 いわば、10分おきになる目覚ましをおいておいて、普段は別の仕事をしておいて、目覚ましがなったらデータを取りに行って、終わったら元の仕事を再開するようなものです。
どちらが効率がいいかというと、後者の方が他の仕事もできて便利です。 しかしこの割り込みという手法は多少複雑で制約も多く、動作検証も楽ではないため、注意して使う必要があります。 もし本当にやる仕事が一つだけなら前者の方法が安全です。 また、二つの仕事があるとき、割り込みにする要求がでるのは一方だけです。 より簡単な処理を割り込みにしてしまって、制御本体は時計を見ながらという手があります。

実際にはさらに、処理の優先度という問題(大事な仕事の途中には割り込ませないなど)もあります。 ある程度以上システムの規模が大きくなったら、リアルタイムOS(Real-Time Operating System)と呼ばれる基本ソフトなどの助けを借りることができるようになり、これらが楽になります。 マイコン系でも大規模なものは TRONやLinux系などのOSが動作しますが、小型の場合は自分で考える必要があります。

さて、ロボットを制御する場合、ソフトウエアからインタフェイスと情報のやり取りをしなくてはなりません。
マイコン系でポピュラーな形態は、メモリの一部にこれらが見える、という形式です。 メモリは本来はデータを保管しておき必要なときに読み出してくるものですが、電気的に見れば「コンピュータから書き込みの信号を送る→その信号を保存する」「読み出しの指令を送る→前回書き込まれた値を返す」となっていて、コンピュータ側は「書く信号を送る」こと、「読む信号を送って結果をもらう」ことだけです。 それを流用して、「書き込み信号を送る→ディジタル出力 or アナログ出力(DA)」や、「読み込み指令→ディジタル入力 or アナログ入力」でもいいわけです。 もちろん、この場合はメモリとして使えませんが、読み書きの時はアドレス(番地)という操作対象を示す数値を添えて処理するため、ある番地の範囲はメモリ、ある特定の番地はアナログ入出力と分けて使えばいいわけです。 あとは、どこがメモリでどこが入出力かはプログラムをつくる側が常に意識すればいいわけです。
マイコンのデータシート(取り扱い説明書)や解説書をみると、各機能を使うための番地やなにを書けばいいか、読んだ値の意味などがずら〜っと記載されています。
なお、コンピュータの種類によっては、メモリとは別に同じような構造の入出力専用の系統(IOポート)を持っていることもあります(Intel系全般、パソコン用CPUも含む)。

パソコンの場合は、コンピュータという点ではマイコンといっしょですが、その上に乗っているOSのため、もう少し事情が複雑です。 マイコンの場合は、プログラムを作った人が責任をもってすべてを管理することが前提ですが、パソコンはより大規模で、複数のプログラムが同時に走っています。 たとえば、音楽を聞きながらWEBブラウザを使いながらワープロで文章を書きつつデータ計算、など。 この場合、それぞれのプログラムが勝手にコンピュータの機能(資源ということがあります)をいじったら、それぞれが干渉して正しく動作できなくなります。 その調停をすることもOSの役割ですが、逆に簡単にはインタフェイスにも簡単には触れなくしてあります。
そのため、パソコンでこういったOSを使っている場合は直接インタフェイスに触ることはほとんどなく、インタフェイスボードについてきたデバイスドライバ、ライブラリといったソフトウエア経由で使うことになります。 それらがないときは直接操作することになりますが、その場合もOSから特別の許可を得る必要があります。


これらの基礎の上に、ロボットの制御システムを組み上げていきます。 主な仕事は制御理論をプログラムの形にしていくことですが、数式の上の話とプログラムの上には他にも食い違うところがあったりして、それなりに経験も要求される分野です。 これを身につけるためには、まずはサンプルプログラムなどをもとに実際に触ってみるしかありません。 もちろん、C言語が使えることが前提です。 こういうハードウエア分野のソフトウエアは大半がC言語やアセンブリ言語で、より上位のソフトウエアやパソコン系のシステムになるとC++なども使えるようになりますが。
ロボットの理論もそうですが、それよりも実際につくるための技術は文字で伝えられる情報のほかに、経験に依存する部分もあり、このページでも私の持っている範囲の1%も伝えられていないと思います。
(理論は1割以上かも:-)<基本的に理論より技術系なので)
関心を持った学生さんは専門書やネットでの情報などに触れてみてください。 もちろん、私の方でも相談にはのります。
このページに関して言えば、ロボットに限らずメカトロ全般の話であるため、今後就職してこういった分野に携わる学生さんもいるとおもいます。 ある程度は情報をいれたら、あとはやって慣れるのが一番です。 そのうちに、やりたいことが決まったら何が必要か思い浮かぶようになります。