MCR-VCどうやって作るか

画処理ロボットは
Takumiさんが見つけたモジュールを
大湯さんの手法で動かして、
滝田研究室の制御法でライントレースしている。
JMCR2004で既にtakumiさんや滝田教授がやってたことである。

○カメラ制御
カメラへ供給するクロックや信号の幅は無視して、
汎用IOをパコパコ動かして制御している。
このやり方はカメラの種類は違うけれど、大湯さんのゲームボーイカメラ(M64282)用コードを元にしている。
Takumiさん曰く、アセンブラで書くともっとサンプリング周波数を上げることは可能なのだけど、
スキルが無いので、H8→SHにしてサンプリング周波数を向上させている

○画データからのラインの検出
カメラデータ中のあるラインを左から右方向に差分して行き、
その差分値の最大値と最小値の間にラインがあると判断する。

これは、滝田研究室の論文
超小型1kHzスマートカメラを用いたSSM軌道誘導車両の制御 : 動吸振器による安定化
を参考に作成

○ライントレース制御
2重ループのカスケード制御で
外のループで
ライン中心点の位置と現在の操舵角度から目標操舵角度を求める
このループの速度はカメラのサンプリング周波数に影響される
内のループで
目標操舵角度と操舵角度が一致するように制御している
これは、滝田研究室の論文
1kHzスマートカメラ搭載SSM軌道誘導車両の高速化 : 操舵比とレバー比可変によるドリフト抑制
を参考にしたのだけど、間違って解釈していたようで形が違うことがわかった。

○駆動系
いつものメカにいつもの制御。

というわけで、画処理ロボットは
先人のネタを再構築して、CPUパワーと駆動系性能によるゴリ押しで走っています。

モータドライブ回路

120812
件のモータドライブ回路の構成を公開する
A3941+IRF8915の構成で、PWM周期40kHzで駆動させている。

allegroのA3941はフルブリッジFETドライバ。
PWMと回線方向とフリーの3本の信号を入力するだけで、
Nch構成のHブリッジを動かしてくれる便利なIC。
デットタイムは外付け抵抗で調整可能。

IRF8915はNchFET2個入りで、
片側18.3mΩで8.9A流せる。
ゲート容量も小さいのでスイッチング速度も上げれる。

リクエストがあれば定数も書きます。
リクエストあったので定数も公開
120802
(A3941データシートより)
・RESET端子はマイコンの電源と同じにする。
・FF1とFF2端子は、GNDに落としても良いかもしれない(未検証)
・FREEは使ってないので、動作未検証(→TypeS等のFREEと挙動が異なる@2015年2月)

////////////
追記 PWM40kHz付近でのモータ両端電圧波形
BREAKモード(SR=H)
15020702
FREEモード(SR=L)
15020701
PWMがLの区間での電圧がマイナス方向に触れている。
内部のダイオードの電圧降下分か?
これにより同一duty時にはFREEの方がモータの回転速度は遅い

/////////////
追記
FREEの動作について
モータドライブ基板TypeS等のFREEはPWMのOFF時間はモータ端子が開放されれ逆起電流は流れないが、このモータドライバでは電流が流れるので振る舞いが異なる

/////////////
PWMOFF時間中にFETのボディダイオード分の逆電圧(0.7V位?)が掛かって回転が阻害されるのならば、そのFETに並列にVfの小さいダイオードを付ければ改善されるはず。
ということでショットキーを付けてみる
15021402
OFF区間中の逆電圧が小さくなり、回転数も上がった。
FREEモードを使うのは正転時だけだから部品追加は1個ですむ。
ただ、スイッチング時のスパイクが増えたのは気持ち悪い。

第3回RMCR

Tsubameさんと共に会場入り。
全国から好き物が集まる大会は本当に面白い。
コースも直射日光も入らず、画処理でも走れる良い環境。

予選はフリー走行で本当に助かった。今年も予選落ちする所だった。
連続S時でトレースを失敗してのコースアウトは仕方ないが、
バグでコース上で立ち往生してしまうのは本当に困った。

決勝トーナメント
予選通過タイムが悪いため記念走行だったのだけど、
s技研さんがまさかのコースアウト。タナボタでベスト16入り。

上位のタイムは素晴らしいの一言。ランサーは二冠おめでとうございます。

(一部に?)人気だったCMAさんのロボット
特徴的なセンサバーレスのライントレースとバッテリ2本による駆動。
さらに走行中の駆動音が聞こえない。

みなさんお疲れ様でした。
楽しい大会ありがとうございました。
画処理ロボットで防衛大超えたぞ。ドヤッ。


(RenesasMCR1 配信より)

こつこつ

120715
・恒例の搬送箱を作る。
センサバーが無いと長さが短くなってよい。
高さ方向はカメラユニットごと取り外して低く抑える。

・レバー比(センサアーム長さとホイルベースの比)が小さいと走らない。
結局、クランク立ち上がり時の起動は改善できず。
ちなみに車線変更も危ない。
あと5cm先を見たい。

ソフトでカメラの注視点を変えれば先は見れるのだが
カメラと路面との角度が浅くなり、照明の効果が薄れてしまう。
現状でも坂の頂上での7度の角度の変化で不安定になる。
坂区間でのみ注視点を変える制御は、そのうち検討。

こつこつ


コマ送りで見るとクランクの立ち上がりで前輪が外側白線を踏んでいる
マージン無し。要再調整

カメラ誘導は想像以上に遠くを見ることができない(遠距離の画像が使いにくい)
そのため、実際の操舵輪-ラインセンサまでの距離はかなり短くなってしまう。
クランクや車線変更では、操舵する起点(ライン途切れ、直角)の検知も遅れる

日程の都合上の大会までの調整可能日はあと2日。
どうにかなるか、どうにかせねば

////////////////////////////////////////////////////////////////////////////////////
if(EncoderTotal-tmpEncoder>455){
これもたまに上手く動かない
if((EncoderTotal-tmpEncoder)>455){
括弧をつけると動く

こつこつ

RMCR2012にエントリー完了。振り込み処理も完了。
東京への飛行機と宿も予約完了(金曜夕方入り、土曜最終便帰宅)

さて、
思うようにsh-tinyのソフトが思うように動かず作業が進まない。
H8で動いてたコードが動かないことが良くある。
下記のような関数内部の変数をstatic宣言しているものがダメなときが多い。
なんでだろう?

void main(void)
{
  while(1){
    func()
  }
}
void func(void)
{
  static int count; /* staric宣言した内部変数←この値が出鱈目に変更される */
  count=count+1;
}

デュアルCPU

120617
低重心化&軽量化のため、ドライブ基板上にCPU1つを実装した基板を作る。
おかげで、定重心化と軽量化(重量600g達成)が出来たけれど、
スピードUpには繋がらず。残念。

勝ちにはいかないが、手を抜くつもりは一切ない。

ありがたいことにも、RMCR2012開催決定の発表された。
今年は、画像処理ロボットでベスト16入りを目指す。
120527
さて、画処理で参加するにして
気になるのは、コース周辺の外乱光の強さ。
自前の照明でセンシングのSNを上げているので暗い分には強いが、
日光が入るとまったく手に負えなくなる。
会場となる軽子坂MNビルの日の入りはどうだろう。
写真では普通サイズのガラス窓に見えるし、
大会は7月末の朝8時から昼過ぎまで。
ルネサス半導体トレ-ニングセンターの見取り図は分からないけれど、
窓から離れてコースが設置されれば行けるかな?

こつこつ


マーカ検出法変更、ライン追従制御の調整と、駆動モータ制御を従来モデル仕様に変更する。
コーナでインリフト?するため、重心を下げる施策が必要だ

こつこつ

マッチドさせたSANYO KR-1100AAUのバッテリ管理
20度程度の室温で充放電する
0.5A放電:8Vで停止
1.0A充電:デルタピーク20mV/Cellまたは充電容量950mAで停止
この設定で2年物の組電池もほんど痛んでないようだ。

eneloop liteのバッテリ管理
0.5A放電:9Vカット
1.0A充電:デルタピーク5mV/Cellまたは充電容量950mAで停止
初期の頃に8Vまで放電したのが過放電になって痛めたのか?
0.5mA充電でも容量も毎回不安定。まったく上手くいかない

///////////////////////////////
“速い”よりも”新しい”ほうが楽しい気がする
(大会があったとして、)もし5秒程度のハンデがあるならば、
上位入賞を狙えなくても画処理ロボットを持ち込むべきか。