はじめまして、開発Gの杉原です。
今週より木曜日の記事更新を担当することとなりましたので、よろしくお願いします。
お届けする内容としましては、「技術的な部分の深いところ(※ただし深すぎない程度に)」となります。
深い・浅いの境界線、深すぎる・深すぎないの境界線が謎ですよね。
というわけで、勝手に「How to Demo3D Scripting」略して「HDS」と銘打って、
主にスクリプトによるモデルの制御手法なんかをご紹介していこうかと思っています。
第一回となる今回は「搬送先の選択(前篇)」です。
いきなり前後篇にわたる内容ですが、やはり深い話をしようとすると長くなりますので、仕方がないですよね。
以後も同じだと思いますが、どうかお付き合いください。
さて、下図のようなモデルがあったとします。
このモデルでは、コンベアから搬送されてきた荷物をロボットが掴み、
掴んだ荷物をその先にある4つのコンベアのいずれかへと搬送します。
搬送先については特に制御していませんので、この場合「いずれか」というのは、RobotProgramの「End」コネクタに接続した順に選択されます。
ここでは右下のコンベアNo.4から順に接続したので、No.4→No.3→No.2→No.1→No.4→(以後繰り返し)という順に搬送先が選択されていきます。
これを任意に制御するために、[QuickStart2017]→[Controllers]にある[TargetSelector]を使用するのですが、あまり条件が複雑だと設定できないこともあります。
そこで、スクリプトを使ってこれを制御したいと思います。
(TargetSelectorについては既に記事になっていますのでそちらをご覧ください!)
今回は次の条件で搬送することにします。
【前提】
到着した荷物に1から順に連番が付与される
【条件】
・連番が3の倍数の時、No.1のコンベアへ搬送する
・連番が5の倍数の時、No.2のコンベアへ搬送する
・ただし、連番が3の倍数かつ5の倍数の時はNo.3のコンベアへ搬送する
・それ以外の時はNo.4のコンベアへ搬送する
いわゆるFizz Buzzってやつですね。
これくらいならTargetSelectorでも制御できるような気もしますが、まあいいでしょう。
まずは【前提】を満たすために、PropertyAssignerで連番を割り当てておきます。
そしてこの連番をもとに搬送先を決定する処理をRobotProgramに追加します。
搬送先は「OnDispatchOut」イベントにて決定します。
しかし標準のRobotProgramにはOnDispatchOutイベントには何のメソッドも割り当てられていないので、まずは新しいメソッドを作成してこれを割り当てます。
左図のように、プロパティパネルにあるEventsタブから「OnDispatchOut」を探し出し、「<New...>」を選択することで、スクリプトに対して自動的にメソッドが作成され、そのメソッドがOnDispatchOutイベントに対して紐づけられます。
さて、この時点では作成されたメソッドの中身は空っぽのままです。
このままモデルを実行させてみるとどうなるか、ちょっと試してみます。
すると下図のように、荷物を掴んだ状態でロボットの動きが止まってしまいました。
さっきまでは順次搬送していたのにおかしいですね。
これはなぜかというと、今回OnDispatchOutイベントに処理を追加したことで、「標準の処理」は実行されなくなり、「追加した処理」を実行する動きとなったたためです。
今まではOnDispatchOutイベントには処理を設定していませんでしたが、決して「何もしていない」わけではなく、実は「標準で定義された処理」を実行していたのです。
ということで、掴んだ荷物をどのコンベアに運ぶのかをスクリプトで定義したいと思うのですが、今回はここまで。
そんなに難しい内容にはなってないですね、今のところ。ちょっと浅かったですかね?
次回の【How to Demo3D Scripting】は「搬送先の選択(後編)」です。
更新は3/1(木)、ご期待ください。
コメントをお書きください