ノードの作成方法について

HARK FORUM ノードの作成方法について

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #855
    kei_15
    Participant

      お世話になっております。

      私はhark 3.0.4を用いてロボットの駆動システムとHARKを連携させようと考えています。
      「HARKクックブック 進んだ使い方 13.1 ノードを作りたい」にて、

      /////////////////////////////////////////
      {$PACKAGE}/hark_test/src/Makefile.am
      の中の lib****_la_SOURCES 変数(****は任意のパッケージ.今回は hark_test )の適当な位置に
      PublisherInt.cc \
      を追加する.“ \ ”を忘れないようにする.
      /////////////////////////////////////////

      とありますが、あまり理解できませんでした。
      これは自作したccファイル、newModule.ccと同じディレクトリ内に新規にMakefile.amを作成し、lib****_la_SOURCESという変数を記述していけばよいのでしょうか。
      あまりc++のビルドに関して知識が浅いため、お時間ありましたら丁寧にビルド・インストールの手順を教えていただきたいです。

      また、「HARKクックブック 進んだ使い方 13.1 ノードを作りたい」冒頭にて、

      /////////////////////////////////////////
      自分で新しいノードを作成する場合, パッケージではなく,ソースコンパイルする必要がある. ソースコンパイルからインストールする方法については, HARK 講習会資料の「 HARK のインストール」の項を参照.
      /////////////////////////////////////////

      とありますが、HARK講演会資料のリンクなどありましたら教えていただければ幸いです。

      以上、よろしくお願い致します。

      #858
      nterakado
      Moderator

        お問い合わせありがとうございます。

        新規ノードの作成については前提となる知識が多いため、
        大変申し訳ございませんが詳細な説明は省かせていただいております。

        代わりに、HARKでは必要な機能を実現するための仕組みとしてPythonを採用しております。
        hark 3.0.4でしたら、HARK-Python3というパッケージをインストールして頂くことで
        ご自分で作成したPyhonコードをHarkで実行可能です。

        英語になりますが、以下のページに説明がございます。
        https://www.hark.jp/document/packages/hark-python3/harkpython3.html

        ・上記ページのGoogle翻訳結果
        https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=https%3A%2F%2Fwww.hark.jp%2Fdocument%2Fpackages%2Fhark-python3%2Fharkpython3.html

        また、以前のバージョンになりますが、
        HARK-Pythonについてのやりとりがございますのでご参照いただければと思います。
        https://wp.hark.jp/forums/topic/hark-pythonについて/


        また、クックブックについては、最新の状況に更新できておらず
        ご不便おかけしてしまい申し訳ございません。

        ソースコンパイルからインストールする方法については
        下記ページの Installation from Source Compilation 以降をご参照ください
        https://www.hark.jp/install/linux/

        以上、よろしくお願いいたします。

        #868
        kei_15
        Participant

          迅速なご対応ありがとうございます。

          HARK-Pythonの資料確認いたしました。
          こちらを参考にして、まずはPythonで実装を行おうと考えます。

          早速インストールを行ったところ以下のようなエラーが出ました。
          `
          $ sudo apt-get install hark-python
          Reading package lists… Done
          Building dependency tree
          Reading state information… Done

          Some packages could not be installed. This may mean that you have
          requested an impossible situation or if you are using the unstable
          distribution that some required packages have not yet been created
          or been moved out of Incoming.
          The following information may help to resolve the situation:

          The following packages have unmet dependencies:
          hark-python : Depends: flowdesigner-0.9.1-hark but it is not going to be installed
          E: Unable to correct problems, you have held broken packages.
          `

          その後、こちらを参考にしてflowdesigner-0.9.1-harkをエラーなくmake installできたのですが、依然、上記のエラーが出てしまいます。

          なにかご存知でしたらご教授の程、よろしくお願い致します。

          #869
          kei_15
          Participant

            失礼しました。
            $ sudo apt-get install hark-python3
            で無事、python関連のノードをhark_designer上に表示させることができました。

            もう1点質問がございます。
            頂いたpythonに関するページではConstantで定義をした変数をPython3で書かれた関数に渡しているようですが、逆の処理も可能でしょうか。
            つまり、PythonファイルからHARKへの通信に関しての処理です。

            何度も質問すみません。
            ご返答、お待ちしております。

            • This reply was modified 5 years, 6 months ago by kei_15.
            #871

            お問い合わせありがとうございます。

            > 逆の処理も可能でしょうか。
            はい。可能です。

            Python内で定義された変数(または定数)を self.outputValues["端子名"] に代入して頂ければ出力されます。ネットワークファイル側では、PyCodeExecutor3ノードを右クリックし、 Add Output を選び、 self.outputValues["端子名"] で指定した端子名で出力端子を追加してください。
            入力は self.端子名 で取得できますが、こちらもネットワークファイルのPyCodeExecutor3ノードに Add Input で追加した入力端子名となります。
            calculate() メソッドが毎フレーム呼び出されますのでinputに対して処理してoutputするという用途が基本になります。inputが1つも無い例として、処理を開始する最初のノード(AudioStreamFromWaveのようにファイル入力等を行う)として作成する場合は、EOFでHARKの処理を停止するためにCONDITIONというbool型の出力を追加し、通常はTrue、EOFでFalseを設定します。ネットワークファイルではCONDITION端子にCONDITIONを設定してください。

            PyCodeExecutor3の仕様について:
            HARKがサポートしている型であれば、入出力ともに可能です。例えばHARKの Vector はPythonの list と、HARKの Map はPythonの dict と対応します。注意点としては、2点ほどあります。出力する場合はデータを渡す相手ノードの入力と型が一致している必要があります。また、HARKの標準ノードと異なりパラメータ設定ダイアログを表示できませんので、パラメータを変更できるノードを作りたい場合にはjsonファイル等でパラメータ設定が起動時にロード出来るようにする等で対応をお願い致します。Pythonコード内でsocketなど用いて記述して頂ければネットワークから動的に値を設定するコードなども可能です。

            Pythonコード上での処理は自由に行う事が出来ますが、HARK側からPythonのクラスを呼び出すためGUI処理(Plot等)の書き方はやや癖があります。下記ディレクトリにPlot系ノードのサンプルがありますので参考にしていただければ幸いです。
            /usr/share/hark/hark-python3/harkpython/src/

            hark-python はPython2をサポートするための旧パッケージになります。HARK2.5までサポートしていました。HARK2.5以降は hark-python3 としてPython3をサポートする新しいパッケージを提供しています。ユーザが記述するPythonコードについては基本的に互換性がある設計ですが、Forumの回答ではインストール手順などで旧バージョン向けの説明が書かれている事が御座います。

            以上、よろしくお願い致します。

          Viewing 5 posts - 1 through 5 (of 5 total)
          • You must be logged in to reply to this topic.