上肢帯のあるロボット4


上肢帯ロボット、今週は、ひたすらコーディング。

2つほど、発見がありました。

1.双葉サーボのボーレートの謎

RS303/304のマニュアルによると、RS304の標準のボーレートは、115,200bpsに設定されている。

13ページには、”~460,8kbps”と書かれているが、43ページの規格には230,4kbpsが”最大”と書かれている。
28ページの通信速度の設定値は09H 230,400bps以上の記載がない。(下記の通り)

いったい、どれが本当だろう…ということで、試してみたところ、

0BH (691,200bps)まで設定可能でした。(!?)
上記の説明通りなら、リセットされて115,200bpsに戻るべきところなんですが…。
(0CHに設定した時は、流石にリセットされました。)

ちなみに、そのまま問題なく使えているので、速い方が良いよね!ってことで、今のところ問題は出ておりません。

2.FTDIのUSBシリアル変換のレイテンシタイマー

上述の通り、サーボのボーレートを最大まで出し切ったにも関わらず、それでいてサーボの更新がとんでもなく遅い。

プロセスタイムを測ると352msecもかかるので、秒間3回しか更新できていない。
サーボの更新は専用のスレッドでsleep()なしで回しているので、意味が分からない。

コードのあらゆるところにタイマを仕掛けていくと、パケットの送受信のたびに16msecの遅延があることが判明した。

Twitterにつぶやいたところ、とてもありがたいことに、人形つかいさんからご返信をいただきました!

まさに、ずばりこれです!

デバイスマネージャのCOMポートの詳細設定で、待ち時間がデフォルトで16msecになっているところを1msecに変更します。

言われて思い出したのですが、過去にも一度これにハマってますね。
でも、以前はいまいち意味が分かってなかったので、今回勉強になりました。

変更したところ、352msecだったサーボの更新が46msecに短縮されました!

ちなみに、レイテンシタイマー、1msec以下は設定できないようで、22個のサーボの送受信と角度指定のロングパケット1回送ると45回の送受信が発生するので、ぴったり1msecの遅延が、更新時間に影響しています。
このあたり(20Hzくらい)が限界でしょうか。

これを解決するには、COMポートを増やすか、中継用のマイコンが必要ということになりそうですね。

あ、ちなみに、これが今のロボットの制御パネルです。
というわけで、今週はここまで出来ました。

 

左右をミラーリングするデモ。
子供に見せたら喜んでくれました。

とりあえず、パネル上のボタンはすべて機能しています。

YouTube Preview Image

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

アーカイブ

広告

Top