訪問者数

HITEC Multi-protocol interface

まえから気になっていたHITECのサーボHSR-8498HB
PWMのほかにHITEC Multi-protocol interface(HMI)というプロトコルが使えるらしい。が、資料がない。

どうにも気になったのでHITECに質問メールを出してみました。
回答が来ました。
「現在作成中。完成したらHPで配布する。しばし待て。」
とのこと。おおっ。好感触。

きっとハングル語の資料しかなくて、今頃翻訳しているのでしょう。
まてよ、そうだとしたら、韓国のHPでは公開されているのかも・・・。
探しました。韓国だかヨーロッパだかのHITECを。

発見。
http://www.robonova.de/store/product.php?productid=16133&cat=0&page=1

写真の右側のAnleitungって文字を押すとPDFが見れます。
いろんな国の言葉で書いてあります。
どうやら、ポジションキャプチャや3種類の設定を切り替えれるみたいです。3種類の設定内容の説明は見つけれませんでした。(私は英語もスパニッシュも読めません。日本語 すこし わかります)

とりあえず、HMIはサーボを制御するプロトコルではないようです。残念。
3種類の設定内容が気になる・・・。

処理速度の改善

ジッタの件ですが、やっぱりまだ気になります。
と言うことで、今度は処理速度の改善を行いました。

OAKS16-MINIを購入したときについてきたコンパイラを使用していますが、このコンパイラはフリー版らしくて、フリー版はコンパイルの最適化オプションが使用できなくなっています。仕方ないので、コーディングでやりくりすることにしました。

処理速度の高速化といえば、いろいろ思いつきますが、
1、まずは関数のINLINE化を行いました。関数呼び出しは関数呼び出しするまでに時間がかかるので、関数呼び出しを減らす方法です。あまり効果が無かったです。
2、次にSwitch文を関数ポインタ配列で処理するように変更。Switch文よりも配列参照のほうが早いらしいです。これは効果あり。
3、最後に*16の記述を<<4に変更。掛け算は苦手だけど、シフト演算は得意らしいです。これも効果あり。

どうやらジッタみたい

Vinsentのプログラムの不具合でPWMが正確に出力できていない不具合を調べてみました。
PWM信号はタイマを使用して生成しているので、タイマ値を調べてみたところタイマの値は正常でした。てっきり桁落ちが原因でタイマ値がおかしくなっていると思っていたのですが、予想が外れました。
もしかしてと思い、19個のサーボ制御をしているプログラムから、1個のサーボ制御をするプログラムに変更してみたところ、サーボが綺麗に動きました。原因はジッタみたいです。

ジッタってやつの存在は以前から知っていましたが、職人気質の神経質なひとが気にする程度の症状だと勘違いしていました。結構ひどい症状が現れるのですね。

さて、ジッタフリーを目指して修正に取り掛かればよいのですが、めんどくさがりやな僕はそんなことしたくないので、ボトルネックになっているところだけ修正して蓋をしておこうと思います。
ボトルネックはサーボ毎に、PWM制御用タイマ値の計算をしてPWM制御を行っていることだと推測しました。そういう方式ではなくて全サーボ分のPWM制御用タイマ値を計算してから、サーボ毎にPWM制御を行えば改善するはずです。
ようするに、サーボ制御中はサーボ制御以外の処理をマイコンに極力やらせないようにすれば、割り込み処理が遅延する可能性が下がってジッタが減るのではないかと思うのです。

早速修正しました。効果のほどは、まあまあです。まだまだジッタは残っていますが、それには気が付かなかったことにします。

4月15日にむけてモーション作成をしなきゃなりません。
足裏サイズを7050から5030に変更したら、同じモーションでは歩けませんでした。7050と5030って比率がなんとなく7対5って感じだけど、面積で考えたら35対15なんだよね。半分以下だもん。Vinsentの防御力も半分以下になってしまう。
モーションを工夫して入賞めざすぞ〜。お〜!

モーションエディタのソースコード

Vinsentのモーションを作成するときに使用している自作モーションエディタのソースコードを公開します。

モーションエディタのソースコード

とっても汚いソースコードなのでお恥ずかしい限りですが、Vinsentのソースコードとペアなので公開しておきます。実行ファイルも入っています。
コンパイラはフリーのWideStudioです。

Vinsentのソースコード

第六回ROBO-ONE J-Classに参加したときのVinsentのソースコードを公開します。
ブログシステムの関係で、拡張子をTXTに変更してあります。
mini1.txt→mini1.c
sect30.txt→sect30.inc
が正しい拡張子です。

mini1.txt
sect30.txt

なんの技術もないソースコードですが、これからロボットを始める方には参考になると思います。解読するなり、そのまま使用するなり、改造して使用するなり、ご自由に(笑)。
がしかし、不具合も含まれています。
サーボ制御PWMがちょっとおかしいです。
1:サーボの位置を0度に指示すると、PWMがONのままになります。
2:サーボの位置を99度から100度にすると、大きく(1度以上)移動します。
原因は簡単に推測できますが、とりあえず運用でカバーできるレベル(大会前で時間が無かったのとモーションデータの作り直しを恐れた)だったので、そのままにしてあります。
近々に修正予定で、修正したら原因をブログで公開する予定です。いつまでたっても公開されない場合は、不具合が取れなくて諦めたんだと理解してください。

Template Designed by DW99