grbl1.1+Arduino CNCシールドV3.5+bCNCを使用中。
BluetoothモジュールおよびbCNCのPendant機能でスマホからもワイヤレス操作可能。
その他、電子工作・プログラミング、機械学習などもやっています。
MacとUbuntuを使用。

CNCマシン全般について:
国内レーザー加工機と中国製レーザー加工機の比較
中国製レーザーダイオードについて
CNCミリングマシンとCNCルーターマシンいろいろ
その他:
利用例や付加機能など:
CNCルーター関係:



*CNCマシンの制作記録は2016/04/10〜の投稿に書いてあります。


2017年2月2日木曜日

Xbox360ワイヤレスコントローラーでジョグ操作(Mac版)

ゲーム用ジョイスティックで、CNCマシンのジョグ操作をするというのをネットでたまに見かけます。確かにパソコン以外にもジョグ操作できる装置があると便利です。
現状ではbCNCのPendant機能でWifiを介してスマホから遠隔操作可能ですが、たまたま昔購入したXbox360ワイヤレスコントローラー(Xbox本体は持っていない)があるのを思い出して、試しにできるかどうかやってみました。
ワイヤレスなのでCNCマシンのペンダントとしては便利そう。右側のドングルをMacBookにUSB接続して使います。MacだとMicroSoftのXboxとは相性悪そうですが、ネットで調べるとMac用のドライバもいくつかありました。Windowsならかなりあるはず。


いまだにAmazonでも売っているんですね。XboxOneというのは新しいタイプでしょうか。意外に高い。

ちなみにAliExpressでCNC用リモートペンダントを探すと以下のような感じ。
AliExpress.com Product - Free shipping Hot sell cnc part Manual Pulse Generator Ncstudio CNC Wireless Handwheel CNC RF Electronic Remote Pendant8226円(送料込み)、これは比較的安い方。大体は1万円以上。Macで使えるかは不明(たぶん無理)。Mach3用が多い。

Mac版ジョイスティック用ドライバ+キーマッピングソフト:
Xbox360コントローラーを認識させるドライバはあるのですが、キーマッピングでXbox360コントローラーをマウスやキーボードとして使ったり、さらには複合的なキー入力の使い方ができるものとなると少ない。それと、結構古いコントローラーでもあるので、ドライバも古かったりして現在のOSバージョンに対応していないなど。

360Controller
ここは現在でも更新してありGitにソースが置いてあることからも良さそう。

しかし、目的としていた複雑なキーマッピングまではできないみたい。オープンソースなので、ファイルを開いてコードを改造すればいいのかもしれないけど、もう少し探してみることに。
普通にゲームするには問題ないと思う。

Joystick Mapper
これは有料(600円)、説明など見る限りいろいろできそう。
プレステのコントローラでもいいかもしれないけど持っていない。

bCNCのPendant機能でスマホから遠隔操作できるので、必ずしも今回Xbox360コントローラで操作する必要もないということで、有料ソフトは保留。
しかし、無料ソフトだとやはり単純なものしかない。

次に見つけたのはこのソフト「ControllerMate」。無料ソフトだとらちがあかないので試しに、この有料ソフト($24.95)をダウンロードしてみました。おそらくトライアルか無料利用だと何かしらの制限があるはず。
説明を見る限りは、かなり複雑な設定ができるみたい。しかもアップデートも最近までされています。
こんな感じで、単純なモジュールを線でつないで複雑化していくタイプ。期待できそう。
ということでインストールして試してみました。

ControllerMateの使い方:
まず、Xbox360コントローラーには2個のアナログスティックと十字キー、そしてたくさんのボタンがあります。今回はせいぜい、
・アナログスティックでXY軸の移動(G91X10、G91Y10など)
・ボタンでロック解除($X)
というくらいでしょうか(以下)。

当然ホーミング($H)や加工原点復帰(G92X0Y0Z0)なども設定していいのですが、まだ本気で使うつもりもないので、とりあえず動けばいいという程度で。というのも、今まで通りbCNCのPendant機能で十分間に合うので。

この手の入力の場合、ボタンを押すと「$X(リターン)」という設定ができないといけない。通常のゲームパッド用ソフトだと、「Start」ボタン=「s」キー(キーボード上の)という1対1対応になっていて、連続した任意の文字列を入力設定できないものが多い。しかし、このControllerMateは、文字列も入力できるらしい。こんなのを探していました。無料でも一応使えるようです。対応機種コントローラーはここに書いてあります。Xbox以外にもたくさんあります。

設定方法:
まずプロジェクトの開始は、右側にあるProgramming Itemsの歯車マークのプルダウンメニューで、Create Programming Pageを選択。

そうすると、以下のようにNew Page1が出来上がり、グリッドの作業エリアが出てきます。

次に、接続してあるコントローラーのジョイスティックを動かすと、右側にあるモジュールが光って、対応するジョイスティックやボタンがどれなのかわかります。一つのジョイスティックはX軸とY軸の二つのモジュールに分かれてあります。それぞれをドラッグして作業エリア上にのせます。

最終的には、X軸だけをみると以下のようになります。それほど複雑ではありません。というかやっていること自体が単純なので。左に倒すと「G91X-10(リターン)」、右に倒すと「G91X10(リターン)」という内容です。
これらのモジュールは作業エリア上で右クリックをするとタブが出てくるので、その中から選んで配置していきます。以下から、それぞれのモジュールの説明です。

「Controller X-Axis」:
まず、これがコントローラのボタンやジョイスティックのどの部分かというモジュール。これに機能のモジュールを色々ぶら下げて行く感じ。コントローラーを接続しないと右側のリストに出てこないかもしれません。

「Range(ジョイスティック範囲設定)」:
これは、ジョイスティックをどのくらい倒すと(条件)どうしたいか(結果:出力)という入力範囲の設定(条件設定)。右クリックで以下のタブから選ぶと作業エリアに出てきます。

作業エリア上の「Range」モジュールを選択して画面右にあるInspector画面で内容を設定します。
これは、ジョイスティックX軸:左側に倒した時の設定です(縦:Y軸方向に動かす設定はまた別のモジュールでする必要があります)。左に倒したら、CNCマシンのヘッドも左に動くという前提とします。倒した量によってスピードが変わるようにしてもいいのですが、このジョイスティックではあまり細かく操作できないので、倒したら「G91X-10」で左に10mm移動するコマンドを一回投げるという設定にしようと思います。20mm動かしたいときは2回倒すということです。
青い水平バーで反応する範囲を調整します。中央付近は無反応にして、左側-32768〜-10000の時だけ反応する設定にしておきます。このジョイスティックはぴったり中央で止まることがないので、かなりゆとりを持って中央の無反応範囲をとっておきました。
同じように、今度は右側に倒した時の設定も必要になります。そのため「Range」モジュールが二つあります。
もちろん倒した量によって1mm、もう少し倒すと5mm、めいっぱい倒すと10mmという感じで細かく範囲を設定してもいいとは思います。そうすると、「Range」モジュールだけでも3つ、両側も含めて合計6個を「Controller X-Axis」モジュールにつなげることになります。ただ、無料だとモジュール数の制限があって、そこまで複雑化するには有料にしないとダメかもしれません。

「T(テキスト出力)」設定:(追記:改良策「Keystrokes」を使う方法はページ最後の方にあります)
次に、「Range」モジュールの反応範囲の時に出すコマンドを「T(テキスト出力)」モジュールで設定します。つまり、ジョイスティックを左に倒したら「G91X-10」という文字列を書き出すプログラムになるということです。
「T(テキスト出力)」モジュールは右クリックでこの場所↑にあります。また「T」モジュールを選択して、Inspector画面で設定します。
こんな感じで、空白欄に「G91X-10」と入れておきます。ONタブは、これがONになったら「G91X-10」が出力されるということです。OFFの設定は特にないのでスキップ。

Speedタブの方では、as fast as possibleにして、出力速めにしておきます。
このテキスト出力設定では、最後のリターンキーの入力ができないので、それは次の設定で。ラインフィードやキャリッジリターン記号を入れればいいのかもしれませんが、そのまま書き出しそうなので、以下の設定でやることにします。

「Single Key」設定:
「G91X-10」のあと「リターン」を押してGコード入力終了となるで、このリターンキーも忘れずに設定しておきます。
「Single Key」はこの場所にあります。
そしてまたInspector画面で設定します。
BehaviorはOne Shotで一回だけの出力にしておきます。Press and Holdにしてしまうと、リターンキーを連続出力してしまいます。
Open Keystrokes Paletteを押すと、小さいキーボード画面が出てきて、この中からリターンキーを選んで作業エリアにドラッグします。
これでモジュールは全部揃ったので、あとはモジュールの端子のような部分をドラッグして相手のモジュールにくっつけるだけです。同様にY軸方向も設定もします。

それと、最終的には画面左上にあるMaster Enable: ON、Helper: Runningにしないと機能しないかもしれません。クリックすれば、赤→緑に変わります。

出来上がり:
最終的には、ボタンでロック解除($X)もつけて、以下のようになりました。

無料利用の場合の制限:
無料利用の場合は以下のような制限があります。出力系のモジュール(building block)は10個までらしい。そのほかは無制限。今回の場合は、テキスト出力とリターンキー出力だけで10個あるので、これが限界っぽい。

それと無料の場合は、このソフトがバックグラウンドで動いている場合(他のソフトを使っている場合)20分で切れてしまうようです。フォアグラウンドにしていれば無制限。

Grbl1.1なら$J=コマンドでジョグ操作:
今回はGコードを使って「G91X-10(リターン)」:相対座標でX軸を-10mm移動させましたが、Grbl1.1からは、ジョグ操作は$J=コマンドでやった方がいいかもしれません。$J=コマンドはGコードとは別に制御されるので、実際のペンダントを使ってのジョグ操作に適しています。
$J=X10F800
という感じです。
単に、
$JX10
を入力すると(最後にフィードをつけないと)、error:22が出ました。error:22はフィード未設定のエラーのようです。
また、$J=X10F800と入力しても、事前に設定してあるG90(絶対座標)かG91(相対座標)によって、
G90ならX座標10mmのところへ移動(WPosのX:10mmの位置)
G91なら現在地から10mmX軸方向へ移動(+10mm右へ動かす)
となるようです。

まとめ:
実際にbCNC上で試してみました。bCNCのコマンド入力欄を一度クリックしておいて(フォーカスを与えておいて)、あとはXbox360ワイヤレスコントローラーのジョイスティックでジョグ操作。特に問題なし。順調でした。
ただ、bCNCのPendant機能があるので、わざわざXbox360ワイヤレスコントローラーを使ってまでしてジョグ操作しなくてもいいという感じです。Laserweb3の場合もスマホからホストのIPアドレスにアクセスすれば遠隔操作可能なので、bCNCとLaserweb3以外で作業する時、ペンダントがないのであれば、余っているゲームパッドを利用することはありえるのかもしれません。
とりあえず、できるということが分かったので、もし今後使うようなことがあればという感じでしょうか。

追記:「Keystrokes」を使って改良
その後、コマンド入力(特にリターンキー入力)のところを改行コード(キャリッジリターンやラインフィード)を使ってやってみましたが、そのまま改行記号を出力してしまうのでダメでした。
そして、「T」や「Single Key」の代わりに「Keystrokes」という複数のキー入力を可能にするモジュールで試してみると、それなら大丈夫でした。
この画像にあるように、前回は左側の「Range」「T」「Single Key(改行)」でしたが、改良した右側は「Range」「Keystrokes」だけで済みます。Output系のモジュールは無料利用の場合10個までしか使えないので、一つ減らすことができたという感じです。
「Keystroke」の場合、Inspector画面で以下のように設定します。
Open Keystrokes Paletteボタンでミニキーボードを表示します。そしてWhen turned ON:の欄にキーを出力したい順番で入れていきます。今回出力したい内容は「G91X10(リターン)」ですが小文字「g91x10(リターン)」でも問題ありません。
キーボードからドラッグすると、黒と白の2個のキーが出てきます。黒がキーを押す、白がキーを離すという意味です。通常なら、g(押す)、g(離す)でgの文字一つを入力したことになります。その要領で、「g91x10(リターン)」をキー入力すると、
こんな感じで長くなりますが、この「Keystrokes」を使うことで一応最後のリターンまで押すことができます。Open Keystrokes Paletteボタンのミニキーボードを使う代わりに、Captureボタンを押せば、実際のパソコンのキーボードで入力した結果が画面に出てきます。
シフトキーを押しながらキー入力するような「$」は、「shift(押す)」「4(押す)」「4(離す)」、「shift(離す)」という順番になりますが(以下)、Captureボタンでやったほうが間違わないかもしれません。

ということで「Keystorkes」を使えば、連続した文字列(リターンキーなども含め)が出力できるのでOutput系のモジュールを節約できるという感じです。前回の方法だと10個使ってしまいましたが、今回は5個で済みました。残り5個あるので、他の機能を追加することができそうです。
しかしながら、bCNCのPendant機能の方が便利なので、おそらくXbox360コントローラを使ってのジョグ操作は使用しないと思います。ちょっと残念。まあ、きっと何かに応用できるでしょう。

0 件のコメント:

コメントを投稿