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

Rclex on Nerves: a bare minimum runtime platform for ROS 2 nodes in Elixir

takasehideki
October 19, 2023
110

Rclex on Nerves: a bare minimum runtime platform for ROS 2 nodes in Elixir

ROSCon 2023
2023/10/19
https://roscon.ros.org/2023/

Vimeo Archive:
https://vimeo.com/879001529/b23eaacae8

Speakers and Contributors:
Hideki Takase, Shintaro Hosoai (The Univ. of Tokyo), Ryota Kinukawa (Tombo Works), Shunsuke Kikuchi (SAKURA internet, Inc.)

Abstract:
Do you know the magic of Elixir programming language, and how easily this can be installed into robot systems? One of the solutions is "Rclex," which is a client library for ROS 2 platform. Furthermore, Nerves provides a powerful platform specifically tailored for Elixir on IoT systems. This talk introduces "Rclex on Nerves," a minimal runtime platform for operating ROS 2 nodes using the Elixir. In this presentation, we will delve into the features, advantages, and role of Rclex on Nerves within the ROS 2 ecosystem.

Demonstrations a.k.a 論よりRUN:
p.17-18 https://twitter.com/takasehideki/status/1715098391342985417
p.18 https://twitter.com/takasehideki/status/1588521053311365121

More Info (STAR please!!):
https://github.com/rclex/rclex

takasehideki

October 19, 2023
Tweet

Transcript

  1. on
    a bare minimum runtime platform
    for ROS 2 nodes in Elixir
    Hideki Takase, Shintaro Hosoai (The Univ. of Tokyo),
    Ryota Kinukawa (Tombo Works), Shunsuke Kikuchi (SAKURA internet, Inc.)
    ROSCon 2023
    2023/10/19
    A part of this work is supported by JST CREST JPMJCR21D2 and
    the commissioned research (04001) by National Institute of
    Information and Communications Technology (NICT) , Japan.

    View full-size slide

  2. Hobby
    Recent R&D
    Affiliation
    Mission
    @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
    システム開発者
    デプロイされる
    コード






    評価アプリ

    評価アプリ



    評価アプリ




    評価アプリ





    a design
    infrastructure
    that connects
    all Things
    and Human
    Optimization Methodology
    Toward a world where anyone can
    easily create awesome products
    Cutting-Edge Platform and Design Methodology
    for embedded/IoT Computing

    View full-size slide

  3. 3
    Topic: Rclex on Nerves
    bare minimum
    and resilient
    runtime platform
    Client Library
    for Elixir
    node1
    node2
    node3
    node4
    topicA
    [string]
    topicB
    [image]
    node5
    publish subscribe
    DDS Domain
    msg
    msg
    msg
    msg
    .1 1 ( 0 ) .
    .1 ) 11
    .1 ) )
    &0 1(.
    &0 1
    Functional
    Language

    View full-size slide

  4. … …
    4
    rclcpp rclpy
    node.cpp node.py
    RCL (ROS Client Library)
    RMW (ROS MiddleWare)
    DDS B
    DDS A
    General Purpose OS
    • common functions for ROS 2
    • implemented by C
    • any client library can be
    implemented by calling it
    • Abstraction layer for DDS
    • Able to select preferred DDS
    (and Zenoh??)
    rclrs
    node.rs
    Zenoh??
    DDS (Data Distribution Service)
    • OMG standard specification
    • Pub/Sub communication functions
    • Automatic search of nodes by RTPS
    is awesome!!

    View full-size slide

  5. ROS 2 Client Library for,,,
    Rclex
    5
    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
    Zenoh??
    github.com/rclex

    View full-size slide

  6. We love Elixir!!
    Functional language (appeared in 2012)
    Operated on Erlang VM (BEAM)
    • lightweight processes with robustness
    • highly concurrency/parallelism
    • soft real-time feature
    • easy to realize distributed and fault tolerance system
    * The copyrights of these logos
    belong to their respective creators
    • Similar to Actor Model
    — Actors (processes) send and receive messages
    — "Let it Crash”: The problematic process should be
    promptly crashed and restored immediately
    — We can spawn a massive number of processes!!
    6

    View full-size slide

  7. * The copyrights of these logos
    belong to their respective creators
    Language Design based on Ruby
    • easy to learn! familiar grammar and notation
    • very highly productive despite functional
    • high communication performance suitable for IoT
    Programming should be
    about transforming data
    .1 1 ( 0 ) .
    .1 ) 11
    .1 ) )
    &0 1(.
    &0 1
    example Elixir code
    Ø Data flow and parallel processing
    can be described intuitively with
    Enum Flow |>
    We love Elixir!!
    Functional language (appeared in 2012)
    7

    View full-size slide

  8. 8
    We love Elixir!!
    * The copyrights of these logos
    belong to their respective creators
    • Awesome ecosystem!

    View full-size slide

  9. 9
    • Actors on BEAM send and receive messages
    — (I believe) Actor Model is suitable for robot systems🤖
    — We can enhance comm. scalability thanks to lightweight processes
    • (I suggest) Robot programming should be functional!!
    — ROS concept of combining existing packages has a high affinity
    System is like,,,
    node1
    node2
    node3
    node4
    topicA
    [string]
    topicB
    [image]
    node5
    publish subscribe
    DDS Domain
    msg
    msg
    msg
    msg
    Actor Model!!

    View full-size slide

  10. github.com/rclex 10
    Simple Publisher by Rclex
    number
    of nodes
    create node by
    name and index
    create topic
    :single-> one topic
    :multi-> multiple
    set callback func
    and timer interval
    create list of
    messages for
    each node
    publish message
    setting node info.
    with pipe operator
    processing a data
    message with Enum

    View full-size slide

  11. github.com/rclex 11
    Example of Rclex on Native Ubuntu
    default ROS 2 env
    Rclex on Ubuntu

    View full-size slide

  12. Developed by Nerves Project!
    • Dedicated IoT Platform for Elixir
    — fully compatible with Elixir
    — useful libraries for IoT systems
    • bare-minimum!!
    — too small (one linked fw, ~>30 MB)
    — portable and easy to configure
    • resilient!!
    — of course, robust thanks to Erlang VM!!
    — file system is duplicated and read-only for reliability
    github.com/rclex
    Master Boot Record
    file system A
    Erlang VM
    libraries
    file system B
    Erlang VM
    libraries
    Application Data
    boot A
    Linux kernel
    boot B
    Linux kernel

    View full-size slide

  13. github.com/rclex 13
    on Supported Targets
    ROS_DISTRO arm64v8 arm32v7
    Foxy ✅ ✅
    Galactic ✅
    Humble ✅ ✅
    Iron WiP,,, WiP,,,
    Jazzy, K**, L**, … T.B.A?? T.B.A??
    arm64v8
    arm32v7
    Raspberry Pi 4
    Kria KR260
    BeagleBone
    STM32MP1
    e-RT3 Plus

    View full-size slide

  14. copy
    github.com/rclex 14
    on How to try it out?
    /opt/ros/humble/include
    /opt/ros/humble/lib/
    /opt/ros/humble/share
    arm64v8/ros:
    humble-ros-core
    rootfs

    /opt/ros/humble/*

    rootfs
    • Only 7 steps, just in 5 min (I hope,,,:D
    1. create & prepare project for target
    $ mix nerves.new rclex_on_nerves --target rpi40
    2. Install Rclex into Nerves project
    add {:rclex, "~> 0.9.2"}, into mix.exs and $ mix deps.get0
    3. prepare ros2 resources to Nerves filesystem
    $ mix rclex.prep.ros2 --arch arm64v80
    4. generate resources for msg types of topic comm.
    $ mix rclex.gen.msgs0
    5. set LIBRARY_PATH into Nerves firmware
    6. enjoy writing Rclex code!!
    7. finally, build firmware, and burn to microSD🔥
    $ mix firmware && mix burn0
    Installing ROS 2 env on the host is not required!
    https://hexdocs.pm/rclex/
    use_on_nerves.html

    View full-size slide

  15. 15
    • For ROS developers
    — will acquire performance, especially in communication
    — will want to employ Elixir/Erlang ecosystem
    — will get a bare minimum and resilient environment!!
    • For Elixir developers
    — will get autonomous communication
    — will utilize OSS packages published for ROS!!
    MAY THE BEAM
    BE WITH
    YOUR ROBOT!!
    [pic]https://aliexpress.com/item
    /32604221183.html
    on Benefit!!
    github.com/rclex

    View full-size slide

  16. 16
    論よりRUN!! "ron yori run"
    The RUN is mightier than the word
    https://github.com/pojiro/rpi4_mouse
    Raspberry Pi Mouse V3
    by RT Corporation
    Momo (WebRTC Native
    Client) by Shiguredo
    /cmd_vel
    control motors
    sensors
    /sensors

    View full-size slide

  17. Actual behavior of
    RPi Mouse
    Phoenix Web Page on Nerves
    for Sensor Values on RPi Mouse
    Camera image
    on RPi Mouse
    sent by Momo
    Nerves
    Console
    論よりRUN!! "ron yori run"
    The RUN is mightier than the word

    View full-size slide

  18. 18
    One More Thing??
    Rclex on Nerves with Zenoh
    —Eloquent, Scalable, and Fast network protocol
    —The most promising candidate for a new Tier-1 RMW??
    • Our Trial
    —Rclex msgs on Nerves go
    beyond the Pacific Ocean!!
    üCode BEAM America 2023
    [Slide] [YouTube] [demo(on X)]
    —(WiP) Zenohex [GitHub]
    global IP: 23.185.0.4
    global IP: 133.11.194.2
    SFO
    TYO
    192.168.10.10 192.168.10.??
    192.168.??.??
    Rclex messages between nodes
    will go beyond the Pacific Ocean!!

    View full-size slide

  19. 19
    Wrapping Up
    STAR our repo! try it out!!
    and, Give your contributions!!!
    https://github.com/rclex/rclex
    https://hex.pm/packages/rclex
    • Rclex: Robotics meets Elixir!
    — ROS will acquire Elixirʼs performance
    — Elixir will utilize ROS packages
    • Ongoing/upcoming works
    — Service, Action and Parameter
    — actively integration with Zenoh
    — documentation, academic paper,,,

    View full-size slide