とりあえず動くロボットを作り上げて、
何から始めれば良いかを教えて貰おうという目的で、
マイクロマウス合宿に行ってきた。
拡張左手+超信地旋回で挑んだプチ大会もなんとか完走。
度重なる質問に、色々と教えてくださった
まついさん、こじまさん、アニキさん、こみねさん
ありがとうございました。
とりあえず動くロボットを作り上げて、
何から始めれば良いかを教えて貰おうという目的で、
マイクロマウス合宿に行ってきた。
拡張左手+超信地旋回で挑んだプチ大会もなんとか完走。
度重なる質問に、色々と教えてくださった
まついさん、こじまさん、アニキさん、こみねさん
ありがとうございました。
・前壁による位置補正実装
・最短走行実装
・たまに減速動作なしに、次の旋回動作に移行していたことを修正
・壁切れによる距離補正追加(動作がイマイチ)
//////////////
昨年5月末にはRMCR開催のアナウンスがあったけど、
今年の大会はどうなのだろう?
7年ぶりにマブチモータの餌食になった
走行中に操舵が固定され、そのままコースアウトすることが頻発する。
ログから原因を探ると、画処理マイコンからのデータの更新が止まっており
更に探ると、カメラからのデータ送信が止まっていた。
カメラはリセットして初期状態で待機中になっていそうである
画処理マイコンはデータが送られてくるのを待っているので、
カメラが応答しない限り次の処理に入れない
画処理マイコンと駆動制御マイコンは、
カメラのフレーム毎に通信するので、ここも動作できない。
結果として、
カメラが初期化→画処理マイコンがロック→暴走という流れになっていた。
ことの発端のカメラのリセットの原因を調べると、
カメラへのコネクタのポイントでは、電源と信号線のどちらにもノイズ無しで
前輪駆動用モータの輻射ノイズという結論になった。
ということで対策を打つ
①カメラの制御ケーブルをモータから離す
これまでは”やぐら”の中にケーブルを通していたため距離が近かった
②制御ケーブルをシールドして、シールドはGNDに接続する
シールドをGNDに落とさない場合は効果が無かった
③モーター缶をGNDに落とす。
モータ缶自体の電位が暴れてアンテナになっていそうなので対処と
モータ缶自体をシールドとして使用する
さらにソフトでも対策
①駆動制御マイコンは10ms間データの更新が止まったら走行停止させる。
②画処理マイコンはカメラからのデータが3ms間停止したら、
カメラをリセットして初期設定から処理をやり直させる。
画処理マイコンの通常の処理への影響を減らすため、
ウォッチドックでマイコンごとリブートさせる。
///////////////////////////////
DCモータのノイズ対策にコンデンサを付けるのは一般的なのだろけど、
それで効果的に対処できるのはモータケーブルに乗る伝導ノイズだけではないのだろうか?
輻射ノイズの原因であろう、ブラシとコミュ間の火花放電への対処は
モータ全体を金属で覆ってシールドしないと利かないのではないか?
AWD化のために、画処理マイコンと駆動系制御マイコンとの通信を見直す。
今までは上の図のように10本のポートを使ってマイコン間通信していたのだが、
AWD化するとモータ制御用のIOが6本増えてしまい、ポート数が足りなくなる。
なので、より少ないIOで通信できるようにする。
before
同期信号線の上りエッジでアナログ変位とマーカー情報を転送
after
同期線の上りエッジでアナログ変位を転送
同期線の下りエッジでマーカ情報を転送
この変更により通信に必要なポートが7本に減り、
マーカ情報に6bitを使えるようになった。
左手法。
周回した
マクソンモータというだけで1秒追加されるとたまったもんじゃないので、
約5年ぶりにマブチモータのAWD仕様にフルモデルチェンジした。
今までの”重心が高いハイパワーRWD”は、
加減速ともに発生する強オーバーステアを押さえ込んで
スピン紙一重で走らせていたが、
それに比較して”重心が高いAWD”は始終ニュートラルステアに保つ事が楽である
車重がマクソンRWD時と同程度なので加速はダルいが、
減速は荷重の乗る前輪でブレーキがかけれるため素晴らしい
旋回時も、限界を超えてもスピンしない安定性のお陰で
RWD時よりも攻めた速度に挑戦できる。
ということで、マクソンRWD時のベストタイムをあっさりと更新。
壁トレース制御できた
//////////////
使用しているモータドライバICの都合で、
正逆転時に異なるポートからPWMを出す必要があり、
リセット同期PWMの出力ポート切り替えをTOERレジスタで行なっていたのだけれど、駄目な操作のようでPWMがよく暴走した。
PWM出力をピンファンクションコントローラで切り替えると上手く行くようになったが、
それにたどり着くまでにモータを2個壊してしまった。
とりあえず回路が動いたとこまでで放置していたマウスのソフトを書き始める。
モータ駆動用の関数やらLED発光関数やらを作成、
赤外線センサはパルス発光させて5ms毎にデータを更新させるように。
で、適当に速度制御を作って目標速度を台形的に入力する。
/////////
main関数内でPE.DRL.BIT.B10に書き込みながら
割り込み内でPE.DRL.BIT.B15に書き込もうとすると
割り込み内でポートが書き換わらないことが起きた。
main内の処理でポートに書き込んでいる間は割り込みを禁止すると良さそう。