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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. #NervesJP
    #FA_Study
    https://nerves-jp.connpass.com/
    Sapporo.beam
    れっつじょいなす︕︕ 11

    View Slide

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

    View Slide

  13. #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)
    <raw_temp::20, _crc::8>> = val
    ダッシュ
    ボード
    Link
    Super
    Visor
    one_for_one
    App
    液晶
    データ
    ロガー
    Link
    センサ
    監視
    制御
    Link
    ボタン
    ロボットプログラミングは「関数型」だ︕︕

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. #NervesJP
    #FA_Study
    18
    っていうのをやっていたら,,,
    ROS 2はいいぞぉ,Elixirもいいぞぉ,
    だからRclexはでらいいんだぞぉ,しらんけど:D
    じつにおもしろそうですね︕
    これって弊社のe-RT 3 Plusでも動きますか︖︖
    おぉ,FA設備にPLCってやつですね︕
    Nervesもいごくみたいやし,やってみましょう︕
    ぜひぜひに︕ちなみにこの製品はPLCではなくて
    リアルタイムOSコントローラと呼びますので,
    そこはよろしくです︕︕
    おっ,おぅ,,,
    でもいごいたらなにがおもろいですかねぇ︖︖
    とりま #FA_Studyで発表申込み しときやした︕
    ※ このスライドはおおよそフィクションです

    View Slide

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

    View Slide

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

    View Slide

  21. #NervesJP
    #FA_Study
    21
    とりあえず⽕⼊れしてみた
    https://qiita.com/myasu/items
    /057ce9ec2fa39148a5a3
    あっ,,, Ubuntu18 だし arm32 やったわ,,,
    おいら ROS 2 Foxy でよろっ
    Foxy は Ubuntu20 でよろっ
    あと arm32 ならソースビルドやでっ

    View Slide

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

    View Slide

  23. #NervesJP
    #FA_Study
    23
    ROS 2,いごいた︕
    横河電機株式会社で公式に提供されているイメージはUbuntu 18.04であり、
    本発表におけるUbuntu 20へのUpgradeおよびこれに起因するいかなる事象について、
    横河電機株式会社は責任を負いません。
    default ROS 2
    env on laptop
    Rclex on
    e-RT3 Plus

    View Slide

  24. #NervesJP
    #FA_Study
    24
    論よりRUN!! by Rclex on e-RT3 Plus
    default ROS 2 env on laptop
    Rclex on e-RT3 Plus

    View Slide

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

    View Slide

  26. #NervesJP
    #FA_Study
    26
    デバイス
    エッジサーバ クラウド
    Elixir"だけ"で
    FAの新しいセカイを
    創造する︕
    Elixirがもたらす(IoT)FAの新しいカタチ

    View Slide

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

    View Slide

  28. #NervesJP
    #FA_Study
    さんくす︕︕
    @takasehideki
    #NervesJP
    28
    ※各⾔語・フレームワーク等のロゴの権利は
    それぞれの作成者に帰属しています

    View Slide