KHR3-HV & GR001 with MATLAB

1.今回の目標
Matlab(2014a)から直接ロボットを制御する.
但し(まずは)
- Matlab本体から(Simlinkにはつながない)
- 有線接続
- 全関節の角度制御のみ
想定するOS
- Ubuntu Linux (14.04)
- Windows 8
- (OSX)
2.方針
以前製作したライブラリrsxを拡張します.

3.拡張例 (C++ と Python)

既にC++とPython向けの拡張行っているので,これと同様に拡張します.
C言語で記述されたdpservoを利用する上位レイヤを用意することで実現します.
4.C言語とMatlabの連携
MatlabからC言語で実装されたライブラリを利用する手段には大きく2通り存在します.
- 共有ライブラリをロード&実行する汎用関数を利用する ( *1)
- MATLABが読み込める形式の共有ライブラリ(MEXファイル)を作成する ( *2)
1.の方法は特に追加の作業なしにC言語と連携出来ますが、手順が煩雑です。
今回はより利用手順が簡単な2.の方法をとります.
*1 : http://jp.mathworks.com/help/matlab/using-c-shared-library-functions-in-matlab-.html
*2 : http://jp.mathworks.com/help/matlab/ref/mex.html
5.librsxのMEX拡張

こんな感じになります.
MEXファイル1つに付き1関数しか実装出来ないためAPIの数だけMEXファイルを作成します.
また複数のMEXファイルが共通のハードウェアリソース(シリアルデバイス)を使用します.
このままだとAPIを実行する度にそれらの初期化等を行わなければなりません、
これを回避するためにdpsproxyという層を設けています.
6.C言語におけるMATLAB連携(1/2)
1 |
/* |
6.C言語におけるMATLAB連携(2/2)
1 |
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { |
7.ビルド手順 Linux
1 |
// required package |
7.ビルド手順 Windows
1 |
// required package |
※ 必要に応じてPATHを通してください.
※ WindowsもしくはMATLABが32bitの場合にはMinGWも32bit環境を用意する必要があります
(http://www.mingw.org/).
私は試したことありませんがおそらく以下のpkgがMinGW上で必要となるはずです.
mingw-base mingw-gcc mingw32-gmp(dev) msys-ligbmp(dev)
7.起動手順 Linux/Windows
Linux の場合
1 |
> cd ${インストールディレクトリ} |
Windows の場合
1 |
MATLAB起動後にインストールディレクトリ以下のlib/mexを |
7.1 実行手順 KHR3-HV (1関節だけ)
実行手順はポート名を除きLinux/Windowsで共通です.
1 |
% サーボ通信プロトコルを指定 |
7.2 実行手順 KHR3-HV (複数関節)
実行手順はポート名を除きLinux/Windowsで共通です.
1 |
% 前ページの続き |
7.3 実行手順 KHR3-HV (offset設定)
実行手順はポート名を除きLinux/Windowsで共通です.
1 |
% 前ページの続き |
※ 極性の設定は今後対応予定です (mex対応するの忘れてた…).
7.1実行手順 GR001
実行手順はポート名を除きLinux/Windowsで共通です.
1 |
% サーボ通信プロトコルを指定 |
8.1 まとめ
- MATLABでGR001とKHR3-HVを動作させる為のMEXファイルを作成しました
- WindowsとLinuxで動作することを確認しました(OSXでも多分動く)
