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. on
    2022/12/17
    @takasehideki
    #NervesJP
    本研究開発の成果の⼀部は.
    横河電機株式会社との共同研究,ならびに,
    国⽴研究開発法⼈情報通信研究機構の
    委託研究(04001)により得られたものです
    #びよ〜ん
    on
    Rclex
    on Nerves
    on e-RT3 Plus

    View full-size slide

  2. 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
    システム開発者
    デプロイされる
    コード






    評価アプリ

    評価アプリ



    評価アプリ




    評価アプリ





    View full-size slide

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

    View full-size slide

  4. #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で発表申込み しときやした︕
    ※ このスライドはおおよそフィクションです

    View full-size slide

  5. #NervesJP
    #FA_Study
    5
    (前回の)Whatʼs Next??
    https://qiita.com/pojiro/items/
    81f3aafb77eed47f3baa
    https://speakerdeck.com/pojiro/
    radawoshi-wanaikontorora
    どんな感じの
    FAなアプリだと
    おもろなるやろ,,,

    View full-size slide

  6. | 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プラットフォーム
    製造設備

    View full-size slide

  7. | 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

    View full-size slide

  8. #NervesJP
    #FA_Study
    -BC *1$ *45 65PLZP
    $PNQVUJOH4ZTUFN-BCPSBUPSZ 8
    今回のお話し
    Rclex on Nerves on e-RT3 Plus
    できたってよ︖︖
    今回はまずは
    「論よりRUN!」

    View full-size slide

  9. #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

    View full-size slide

  10. #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

    View full-size slide

  11. #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

    View full-size slide

  12. #NervesJP
    #FA_Study
    -BC *1$ *45 65PLZP
    $PNQVUJOH4ZTUFN-BCPSBUPSZ 12
    デバイス
    エッジサーバ クラウド
    Elixir"だけ"で
    FAの新しいセカイを
    創造する︕
    Elixirがもたらす(IoT)FAの新しいカタチ

    View full-size slide

  13. #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

    View full-size slide

  14. #NervesJP
    #FA_Study
    -BC *1$ *45 65PLZP
    $PNQVUJOH4ZTUFN-BCPSBUPSZ
    Sapporo.beam
    れっつじょいなす︕︕ 14
    https://nerves-jp.connpass.com/

    View full-size slide

  15. #NervesJP
    #FA_Study
    -BC *1$ *45 65PLZP
    $PNQVUJOH4ZTUFN-BCPSBUPSZ
    さんくす︕︕
    @takasehideki
    #NervesJP
    15
    ※各⾔語・フレームワーク等のロゴの権利は
    それぞれの作成者に帰属しています

    View full-size slide

  16. #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

    View full-size slide

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

    View full-size slide

  18. #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

    View full-size slide

  19. #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による通信相⼿の⾃動探索

    View full-size slide

  20. #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 |> で直感的に記述できる
    ※各⾔語・フレームワークのロゴの権利は
    それぞれの作成者に帰属しています

    View full-size slide

  21. #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
    • (やや)強い動的型付け
    — データ構造にイミュータブル性を持つ
    • アクターモデルに基づく並⾏処理
    — モノ同⼠がメッセージ交換しながら進⾏
    — 疎結合かつ⾮同期な並⾏処理モデル
    • メモリ軽量かつ堅牢なプロセスモデル
    — プロセス単位でのメモリ管理と障害復旧
    — 処理のモジュール化と制御の抽象化
    • バイナリ操作とパターンマッチ
    スキップ
    予定

    View full-size slide

  22. #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/

    View full-size slide

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

    View full-size slide

  24. #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

    View full-size slide

  25. #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

    View full-size slide

  26. #NervesJP
    #FA_Study
    -BC *1$ *45 65PLZP
    $PNQVUJOH4ZTUFN-BCPSBUPSZ
    Custom
    Boards
    Unofficial Target
    主な対応デバイス
    x86_64
    BeagleBone
    https://youtu.be/DvwgGz_5D5I
    ラズパイ OSD32MP1
    26

    View full-size slide

  27. #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

    View full-size slide

  28. #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

    View full-size slide

  29. #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
    ボタン
    ロボットプログラミングは「関数型」だ︕︕

    View full-size slide

  30. #NervesJP
    #FA_Study
    -BC *1$ *45 65PLZP
    $PNQVUJOH4ZTUFN-BCPSBUPSZ
    github.com/rclex
    30
    関数型っぽい︖Rclex API
    ノード数
    ノードを⽣成
    トピックの作成
    :single->1つ
    :multi-> 複数
    callback関数と
    タイマ周期の設定
    ノードごとに出版する
    メッセージをリストで⽤意
    データ出版
    Enumによる
    データ加⼯

    View full-size slide

  31. #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ワード

    View full-size slide

  32. #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

    View full-size slide

  33. #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

    View full-size slide