■ホビーロボット部品の製造・販売 
  モータコントローラ、センサ、音声、画像、無線モジュールなど、
■ホビーロボット制作記事のページ (各種マイコン、PCとの接続事例)
■特殊メイク、特殊材料の販売 ※特殊メイクのコーナーはこちらに移りました。
Top(お知らせ) 製品紹介 使い方とサンプルプログラム 通信販売 リンク ロボット掲示板 会社案内
 Easy Robotics for all enthusiastic people!!!  ---HOBBY ROBOT PARTS SHOP ASAKUSAGIKEN---   Since 2003...

.NETでRCサーボモーション作成ソフトを作る

はじめに

 浅草ギ研ではラジコン用のRCサーボモータをPCやマイコンから動かすためのコントローラ「SC-01」を販売しており、PCで動かす場合の簡易モーション作成ソフトとして「MultiActuatorControlSystem(以下MACS:マックス)」
というWindows上で動くソフトウェアを販売しております。

 最近、ユーザー、特に学生の方から、「PCからRCサーボをコントロールするために、MACSのソースが欲しい」という問い合わせが多いのですが、管理人がC#を始めたこともあり、C#でMACSを作り直しましたのでここで公開致します。
 但し、C#を始めてまだ日が浅いこともあり、クラスの設計など皆無のもの(データが重複しているクラスもある...とか)で、参考にならないかも知れません。
 販売している方のMACSのソースですが、これは開発費をかけて外注しているものなので公開はできませんのであしからず。

 このプログラムはSC−01を使うためのサンプルプログラムとして作りましたので、このソースなどの利用方法は自由ですが、ご使用中になんらかの被害を受けても浅草ギ研は一切関知致しませんのでご了承下さい。ご要望は受けますが、ご質問には答えられません(メール等頂くのはOKですが返事が出せません。)。
※致命的な問題に関してはご要望が多い場合は即対応する場合はあります。

MACSとMACSVer2.1aの違い

 以後、売っているバージョンとここで公開するバージョンを分けるために、「売っている−>MACS」、「ここで公開−>MACSVer2.1a」とします。まだベータ版とも呼べないアルファ版です。基本的にMACS(売ってる方)の方が多機能です。

<MACSVer2.1aの特徴>
・マイクロソフトの .NET Framework がインストールされていないと動かない。(無償でダウンロード可能。以下で説明)
・実値形式で保存ができない。(サーボ位置を相対値で保存。マイコンなどのモーションデータを作るのが多少面倒)
・操作用のアイコンなどが一切無い。(メニューから選ぶだけ)
・入力チェックが甘い(数値を入れるべきところに文字を入れたりすると強制終了になったりする)
・WindowsXPでしかテストしていない。(というか.NET環境なのでXP以外はきちんと動作しないような気がします)

 普通に操作している分にはほとんど問題無いが、ちょっと使いづらいという感じでしょうか?.NET Framework環境ですが、これを入れないと動きませんが、逆に言うとこれがきちんとインストールされればこのMACSVer2.1aも動くということになります。

 浅草ギ研では今後も.NETネタを紹介する予定ですので、このページにあるようなネタ(Windowsで何か動かすとか)をやりたい方でOSがWinXP以外の方はXPへ移行することをお勧めします。


MACSVer2.1aの使い方

 まずはビルドしたものを紹介します。ソースはさらに下の方にて公開します。

 MACSVer2.1aを使うには、.NET FrameWork 環境をインストールしておく必要があります。このページを見ている方はすでにC#かVisualStudio.NETをインストールしている、つまり.NET Framework もインストールされている状態だと思いますが、もし、環境が無いが試しに使ってみたいという方はマイクロソフトのページから.NET Framework(2005年8月現在でVer1.1)をダウンロード、インストールしてください。

 「マイクロソフトの.NET FrameWork ダウンロードのページ

 MACSVer2.1aは下のリンクを右クリックして、自分のPCにダウンロードして下さい。尚、ダウンロード後はかならずウィルスチェックを行ってください。

 「MACSVer2.1aダウンロード

 これはlzh形式の圧縮ファイルで、解凍するとフォルダに AGComm.dll と MACS2_1.exe の2つのファイルが作られます。AGComm.dllはWindowsアプリを作ってみるのところで紹介したDLLでPCのCOMポートでのシリアル通信関係を行います。AGComm.dllの使い方についてはそちらのページを参照願います。exeの方がMACSの本体です。


 使い方の流れとしては、売っている方のMACSとほぼ同じになります。

 1)サーボレイアウト設定(もしくは読み込み)

 2)モーション作成、保存

 3)コントロールパネル設定、操作



1)サーボレイアウト設定

 MACS2_1.exeを起動させると次の画面になります。

<サーボレイアウト設定画面>

このボタンを押すとサーボ番号とトラックバー方向が設定できるウィンドウが開きます。サーボ配置はこのボタンの配置分できますが、ソースの定数を変えると数を増やしたり減らしたりできます。ソースは下の方で公開します。


<サーボ情報入力画面>

売っている方はサーボ名なども入れられますが、これは簡易版なので最低限の情報だけを入れます。サーボ番号はサーボコントローラSC−01のロータリーSWでも変わりますので注意してください。例えばSWが1の場合にSC−01の0番はサーボ番号が12、1番は13、2番は14...となります。
サーボ方向は次のモーション作成画面でのトラックバーの方向になります。 < だと左にスライドすると値が小さくなり、 > だと 左にスライドすると値が大きくなります。



とりあえずてきとうな位置に0番と1番サーボの配置を作ってみました。ロボットが人型なら人型に、四足歩行型なら四足に配置すると良いでしょう。

配置が決まりましたら「ファイル」−>「保存」で保存します。保存をしないと次のモーション作成に進めませんので注意してください。保存したデータファイルの拡張子は mcs2 になります。

ちなみに、MACSは実際にサーボを動かしながらモーションを作りますので、PCにSC−01をつないだり、上で設定した番号にRCサーボをつないだりする必要があります(詳しくはSC−01取扱説明書を参照)。


2)モーション作成、保存

 上の画面で「モーション」−>「モーション作成」を選択するとモーション作成画面になります。モーションがまだ1つも作られていない状態の場合はモーション名入力ウィンドウが開きますので適当なモーションの名前をつけます。




また、モーション作成画面を開くときにはとりあえずCOM1をオープンするようにしています。もし、COM1が設定されていない(NOTEパソコンなどは多い)場合でも後で設定できますのでご安心下さい。


COMポートがオープンされるとこのような表示になります。オープンされなかった場合はその旨が表示されます。


<モーション作成画面>

モーション作成画面でモーションを作成していきます。メニューの「モーション」と「ステップ」を使ってモーションを作っていきます。この画面ではトラックバーか左右矢印ボタンを動かすと即座にサーボが動きます。
 ステップはある瞬間のロボットのポーズであり、モーションはステップが集まった一連の動きです。たとえば、「右足を上げるステップ」「右足を下げるステップ」...が集まって「一歩歩く」というモーションを作ります。

通信が可能な状態であれば通信状態の表示が COM1:9600bps などのようになります。COM1以外しか使えない場合は「通信設定」でターゲットのCOMポートを設定してください。尚、通信速度は9600と115Kしか選択できません。


「モーション」
モーションの追加 新しいモーションを作ります。モーション名を入力するとモーション名が入ったタブが増えます。編集するモーションを変えるときにはこのタブをクリックします。また、このタブをクリックするとサーボはそのモーションのホームポジションにサーボをゆっくり移動させます。
モーションのコピー 選択されているモーションをコピーします。
モーションの貼り付け モーションがコピーされている場合は貼り付けます。モーション名は新しく入力する必要がありますが、ステップデータなどはコピーされます。
モーションの削除 選択されているモーションを削除します。
ホームポジション設定 選択されているモーションのホームポジションを設定します。各モーションはこのホームポジションを基準にサーボ位置を相対値で設定します。


「ステップ」
ステップの追加 トラックバーなどで動かした現在のロボットのポーズを新規に記憶します。情報は一番最後に追加されます。入力したステップ名は右のステップ情報表示欄に追加されます。この情報表示欄のステップ名をクリックすると、そのポーズにサーボが動きます。
ステップの削除 選択されているステップを削除します。ステップ情報表示欄でハイライト(青)になっているステップが現在選択されているステップを表します。
ステップのコピー 選択されているステップをコピーします。
ステップの貼り付け コピーしたステップを貼り付けます。
ステップの更新 一度作ったステップや貼り付けたステップを修正する場合は、そのステップを選択し、トラックバーなどでサーボ位置を修正した後でこのステップ更新を選択します。見た目にはなにも起きませんので注意してください。尚、トラックバーなどを動かしただけで、このステップ更新をしないと変更情報は記憶されません。
スピード一括登録 トラックバーの横の白い数値を入れる欄はサーボスピードを設定する欄です。個々にスピードを設定する場合は個々に数値を入れますが、全サーボを同じタイミングで動かす場合はこのスピード一括登録で全てのスピード欄を変更することができます。


出来上がったら「実行」−>「モーション実行」でモーションを自動再生してみます。
歩行などのように、同じモーションを繰り返す場合のテストは「実行」−>「繰り返し実行」を選択します。

モーションが出来上がったら「ファイル」−>「保存」でモーションを保存します。保存をしないでウィンドウを閉じるとデータは記憶されませんので注意してください。


3)コントロールパネル設定、操作

MACSはモーション作成支援の簡易ソフトですが、モーションを再生するボタンを作ったりもできます。
手順としては

 ・ボタン位置などの設定−>操作

となります。

<コントロールパネルの設定画面>

「コントロール」−>「コントロールパネルの設定」を選択すると、上の画面になり操作画面のボタンにモーションを割り付けることができます。左の大きいリストボックスには作成したモーションが表示され、選択できるようになっています。上ではまだTESTという名前のモーションしか作成していませんので1つしか出てきてませんね。ボタンの配列ですが、これもソースの定数を変えることで増やしたり減らしたりすることができます。
右の小さいリストボックスはモーションにキーを割り付けるものです。例えば上のTESTのモーションに’A’キーを割り付けると、操作画面にしたときにAキーを押すとTESTモーションが再生されます。ボタンの設定が終わったら下の「設定する」ボタンを押して終了します。

「コントロールパネル」−>「コントロールパネルの実行」を選択するとコントロールパネルが開きます。

<コントロールパネル画面>

ボタンにはモーション名と割り付けられたキーが表示されます。このボタンを押すか、キーを押すとモーションが再生されます。


MACSVer2.1aのソース


 ソース公開にあたり、本当はクラスを見直してこの次のバージョンから公開しようと思っていましたが新しいネタを思いついてしまいこちらの精度を上げる時間が無くなったためとりあえず現状を公開します。
 非常にわかりずらく、内容が重複している場所も多いのですがご容赦下さい。

 「MACS Ver2.1a のソース

上を右クリックして保存します。ウィルスチェックは各自行ってください。lzhファイルですが解凍すると下記のソースファイルになります。


ソースファイル名 概要 コメント
Main.cs ファイルの読み込みやサーボレイアウトを設定するフォーム
その他クラスの記述もこのファイル内にある。
Mainという名前はついてますが単にサーボレイアウトを設定するぐらいで、MotionFormから開いても良いような気がするフォーム。
その他クラスもクラスというよりは単なるデータの入れ物になっているので改良の余地がたくさんある。
ServoLayoutInfo.cs Mian.csから呼び出されるレイアウト詳細情報を入れるフォーム  
MotionForm.cs モーション/ステップ作成、実行、通信設定を行うフォーム 事実上のメインなところ。サーボとの通信関係もここにある。
MortionNameForm.cs MotionForm.csから呼び出されるモーション名を取得するフォーム  
HomePositionform.cs ホームポジションの設定フォーム。MotionForm.csから呼び出される ここにも通信系の記述がある
AllSpeedInputForm.cs スピードの設定フォーム。MotionForm.csから呼び出される  
RepeatRunForm.cs 繰り返し実行フォーム。MotionForm.csから呼び出される  
StepNameForm.cs ステップ名取得フォーム。MotionForm.csから呼び出される  
ControlPanelForm.cs コントロールパネルフォーム  
InitControlPanelForm.cs コントロールパネル設定フォーム  
CheckForm.cs 汎用的なチェックフォーム  
ComSetForm.cs 通信設定フォーム  
AssemblyInfo.cs 作者情報など  

詳細の説明は長くなりますので割愛しますが、モーションデータやステップデータおよびそれらを格納するArrayListクラス以外は特に難しい(というかわけわからない)ところは無いと思います。シリアル通信関連はWinアプリを作ってみるを参照願います。

データは1次元のモーションデータクラスの配列がメインになります。データやコンポーネントの多くは3次元の配列になっており

 xxx[x,y][z]

という形になっています。xyはサーボレイアウトの位置です。zは各モーションに対応します。zは場所によってはindexという名称になってます(統一されてない)。

例えば MotionData[index] というインスタンスは各モーションの名前やホームポジション情報などを格納しており、indexの値を変えて選択するモーションを指定します。

ステップデータはモーションデータとは別に存在しますが、上記のz又はindexを指定することによりモーションと関連づけを行っています。

詳しくはソースの中身を参照してください。


このソースは何回も言っているようになにも考えずにC#の勉強で作ったものなので、本当はきちんとデータクラスなどを設計したもの(二次利用がしやすい状態にしたもの)を公開したいところですが、現在、別ネタでSC−01を駆動するソフトを作ることになりましたのでそちらで設計したものをこちらに活用するということが考えられます(が、やらないかも知れません。すいません。)。期待しないでお待ち下さい。

別ネタについてはまた別な機会にてご紹介します。


2005年8月2日
 
(C)Copylight 2003. 有限会社浅草ギ研 | 通信販売の法規(訪問販売法第8条)に基づく通信販売業者の表示