GROBOTSの最近のブログ記事

金曜土曜と仕事で東京に出張していたのですが、帰ってきてG-ROBOTSをオーバーホールしました。
交換パーツは腰と腕。サーボの反対軸が折れました。

IMG_3262.JPG

もう4年以上稼働して大会にも相当出場しているのですが、その間壊れたサーボは1つだけ。
本当にコストパフォーマンスに優れたロボットだと思います。

そんなG-ROBOTSを使って作ったExcelWalkerと、G-ROBOTSをHPIから頂くきっかけとなったKUMACOの作りかた、がいよいよロボコンマガジンに載りました。

改めて自分の記事を見てみると日本語の能力の無さを痛感しますが(^^;A
頑張って書いてみたので是非読んでみてください。

ちょっとだけ立ち読みも出来ます。
ちなみに天保山のJSRCの結果にも少しだけ名前が載ってるのですが、合わせてロボコンマガジン初デビューでした。

ROBOCON Magazine (ロボコンマガジン) 2012年 05月号 [雑誌]ROBOCON Magazine (ロボコンマガジン) 2012年 05月号 [雑誌]

オーム社 2012-04-14
売り上げランキング :

Amazonで詳しく見る
by G-Tools

第12回のROBO-ONEのHPI賞で頂いたG-ROBOTS、一方的にすごく感謝してるんですが、少しはHPIさんに貢献できましたかねー。

G-ROBOTSをRPU-10を経由せず直接PCから制御してみよう!
ということで、やってみました。

まずは、RS-485の変換器を製作します。
本来はUSB-RS485変換器(RSC-U485)を購入すれば一発OKな話なのですが、今回は、ベストテクノロジーのUSBシリアル変換ケーブルを利用しました。

IMG_3260.JPG

ピンアサインが分からないので、テスト基板を作って、ブレッドボード用のジャンパ線でテスト!

※ちなみにUSBシリアル変換ケーブルの方がちょっと安いのですが、追加部品と手間を考えると断然RSC-U485の方が楽なので、オススメはしません。あくまでも、たまたま手元にケーブルがあったからという事で・・・。(^_^;A

結果は、バッチリ動いています。
双葉さんのHPにあるHSPのサンプルで確認しました。

test.png

これでExcel Walkerは次のステップに進みます。

とはいえ、まずは今までのバトルで傷ついたG-ROBOTSを修理するのが先ですね。
腰も肘も砕けて大変な事になっています(笑)

10月の ニコニコ技術部ランキングにおいて、Excel Walkerの動画を139位でピックアップしていただきました!!

ありがとうございます!


さてさて、とりあえず公開できた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はタイマが駄目とか、リアルタイムの制御には向いていないとか言われていますが、現状サーボの通信速度的にまだその境地に達していません。
どこまで行くとその壁にぶち当たるんだろう・・・。

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

Excel Walker "Office2003版"

2003.png

Excel Walker 002β

今回は、Office Excel 2003にも対応しました。
先ほどファイルを差し替えて、97-2003形式のファイルを同梱しています。

ただOffice2007形式からコンバートしただけなので配色が原色カラーになっています。
また、グラフをリアルタイムで描画すると、2010とは挙動が違います。
時々残像みたいなものが現れるのですが、おそらく描画のアルゴリズムがかなり変わっているものと思われます。

開発者視点でも、暗号化の脆弱性とか、いろいろマズイなーと思う点が多々見えています。
今後も開発は2010で続けるんで、2010の専用機能が増えてくると今後の対応は厳しいかもしれません。

しかし、G-ROBOTSにしか対応してなくて2007形式にしか対応してないアプリとなると、まず環境的に試せる人がどれだけいるんだろう!?という話ですね。
すごくニッチなソフトを公開してしまったなぁ・・・と(笑)

Excel Walker公開します。

excelwalker.jpg


さて、動画を公開してから「エクセルでこんな事が出来るのか!」と反響をいただいた反面、「あくまでも”エクセルでやった”だけ」、という意見も頂きました。

まさにその通りです。

ただ、エクセル(およびエクセルVBA)でやる事には良い所があって、

  • インタプリタなのですぐに実行できる
  • マイコンにプログラムをロードする必要もない
  • デバッグ時、変数の可視化・グラフ化が容易(しかも、ボタン一つで実装可能)
  • 環境の入手・構築が簡単(いつでも・どこででも)
  • 非力なマイコンに比べ、膨大なリソース使い放題

この辺りは、開発プラットフォームとしてはとても魅力的でした。

ロボットプログラミングにおいてリアルタイム性を追求される方には厳しいですが、マシンスペックでゴリ押しすればそれなりには使えます。
まぁ、特に自分みたいなライトプログラマにはとても面白いプラットフォームなので是非お勧めします。


さらに動画の方も多くの方に見ていただいて、ありがとうございます。
おかげさまで一瞬ですが、ニコニコ技術部のランキング、一桁の7位まで上がりました。

【ニコニコ動画】Excelを使ってロボットを歩かせてみた。【Excel Walker】

rank7.png

また、相乗効果でロッカーボギーの方も過去最高の83位をマークしました。

【ニコニコ動画】NASAの火星探査機型ロボを作ってみた

rank83.png

あわせてお礼申し上げます。

エクセルを使ってG-ROBOTSを歩かせるプロジェクトですが、だいぶ形になったところで気合を入れて動画を作ってみました。



そして、このエクセルブックの名前を「Excel Walker」と命名しました。

ニコニコ動画はこちら↓
※もし良ければ励ましのコメント等いただければ、作者喜びます(笑)

動画編集は一部だけ試験的にAdobe After Effects CS5.5を使ってみました。(オープニングロゴの部分)
基本的な編集はiMovie'11です。
Premiere使いこなせるようになりたいなと思いつつ、最近Final Cut Pro Xも気になってます。

エクセルでジョイスティックを使うに当たって、改めていろいろ検索してみたものの、「Excel VBA ジョイスティック」で検索すると、以前紹介させていただいた眠り猫さんのサイトしか情報がありません。

新しいジョイスティック(記事)に対応させるには、どうしてもXYZの3軸だけでなく、RVUの回転軸も読み込まなければなりません。

おそらく眠り猫さんのサンプルはJOYINFOを参照しているのでしょうが、6軸読み込むためにはJOYINFOEXが必要なので、今までのコードをあきらめ、自分でAPIを勉強し直すことにしました。

Amazonで買ってみたExcel VBAのゲーム製作本を買ってみてベースとなるJOYINFOの使い方はだいたい把握できました。1冊買って参考になったのは1ページだけでしたがw
またJOYINFOEXに関しては、DJEBEL375氏の「サイドワインダーからの値を取得」にあるコードで、だいたい把握できました。

ちなみに上記のJOYINFOEXのサンプルはVB4,6用のコードなのですが、幸い若干の修正だけでExcel2010に移植できました!

joy.png


というわけで、Excelで6軸のジョイスティックを用いてゲームを作りたい方、ロボットの制御をやりたい方向けに、一応、自分の作ったエクセルファイルも公開します。

ダウンロードはこちらから
(joystick_test_excel2010.zip)

注1:Excel2010で製作しています。(xlsm形式)
注2:お約束ですが、マクロとActiveXのセキュリティは適宜変更してください。
補足1:JOYINFO、JOYINFOEXどっちも使えます


今まで、ジョイスティック関連はHSPやVC++ではDirectXを使っていたので困ったことがなかったのですが、意外とAPIで呼び出すVBA用のコードが少なくてびっくりしました。

今回得た教訓、”Excel VBAはVBのリソースが使えるので、困ったときはVBで探しなさい”


参考にさせていただいた書籍・URL

Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応
近田 伸矢 谷 孝一 武藤 玄 USA【うさ】 影斬

インプレスジャパン 2009-03-06
売り上げランキング : 15659

Amazonで詳しく見る
by G-Tools

Gロボ無線化にあたってまずBluetoothを考えたのですが、部品ボックスを眺めていると

が、在庫にあったので、
ZIG-100B用RS232C変換器×1、と、USBシリアル変換ケーブル×1を追加購入して、ZigBeeの環境を作りました。

ベステクの"USBシリアル変換ケーブル"は単純なRS232Cの変換ではなく、同時にRS485とTTLの変換も出来てしまう優れもので、Dynamixelシリーズのモーターのパラメーターを直接書き込むことも出来る代物なので、この際思い切って購入しました。

購入するにあたって、この間秋葉原に行ったときにいろいろ店を見て回ったのですが、ベステクの商品を在庫で取り揃えているショップってあんまりないんですよね。
結局、直販で買いました。

ちなみにこのZIgBee、息の長い商品の割にROBO-ONEクラスタではあまり使っている人を見ない気がします。
XBeeが人気なんでしょうか。

今回、ZIG-100B用RS232C変換器を購入した見たら、以前から持っていた変換器と基板のパターンが変わっていました。
右が旧基板で、左が新基板です。

IMG_1984.JPG

IMG_1985.JPG

使用部品や使い方は変わっていませんでしたが、レギュレーターとDCジャックの位置が変わっていました。
収まり具合は旧基板の方が好きなのですが、ノイズ対策か何かでしょうか…。理由は分かりません。

とりあえず、PCに2個繋いだ上で、ターミナルソフトを同時起動してペアリングさせます。

IMG_1990.JPG

バッチリ、115200bpsでペアリングOKです。

zig.png

さて、この基板についてくるACアダプタの出力電圧は5Vなのですが、使われているレギュレーターのL1117-3.3のデータシートを見てみると上限が15Vです。電源変換なしでリポ直結OKですね。
(このL1117ってあまり見ないけど、電圧降下1.2Vの電流容量1.2Aで結構面白いレギュレーターですね。)

というわけでこんな感じに改造しました。

IMG_1999.JPG

シリアル用の9ピンコネクタを取り外して、2.5mmのミニミニピンジャックに変更。
入力電源はGロボのサーボ(RS30x)のコネクタを取り付け、サーボの分配ハブから7.4Vを直接とれるように変更。

胸部に組み込みました。

IMG_2000.JPG

IMG_2001.JPG

エクセル運動学もちゃんと動きました。

ただ、良い感じに収まってますが、アルミの胸部で覆ったのは失敗で、電波強度の劣化が激しいので、この後取り外しました。
目立たない取り付け方法に悩み中ですw

RPU-11基板剥離と修理

今日は、先週後半出張だったこともあって、溜まった仕事を片付けた後はブログを更新するか、PCに張り付いてました。
本日、4エントリー目ののブログです(笑)

ホテルの暇つぶし用にGロボを持って行ってたのですが、うっかりテスト動作でコケたときの打ちどころが悪かったみたいで、PRU-11に刺してたシリアル信号用のステレオジャックのメス側が歪んで時々接触不良みたいになってしまいました。

RPU-11自体バラすのは初めてです。バラすとこんな感じ。

IMG_1951.JPG

ATMELのAT Mega128と加速度センサとブザーが良い感じにコンパクトに収まってました。

で、やはりステレオジャックの部分が基板剥離していました。
ハンダで温めて部品を外してみたのですが、そのままでは修復不可能みたいです。
(自分の技術では…)

IMG_1967.JPG

事前に、酉旦那さんに相談していたのですが、基板交換は新品購入とそんなに金額変わらないという話だったので、ダメ元でバイパス修理してみました。
失敗したら新しいRPU-11/10を買おう・・・みたいな。

で、何とか強引に半田しました。

IMG_1968.JPG

シリアルのTTL-RS232C変換のチップが2.54mmの1/4のピッチで、自分の技術的に不可能だったので、IC側も剥離させて、強引に半田しました。

こういう時、手先が器用でハンダ上手い人って素敵だなって思います。
過去にZipponさんのFETの交換見せてもらったときに感動したのを思い出しました。

で、この状態でセメダイン(ハイスーパー5)で強引に固めてモールドし、今の所動くようになりました。
再び壊れないうちに、さっさと無線化してしまおうかな。

明日は、もんじゃー!

今、再び(三度)東京出張に来ているのですが、しまけんさんと、いしかわさんのご厚意で、もんじゃで歓迎していただけることに!

monja.png

「吉日の掲示板を見てないの?」と言われて慌てて掲示板"だけ"見てたせいで、日記の中身を見てなくて時間と場所に気が付いたのがさっき(汗
・・・とってもボケてました。

掲示板の書き込みも微妙にチグハグな感じなのはそのせいです。

本当にありがとうございます。

明日はよろしくお願いします。

--

さて、ホテルでプログラム書くと邪魔がなくてはかどるのですが、モーションを作ると狭い机から落下して痛い目にあいます。
・・・というわけで、エクセルで作る逆運動学モーション、ここまで出来ました。

某掲示板で議論してて、Application.Waitで1秒以下のwaitが出来ないと思っている人が多いみたい。
たしかにWIN32 API使うのも手ですが、Application.Waitで良いのです。

ただ、自分も拾ってきたサンプルソースからの流用だったんで、忘備録としてメモ。

Public Sub Wait()

     ' 0.5秒wait
     Application.Wait [Now() + "0:00:00.5"]

End Sub

ポイントは[]で囲っている所。
囲わないと秒単位でしか測れませんが、囲うとミリ秒まで指定できます。
精度はAPIと同様(ホントかなぁ)らしいですが、Excel限定というのもミソ。

突然ですが、G-Robotsの制御で、現状のエクセルだけではどうしても膝のサーボがダレてしまい、少し行き詰った感が出てきました。

ただ、RS-30xのサーボ自体まだまだ理解できていると言い難く、パラメーターの最適化もしていないので、まずはここからと思い、既に使いこなされている方と、中の方に直接質問してみました。

まず、V-Sidoの吉崎さんに301,302と303,304について違いをTwitter経由で聞いてみた。(勝手に掲載すみません)

@Dream_Drive 仕様上,コンプライアンス設定の最大値とか,コンプライアンスマージンの初期値が違ったはず.結果として,303,304の方が細かい制御が可能でした.加減速のタイミングもちょっと違うかも.

うーん。
そうか303が良いのか・・・。加減速に違いまであるのか。

その他、あのリターンパケットなどの速さは、そもそもRPU10のファームを自分で書かれてるとの事。…流石ですね。

RPU-10のファームに関しては、以前ベステクのGDLでSISOさんがいろいろ研究されていたので、資料は結構あるのですが、今はまだファームまで手を出す元気がないので、まずはモーターのパラメーターをどうにかしようと思います。

とりあえず、まずは自分なりにメモリのマップをサーボ別に比較してみた。

rs300.png

301,302と303,304は発売時期も違うので、それぞれ、特にコンプライアンスに違いがあるように見えますね。

まぁスペックだけ眺めても答えは出ないので、いつもお世話になっている中の方に、なぜこのような初期パラメーターになったのか直接聞いてみました。

Q1.303,304はコンプライアンススロープがどちらも"8"に設定されています。
301,302もより少ない値の方が保持力が大きいように思うのですが301や302も"8"にすると問題点などありますでしょうか?

A1.問題ありません。 初期値は各サーボが無負荷状態で発振しない(ハンチングが発生しない)程度の値に設定されています。 ロボットに組み込まれる等してある程度の負荷がかかっている状態であれば、 その状態に対する適切な値が初期値(工場出荷時の値)より小さくなることもあります。

という事は、実際に負荷がかかる状態で使うには、301,302もコンプライアンススロープの値をたとえば"8"とかに設定しちゃった方が良い動きをする”かもしれない”ということですね。

Q2.RS-302の温度リミットがRS-304より低いのは何か理由があるのでしょうか?

A2.使用される基板(回路)が異なるため、それぞれに適した値が設定されています。

なるほど、TTLやPWMの仕様の違いもあるし、回路も違うのですね。

Q3.RS-301,302は303に比べてパンチの値が2倍くらい大きいようですが、301は細かい制御が難しいのでしょうか?逆に304はかなり大きい値になっています。
(説明には”適切な値”とありますが、この値はあまり触らない方がよいですかね?)

A3.初期値はコンプライアンススロープと同じく「無負荷状態で発振しない値」ですので、 使用環境に応じて上げても(発振しなければ)問題ありません。

それぞれサーボごとに値があまりにも違うので戸惑っていたのですが、これも最適化の対象にした方が良さそう。

Q4.これは内部パラメータには関係ないのですが、303,304版のGロボは301,302のサーボコネクタと同じでしょうか。
303版のGロボのPDFには4ピンで1ピンはダミーと書いてあったので、301と同じ4ピンコネクタかなと思っていたのですが、JO-ZEROの303,304がラジコン用の3ピンコネクタだったので、ディアゴスティーニの306も同じですよね。
サーボ単品で303,304を買った場合はどちらのコネクタなのでしょうか?

A4.Futaba仕様(Futabaロゴ付)のものはRCサーボ用の3pin平型コネクタ、HPI仕様のものは4pin箱型(HIROSEのDF11)コネクタになっています。RS303MR/RS304MDで4Pinのモノが必要な場合は、HPI版となっているものを御使用ください。

4番目の質問はパラメーターとは関係ないのですが、たぶんGロボを知っててJO-ZERO、ROBO-XEROを見られた方はアレ?っと思ったはず。
前から気になっていたので聞いてみました。
追加購入のときは気を付けないといけませんね。

という訳で、いろいろパラメータについて理解が深まった気がします。

また、RS-303,304の方が発売時期が後ということもあり、トルクだけで比較できない部分で改良されている所も多いみたい。
コストパフォーマンスもいいのでこれから買うなら303が良いのかなと思いました。
とは言え混ぜて使えないので、とりあえずウチはこれからも301をメインで使うでしょう。(ディアゴのRS306は大量にありますがw)

KO-Link2で作っていた「EXCEL逆運動学」ですが、路線を変えてG-Robots版を作ってみました。
こちらはグラフを使ったシミュレーションではなく、いきなり実機で動かしています。

G-Robotsは、股関節が3軸すべて直行していなかったり、足の長さが膝の上下で違ったり…なかなか計算のやりがいのあるロボットでした。
なぜG-Robotsに路線変更したかというと、「6自由度の逆運動学を動かしてみたかったから」。
そのあたりも動画で紹介させていただきました。

とりあえず、ご覧ください。

…動画としては、20mm四方の正方形とかじゃなくて、もっと大きい動作をさせればよかったかなと思います。
「てってってー」のBGMは取ってつけたみたいになってしまいました(汗

今後の予定としては、KO-Link2で作った五角形軌道の歩行プログラムの移植と、ジョイスティックの移植。
さらに6自由度逆運動学ならではの歩行をやってみようかなと思っています。


さて、4年さかのぼって2007年の第12回ROBO-ONE。そこでHPI賞を受賞して頂いたのが今回主役のG-Robots。
あの時点でGロボの逆運動学はやりたいと思っていたのですが、他に気を取られてなかなか手が付かず、最近やっと本気モードになりました。
その間Gロボの販売権がアールティに移っていたり、V-Sidoなんていう恐ろしいソフトウェアが登場していたり、Gロボの周辺環境もいろいろ変わりました。
たぶんG-Robotsに火がついたのはそんな環境の変化でしょう。
ただ、4年前はまさかExcelで作ることになるとは思ってもみなかったと思います(笑)
双葉さん(HPIさん)、本当に素晴らしいロボットをありがとうございます。…など4年も経って改めて思ったのであえて書いてみました。

現在、出張で東京に着ているのですが、スーツケースにG-Robotsを忍ばせてきているので、講習会終わった後はラーメン屋めぐりしつつ、ホテルではまったりプログラミングしてたりします。

出張前にKO-LINK2のエクセルでの歩行シミュレーターにジョイスティックを対応させてみたのだけれど、エクセルからサーボも制御できればもっと面白いことが出来るはず・・・。
ただ、Dynamixelを制御マイコンのCM-5からスルーパケットで制御するためのライブラリがないので(作れば良いのだけれど)… というわけで、ライブラリが公開されているG-Robotsを使ってエクセルで制御してみました。

ライブラリがRSC-U485用なので、RロボのRPU-11用に書き直しました。その改造方法を覚書として残します。
(今日のツイートでUE村さんも作られたみたいなので、出来ればFUTABAのサイトでスマートな公式版を出していただけると非常にありがたいですけど。)

--

さて基本的にFUTABAの「RSC-U485用サンプル for Microsoft Excel」をベースに改造します。改造点は3か所。

1.標準モジュール1内のsrvSendを改造

' サーボ制御用関数
' このコマンドを使用する場合には、通信ポートをオープンしておく必要がある
' 送信用する
'
Public Function srvSend(ByVal pCom As Long, ByVal pID As Integer, ByVal pFlag As Integer, ByVal pAddress As Integer, ByVal pCount As Integer, ByVal pLength As Integer, ByVal pDataLen As Integer, ByRef pData() As Byte) As Integer
    Dim myBuf(512) As Byte
    Dim mySum As Byte
    Dim myRet As Long
    Dim i As Integer

    ' 送信バッファを作成する

    myBuf(0) = &H53                 ' 0x53
    myBuf(1) = (pLength + 8) And &HFF
    myBuf(2) = &HFA                 ' 0xFA
    myBuf(3) = &HAF                 ' 0xAF
    myBuf(4) = pID And &HFF         ' ID
    myBuf(5) = pFlag And &HFF       ' Flag
    myBuf(6) = pAddress And &HFF    ' Address
    myBuf(7) = pLength And &HFF     ' Length
    myBuf(8) = pCount And &HFF      ' Count
    
    For i = 0 To (pDataLen - 1)
        myBuf((i + 9)) = pData(i)
    Next i

    ' SUMの計算
    mySum = myBuf(4)
    For i = 5 To (pDataLen + 8)
        mySum = mySum Xor myBuf(i)
    Next i
    myBuf((pDataLen + 9)) = mySum
    
    ' 送信する
    myRet = WriteComm(pCom, (pDataLen + 10), myBuf)
    
    srvSend = myRet
End Function

2.受信用に標準モジュール1内にsrvSend2を追記

' サーボ制御用関数2(リターンパケット用)
' このコマンドを使用する場合には、通信ポートをオープンしておく必要がある
' 送信用する
'
Public Function srvSend2(ByVal pCom As Long, ByVal pID As Integer, ByVal pFlag As Integer, ByVal pAddress As Integer, ByVal pCount As Integer, ByVal pLength As Integer, ByVal pDataLen As Integer, ByRef pData() As Byte) As Integer
    Dim myBuf(512) As Byte
    Dim mySum As Byte
    Dim myRet As Long
    Dim i As Integer

    ' 送信バッファを作成する

    myBuf(0) = &H54                 ' 0x54
    myBuf(1) = (pLength + 9) And &HFF
    myBuf(2) = &HFA                 ' 0xFA
    myBuf(3) = &HAF                 ' 0xAF
    myBuf(4) = pID And &HFF         ' ID
    myBuf(5) = pFlag And &HFF       ' Flag
    myBuf(6) = pAddress And &HFF    ' Address
    myBuf(7) = pLength And &HFF     ' Length
    myBuf(8) = pCount And &HFF      ' Count
    
    For i = 0 To (pDataLen - 1)
        myBuf((i + 9)) = pData(i)
    Next i

    ' SUMの計算
    mySum = myBuf(4)
    For i = 5 To (pDataLen + 8)
        mySum = mySum Xor myBuf(i)
    Next i
    myBuf((pDataLen + 9)) = mySum
    
    myBuf((pDataLen + 10)) = &H10
    
    ' 送信する
    myRet = WriteComm(pCom, (pDataLen + 11), myBuf)
    
    srvSend2 = myRet
End Function

3.受信用に標準モジュール2内のServoGetDataを下記の通り改変

' サーボのデータを取得する
' 別途、通信用のポートをオープンしておく必要がある
' ビット演算がVBAにはない;;
' pCom      :通信ポート
' pID       :サーボID
'
Public Function ServoGetData(ByVal pCom As Long, ByVal pID As Integer, ByVal pFlag As Integer, ByRef pData() As Byte) As Long
    Dim mySend As Long
    Dim myRead As Long
    Dim myID As Integer
    Dim myFlag As Integer
    Dim myAddress As Integer
    Dim myCount As Integer
    Dim myLength As Integer
    Dim myBuf(256) As Byte


    ' 引数設定
    myID = pID
    myFlag = pFlag          ' 通常は9
    myAddress = 0
    myCount = 1
    myLength = 0
    myBuf(0) = 0
    myBuf(1) = 0


    ' データを送信する
    mySend = srvSend2(pCom, myID, myFlag, myAddress, myCount, myLength, myLength, myBuf)

    ' データの読み込み
    myRead = ReadComm(pCom, 48, pData)
    
    ' 戻りを設定
    ServoGetData = myRead
End Function

なんかかなり簡単に動いたので拍子抜け。
この勢いでGロボの逆運動学のエクセルシートも作ってみようと思う。

ただ、なぜか大腿部のサーボが焼けてしまったのでとりあえず帰ってから修理かな。
予備のサーボないのでションボリ。RS301CRって高いのよねー。ぐぬぬ。

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

協賛広告

最近のコメント

月別 アーカイブ

このアーカイブについて

このページには、過去に書かれたブログ記事のうちGROBOTSカテゴリに属しているものが含まれています。

前のカテゴリはExcel Walkerです。

次のカテゴリはKO-Link 1[平行リンク]です。

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