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

Rclex on Nerves on e-RT3 Plus

takasehideki
December 17, 2022

Rclex on Nerves on e-RT3 Plus

第11回FA設備技術勉強会
2022/12/17
https://fa-study.connpass.com/event/260896/

デモ用のNervesプロジェクトのリポジトリ: https://github.com/b5g-ex/rclex_on_nerves_on_f3rp70
P.9のデモ動画: https://twitter.com/takasehideki/status/1604043248020131841

takasehideki

December 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 -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 3 前回(第10回)のお話し ロボット開発を加速

    通信の⾃律性が⾼い 並⾏性能/並列性能が⾼い 軽量プロセスモデル 耐障害性が極めて⾼い こいつがFA設備でいごいたら おもろくない︖ なんかに使えなくない︖︖
  3. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 4 前回(第10回)のお話し #NervesJP

    #FA_Study 3 今回のお話し ロボット開発を加速 通信の⾃律性が⾼い 並⾏性能/並列性能が⾼い 軽量プロセスモデル 耐障害性が極めて⾼い こいつがFA設備でいごいたら おもろくない︖ なんかに使えなくない︖︖ #NervesJP #FA_Study (Robot Operating System) • Plumbing: 出版購読型の通信ミドルウェア • Tools: プロジェクト管理,デバッグ,可視化,等 • Capabilities: 膨⼤なライブラリ・パッケージ • Ecosystem: 世界規模の強⼒なOSSコミュニティ ロボットソフトウェアの開発を加速するプラットフォーム http://www.ros.org/about-ros/ 4 #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 |> で直感的に記述できる ※各⾔語・フレームワークのロゴの権利は それぞれの作成者に帰属しています #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ワード #NervesJP #FA_Study 24 論よりRUN!! by Rclex on e-RT3 Plus default ROS 2 env on laptop Rclex on e-RT3 Plus 第10回FA設備技術勉強会「e-RT3 PlusでRclexをいごかしてみる」 https://speakerdeck.com/takasehideki/e-rt3-plusderclexwoigokasitemiru #NervesJP #FA_Study 18 っていうのをやっていたら,,, ROS 2はいいぞぉ,Elixirもいいぞぉ, だからRclexはでらいいんだぞぉ,しらんけど:D じつにおもしろそうですね︕ これって弊社のe-RT 3 Plusでも動きますか︖︖ おぉ,FA設備にPLCってやつですね︕ Nervesもいごくみたいやし,やってみましょう︕ ぜひぜひに︕ちなみにこの製品はPLCではなくて リアルタイムOSコントローラと呼びますので, そこはよろしくです︕︕ おっ,おぅ,,, でもいごいたらなにがおもろいですかねぇ︖︖ とりま #FA_Studyで発表申込み しときやした︕ ※ このスライドはおおよそフィクションです
  4. | 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) 本社 組み込み制御 統計解析 機械学習 データ収集 (センシング) / 6 Linux対応産業⽤AIプラットフォーム 製造設備
  5. | 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つのプラットフォームでの 収集と分析 環境抵抗 モジュール形式 ライセンス料なし ドライバ開発なし 7 • 拡張⽤の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
  6. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 8 今回のお話し Rclex

    on Nerves on e-RT3 Plus できたってよ︖︖ 今回はまずは 「論よりRUN!」
  7. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ Elixir/Phoenix with Rclex

    on laptop default ROS 2 env on laptop Rclex on Nerves on e-RT3 Plus /cmd_vel /pose
  8. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 10 なにがすごいのか︖︖ Elixir:

    ⾼い並⾏/並列性能と耐障害性を誇る 習熟容易で開発⽣産性も⾼い ROS 2: ロボット開発を加速するプラットフォーム DDS/RTPSの採⽤︓⾮同期型で通信の⾃律性が⾼い ElixirによるIoTフレームワーク=Elixir専⽤OS 最⼩限のファームウェア構成でファイルシステムの堅牢性が⾼い OTAの仕組みが標準機能として提供 Linux対応産業⽤AIプラットフォーム Fully Bulletproof Runtime for ROS 2!! (only with Elixir :D
  9. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 11 試してみない︖︖ #

    1. リポジトリを clone git clone https://github.com/b5g-ex/rclex_on_nerves_on_f3rp70 cd rclex_on_nerves_on_f3rp70/ # 2. 対象ボードを設定して依存ライブラリを取得 export MIX_TARGET=f3rp70 mix deps.get # 3. ROS 2のリソースを取得して rootfs に配備 export ROS_DISTRO=foxy mix rclex.prep.ros2 --arch arm32v7 # 4. topic 通信⽤の型情報を⽣成 mix rclex.gen.msgs # 5. ビルド&SDに書き込み mix firmware && mix burn # or, mix upload /opt/ros/foxy/include /opt/ros/foxy/lib/ /opt/ros/foxy/share rclex/arm32v7_ ros_docker:foxy rootfs … /opt/ros/foxy … rootfs copy ホストに ROS 2 環境は不要︕ 必要なのは Elixir/Nerves 環境のみ︕ Use on Nerves ̶ Rclex https://hexdocs.pm/rclex/use_on_nerves.html https://qiita.com/takasehideki/ items/cfc52844b0d8325963af
  10. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 12 デバイス エッジサーバ

    クラウド Elixir"だけ"で FAの新しいセカイを 創造する︕ Elixirがもたらす(IoT)FAの新しいカタチ
  11. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ ROS Japan Users

    Group • Discourse: https://discourse.ros.org/c/local/japan • connpass: https://rosjp.connpass.com —勉強会・講習会など 初⼼者から歴戦の猛者まで︕ —関⻄や瀬⼾内・九州にも拠点あり︕ —メンバー数 2,629名 @2022/12/17 üSlack: rosjp üTwitter: #rosjp 13
  12. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ さんくす︕︕ @takasehideki #NervesJP

    15 ※各⾔語・フレームワーク等のロゴの権利は それぞれの作成者に帰属しています
  13. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 16 以降,付録 a.k.a

    backup • ROS (Robot Operating System) とその通信機能 • Elixir とは IoT 向けの ecosystem である • Rclex: ROS 2 Client Library for Elixir
  14. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ (Robot Operating System)

    • Plumbing: 出版購読型の通信ミドルウェア • Tools: プロジェクト管理,デバッグ,可視化,等 • Capabilities: 膨⼤なライブラリ・パッケージ • Ecosystem: 世界規模の強⼒なOSSコミュニティ ロボットソフトウェアの開発を加速するプラットフォーム http://www.ros.org/about-ros/ 17
  15. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 通信ミドルウェアとしての • Publish

    / Subscribe messaging infrastructure —ROSノード︓ロボットシステムを構成する機能単位 —Topicを介した出版購読型通信︓基本的に⾮同期・疎な通信⽅式 üノードの登録・変更・削除・配置が容易に実現できる ü障害時にはノード単位で再起動と復旧ができる node1 node2 node3 node4 Topic1 Topic2 node5 出版(Publish) 購読(Subscribe) msg msg msg msg • その他の通信⽅式 — Service: 同期式 — Action: 同期と⾮同期の組合せ — Parameter: 多変量辞書 18
  16. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ ROS 2 の階層構造

    … … 19 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による通信相⼿の⾃動探索
  17. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 20 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 |> で直感的に記述できる ※各⾔語・フレームワークのロゴの権利は それぞれの作成者に帰属しています
  18. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 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 21 • (やや)強い動的型付け — データ構造にイミュータブル性を持つ • アクターモデルに基づく並⾏処理 — モノ同⼠がメッセージ交換しながら進⾏ — 疎結合かつ⾮同期な並⾏処理モデル • メモリ軽量かつ堅牢なプロセスモデル — プロセス単位でのメモリ管理と障害復旧 — 処理のモジュール化と制御の抽象化 • バイナリ操作とパターンマッチ スキップ 予定
  19. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 22 Phoenix •

    Webアプリ/サーバの開発フレームワーク —MVC (Model/View/Controller) パターンに基づく —Ruby on Rails や Django と同等 • ⾼い開発⽣産性と通信性能を両⽴できる —特にスケーラビリティと スループットに優れる • LiveView —イベント発⽣に応じてHTMLを リアルタイムにレンダリング https://www.phoenixframework.org/
  20. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 23 • ⼀⾔でいえば

    powered by Elixir な Jupyter —Webブラウザ上で⽂書編集とコーディング/実⾏ができる —多⼈数での同時編集や差分管理,データのグラフ可視化ができる H15: ⾼い並列性能と耐障害性を持つElixirとNervesで IoTの新しいカタチを切り拓く(⾼瀬英希)
  21. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ Nx: Numerical Elixir!!

    Introducing Nx - José Valim | Lambda Days 2021 https://youtu.be/fPKMmJpAGWc https://dashbit.co/blog/nx-numerical- elixir-is-now-publicly-available 24
  22. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ • ElixirによるIoTフレームワーク —

    極⼩規模のファームウェア (~>30 MB) — 堅牢性の⾼いファイルシステム — 機能の取捨選別が容易 (Buildrootの利⽤) — OTAサービスが標準機能として提供 • 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⽉号 25
  23. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ Custom Boards Unofficial

    Target 主な対応デバイス x86_64 BeagleBone https://youtu.be/DvwgGz_5D5I ラズパイ OSD32MP1 26
  24. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ ElixirとNervesの採⽤事例 各画像のクリックで 詳細ページに

    • 8 Companies That Use Elixir in Production https://serokell.io/blog/elixir-companies • ⽇本で Erlang/OTP や Elixir を利⽤している会社⼀覧 github: voluntas/japanese-erlang-elixir-companies https://www.nerves-project.org/case-studies Le Tote: ⾐料品倉庫のRFIDと キオスクによる在庫管理 Hop: 顔認証機能付きの キオスクビールサーバ FarmBot: スマートファームの実現 27
  25. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ ROS 2 Client

    Library for,,, Rclex 28 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
  26. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 29 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 ボタン ロボットプログラミングは「関数型」だ︕︕
  27. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ github.com/rclex 30 関数型っぽい︖Rclex

    API ノード数 ノードを⽣成 トピックの作成 :single->1つ :multi-> 複数 callback関数と タイマ周期の設定 ノードごとに出版する メッセージをリストで⽤意 データ出版 Enumによる データ加⼯
  28. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 31 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ワード
  29. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ sub.ex sub.ex sub.ex

    sub.ex sub.ex github.com/rclex pub.ex pub.ex pub.ex pub.ex pub.ex 32 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
  30. #NervesJP #FA_Study -BC *1$ *45 65PLZP $PNQVUJOH4ZTUFN-BCPSBUPSZ 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 33