VBで正確な待ち時間の計測方法

さてさて、とりあえず公開できたExcel Walkerですが、次の段階を目指しています。
まず、一番に気になっているのは制御周期。
すでにお気づきの方もいらっしゃると思いますが。Excel Walkerの制御周期は5Hzです。
200msに一回しかポーズを送信していません。
サーボ側に角速度を計算させて帳尻を合わせています。

やはり制御周期を一定にかつ、ある程度リアルタイム性を確保したい。
現在、毎ループの待ちはSleep関数を用いているが処理を含まない待ち時間の指定のため、マシンスペックによる実行時間が一定ではありません。
なので200msのウェイトに180なんて数字を推奨しているのはこのためです。

まず、処理を含んだ待ち時間を設定するために下記のようにプログラムを変更します。

HSPだと"await"というとても便利な"待ち関数"があるのですが、VBにはそんなものはないので自分で作ります。

こちら(Visual Basic - Wait関数を作る)を参考にしました。

Declare Function timeGetTime Lib "winmm.dll" Alias "timeGetTime" () As Long

Private Sub Main()
    
    Dim starttime As Long
    Dim waittime As Long

    waittime = 10  '毎ループ10ms待つ設定

    'ループスタート直前の時間を記録
    starttime = timeGetTime()

    Do

        '//////////////////////////////
        '   ここにメインの処理を書く
        '//////////////////////////////

        '待ち
        Do While timeGetTime() - starttime < waittime
            DoEvents
        Loop

        '待ち終わった時点の時間を記録
        starttime = timeGetTime() 

        ' ---- この位置でロボットに命令送信!----

    Loop

End Sub

これで、テストしてみました。

time.png
(〇で囲んだ部分は実行開始からの計算回数を示します)

time2.jpg

手動で計測しているので計測にも誤差がありますが、ほぼ正確に10msecで待てています。
良い感じですね。

あとは制御周期の最適化。

まず、ジョイスティックの読み取り。
現状で、1回のスキャンにかかる時間は5.1msec(実測)
これは意外と速くてびっくりしました。

ロボットとの通信に関しては、115200bit/s(14400Byte/s)で設定しています。
1回の通信が20サーボ分、ロングパケットで110Byte
単純に110Byteで割ると、1秒間に130回ポーズを送信できる計算になる。

ただ、シリアル通信に関しては深いところまで理解していないので、単純にこんな計算でいいのかな?
オーバーヘッドとか考慮しないとイケナイ'何か'はないのだろうか…。
詳しい人教えてくださいm(__)m

というわけで、そこはよくわからないので余裕を見て制御周期を100Hzにしようと思う。
たまたまテストした10msの設定で行けるので採用!

しかし、Windowsはタイマが駄目とか、リアルタイムの制御には向いていないとか言われていますが、現状サーボの通信速度的にまだその境地に達していません。
どこまで行くとその壁にぶち当たるんだろう・・・。

こんなところで、今日はこの辺にしておこう。

Profile

me.jpg
Name : みっちー
小学校で電子工作にハマり、高校時代はゲームプログラミング、大学時代にロボット製作へどっぷり浸かりました。
社会人になっても、なにかとものを作るのが大好きで、日々ネタと仲間を求めて活動中です。

Dream Drive!!

bana.png
http://dream-drive.net

趣味のロボットとプログラムを中心としたコンテンツのサイトです。

My Robots

kolink2.jpg
KO-LINK2
第2世代 並行リンク足ロボット

kolink.jpg
KO-LINK
並行リンク足ロボット

BusterGX.jpg
BusterGX (Ex Walker)
G-ROBOT + ROBO-XERO

kumaco.jpg
KUMACO
ぬいぐるみロボット

SARUBO.jpg
SARUBO
JX-SYSTEM搭載ぬいぐるみロボット

kokuten3.jpg
KOKUTEN 3
リアルタイム逆運動学制御ロボット

meros.jpg
MEROS
膝なしロボット
(胸部マトリックスLED搭載)
by Mechaniker

kokuten12.jpg
KOKUTEN 1&2
はじめてのロボット
by Mechaniker

協賛広告

月別 アーカイブ

このブログ記事について

このページは、みっちーが2011年10月18日 21:55に書いたブログ記事です。

ひとつ前のブログ記事は「Excel Walker "Office2003版"」です。

次のブログ記事は「VS-RC003をZig-Bee経由で通信」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。