前回の日記でAIMotorのプログラムをDynamixelに移植する話をしてたのですが、先月27日にベステクから「Dynamixelシリーズ用Windowsサンプルプログラム」なるものが公開されてました。
比較的タイムリーなネタなのにすっかり忘れていたという…。
これを使わない手はないですね!(笑
で、さっそくいろいろ調べてみたのですが、ヘッダーファイルとか潜っていくとGDLの深い階層にたどり着いた。
一通り必要なファイルをそろえてVC++でコンパイルしてみるが、当然のごとくエラーの嵐。
もう、エラーを読む気にもなれないので、移植するのは5秒で諦める。
とりあえず、GDLの正規の方法でx86の設定でコンパイル出来ることは確認。
コンソールでDynamixelを制御するには十分ですね。
というか、ロボットの制御にGUIが必要なのかという話もありますが、趣味でやることに意味があるかどうかということは気にしません(笑
GDLの設定で気になったのはGDLの設定の「x86ウィンドウアプリ」
ただし、今回はあくまでもVC++で動かすことが目的なので無視。
で、僕の技量でMFCでDynamixelを動かすアプリを作るには…。
「WinSock」を使うしかないだろう!!!
方法
・制御用のアプリをMFCで作って、サーバーのスレッドを立てる。
・Dynamixel制御用のアプリをGDLで作成し、クライアントの機能を持たせる
・MFCアプリ起動時にDynamixel制御アプリを起動し、Dynamixel制御アプリはMFCアプリに接続。
・2つのアプリは「localhost」で接続されているので実質メモリ間コピーを行う。
・メモリ間なので高速なUDP接続がパケ落ちなしで使える(たぶん)
まぁ、強引ですね。
調べてみたら、アプリ間のデータの受け渡しで、簡易に行うときは結構使われてる手みたいです。
本当は完全にVC++側で制御したかったのですが、制御にPCのリソースを用いることが一番の目的なので制御がGDLのアプリ主導になるのはまぁ良しとします。
ここで、GCCは大学でUNIX上で使っているものの、いまいち普段マイコンのプログラムに使っているGDLでx86のプログラムを書くということになじめなかったのと、複雑なプログラムは全部VC++で書いていたので、まずGDLのx86プログラミングになじむためにも、ちょっと実験してみました。
とりあえず必要な要素は2つ
- スレッドはちゃんと立てられるか(まず、無理ってことはないと思うけど)。
- WinSockはちゃんと使えるか(VisualStudioのアプリと通信できるか)。
結論としては、どちらもYES。
簡単なプログラムですが、なんの問題もなくコンパイルして実行できました。
奥にあるウィンドウがVC++で作ったサーバーアプリ、手前のがGDLで作ったクライアントアプリ。
単純にカウントアップした値と文字列を送るプログラムですが、ちゃんと動いてます。
(ちなみに接続はTCP使ってます。)
まぁ、技術的にはWinsockもスレッドもいちいち話題にするほどのことじゃないんだろうけど、ちゃんと動くってのがやっぱり楽しいですね。
とりあえず、このあとに実際にDynamixelが動いてますっていう動画でも付けられたらいいのですが、実は「AX用接続ケーブル」も「Dynamixelコンフィギュレータ」も持っていないので、これらを揃えたらまた実際に続いて実際にモーターを使いながらアプリを作りこんで行こうと思います。
ちなみに、フタバのサーボに関しては、HSPも守備範囲なので、UE村さんの30軸制御のプログラムにソケットを付けて利用させてもらおうかなと思います。
(まぁHSPなんでウィンドウもHSPで作ればMCF使う意味すらなくなりますが)
というわけで、こっちの方法でうまく行きそうなんで、Windows用のライブラリ作る話はナシでm(_ _)m
PS:
今回windowsで制御するために最新のGDLをダウンロードしたのですが、ターゲットに「RPU10」が入ってますね。
噂には聞いてましたが驚きです。あいかわらず関数にコメントがないのが辛いですがw(分かりやすいからOKなんですけどね)
KUMACOに使ってるSH2/7144もGDLのターゲットに入ってるし、なんともGDLとは切れない縁があるみたいな気がしますw