ロボット教室でロボカップジュニアにチャレンジしている生徒さん達からI2Cのトラブル対策について質問を受けることが増えてきました。
そのそもI2Cは、直径220mmの筐体内での通信に不具合がでるほど脆弱な通信規格ではありませんので、不具合原因を特定しましょう。
先ず、ノイズ以外の良くある定番不具合原因について、ご確認下さい。
①I2Cの電圧
TJ3B、TJ3-CORE、ArduioUNOを使っていてNucleoなどの高性能マイコンへ移行した方に多いパターンがセンサ流用でのトラブルです。
例えばダイセン電子製9DコンパスをそのままNucleoに接続するとNucleo側が3.3V、9Dコンパス側が5.0Vなので問題が起こります。
このトラブルは分かりにくい症状で、センサのレジスタセットアップが正常に済んでデータもそれっぽく出てきます。
プログラムについては”ダイセン電子工業さんのセンサをArduinoで使う”をご覧下さい。
ダイセン電子工業さんのセンサをArduinoで使う - 隠居エンジニアのものづくり (hatenablog.com)
"ArduioUNO - 9Dコンパス"のテストプログラム結果
方位 角速度 ピッチ ロールの順番にシリアル出力した結果です。
Opening port
Port open
62 -1 -113 380
62 -1 -113 381
62 -1 -113 381
62 -4 -114 381
62 5 -114 382
62 2 -114 382
62 2 -114 382
62 4 -113 382
62 0 -114 382
62 -2 -114 382
"Nucleo - 9Dコンパス"のテストプログラム結果
方位 角速度 ピッチ ロールの順番にシリアル出力した結果です。
Opening port
Port open
358 5 1698 103
358 1 1698 103
358 7 1698 103
358 65533 1698 103
358 2 1698 103
358 0 1698 103
358 65529 1698 103
358 65534 1698 103
358 10 1698 104
358 1 1698 103
センサを固定しているので角速度は0付近を公差範囲でばらついたデータが出るのが正解ですが”飛び値”があります。
センサを動かして見ると方位や傾きもそれっぽくデータが変わるので”動作した”となるのですが、バッテリー駆動のロボットでは僅かな電圧降下でもデータ化けの頻度が上がりますし、モータのノイズも影響します。
そもそもギリギリアウトの状態です。
今一度、マイコンのI2C電圧とセンサのI2C電圧が同じになっているか確認して下さい。
②"Original Pixy"または "Pixy2 + Pixy1.0 compatibility mode"の使用
サッカーオープンチャレンジの定番カラーイメージセンサですが、”Sig1”をカメラが捉えていると”Sig2”以降のデータ取得頻度が下がる問題を抱えています。
ですので、オレンジボールには確実に接近するのにボールをキャッチしてゴールに向かうプログラムに切り替わったとたんにクルクル回りだすとか、迷ってカクカク動くとかの症状を示します。
詳細は”PixyCAMを2色以上のターゲットに対して自動制御する時に、発生する問題について”をご覧下さい。
PixyCAMを2色以上のターゲットに対して自動制御する時に、発生する問題について - 隠居エンジニアのものづくり
原因の切り分けは簡単でオレンジボールをSig2に登録、青色ゴールをSig1に登録、プログラムをこれに合わせて修正します。
オムニビションなど後ろに視界のあるロボットは後方視界をテーピング等で見えない様にして、黄色ゴールとロボットの間にオレンジボールを置いてスタートします。
青色ゴールが見てない時は回転する等のしくみがない場合は、ボールキャッチしたら手動でロボットを青色ゴールに向けてあげます。
これで青色ゴールに向かう動作が正常化すれば確定診断です。
対処方法は
●ボールキャッチした時にオレンジボールがカメラから確実に見えないようになる筐体設計に変更する。
●Pixy2 + Pixy2 modeで動作する様にプログラム変更する。
この2種類の不具合原因で8割は解決しています。
確認する価値はあると思いますのでお試しあれ。
残り2割の不具合原因については、またの機会に記事にします。