VS-RC003でROBOTIS Dynamixelを制御する#09
ROBO-ONEに向けて、バタバタしていたため、文章にするが遅くなってしまいました。
新たにアドレス251を用いた「SELECT+START」の脱力に対応したのと、VS-RC003の「CPU基本制御周期」についての考察です。
GitHubの方も更新しています。
VSRC003-ConnectR
VS-RC003とOpenCM9.0.4を繋いで、ROBOTISのコマンドサーボをRobovieMaker2から制御するサンプルソースとプロジェクトファイル
https://github.com/dreamdrive/VSRC003-ConnectR
まず、脱力の話ですが、ROBO-ONEのルール上、リモートで脱力できる機能が必要になります。
もともとVS-RC003にはコントローラーの「SELECT+START」で脱力する機能があります。「SELECT+START」を押すとアドレス251が0と1に交互に切り替わり、連動してアドレス251の値が1ならサーボON、0ならサーボOFFという形になっています。
アドレス251は、外部からシリアルで書き込むことも出来ますし、逆に状態を読み出すこともできます。
ただ、この機能を使うとなると、サーボ16個分を2回の通信(16byte×2)で収めているのに、更にアドレス251の2byteを読むだけに1回の通信を使ってしまい、制御周期が60/2=30Hzから60/3=20Hzに落ちてしまうため、この機能を使うかどうか、他に逃げ道がないか、苦渋の選択でした。(とはいえ実装しないとROBO-ONE出られないし…)
そんなときにふと気になったのが、VS-RC003のCPU設定の中にある「CPU基本制御周期」の項目。
デフォルトで16667usecに設定されていて、つまり周期としては60Hzなので、なんとなく通信回数の秒間60回とリンクして気になりました。
調べてみると…
webに下記の通り記載がありました。
ロボットの動作が異常に速い場合の対処方法について
この中で「CPU基本制御周期」の数値を確認してください。
https://www.vstone.co.jp/products/vs_rc003hv/qa.html
通常この数値は「16667」ですが(左下画像参照)、モーションの速度が速い場合「10000」などになっています(右下画像参照)。もし「16667」以外の数値になっていたら、「16667」を入力して、ダイアログ下部の「適用」ボタンをクリックしてください。最後に「閉じる」ボタンをクリックし、ダイアログを閉じてください。(右下画像参照)
つまり、よくわからない。
だけど・・・
- 設定が変更されていることがある=設定することができる
- 10000に設定されていることがある
- 10000だとモーションの速度が速い
ということらしいです。すごく怪しいですね!
実験してみましょう。
まずは、デフォルトの設定で、制御周期を計測します!
1周期が約50msecで全体で20Hzの制御周期になっています。
ベースの制御周期がVS-RC003の60Hzで、3つの処理を行っているので、60/2=20Hzで、計算通りですね。
以前、計測したのも同じです。
次に、例にある10000に設定してみます。
おお!
約30msecに縮んでいます。
こちらもベースが100Hzなので、100/3 = 33Hzで、おそらく33Hzですね。
ということで、アドレス251を用いた脱力の実装の以前は、60/2=30Hzだったのですが、CPUの基本制御周期を見直すことで、100/3=33Hzで、むしろ速くなりました!
じゃあ、次はベース120Hzだ!ということで、8333usecを設定してみます。
ダメでした・・・。
どうも、10000以下の数値は、強制的に10000に修正されるようです。
最小値が10000のようなので、これを最適値とするしかないようです。
実際、先日のROBO-ONEに出場した際のKO-Link3の設定は10000でした。
本当はもっと速く通信したいんですが、ロジアナで見た感じもかなり余裕がないので、通信速度が115200bpsであることも含めて、限界のようですね。
いろんな面でVS-RC003のスペックの限界が見えてきました。
10年戦えていることもすごいですが、是非是非、Vstoneさんには他社のシリアル通信にも対応した、もっと高速なVS-RC基板を出してほしいところです。
ちなみに、ROBO-ONE Autoなどで、今後VS-RC003をシリアル通信で使用する用途を感がている方がいらっしゃったら、同じく制御周期の最大値を取る意味で、CPU基本制御周期の値は10000がいいんじゃないかなと思います。
コメントを残す