Upgrade to Pro — share decks privately, control downloads, hide ads and more …

e-RT3 PlusでRclexをいごかしてみる

takasehideki
September 17, 2022

e-RT3 PlusでRclexをいごかしてみる

第10回FA設備技術勉強会
2022/09/17
https://fa-study.connpass.com/event/249231/

スライドP.24のデモ動画:
https://twitter.com/takasehideki/status/1571090648979349504

takasehideki

September 17, 2022
Tweet

More Decks by takasehideki

Other Decks in Technology

Transcript

  1. Hobby Recent R&D Affiliation Mission あらゆる モノ・コトと ヒトを繋げる 設計基盤の 確⽴

    最適化 設計技術 良いモノ を 誰でも楽に つくることができる世界へ 組込み/IoTコンピューティング基盤を⽀える プラットフォーム技術と設計⽅法論 @takasehideki ശ ఉ ϩʔΧϧ؀ڥ ηϯγϯά ̇ ̇ ̇ ө૾ Ի Թ౓ ࣪౓ ѹྗ ৼಈ Edge AI ޯ഑ܭࢉɾߋ৽ -PTT 8FJHIU ਪ࿦ ੍ޚ ΢ΣΞϥϒϧ σόΠεɾ ϔϧεέΞ ϩϘοτ ϞϏϦςΟ ೖྗ ग़ྗ ϑΟʔυ όοΫ Edge AI Edge AI Edge AI Edge AI Fog AI ू໿ ෼഑ ϩʔΧϧ؀ڥ Fog AI Edge AI Edge AI ϩʔΧϧ؀ڥ Fog AI Edge AI Edge AI Cloud MEC BEAM クラウド BEAM エッジ BEAM 最適配分アルゴリズム 透過型分散プラットフォーム BEAM システム開発者 デプロイされる コード ① ③ ② ③ ③ ❤ 評価アプリ ❤ 評価アプリ ④ ④ ❤ 評価アプリ ④ ② ② ❤ 評価アプリ ④ ② ② ② ②
  2. #NervesJP #FA_Study (Robot Operating System) • Plumbing: 出版購読型の通信ミドルウェア • Tools:

    プロジェクト管理,デバッグ,可視化,等 • Capabilities: 膨⼤なライブラリ・パッケージ • Ecosystem: 世界規模の強⼒なOSSコミュニティ ロボットソフトウェアの開発を加速するプラットフォーム http://www.ros.org/about-ros/ 4
  3. #NervesJP #FA_Study 通信ミドルウェアとしての • Publish / Subscribe messaging infrastructure —ROSノード︓ロボットシステムを構成する機能単位

    —Topicを介した出版購読型通信︓基本的に⾮同期・疎な通信⽅式 üノードの登録・変更・削除・配置が容易に実現できる ü障害時にはノード単位で再起動と復旧ができる node1 node2 node3 node4 Topic1 Topic2 node5 出版(Publish) 購読(Subscribe) msg msg msg msg • その他の通信⽅式 — Service: 同期式 — Action: 同期と⾮同期の組合せ — Parameter: 多変量辞書 5
  4. #NervesJP #FA_Study ROS 2 の階層構造 … … 6 rclcpp rclpy

    node.cpp node.py RCL (ROS Client Library) RMW (ROS MiddleWare) DDS B DDS A General Purpose OS • 共通の基盤機能を提供 • C⾔語による実装 • 任意の⾔語から呼び出して そのライブラリを開発可能 • DDS通信機能を抽象化すAPI層 • 複数のDDS実装から選択可能 rclrs node.rs DDS C DDS (Data Distribution Service) • OMG標準仕様として規定 • 出版購読型の通信機能を提供 • RTPSによる通信相⼿の⾃動探索
  5. #NervesJP #FA_Study ROS Japan Users Group • Discourse: https://discourse.ros.org/c/local/japan •

    connpass: https://rosjp.connpass.com —勉強会・講習会など 初⼼者から歴戦の猛者まで︕ —関⻄や瀬⼾内・九州にも拠点あり︕ —メンバー数 2,579名 @2022/09/15 üSlack: rosjp üTwitter: #rosjp 7
  6. #NervesJP #FA_Study 8 Elixir とは︖︖ 2012年に登場した新しめの関数型⾔語 BEAM (Erlang VM) 上で動作

    • ⾼い並⾏/並列性能を誇る • 軽量かつ頑強なプロセスモデル • 耐障害性が極めて⾼い Rubyを基にした⾔語設計 • 習得しやすく⽣産性が向上する • 通信応答性能が極めて⾼い • Web/IoT/AI FW. を備える Programming should be about transforming data .1 1 ( 0 ) . .1 ) 11 .1 ) ) &0 1(. &0 1 Elixir Zen Style Ø データフローと並列処理を Enum Flow |> で直感的に記述できる ※各⾔語・フレームワークのロゴの権利は それぞれの作成者に帰属しています
  7. #NervesJP #FA_Study Elixirの気持ちよさ ダッシュ ボード Link Super Visor one_for_one App

    液晶 データ ロガー Link センサ 監視 制御 Link ボタン {:ok, ref} = Circuits.I2C.open(@i2c_bus) Circuits.I2C.write(ref, @i2c_addr, <<0xBE, 0x08, 0x00>>) Circuits.I2C.write(ref, @i2c_addr, <<0xAC, 0x33, 0x00>>) {:ok, val} = Circuits.I2C.read(ref, @i2c_addr, 7) <<_state::8, raw_humi::20, raw_temp::20, _crc::8>> = val 9 • (やや)強い動的型付け — データ構造にイミュータブル性を持つ • アクターモデルに基づく並⾏処理 — モノ同⼠がメッセージ交換しながら進⾏ — 疎結合かつ⾮同期な並⾏処理モデル • メモリ軽量かつ堅牢なプロセスモデル — プロセス単位でのメモリ管理と障害復旧 — 処理のモジュール化と制御の抽象化 • バイナリ操作とパターンマッチ スキップ 予定
  8. #NervesJP #FA_Study • ElixirによるIoTフレームワーク —極⼩規模のファームウェア (~>30 MB) —堅牢性の⾼いファイルシステム —機能の取捨選別が容易 (Buildrootの利⽤)

    • Elixirの⾔語機能との完全な互換性 —アクターモデルで並⾏処理ができる —IoT向けになにか気にする必要がない —有⽤なライブラリとツールが揃っている Ø⽇本初!?のNerves搭載製品 → Pocket LANcher Bootloader A Linux kernel (Buildroot) Master Boot Record Root Filesystem A (Read-only) Application Data (Read-Write) C libraries Erlang VM Bootloader B Root Filesystem B (Read-only) C libraries Erlang VM CQ出版Interface 2020年6⽉号〜 2021年1⽉号 10
  9. #NervesJP #FA_Study ROS 2 Client Library for,,, Rclex 12 rclcpp

    rclpy node.cpp node.py node.ex RCL (ROS Client Library) RMW (ROS MiddleWare) DDS B DDS A General Purpose OS rclrs node.rs DDS C github.com/rclex
  10. #NervesJP #FA_Study 13 ROS開発になぜ Elixir なのか︖ ロボットは 「組合せ型開発」 デバイス制御と 知的処理がキモ

    ROSの本質は 通信にあり 壊れてなんぼ でも壊れたら困る node1 node2 node3 node4 Topic1 Topic2 node5 出版(Publish) 購読(Subscribe) msg msg msg msg {:ok, ref} = I2C.open(@i2c_bus) I2C.write(ref, @i2c_addr, <<0xBE, 0x08, 0x00>>) I2C.write(ref, @i2c_addr, <<0xAC, 0x33, 0x00>>) {:ok, val} = I2C.read(ref, @i2c_addr, 7) <<_state::8, raw_humi::20, raw_temp::20, _crc::8>> = val ダッシュ ボード Link Super Visor one_for_one App 液晶 データ ロガー Link センサ 監視 制御 Link ボタン ロボットプログラミングは「関数型」だ︕︕
  11. #NervesJP #FA_Study github.com/rclex 14 関数型っぽい︖Rclex API ノード数 ノードを⽣成 トピックの作成 :single->1つ

    :multi-> 複数 callback関数と タイマ周期の設定 ノードごとに出版する メッセージをリストで⽤意 データ出版 Enumによる データ加⼯
  12. #NervesJP #FA_Study 15 Rclex の内部実装 github.com/rclex RCL RMW DDS OS

    process space rclcpp node1 Erlang VM rclex node1 rclex node2 process exec. mngr. process pub1 process sub2 process pub2 ... NIFs rclpy node2 rcl.so ErlangリソースオブジェクトとRCLの構造体を 相互に変換してRCL APIを呼び出す • Erlang VMはOSプロセスとして駆動 • スケジューラでElixirプロセスを実⾏ = Rclexにおける pub/sub ノード • プロセスが軽量 ü 起動時間︓数マイクロ秒 ü メモリ︓およそ300ワード
  13. #NervesJP #FA_Study sub.ex sub.ex sub.ex sub.ex sub.ex github.com/rclex pub.ex pub.ex

    pub.ex pub.ex pub.ex 16 Rclex の強みと実現できること ØElixirアプリからErlangプロセスを同時に⼤量⽣成させる Ø出版購読の通信処理とコールバックを⾮同期に実⾏する 軽量プロセスの並⾏処理によって ROS 2の通信スケーラビリティを向上させる pub.ex sub.ex topic pub.ex pub.ex pub.ex sub.ex sub.ex sub.ex pub.ex sub.ex topic pub.ex sub.ex topic pub.ex sub.ex topic pub.ex sub.ex topic pub.ex sub.ex topic
  14. #NervesJP #FA_Study github.com/rclex 論よりRUN!! on RPi4/Foxy 😇 😆 pub.cpp x100

    (by launch.py) sub.cpp (demo_nodes_cpp) pub.ex x100 sub.cpp (demo_nodes_cpp) rclex/rcjp21_demo 17
  15. #NervesJP #FA_Study 18 っていうのをやっていたら,,, ROS 2はいいぞぉ,Elixirもいいぞぉ, だからRclexはでらいいんだぞぉ,しらんけど:D じつにおもしろそうですね︕ これって弊社のe-RT 3

    Plusでも動きますか︖︖ おぉ,FA設備にPLCってやつですね︕ Nervesもいごくみたいやし,やってみましょう︕ ぜひぜひに︕ちなみにこの製品はPLCではなくて リアルタイムOSコントローラと呼びますので, そこはよろしくです︕︕ おっ,おぅ,,, でもいごいたらなにがおもろいですかねぇ︖︖ とりま #FA_Studyで発表申込み しときやした︕ ※ このスライドはおおよそフィクションです
  16. | Supports Python Programming: The e-RT3 Plus Industrial AI Platform

    | June 2020 | © Yokogawa Electric Corporation ü 製造データの収集と解析 ü 上位システムとのシームレスな連携 ü シーケンスCPUとの連携でリアルタイム制御に対応 e-RT3 Plus Ubuntu 18.04 LTS 耐環境性/安定供給 GNU/Linux 4.14 LTS + PREEMPT_RT 豊富なIOモジュール/ オープンネットワーク対応 ゲートウェイ クラウド プラン ト ⼯場 プラント コントローラ PC オープンネットワーク MES/データベース 統計解析 機械学習 セキュリティ 統計解析 機械学習 製造設備/ロボット 製造設備 情報ネットワーク IT (Information Technology) OT (Operational Technology) 本社 組み込み制御 統計解析 機械学習 データ収集 (センシング) / 19 Linux対応産業⽤AIプラットフォーム 製造設備
  17. | Supports Python Programming: The e-RT3 Plus Industrial AI Platform

    | June 2020 | © Yokogawa Electric Corporation e-RT 3 Plusのメリット シングルボードコンピュータ PLC 計測器 産業⽤PC 最⼤8,192 DIO 豊富なIO ⻑期供給 • ゼロからシステムを構築することへの不安 • 供給と環境抵抗に対する懸念。 • ⾼額なランタイムライセンスが必要 • ⾼価な設備が必要で、すべてを⽤意できるわけではない。 • プログラマブル環境の⽋如。 困難なデータ移⾏。 • 接続先によってI/Fを簡単に変更不可 省スペース化 Python ドライバ開発なし プリインストールされたパッケージ によるOSイメージの提供 環境 抵抗 ⻑期供給 Ubuntu OSS利⽤可 AI開発環境 1つのプラットフォームでの 収集と分析 環境抵抗 モジュール形式 ライセンス料なし ドライバ開発なし 20 • 拡張⽤のI/O端⼦はほぼ無し • デジタル⼊出⼒は可能だが、アナログ⼊出⼒は不可。 • 製品のライフサイクルが短く、産業機器への使⽤が難しい。 • パッケージを⾃由に拡張できる環境がない。 • プログラミング環境 (C/C++) はあるが、数値計算・解析ライブラリがほぼ無い。 メリット メリット メリット メリット Box1 Max.36.7℃ Min.33.8℃ AVE.35.1℃ 温度監視 2015/06/14 09:30:21 Max.33.8℃ Min.31.6℃ AVE.32.8℃ Max.34.3℃ Min.32.9℃ AVE.33.6℃ Max.33.8℃ Min.32.0℃ AVE.33.5℃ Box2 Box3 Box4 300 200 100 0 300 200 100 0
  18. #NervesJP #FA_Study 21 とりあえず⽕⼊れしてみた https://qiita.com/myasu/items /057ce9ec2fa39148a5a3 あっ,,, Ubuntu18 だし arm32

    やったわ,,, おいら ROS 2 Foxy でよろっ Foxy は Ubuntu20 でよろっ あと arm32 ならソースビルドやでっ
  19. #NervesJP #FA_Study 22 漢は黙ってセルフビルド ;D $ sudo apt update $

    sudo apt dist-upgrade $ sudo apt autoremove $ sudo apt install update-manager-core $ sudo do-release-upgrade 横河電機株式会社で公式に提供されているイメージはUbuntu 18.04であり、 本発表におけるUbuntu 20へのUpgradeおよびこれに起因するいかなる事象について、 横河電機株式会社は責任を負いません。 https://hexdocs.pm/nerves/installation.html を参考に asdf でインストール https://docs.ros.org/en/foxy/Installation/Alternatives/Ubuntu-Development-Setup.html を参考にソースビルド(colcon build 前に以下のおまじないを追加) $ touch src/eclipse-cyclonedds/COLCON_IGNORE src/ros-visualization/COLCON_IGNORE src/ros2/demos/image_tools/COLCON_IGNORE src/ros2/demos/intra_process_demo/COLCON_IGNORE src/ros2/rviz/COLCON_IGNORE src/ros2/system_tests/COLCON_IGNORE 1.5h 12h 0.5h
  20. #NervesJP #FA_Study 25 Elixir/Phoenix on laptop default ROS 2 env

    on laptop Rclex on e-RT3 Plus Rclex on e-RT3 Plus /cmd_vel /pose GenServer.cast