AIT鉄人3号の開発環境、使用されている技術



 ロボットを安定に倒れないように動作させるには、センサーが欠かせない。その1つが角速度を測るジャイロセンサー。これは、回転のスピードを測るもので、ロボットが倒れそうになれば、その倒れる回転速度が信号として測れる。その信号から倒れるのとは逆方向にモータを動かせばよいわけだ。
 現在の小型ロボットの多くは前後と左右の方向用に2個のジャイロセンサーを使っているものが多い。しかし、この場合ジャイロセンサーを胴体などに置くため、ロボットの姿勢が変わると足や手のサーボの回転軸とジャイロセンサーの軸が異なってしまう。したがって、直立に近い形の場合にしかセンサーは有効ではない。この問題を解決する単純な方法は、サーボ1個1個それぞれにジャイロを固定する方法だが、コストがかかる。そこで、我々は3個の直交するジャイロセンサーを用い、ロボットの姿勢を計算により求めて座標変換を行うことにより、いかなる姿勢においてもサーボモータの回転軸方向の角速度を正しく得られるようにしている。例えば、ジャイロで測った3軸の角速度がそれぞれωx、ωy、ωzで、角度θだけz軸を中心として胴体が回転していれば、各成分はωxcosθ-ωysinθ、ωxsinθ+ωycosθ、ωzに成る。高校で習った簡単な数学の知識で計算できる。

 現在は、AIT鉄人2号へこのシステムを実装して色々実験中。使用しているジャイロセンサーはGWS PG-03。標準のケースは外し、3個を1つのケースに入れて胴体の重心付近に入れている。信号はパルス幅として得られるため、FPGAに実装したカウンターで計測している。

ジャイロセンサー
GWS PG-03
ケースから外したところ
ジャイロ制御無し
(動画WMVファイル980kB)
ジャイロ制御有り
(動画WMVファイル670kB)
お約束
 
180度開脚 傾斜面歩行
前後10度
左右1度
少し曲がっても倒れない
(動画WMVファイル1.3MB)
3軸あればこんなことも安定化
 
 センサでフィードバック制御する場合、そのフィードバック量(補正量)をどのように決めるかも重要と成る。ラジコンヘリ等の場合は角速度に比例してサーボを動かしている。小型ロボットの場合も、同様な制御方式を取っているケースが多いようだ。しかし、この方式をそのまま小型ロボットの姿勢制御に使った場合、応答速度が遅く、またゲインをあげると発振を起こしやすいという問題がある。そこでわれわれは、大学の制御工学の講義で勉強したPID制御方式を取り入れてみた。この方式は、偏差の比例(P:Proportional)成分だけでなく、積分(I:Integral)と微分(D:Derivative)を組み合わせて補正量を決める方式。以下のような式で表わされる。ここで、u(t)が補正量。e(t)が偏差。Kは各フィードバックゲインを表わす。この方式は、応答速度が速く、また定常偏差も小さいという特徴がある。発振も起こりにくい。
             
 現在は、AIT鉄人2号のSH7145Fで計算を行って、PID制御の実験を行っている。(ただし、SH7145Fの性能では、ここまでの計算を行うのは少し苦しい。計算プログラムに工夫が必要。)積分計算は、センサ信号にオフセットがあると大きな誤差として現れるため注意が必要だ。現在は、オフセット自動補正機能を搭載してかなり小さなオフセットに抑えられている。
 動作によって、積分のゲインを上げると有効な場合、微分ゲインをあげると有効な場合などさまざまだ。現在は、試行錯誤で最適値を見つけているが、なかなか難しい。修行が必要そうだ。GUIで各パラメータを変更できるよう、モーションエディタをバージョンアップして最適値を探している。
ジャイロゲインエディター
パラメータの数が・・・・・
 
 
 小型ロボットではジャイロセンサーは多くの場合歩行の安定化など、状態の安定化に使われるケースが多いようだ。しかし、せっかくのセンサーをそれだけのために使うのはもったいない。例えば、静止状態でセンサの変化を見れば、ロボットにどのような力が加わったかを知ることができる。それに対してロボットが反応するようにしておけば、自律動作が可能になる。以下は、AIT鉄人2号を使って、外力に自動的に反応するようにした例である。
 
止めてよー!
(動画WMVファイル1.27MB)
痛いなー!
(動画WMVファイル528KB)




 ハンドの試作機が完成。このハンドはトルクセンサーを搭載。握る物体の大きさを感知し、自動的に止まるようになっている。センサが無い場合、握る物体の大きさがわかっていないとサーボが回りすぎて、対象物体を握りつぶしたり、サーボに大電流が流れる。このハンドではあらかじめ大きさがわかっていない物体でも握りつぶすことなく、低電流でつかむことができる。トルクセンサは、サーボに流れる電流を測るだけの簡単もの。
 
ハンド試作機
 
センサなし
物体が握りつぶされている
電流も1A以上流れる
動画WMVファイル1.03MB
センサあり
物体は握りつぶされない
電流は0.2A以下
動画WMVファイル1.23MB
 
 次の段階として、トルクセンサにより物体の硬さを計測。やわらかいものはソフトに、硬いものはしっかりと掴む実験中。




 AIT鉄人3号では、新たにCNC(Computerized Numerical Control)工作機を投入。CNCとはコンピュータ制御の自動加工機のこと。これにより、CADで設計した図面から、コンピュータを用いて自動で加工が行えるようになった。手間が減るだけでなく、加工精度が大幅に向上。より複雑な形状のパーツも作れるようになった。使用環境は以下のよう。CNC装置はデフォルトの3mmのスピンドルシャフトを4mmに変更している。これは、3mmのエンドミル(加工に使う刃物)は種類が少ないため。4mmだと、使えるエンドミルが大幅に増える。また、スピンドルの回転速度を変更できるようにした。これは、加工物によっては回転スピードを落としたいため。

3D CAD Autodesk Inventor(Autodesk社)
CAM JMM TOOL(Jin Satoさん)
ツールパス確認 NCVC(まがらんさん)
CNCソフト MACH1(ArtSoft社)
CNC装置 mini-CNC Black(オリジナルマインド社)

製作手順は以下のよう(アルミ折り曲げの場合)。

CNC装置
 
3D CADで設計 2Dの展開図にしてDXF形式で保存 CAMソフトでGコードと
呼ばれる形式に変換
 
ツールパス確認 CNCソフトに読み込み CNC装置で加工

加工終了 タップを立て、
折り曲げて完成
 ただ、このCNC装置はストロークがX軸:155mm,Y軸:105mm,Z軸:42mmと幾分小さい。もう少し大きなストロークが欲しいところ。現在より大きなCNC装置を自作中。
 
 上記システムで簡易的な2.5Dの加工もできる。ただ、2.5Dは加工量が多くなるためCNCでは非常に時間がかかる。そのため手加工では難しい加工部分に使っている。
 2.5D加工の場合は、1つの方法としてはJMM-TOOLの「なんちゃってポケット加工」の機能を使う方法がある。ただし、これは簡易的なもので、複雑な2.5D加工はできない。CAMソフトの変更も検討中だが、現在は試行錯誤の結果、以下の方法でJMM-TOOLを使って2.5D加工を行っている。
  1. 3D CADで加工部品を描く。
  2. ベタで削る部分に加工用の補助線を入れる。このとき、なるべくエンドミルに負荷がかからないように注意が必要。補助線は、もう勘と経験しかないです(我々は、この勘を掴むために、エンドミルを10本以上折りました)。
  3. DXFファイルをJMM-TOOLで読み込み。Z軸方向の深さを指定。
  4. 浅いところから先になるようにGコードを出力(深い方がエンドミルに負荷がかかるので、浅くできる部分は先に削っておく)
  5. NCVCでツールパスを確認して、内側から先になるようにGコードデータを並べ替え。(これをしないと、エンドミルが折れやすい)。
  6. CNCソフトに読み込んで加工。樹脂の場合、切削粉が溶けて穴の中でかたまり、エンドミルに負荷がかかる場合があるので、エアーで吹き飛ばすことが重要。
 エアー用のコンプレッサーは、最初は10メートルほど離れたところにあるエアースプレーガンをホースで引っ張ってきて、つきっきりでエアーを吹きかけていたが、最近になって工房内で使用していない古いコンプレッサーを発見。これをCNC専用として確保できたため、CNC機に固定した。これにより、完全に自動で2.5Dの樹脂加工ができるようになった。

3DCADで設計 補助線を入れる 加工
MCナイロン、板厚8mm
完成
外形20mm×21mm
切削時間約2時間

2.5D切削例2
MCナイロン8mm
外形80mm×21mm
切削時間約5時間
エアー噴射機を取り付け 確保したコンプレッサー