古いマウス


miniかむかむ

  • ロボット名:miniかむかむ
  • 名前の由来:「かむたこ」というフリーゲームのキャラクターより
  • 操作者名:福井善朗
  • 所属:奈良先端科学技術大学院大学
  • 電源3.7V FullRiver(Indoor Air Plane Worldで購入)
  • モータ:maxson Re-6
  • エンコーダ(車軸と兼用):MES-6-360PC
  • 光センサ:オプトランスLS879PT+東芝TPS615
  • 動輪:2個,直径15mm
  • サイズ:全長43.2mm幅32.4mm高さ20mm 重さ17.18g(全日本大会エントリー時)
  • 探索アルゴリズム:足立法(各区画を1ノードみなしたグラフとしてモデル化)
  • 最短経路導出アルゴリズム:dijkstra法(1区画あたり12ノードでモデル化)
  • 製作の動機:大学の勉強を生かすため
  • コメント:
  • *旋回半径を大きくとるため,車幅を小さくすることにこだわった.
  • **車幅を狭くするにあたり,MES-6-360-Pが大きく貢献
  • **加藤さんのEggTorteと同様に,エンコーダの軸を車軸として流用
  • **MES-6-360PCの車軸は,衝突に対する強度はあまりないようで,全日本大会に出るころにはボロボロになっていた.
  • *重心高さは車幅の4分の1程度に設定したが,予想以上に加速性能が落ちることが分かった
  • *前壁までの距離・角度を精度よく計測する工夫が入っている.
  • **前壁までの距離・角度(の近似値)をフォトセンサーで計測.
  • **オドメトリにより,相対的な移動量を比較的高精度で計測.
  • **2つの計測結果をカルマンフィルターの枠組みでマージすることで精度が高い計測を実現
  • **この工夫により,姿勢制御が相当いい加減でも完走だけはできるロボットになった

FETダイレクトドライブなマウス

Kamkam
Kamkam-wheel

オリエンタルモータのモータPK223-PAのマウスです.
ホイールだけは発注するなり,旋盤で削るなりする必要があります.

ホイール

タイヤはminitzのタイヤを伸ばしてむりやりはめればOKです.ホイールの外形はもう少し小さい方がよいです.φ28までいいんじゃないでしょうか.

ホイールは公差の設定が下手糞で,このままではゆるゆるなものが出来上がります.(ボンドでとめることになります.発注をかけたのに!)PK223-PAの軸公差はh7ですから,穴公差としてK6を指定して,中間はめにしたほうがいいかも.あるいは,イモネジ穴の追加をすると良いでしょう.図面の指定法としてもう少し言えば,肉抜きの穴6個部分は,P.C.D記号を使えば,もっとスマートでした.

ユニポーラステッピングモーター制御

H8-3052にはタイマーが少なくとも3本あるので,1本は汎用タイマ,2本はステッピングモーターの励磁パターン作成に使います.慣れてきたら,TPCとDMAコントローラを使って,ハードウェアでパルスを作成・送信すると良いでしょう.

この回路図は,モーターが静止しているときにFETをONにすると,2Aくらい流れてモーターが猛烈に発熱します.また,低速でトロトロ走っているときに2相励磁で駆動すると,やはり発熱します.そのため,速度によって,1相励磁,1-2相励磁,2相励磁を切り替える工夫をすると良いです.

もっと細かくしたいなら,各励磁パターンにPWM派をANDにするといいです.が,そこまでしなくても,フレッシュマンクラスなマウスにはなります.モータドライバICの複雑な配線をしなくていいかわり,パルスを作る手間があります.電子が苦手な情報屋向け.

モーターと床板の固定

ステッピングモーターにデフォルトでついている取り付けねじ穴を使おうとすると,どうしてもL字金具を使わなければなりません.「曲げ」が機械系じゃない人には大変です.そこで,モーターの銀色の金具部分にねじ穴を開けると,卓上ドリル/ボール盤+タップ(ホームセンターで入手可能)だけで作ることが出来ます.ねじ穴の位置は現物あわせです.銀色の金具部分にねじをあけるときは,モーターから取り外して穴あけをする必要があります.さもないと,モーター内部の配線を傷つけてしまいます.(修理できません)

書き込みケーブル

051213_1659~0001051213_1702~0001051213_1704~0001051213_1704~0002

milコネクタの類は抜き差ししていると,メス側がだめになります.例えば,ステレオジャックを書き込み・通信ケーブルとして使うと少しはマシかもしれません.

細かい配線ができるなら,D-subコネクタ内にレベル変換回路(ADM232やMAX232,ADM3202など)を仕込むことも可能です.が,そこまで細かい半田付けができるなら,普通にもっと小さい石を用意して,普通にマウスに搭載した方が賢明です.

D-subコネクタを搭載したPCが稀になってきている,USBコネクタの方が小さいなどの理由から,最近ではFT232-RLによる通信ケーブルの自作が常識になりつつあります.

basicマウスコピー

051213_1650~0001051213_1647~0001051213_1649~0001051213_1647~0002

ベーシックマウスのコピーです.こんな感じでモーターの上側からケーブルを通す穴を通すと,ぼちぼち美しくなるかも

開発手順

  • モジュール動作チェック:正負方向があっているか,データ出力が取れているかを確認
  • *マイコンへの書き込み確認
  • *SCI通信によるprintf関数(最重要)
  • *表示用LED
  • *スイッチ
  • *モータ
  • *フォトトラ
  • *エンコーダ
  • *ジャイロ
  • *ブザー
  • タイマープログラムを書く
  • *ログ取得プログラム(重要!)
  • *割り込みによるセンサー発光/受光プログラム
  • *ブザープログラム
  • *(モータ制御プログラムはこの段階では書かない.)
  • エンコーダ入力1ステップあたり何mmタイヤが移動するかの定数値を求める (→ステッピングモータの場合,与えたパルス定数値チューニングと読み替え)
  • *定数値[step/mm]=エンコーダ分解能[step]*頓倍定数/タイヤ直径[mm]/π
  • *タイヤ直径以外は既知の値なので,実際のタイヤ直径をチューニングれば定数値が求まる
  • *初期値としてタイヤ直径をノギスで測って与える
  • *手で慎重に直線上を動かして実際に動かした距離とステップ数を記録する
  • *10試行繰り返し,平均を取る
  • **タイヤ直径[mm]=エンコーダ分解能[step]*頓倍定数/π*動かした量[mm]/エンコーダが計測したステップ数[step]
  • **人間の手で正確に直線上をなぞることは難しいため,ここでのチューニング値は少し真値より大きめのものとなる
  • *ギア比,エンコーダ分解能などのマジックナンバーはヘッダファイルでいつでも書き換えられるようにしておくこと
  • 車幅設定チューニング
  • *その場で10回回転させる
  • *右タイヤの移動量,左タイヤの移動量を計測
  • *車幅[mm]=左右タイヤ移動量の差分/10[回転]/2π[rad]
  • 速度に関するタイマープログラムを書く
  • *タイヤ移動速度[step/sec]の計算プログラム
  • *直進速度・回転角速度の計算プログラム
  • *PI速度制御(ゲイン設定はこの段階では適当)
  • *オドメトリ
  • その場回転プログラムを記述
  • *P-PI制御(速度・加速度上限つき)プログラムによるその場回転プログラム
  • *PIゲインチューニングを行う
  • ジャイロチューニング
  • *その場回転プログラムを行い,ジャイロと回転角速度のログを取得する
  • *ジャイロ定数[rad/sec/step]*ジャイロ出力[step]のログを積分したグラフと,回転角速度のログを積分したグラフを比較
  • *ジャイロ定数[rad/sec/step]*ジャイロ出力[step]=回転角速度[rad/sec]となるようにジャイロ定数をチューニングする
  • *積分はPC上で行うと楽.エクセルで2つのグラフを比較して,それっぽく一致するように定数の調整を行う(ちょっとだけエンコーダ側に遅れが入ったグラフになる)
  • 1区画直進プログラム(壁なし)
  • n区画直進プログラム(壁なし)
  • 1区画直進プログラム(壁あり)
  • n区画直進プログラム(壁あり)
  • その場回転プログラム+n区画直進プログラムを組み合わせて,支部サーキットプログラム
  • その場回転プログラム+n区画直進プログラムを組み合わせて,探索アルゴリズム(左手,拡張左手,求心,足立など好みのもの)
  • 90度スラローム回転プログラム
  • 90度スラローム回転プログラム+n区画直進プログラムを組み合わせて,支部サーキットプログラム
  • 90度スラローム回転プログラム+n区画直進プログラムを組み合わせて,探索アルゴリズム