読者です 読者をやめる 読者になる 読者になる

Yusk's UseCase

プログラマの成れの果てTipsBlog

KonashiのI2Cについて

iPhoneからコントロールできるラジコンを作ろうと思い、KonashiのI2Cを使って、モーターを同時に制御しようとしたところ、レイテンシが大きすぎて、真っ直ぐ走らなかったという話。


iPhoneからコントロールするラジコンを作る方法としては、他にもいろいろあるが、ちょうど手元にあった書籍

に、Konashiを使用した自走するロボットのサンプルが載っていたので、その構成を参考に(というかそのまま)組んでみた*1
しかし、ロボットを直進させるために、iPhoneから(ほぼ)同時に左右のモーターを動作させようとしたところ、2つ目のモーターが動作するまでのレイテンシが大きすぎて、真っ直ぐ走れなかった(もちろん、停止するときもズレる)。

I2Cは、命令を送るたびに、

  1. 回線オープン
  2. 命令送信
  3. 回線クローズ

の手順を行う必要があり、上記それぞれのフェーズにウェイトを挟まなければいけない。
ウェイトは、書籍のサンプルでは各5msだった*2が、今回動画で確認されたレイテンシは15msどころではないので、これが直接的な原因ではない。また、I2Cの通信速度は理論値で100kbpsで、今回程度の情報量で速度が問題になることはない。他に考えられるのは、KonashiとiPhoneを繋ぐ、Bluetooth LEのレイテンシくらいか。

どうにも解決策が思い浮かばなかったので、Konashiの中の人に聞いてみたところ、KonashiのI2Cは、そういったシビアな要件で使うものではないよ、と他の方法をオススメされた。I2Cは、配線が少なく済むので、便利だが、どうやらこういった用途には使わないほうが無難らしい。

*1:構成としては、SeeedStudioの2WD Arduino台車ロボットプラットフォームに付属のモーターを付けて、KonashiのI2Cで左右のモーターをコントロールしている(ソースコードや回路図は、ネット上でも公開されている)。

*2:Konashi公式のサンプルでは、1msになっているものもあったが、自分の環境では5ms未満にすると誤動作した。