KonashiのI2Cについて
iPhoneからコントロールできるラジコンを作ろうと思い、KonashiのI2Cを使って、モーターを同時に制御しようとしたところ、レイテンシが大きすぎて、真っ直ぐ走らなかったという話。
iPhoneからコントロールするラジコンを作る方法としては、他にもいろいろあるが、ちょうど手元にあった書籍
iOS位置情報プログラミングiBeacon/GeoFence/Navi/CoreMotion/M7の理解と実践
- 作者: 橋本佳幸
- 出版社/メーカー: 秀和システム
- 発売日: 2014/02/27
- メディア: 単行本
- この商品を含むブログ (2件) を見る
しかし、ロボットを直進させるために、iPhoneから(ほぼ)同時に左右のモーターを動作させようとしたところ、2つ目のモーターが動作するまでのレイテンシが大きすぎて、真っ直ぐ走れなかった(もちろん、停止するときもズレる)。
I2Cは、命令を送るたびに、
- 回線オープン
- 命令送信
- 回線クローズ
の手順を行う必要があり、上記それぞれのフェーズにウェイトを挟まなければいけない。
ウェイトは、書籍のサンプルでは各5msだった*2が、今回動画で確認されたレイテンシは15msどころではないので、これが直接的な原因ではない。また、I2Cの通信速度は理論値で100kbpsで、今回程度の情報量で速度が問題になることはない。他に考えられるのは、KonashiとiPhoneを繋ぐ、Bluetooth LEのレイテンシくらいか。
どうにも解決策が思い浮かばなかったので、Konashiの中の人に聞いてみたところ、KonashiのI2Cは、そういったシビアな要件で使うものではないよ、と他の方法をオススメされた。I2Cは、配線が少なく済むので、便利だが、どうやらこういった用途には使わないほうが無難らしい。
*1:構成としては、SeeedStudioの2WD Arduino台車ロボットプラットフォームに付属のモーターを付けて、KonashiのI2Cで左右のモーターをコントロールしている(ソースコードや回路図は、ネット上でも公開されている)。
*2:Konashi公式のサンプルでは、1msになっているものもあったが、自分の環境では5ms未満にすると誤動作した。