SlideShare a Scribd company logo
関数型⾔語Elixirの
IoTシステム開発への展開
⾼瀬 英希
(京都⼤学/JSTさきがけ)
PPL 2021
2021/03/09
2
⽬次・内容︓
• はじめに︓⾃⼰紹介とやりたいこと
① 関数型⾔語ElixirとIoTフレームワークNervesの紹介
② “包括的な”IoTシステム開発環境
③ FPGAを積極活⽤する協調設計
④ 分散型処理配置と通信ミドルウェア
• おわりに︓Elixir for/with IoTの最新動向と研究の展望
3
⾃⼰紹介
本務・兼務
­京都⼤学 情報学研究科 准教授
­JSTさきがけ 兼任研究者
­理研R-CCS 客員研究員
­TOPPERSプロジェクト 運営委員
学会活動
­IPSJ-SIGEMB 運営幹事
­IEICE-RECONF 専⾨委員
­SWEST ステアリング委員
コミュニティ活動
­ROS Japan Users Group
­ROSCon JP 実⾏委員
­IoT ALGYAN (あるじゃん) 運営委員
­NervesJP : Elixir for IoT
@takasehideki
箱 庭
4
研究対象︓組込みシステム
情報通信
メディア機器
情報家電
OA機器
産業機械
ロボット
⾃動⾞
航空機
様々な状況に
対応する
複雑な制御
AI/ML処理の
ための処理性能
多品種展開
への対応
限定された
計算資源と
電⼒量
実世界との
膨⼤なデータの
やりとり
厳しい
品質要求
5
組込みからのIoTコンピューティングへ
AI/ML技術との
密接な統合
あらゆるモノ・コトの
ネットワーク接続によって
新たな社会的価値を創造
各構成要素における
計算機特性の結集
⼤量のデバイスとデータ
「デバイスレベル並列化」
による最適化の時代へ︕
6
⾼瀬の研究テーマ
あらゆる
モノ・コトと
ヒトを繋げる
設計基盤の
確⽴
最適化 設計技術
良いモノ を 誰でも楽に
つくることができる世界へ
組込み/IoTコンピューティング基盤を⽀える
プラットフォーム技術と設計⽅法論
これまでの取り組みと成果
2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
task
arrival
task is
running
MM-SPM
copy
Execution time
Task1
Task2
Task3
SPM
region
メモリ配置最適化
ΗΑ΅
ΗΑ΅
ΗΑ΅
ΗΑ΅
ΗΑ΅
ΗΑ΅
ΗΑ΅
Εή Π̻ ̼ ̰
R N B ̰ Ѓ ; Ξ΅ Ιμ㌸廷
ʹ ό ΙΛΰ ΦΛΠψЃ ΅ ㌸廷
Ή ό Ϊ ̹ ς ㌸廷
Q S N R ㌸廷
剰堽⒔
ς ό Θι
φΐ Λ΅
κλσ̰ Ѓ ; Ξ΅ Ιμ㌸廷
ΰ φΓΛΌ ̰ Ѓ ; Ξ΅ Ιμ㌸廷
徳從㝡㏆㌸廷 G V ̰ τΊ σΒι
κλσ'; μΛΏ ξ(
✆咩G V ΰ φΓΛΌ κλσ
ΰ φΓΛΌ
ʹ ό ΙΛΰ
ΦΛΠψЃ ΅
ΰ φΓΛΌ
κλσ ΰ φΓΛΌ ✆咩G V
設計階層に跨る
消費エネルギー
統合的最適化
RTOS
FPGA
ROS
Elixir
Power-
Efficient
High-
Performance
Power-
Efficient
High-
Performance
τ1
CP1 CP2
τ2 τ3
High-
Performance
Power-
Efficient
τ1
τ2 τ3		
τ3		
DEPS for
hetero SoC
SW志向協調設計
ZytleBot
SoCアーキテクチャ
コンパイラ
汎⽤カーネル
通信ミドルウェア
AI/MLライブラリ
SoCアーキテクチャ
コンパイラ
リアルタイムOS
通信ミドルウェア
デバイスライブラリ
SoCアーキテクチャ
コンパイラ
インタプリタ
通信ミドルウェア
数値演算ライブラリ
デバイス エッジサーバ クラウド
箱 庭
Cockatrice
HLS最適化
包括的IoT
開発環境
組込み向けROS
①
②
③
Rclex
③
7
どうやってIoTをつくるのか︖
ものづくりの根幹=プログラミング⾔語
※各⾔語・フレームワークのロゴの権利は
それぞれの作成者に帰属しています
9
今⽇やりたいこと
• Elixir/NervesのセカイをPPLな皆さまにご案内します
• Elixir for/with IoTの取り組みを紹介します
• 「プログラミング⾔語の観点からのIoT研究」について,
みなさんと考えたいです(教えてください :D
おてやわらかによろしくどうぞですm(_ _)m
10
⽬次・内容︓
• はじめに︓⾃⼰紹介とやりたいこと
① 関数型⾔語ElixirとIoTフレームワークNervesの紹介
② “包括的な”IoTシステム開発環境
③ FPGAを積極活⽤する協調設計
④ 分散型処理配置と通信ミドルウェア
• おわりに︓Elixir for/with IoTの最新動向と研究の展望
Elixir??
11
※各⾔語・フレームワークのロゴの権利は
それぞれの作成者に帰属しています
12
Elixir!!
2012年に登場した新たな関数型⾔語
Erlang VM上で動作
• ⾼い並列性能を誇る
• 軽量かつ頑強なプロセスモデル
• 耐障害性が極めて⾼い
Rubyを基にした⾔語設計
• 習得しやすく⽣産性が向上する
• WebフレームワークPhoenixを持つ
Ø応答性が極めて⾼い
Programming should be
about transforming data
Elixir Zen Style
Zen(禅) とは本質美である
• プログラミングの本質とはデータの流れである
­ Elixirではデータフローと並列処理を
Enum Flow |> で直感的に記述できる
※各⾔語・フレームワークのロゴの権利は
それぞれの作成者に帰属しています
13
Elixirの気持ちよさ
• Zen Style!!
• (やや)強い動的型付けとイミュータブル性
• 処理のモジュール化と制御の抽象化
­関数とパイプ/プロセスとメッセージ
• メモリ軽量かつ堅牢なプロセスモデル
­プロセス単位でのメモリ管理と障害復旧
• バイナリ操作とパターンマッチ
Shared Data
Core #1 Core #2
3.14
ダッシュ
ボード
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
14
• ElixirによるIoTフレームワーク
­極⼩規模のファームウェア (~>30 MB)
­堅牢性の⾼いファイルシステム
­機能の取捨選別が容易 (Buildrootの利⽤)
• Elixirと完全互換で習熟性が⾼い
­アクターベースの並⾏プログラミング
­IoT向けになにかを気にする必要なし
• 有⽤なIoTライブラリとツール
­NervesHub: Device to the Cloud!!
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⽉号
15
Nervesのリアルタイム性
ü最⼩の構成で⼗分なリアルタイム性を提供する
üSoC性能がリアルタイム性にも直結する
1. GCの設定
­ ローカルデータを消費するもの
にはminor GCの抑⽌が効果的
­ 最⼩のヒープサイズを適切に
設定することも効果がある
2. プロセス優先度の設定
­ 最悪実⾏時間の改善には
high の設定は有⽤
­ さらなる調査が不可⽋
3. CPU周波数の制御
­ 周波数の固定化はリアルタイム性の
改善に寄与する
­ IoTデバイスでは消費エネルギーの
最適化も重要となる
4. カーネルのカスタマイズ
­ 有意な効果は⾒られなかった
­ I/O処理が断続的かつ⼤量な
場合には効果がある可能性がある
https://www.verypossible.com/insights/is-
nerves-a-real-time-embedded-system
• ⾼瀬,河上,菊池︓関数型⾔語ElixirのIoTフレームワークNervesに関するリアルタイム性の評価およびその改善の試み,
情報処理学会研究報告,Vol. 2020-EMB-55,No. 7, 2020. [paper]
• Hideki Takase: An Evaluation of Real-Time Performance for Nerves, Nerves in Action Web Series [slide]
Custom
Boards
Unofficial Target
16
主な対応デバイス
x86_64
BeagleBone
https://youtu.be/DvwgGz_5D5I
ラズパイ OSD32MP1
17
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:
スマートファームの実現
18
(時間があれば)論よりRUN!!
• 必要な環境︓Elixir, Erlang, nerves_bootstrap, hex, rebar
­macOS, Linux (Ubuntu) 向け︓ ElixirでIoT #4.1
­Windows (WSL 2) 向け︓ ElixirでIoT #4.1.1
­VSCode + dev-container: ElixirでIoT #4.1.2
• デモの内容
1. Nervesプロジェクトの作成・各種設定
2. ファームウェアのビルドとmicroSDへの書き込み
3. OTAでのファーム更新とGPIOデバイス操作
4. Phoenixとの連携で温湿度表⽰
19
⽬次・内容︓
• はじめに︓⾃⼰紹介とやりたいこと
① 関数型⾔語ElixirとIoTフレームワークNervesの紹介
② “包括的な”IoTシステム開発環境
③ FPGAを積極活⽤する協調設計
④ 分散型処理配置と通信ミドルウェア
• おわりに︓Elixir for/with IoTの最新動向と研究の展望
20
“包括的な”IoTシステム開発環境
SoCアーキテクチャ
コンパイラ
汎⽤カーネル
通信ミドルウェア
AI/MLライブラリ
SoCアーキテクチャ
コンパイラ
リアルタイムOS
通信ミドルウェア
デバイスライブラリ
SoCアーキテクチャ
コンパイラ
インタプリタ
通信ミドルウェア
数値演算ライブラリ
構成要素を横断するIoTシステム開発技術
設計階層を縦断する最適化・実⾏環境
デバイス エッジサーバ クラウド
Elixirの記述”だけ”で
IoTシステム全体を
設計開発できるようにする
21
設計階層の縦断
SoCアーキテクチャ
コンパイラ
実⾏環境
通信ミドルウェア
ライブラリ
1. FPGAを積極活⽤する協調設計
• 関数型⾔語からの⾼位合成
• 並列HWの調停IPの設計
2. ElixirのIoT向け軽量実⾏環境
• インタプリタ⽅式/コンパイラ⽅式
• 静的解析によるデータ活⽤の最適化
• リアルタイム性能の強化
3. ⾼性能統計エンジン
• ビッグデータ対応数値演算ライブラリ
• 並列分散処理AI/MLエンジン
22
構成要素の横断
5. 開発フレームワークの実証的検証
• 適⽤事例による有効性と実⽤性の⽴証
• 被験者実験の実施による開発⽣産性の評価
4. 分散型処理配置と通信ミドルウェア
• データ中⼼型による⼀気通貫のシステムレベル設計
• ⼀体のElixir記述からの処理分割と適切配置
• スケーラブルなデータ通信を実現する通信機構とミドルウェア
Rclex
23
⽬次・内容︓
• はじめに︓⾃⼰紹介とやりたいこと
① 関数型⾔語ElixirとIoTフレームワークNervesの紹介
② “包括的な”IoTシステム開発環境
③ FPGAを積極活⽤する協調設計
④ 分散型処理配置と通信ミドルウェア
• おわりに︓Elixir for/with IoTの最新動向と研究の展望
FPGA (Field Programmable Gate Array)
• ハードウェアを⾃由に形成可能なLSI
• GPUよりも電⼒効率に優れる
• プロセッサと密結合されたSoCが
最近の主流になっている
­柔軟性の必要な逐次処理はSWで
­並列性のある⾼負荷処理はHWで
24
IOB
SB
CB LB
IOB
IOB
SB
IOB LB
SB
CB CB
SB
CB
SB SB
CB CB
LB IOB
IOB LB
SB SB SB
IOB IOB
CB
CB
CB
CB
CB
CB
⼊出⼒ブロック
コネクションブロック
LB 論理ブロック
IOB
SB スイッチブロック
CB
プロセッサ
通信バス
FPGA
HW
SW
SW
25
⾼位合成 (HLS: High Level Synthesis)
• 抽象度の⾼い動作記述からRTLを⽣成する技術
­汎⽤プログラミング⾔語によって振る舞いを定義
­「なに」を⾏うかに重点を置いて設計する
ü多くの商⽤ツールはC/C++またはその拡張⾔語
­ソフトウェア志向の協調設計との親和性が⾼い
プロセッサ
通信バス
FPGA
HW
SW
SW
int_t main () {
a = func1(xxx);
b = a + func2(yyy);
}
int func1(int x) {
…
return val;
}
int func2(int x) {
int a[N];
int i;
for(i=0;i<N;i++){
a[i] = ・・・;
:
}
}
x
func
i
a
SW
26
⾼位合成からみたプログラミング⾔語
R. Nane, et al.: A Survey and Evaluation of FPGA
High-Level Synthesis Tools, IEEE T-CAD, 2015.
M. W. Numan, et al.: Towards Automatic High-Level Code
Deployment on Reconfigurable Platforms: A Survey of High-
Level Synthesis Tools and Toolchains, IEEE Access, 2020.
27
Elixirによる⾼位合成︓アイデア
input_list
|> Flow.from_enumerable(stages: 4)
|> Flow.map(& foo(&1))
|> Flow.map(& bar(&1))
|> Enum.to_list
|> Enum.sort
from_
enumerable
input_list
foo
foo
foo
foo
sort
to_list
arbitrator
bar
bar
bar
bar
input
_list from_
enume
rable
to_list
sort
foo bar
foo bar
foo bar
foo bar
arbitrator
foo bar
foo
bar
foo bar
foo
bar
foo
bar
foo
foo bar
foo
bar
foo bar bar
foo bar
foo bar
foo bar
foo bar
• H. Takase, et al. “WiP: A concept of a hardware design environment with the functional language Elixir,” in CODES+ISSS, 2019.
• H. Takase, “Cockatrice: A Hardware Design Environment with Elixir,” ElixirConf US 2019. [video] / [slide]
• H. Takase, “Towards a Hardware Synthesis Environment from the Functional Language Elixir,” ASP-DAC 2021 Designersʼ Forum.
• H. Takase, et al. “WiP: A concept of a hardware design environment with the functional language Elixir,” in CODES+ISSS, 2019.
• H. Takase, “Cockatrice: A Hardware Design Environment with Elixir,” ElixirConf US 2019. [video] / [slide]
• H. Takase, “Towards a Hardware Synthesis Environment from the Functional Language Elixir,” ASP-DAC 2021 Designersʼ Forum. 28
設計記述と合成フロー
設計記述の
解析
設計記述
Elixir
ライブラリIP・
テンプレート
HDL+DSL
構⽂⽊
AST
Elixir関数対応
HWモジュール⽣成
HW IPモジュール
HDL
データフロー合成 データフロー型
HW回路 HDL
HW回路
bitstream
IFドライバ
C
論理合成
(HW回路合成)
アプリ記述
Elixir+C(NIF)
IF回路
ドライバ合成
SWコンパイル
Elixirライブラリと機能等価な
モジュールをIPとして提供
(HW屋さん的にはIPベース設計)
無名関数の演算⼦・関数や
並列度等のパラメータを
テンプレートのDSLに適⽤
SW/HW間のインタフェース機構を⽣成
29
機能等価なHDL IPの設計
• Enumライブラリ関数の処理パターンを分類
1. 各要素に対して独⽴して結果を出⼒する演算・関数
2. 複数要素を受け取って単⼀要素を出⼒する演算・関数
ü処理に結合性があればHWモジュールは集約可能
3. 複数要素を受け取って複数要素を出⼒する演算・関数
• H. Takase, et al. “WiP: A concept of a hardware design environment with the functional language Elixir,” in CODES+ISSS, 2019.
• H. Takase, “Cockatrice: A Hardware Design Environment with Elixir,” ElixirConf US 2019. [video] / [slide]
• H. Takase, “Towards a Hardware Synthesis Environment from the Functional Language Elixir,” ASP-DAC 2021 Designersʼ Forum.
30
SW/HW通信インタフェース機構
SWの関数呼び出しと
同じ記述でHWを起動
ErlangのNIF機能で
C実装デバドラをラッピング
Elixirのリストと
Cの配列を相互変換
Xilinx Zynq搭載の
AMBA AXI4に準拠して通信
Xilinx Zynq搭載の
AMBA AXI4に準拠して通信
Elixirライブラリ関数と
機能等価なHDL IP
• H. Takase, et al. “WiP: A concept of a hardware design environment with the functional language Elixir,” in CODES+ISSS, 2019.
• H. Takase, “Cockatrice: A Hardware Design Environment with Elixir,” ElixirConf US 2019. [video] / [slide]
• H. Takase, “Towards a Hardware Synthesis Environment from the Functional Language Elixir,” ASP-DAC 2021 Designersʼ Forum.
31
現状と⽅向性
• Cockatrice︓Elixirの⾼位合成系
­ 9種類のEnum関数をHDL IP化
­ 組込みボード Zybo 向けに通信機構を
実装して実機動作を確認
ü AXI4では性能が出ない
­ Vivado HLS以外との連携を模索中
• 狙いどころ︓AI/MLアプリ
ü 少なくとも組込み向けではなさそう
­ IoT向けビッグデータのストリーム処理
­ 柔軟に機能を変えたいクラウドサーバ処理
• H. Takase, et al. “WiP: A concept of a hardware design environment with the functional language Elixir,” in CODES+ISSS, 2019.
• H. Takase, “Cockatrice: A Hardware Design Environment with Elixir,” ElixirConf US 2019. [video] / [slide]
• H. Takase, “Towards a Hardware Synthesis Environment from the Functional Language Elixir,” ASP-DAC 2021 Designersʼ Forum.
Elixirはリアルタイムアプリには向いているが,
データ量が⼤きくなると性能が出ない
32
⽬次・内容︓
• はじめに︓⾃⼰紹介とやりたいこと
① 関数型⾔語ElixirとIoTフレームワークNervesの紹介
② “包括的な”IoTシステム開発環境
③ FPGAを積極活⽤する協調設計
④ 分散型処理配置と通信ミドルウェア
• おわりに︓Elixir for/with IoTの最新動向と研究の展望
33
(Robot Operating System)
• Plumbing: 出版購読型の通信ミドルウェア
• Tools: プロジェクト管理,デバッグ,可視化,等
• Capabilities: 膨⼤なライブラリ・パッケージ
• Ecosystem: 世界規模の強⼒なOSSコミュニティ
ロボットソフトウェアの開発を加速化するプラットフォーム
http://www.ros.org/about-ros/
34
通信ミドルウェアとしての
• Publish / Subscribe messaging infrastructure
­ROSノード︓ロボットシステムを構成する機能単位
­Topicを介した出版購読型通信︓基本的に⾮同期・疎な通信⽅式
üノードの登録・変更・削除・配置が容易に実現できる
ü障害時にはノード単位で再起動と復旧ができる
node1
node2
node3
node4
Topic1
Topic2
node5
出版(Publish) 購読(Subscribe)
msg
msg
msg
msg
• その他の通信⽅式
­ Service: 同期式
­ Action: 同期と⾮同期の組合せ
­ Parameter: 多変量辞書
35
再利⽤性の⾼い⾞輪としての
• ROSパッケージ︓有⽤な機能がまとめられたライブラリの集合
­2,000以上のパッケージが公開されている(ROSの最⼤の⻑所︕)
https://index.ros.org/packages/
­利点︓既存資産として活⽤できる・パッケージ単位で差替えできる
üコンポーネント指向開発を実現できる
パッケージ名 内容
tf ロボットの3次元座標と連鎖関係,時間の管理
teleop ロボットの移動⽅向の操作
usb_cam USBカメラの画像の取り込み
ros_control ハードウェアを抽象化したアクチュエータの制御
MoveIt マニピュレーションの制御アルゴリズム
Navigation 地図ベースの⾃⼰位置推定と経路計画のアルゴリズム
36
ROS 2 Client Library Rclex
RMW (ROS MiddleWare)
node.py
rclpy
RCL (ROS Client Library)
HW
node.cpp
rclcpp Rclex
node.ex
node node node
DDS B
DDS A DDS (Data Distribution Service)
• OMG標準仕様として規定
• 出版購読通信を提供
• ノード⾃動検出 など
• 共通の基盤機能
• 実装はC⾔語
• 各⾔語から呼び出すことで
ライブラリを開発可能
• DDSの通信機能を抽象化するAPI層
• 複数のDDS実装から選択可能
tlk-emb/rclex
for Elixir
37
ROS x Elixirの⽬指す貢献 Rclex
Publisher
・
・
Topic1
Subscriber
・
・
Publisher
・
・
Topic1 Subscriber
・
・
Topic2
Topic3
...Erlangプロセスに実⾏させる処理
ØElixirでErlangプロセスを
同時かつ⼤量に⽣成
Øプロセスで出版購読処理と
付随するコールバックを実⾏
l 軽量プロセスの並⾏処理で
スケーラビリティを向上
l アクターモデルの
ROSプログラミングへの融合
tlk-emb/rclex
38
Erlang VM/カーネルとの関係 Rclex
OS
Process Space
rclcpp
node1
rclcpp
node2
Erlang VM
Rclex
node1
Rclex
node2
CPU
process
exec. queue
Pub process1
Sub process1
Sub process2
...
RCL node block =
Erlang resource object
• OSの1プロセスとしてErlang VMが起動
• Erlangスケジューラの中でループ処理とプロセス=ROSノードを実⾏
• プロセスが軽量︓起動時間が数マイクロ秒,メモリはおよそ300ワード
RCL資源をstatic linkした
共有ライブラリをErlang NIFを
介してロード・呼び出し
tlk-emb/rclex
39
ElixirからのRCL層の呼び出し Rclex
tlk-emb/rclex
defmodule RclEx do
@on_load :load_nifs
def load_nifs do
:erlang.load_nif(‘rclex',0)
end
def node_init do
end
def publish do
end
def subscription do
end
...
end
RCL,RMW
Elixirコードから渡された
Erlangリソースオブジェクト
(= 構造体分のメモリブロック)
RCL内の対応する構造体
変換
→RCL APIを呼び出す
Erlang NIFを介して
.so をロード
40
Rclex API(⼀部) Rclex
tlk-emb/rclex
関数名/引数の数 引数 機能
rclexinit/0 - 初期化
コンテキストを有効化
create_nodes/3,4 コンテキスト, ノード名,
[名前空間,] ノード数
ノード名を作成
create_publishers/3 ノードリスト, トピック,
トピックの作成⽅法
パブリッシャ⽣成
publish/2 パブリッシャリスト,
メッセージリスト
データ出版開始
create_subscribers/3 ノードリスト, トピック,
トピックの作成⽅法
サブスクライバ⽣成
subscribe/3 サブスクライバリスト,
コンテキスト, コールバック
データ購読開始
create_timer/3 ノードリスト, 時間,
コールバック
コールバック関数を
周期的に実⾏
基本的な出版購読通信を(とりあえず)サポート
41
Rclexノードの実装例 (topic出版)
tlk-emb/rclex
Rclex
defmodule PubSample do
def pubmain do
num_node = 10
Rclex.rclexinit
|> Rclex.create_nodes(’test_pub_node’,num_node)
|> Rclex.create_publishers(’testtopic’, :single)
|> Rclex.Timer.create_wall_timer(1000,&pub_func/1)
end
def pub_func (publisher_list) do
n = length(publisher_list)
msg_list = Rclex.initialize_msg(:string, n)
Enum.map(0..n-1, fn(index)->
Rclex.setdata_string(Enum.at(msg_list,index),
”hello”, :string)
end)
Rclex.Publisher.publish(publisher_list,msg_list)
end
end
ノード数
設定されたノード名にインデックスを
付けてノードを⽣成
トピックの作成
:single->1つのトピック
:multi-> 複数のトピック
実⾏周期と実⾏する関数の設定
ノード数に応じた
メッセージリストを⽤意
トピックへの出版
42
現状と結果・⽅向性
• 実装環境・対象
­ROS 2 Dashing Diademate / Ubuntu 18.04
­Elixir 1.9.4-otp-22 / Erlang OTP 22.0.3
• 現状の評価結果
­1対1通信では Rclcpp には敵わない
­1対多/多対多では Rclex のスケールメリットがある
üノード数/データサイズが⼤きくなっても性能/メモリ量が影響を受けない
• 今後の⽅向性
­機能拡充 (executor, service, action) とテストの⾃動化/容易化
­IoT/クラウドロボティクス環境への適⽤評価
Rclex
tlk-emb/rclex
43
⽬次・内容︓
• はじめに︓⾃⼰紹介とやりたいこと
① 関数型⾔語ElixirとIoTフレームワークNervesの紹介
② “包括的な”IoTシステム開発環境
③ FPGAを積極活⽤する協調設計
④ 分散型処理配置と通信ミドルウェア
• おわりに︓Elixir for/with IoTの最新動向と研究の展望
44
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
45
JIT is coming to OTP!!
KEYNOTE: JIT Compiler for Erlang OTP - Lukas Larsson | Code BEAM V
https://youtu.be/lM7UV95Rpyo
https://github.com/erlang/otp/pull/2745
https://github.com/erlang/otp/
releases/tag/OTP-24.0-rc1
46
Nervesアプリ開発の効率化
栗林, 他︓IoTデバイス内アプリケーションの開発効率向上のためにコード
の変更を動的に適⽤する⽅式の提案と実装,情報処理学会研究報告,
Vol. 2021-SE-207,No. 32, 2021. [paper] [slide]
菊地︓超個体性をもったエッジコンピューティング実現に向けElixir/Nerves
環境の適合性評価,ITRC RICC-PIoT workshop 2021 [slide]
47
おわりに
• Elixir/Nervesのセカイへのご案内
• “包括的な”IoTシステム開発環境
­FPGAを設計活⽤する協調設計
­分散型処理配置と通信ミドルウェア
üまだまだ志半ば,また来年に︕︖
• Elixirの研究,やっていきませんか︖︖
­なにをやっても新しい︕まさにblue ocean!!
­ただし「それElixirじゃなくてもよくね︖」との闘いではある
※各⾔語・フレームワークのロゴの権利は
それぞれの作成者に帰属しています
SoCアーキテクチャ
コンパイラ
汎⽤カーネル
通信ミドルウェア
AI/MLライブラリ
SoCアーキテクチャ
コンパイラ
リアルタイムOS
通信ミドルウェア
デバイスライブラリ
SoCアーキテクチャ
コンパイラ
インタプリタ
通信ミドルウェア
数値演算ライブラリ
構成要素を横断するIoTシステム開発技術
設計階層を縦断する最適化・実⾏環境
デバイス エッジサーバ クラウド
codeで社会を変えていく
https://nerves-jp.connpass.com/
48
Sapporo.beam
れっつじょいなす︕︕
49
ROS Japan Users Group
• Discourse: https://discourse.ros.org/c/local/japan
• connpass: https://rosjp.connpass.com
­勉強会・講習会など 初⼼者から歴戦の猛者まで︕
­関⻄や瀬⼾内・九州でも開催︕
­メンバー数 2,066名 @2021/03/03
üSlack: rosjp
üTwitter: #rosjp
さんくす︕︕
@takasehideki
#NervesJP

More Related Content

PDF
tf,tf2完全理解
Koji Terada
 
PPTX
DockerコンテナでGitを使う
Kazuhiro Suga
 
PDF
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
Yoshitaka HARA
 
PDF
【Unity】 Behavior TreeでAIを作る
torisoup
 
PDF
ROS を用いた自律移動ロボットのシステム構築
Yoshitaka HARA
 
PPTX
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
RyuichiKanoh
 
PPTX
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
Deep Learning JP
 
PDF
オープンソース SLAM の分類
Yoshitaka HARA
 
tf,tf2完全理解
Koji Terada
 
DockerコンテナでGitを使う
Kazuhiro Suga
 
ROS の活用による屋外の歩行者空間に適応した自律移動ロボットの開発
Yoshitaka HARA
 
【Unity】 Behavior TreeでAIを作る
torisoup
 
ROS を用いた自律移動ロボットのシステム構築
Yoshitaka HARA
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
RyuichiKanoh
 
[DL輪読会]“Spatial Attention Point Network for Deep-learning-based Robust Autono...
Deep Learning JP
 
オープンソース SLAM の分類
Yoshitaka HARA
 

What's hot (20)

PDF
全力解説!Transformer
Arithmer Inc.
 
PDF
【DL輪読会】Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
Deep Learning JP
 
PDF
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
Kitsukawa Yuki
 
PDF
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
Preferred Networks
 
PDF
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
 
PPTX
畳み込みニューラルネットワークの研究動向
Yusuke Uchida
 
PDF
POMDP下での強化学習の基礎と応用
Yasunori Ozaki
 
PDF
Web エンジニアが postgre sql を選ぶ 3 つの理由
Soudai Sone
 
PDF
(修正)機械学習デザインパターン(ML Design Patterns)の解説
Hironori Washizaki
 
PPTX
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
PDF
Sift特徴量について
la_flance
 
PDF
0から理解するニューラルネットアーキテクチャサーチ(NAS)
MasanoriSuganuma
 
PDF
MIRU2013チュートリアル:SIFTとそれ以降のアプローチ
Hironobu Fujiyoshi
 
PDF
研究効率化Tips Ver.2
cvpaper. challenge
 
PDF
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
Yahoo!デベロッパーネットワーク
 
PDF
最適化超入門
Takami Sato
 
PPTX
【DL輪読会】Is Conditional Generative Modeling All You Need For Decision-Making?
Deep Learning JP
 
PDF
SLAM入門 第2章 SLAMの基礎
yohei okawa
 
PDF
Attentionの基礎からTransformerの入門まで
AGIRobots
 
PDF
SSII2021 [SS1] Transformer x Computer Visionの 実活用可能性と展望 〜 TransformerのCompute...
SSII
 
全力解説!Transformer
Arithmer Inc.
 
【DL輪読会】Diffusion Policy: Visuomotor Policy Learning via Action Diffusion
Deep Learning JP
 
NDTスキャンマッチング 第1回3D勉強会@PFN 2018年5月27日
Kitsukawa Yuki
 
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
Preferred Networks
 
変分推論法(変分ベイズ法)(PRML第10章)
Takao Yamanaka
 
畳み込みニューラルネットワークの研究動向
Yusuke Uchida
 
POMDP下での強化学習の基礎と応用
Yasunori Ozaki
 
Web エンジニアが postgre sql を選ぶ 3 つの理由
Soudai Sone
 
(修正)機械学習デザインパターン(ML Design Patterns)の解説
Hironori Washizaki
 
本当は恐ろしい分散システムの話
Kumazaki Hiroki
 
Sift特徴量について
la_flance
 
0から理解するニューラルネットアーキテクチャサーチ(NAS)
MasanoriSuganuma
 
MIRU2013チュートリアル:SIFTとそれ以降のアプローチ
Hironobu Fujiyoshi
 
研究効率化Tips Ver.2
cvpaper. challenge
 
深層学習による自然言語処理入門: word2vecからBERT, GPT-3まで
Yahoo!デベロッパーネットワーク
 
最適化超入門
Takami Sato
 
【DL輪読会】Is Conditional Generative Modeling All You Need For Decision-Making?
Deep Learning JP
 
SLAM入門 第2章 SLAMの基礎
yohei okawa
 
Attentionの基礎からTransformerの入門まで
AGIRobots
 
SSII2021 [SS1] Transformer x Computer Visionの 実活用可能性と展望 〜 TransformerのCompute...
SSII
 
Ad

Similar to 関数型言語ElixirのIoTシステム開発への展開 (20)

PPTX
ElixirでIoT!?ナウでヤングでcoolなNervesフレームワーク
Hideki Takase
 
PDF
第4回 kochi.ex オン・オフラインミーティング
Yutaka Kikuchi
 
PPTX
Elixir/Nervesはナウでヤングなcoolなすごいやつ
Hideki Takase
 
PDF
Elixir とか組込みとか (On Elixir and embedded systems)
Yutaka Kikuchi
 
PDF
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Hideki Takase
 
PDF
Using Elixir for Factory Automation - how to execute ladder logic
Yutaka Kikuchi
 
PDF
Exineris Project by kochi.ex
Yutaka Kikuchi
 
PDF
Nervesが開拓する「ElixirでIoT」の新世界
Hideki Takase
 
PDF
Anyway folks! Let's get started with your Nerves machines.
Yutaka Kikuchi
 
PPTX
ElixirをIoTボードで動かしてみた ~ラズパイ・big.LITTLE・Zynq編~
Hideki Takase
 
PDF
Modernization of Factory Automation with Elixir based systems and communities
Yutaka Kikuchi
 
PPTX
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
Hideki Takase
 
PDF
IoT 時代に資する 「ものグラミング」教育のための 授業開発と実践
Kazutaka Nakamura
 
PPTX
ElixirでFPGAハードウェアが作れちゃう,かも!!?
Hideki Takase
 
PDF
Applying Elixir to FA: A Study of Small Hydropower Palnt Systems
Yutaka Kikuchi
 
PDF
関数型っぽくROSロボットプログラミング
Hideki Takase
 
PDF
パーフェクト"Elixir情報収集"
Keisuke Takahashi
 
PPTX
やや関数型を意識した風Elixir/Phoenixご紹介
fukuoka.ex
 
PPTX
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
fukuoka.ex
 
PPTX
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
fukuoka.ex
 
ElixirでIoT!?ナウでヤングでcoolなNervesフレームワーク
Hideki Takase
 
第4回 kochi.ex オン・オフラインミーティング
Yutaka Kikuchi
 
Elixir/Nervesはナウでヤングなcoolなすごいやつ
Hideki Takase
 
Elixir とか組込みとか (On Elixir and embedded systems)
Yutaka Kikuchi
 
Nerves!? Elixir!?? 関数型言語でれっつIoT開発!!
Hideki Takase
 
Using Elixir for Factory Automation - how to execute ladder logic
Yutaka Kikuchi
 
Exineris Project by kochi.ex
Yutaka Kikuchi
 
Nervesが開拓する「ElixirでIoT」の新世界
Hideki Takase
 
Anyway folks! Let's get started with your Nerves machines.
Yutaka Kikuchi
 
ElixirをIoTボードで動かしてみた ~ラズパイ・big.LITTLE・Zynq編~
Hideki Takase
 
Modernization of Factory Automation with Elixir based systems and communities
Yutaka Kikuchi
 
関数型言語ElixirのIoTシステムへの導入に向けた基礎評価
Hideki Takase
 
IoT 時代に資する 「ものグラミング」教育のための 授業開発と実践
Kazutaka Nakamura
 
ElixirでFPGAハードウェアが作れちゃう,かも!!?
Hideki Takase
 
Applying Elixir to FA: A Study of Small Hydropower Palnt Systems
Yutaka Kikuchi
 
関数型っぽくROSロボットプログラミング
Hideki Takase
 
パーフェクト"Elixir情報収集"
Keisuke Takahashi
 
やや関数型を意識した風Elixir/Phoenixご紹介
fukuoka.ex
 
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
fukuoka.ex
 
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
fukuoka.ex
 
Ad

More from Hideki Takase (20)

PDF
Rclex: A Library for Robotics meet Elixir
Hideki Takase
 
PDF
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
Hideki Takase
 
PDF
ROS 2 Client Library for E^2
Hideki Takase
 
PDF
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
 
PPTX
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
Hideki Takase
 
PPTX
Rclex: ElixirでROS!!
Hideki Takase
 
PDF
QoS for ROS 2 Dashing/Eloquent
Hideki Takase
 
PDF
ROSCon2019 参加報告:オーバビュー+α
Hideki Takase
 
PPTX
ElixirでFPGAを設計する
Hideki Takase
 
PDF
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
Hideki Takase
 
PDF
ZytleBot: ROSベースの自律移動ロボットへのFPGAの統合に向けて
Hideki Takase
 
PPTX
Cockatrice: A Hardware Design Environment with Elixir
Hideki Takase
 
PDF
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
Hideki Takase
 
PPTX
TOPPERSプロジェクトのご紹介@IoT ALGYAN
Hideki Takase
 
PDF
オースティンから見えてきた「ElixirでIoT」の世界  ~「Nerves」が拓くElixirでのデバイスコントロールを総レビュー~
Hideki Takase
 
PPTX
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
Hideki Takase
 
PPTX
mROSをクラウド/仮想環境に連携させてみる
Hideki Takase
 
PDF
Elixirでハードウェアが作れちゃう,かも!!? データフロー型ハードウェア設計環境Cockatriceのご紹介
Hideki Takase
 
PDF
Design Concept of a Lightweight Runtime Environment for Robot Software Compo...
Hideki Takase
 
PPTX
mROS:組込みデバイス向けのROS1ノード軽量実行環境
Hideki Takase
 
Rclex: A Library for Robotics meet Elixir
Hideki Takase
 
高い並列性能と耐障害性を持つElixirとNervesでIoTの新しいカタチを切り拓く
Hideki Takase
 
ROS 2 Client Library for E^2
Hideki Takase
 
FPGAをロボット(ROS)で「やわらかく」使うには
Hideki Takase
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
Hideki Takase
 
Rclex: ElixirでROS!!
Hideki Takase
 
QoS for ROS 2 Dashing/Eloquent
Hideki Takase
 
ROSCon2019 参加報告:オーバビュー+α
Hideki Takase
 
ElixirでFPGAを設計する
Hideki Takase
 
つながるロボット 〜分散協調ロボットの開発を加速化するROSの紹介〜
Hideki Takase
 
ZytleBot: ROSベースの自律移動ロボットへのFPGAの統合に向けて
Hideki Takase
 
Cockatrice: A Hardware Design Environment with Elixir
Hideki Takase
 
IoTアプリ/ロボット開発をリアルタイムOSでレベルアップしませんか? ~高品質な組込み向けオープンソースを開発するTOPPERSプロジェクトのご紹介~
Hideki Takase
 
TOPPERSプロジェクトのご紹介@IoT ALGYAN
Hideki Takase
 
オースティンから見えてきた「ElixirでIoT」の世界  ~「Nerves」が拓くElixirでのデバイスコントロールを総レビュー~
Hideki Takase
 
ZytleBot:ROS対応自動走行ロボットへのFPGA活用を加速化する統合開発プラットフォーム
Hideki Takase
 
mROSをクラウド/仮想環境に連携させてみる
Hideki Takase
 
Elixirでハードウェアが作れちゃう,かも!!? データフロー型ハードウェア設計環境Cockatriceのご紹介
Hideki Takase
 
Design Concept of a Lightweight Runtime Environment for Robot Software Compo...
Hideki Takase
 
mROS:組込みデバイス向けのROS1ノード軽量実行環境
Hideki Takase
 

関数型言語ElixirのIoTシステム開発への展開