Slide 1

Slide 1 text

mrubyと micro-ROSが繋ぐ ロボットの世界 2025/6/28 関西Ruby会議08 影山勝彦

Slide 2

Slide 2 text

自己紹介 普段は @kishima で活動 (株)アプトポッド所属 組み込み系エンジニア プレイングマネージャ mruby好き 電子工作好き 2

Slide 3

Slide 3 text

最近のお仕事 3 四足歩行ロボを利用した ソリューション開発 自立走行ロボットの管理

Slide 4

Slide 4 text

最近のお仕事 4 ロボットで自社 サービスにデータ 集めてWebアプリ で可視化したり

Slide 5

Slide 5 text

5 仕事の経験も活かしたい ロボット関係の経験も積めた   最近、Ruby触れてないな・・・     Ruby x ロボット・・・!?

Slide 6

Slide 6 text

“ Rubyと作ろう!

Slide 7

Slide 7 text

“ Rubyと作ろう! ロボット制御

Slide 8

Slide 8 text

これ動かしたい 8 myCobot280 安価な6軸ロボットアー ム ROS対応

Slide 9

Slide 9 text

ロボット制御? 9 ● HWリアルタイムな世界 ○ 1msecやもっと短い間隔で正確にモータなどを制 御しないと行けない世界 ● もうちょっとゆるい世界 ○ SWリアルタイム ○ 制御計画や、上位のアプリケーションとの間を取り 持つ処理

Slide 10

Slide 10 text

ロボット制御? 10 ● HWリアルタイムな世界 ○ 1msecやもっと短い間隔で正確にモータなどを制 御しないと行けない世界 ● もうちょっとゆるい世界 ○ SWリアルタイム ○ 制御計画や、上位のアプリケーションとの間を取り 持つ処理 👉

Slide 11

Slide 11 text

巨人の背中に乗りたい ロボット開発の世界で   よく使われてるのは・・・ 11

Slide 12

Slide 12 text

ロボット開発でよく使われるROS 12 ROSとは Robot Operating System。一般的な意味のOSではなく ロボット向けの通信ミドルウェアを中心とした ツール、ロボット向けOSSのエコシステム 12

Slide 13

Slide 13 text

1から作るのは大変 ● ROSはロボットの開発初期~に広く使われ ている ● 色々なOSSパッケージがあり、組み合わせ ることで独自のロボット制御を構築できる ● 私も仕事でお世話になってる         ▶Rubyでも使いたい! 13

Slide 14

Slide 14 text

ROSの紹介 ROSの基本的な機能など 14

Slide 15

Slide 15 text

主な特徴 ● ノードを基本とした分散型アーキテクチャ ● Topic(Publish/Subscribe型のメッセージ通信) ● Service(Server/ClientのRPC的な通信) ● Actionという目標と過程を管理する仕組み ● 高速、低遅延、大容量な通信も想定 ● 実行環境は基本的にLinux ● 公式開発言語は、 C++、Python 15 ROSの特徴

Slide 16

Slide 16 text

ROSのソフトウェアレイヤー 16

Slide 17

Slide 17 text

ROSのプロセス構成のイメージ図 17

Slide 18

Slide 18 text

Topicの定義 sensor_msg/Joy 18 IDLで定義、コンパイル時に構造体に

Slide 19

Slide 19 text

ツールやライブラリ類も充実 19 rviz ロボットの状態 可視化、GUI操 作 Gazebo シミュレータ

Slide 20

Slide 20 text

ツールやライブラリ類も充実 20 rqt ノード間のメッ セージ送受関係 可視化など rosbag メッセージ通信の ロガーCLIツール

Slide 21

Slide 21 text

Rubyで書きたい すでにあった! ● rclrb (ROS Client Library for Ruby) ○ CRubyでROSの基本機能にアクセスできる ○ 昨年あたり公開されていた 21

Slide 22

Slide 22 text

好きなデバイスでROS動かしたい PC/Linuxで開発するときはrclrbを使うのがよ い マイコンでもROSを動かしたい! 22

Slide 23

Slide 23 text

ROSをマイコンで動かすプロジェクト 23

Slide 24

Slide 24 text

micro-ROSの特徴 ● リアルタイムOS上での動作を想定 ● 各種マイコンサポート(ESP32、Raspi Pico等) ● WiFi以外にUART等にも対応 ● 母艦PC上のROSとmicro-ROSデバイスの通信 を中継するAgentが必要 ● 開発言語:C言語 24 …mrubyから使えそう

Slide 25

Slide 25 text

micro-ROSアーキテクチャ 25

Slide 26

Slide 26 text

micro-ROS x mrubyで作ってみよう mrubyからmicro-ROSのAPIが使えるようにな ると、ROS対応のデバイス制御コードをRubyで 書けるようになる! 26

Slide 27

Slide 27 text

開発 今回作るものについて 27

Slide 28

Slide 28 text

全体の構成 28

Slide 29

Slide 29 text

コントローラ 29 JoyC: M5StickC&I2C接続のジョイスティック M5StickC Plus2: コアはESP32。PSRAM 2MB搭載

Slide 30

Slide 30 text

開発内容 ● mrubyとmicro-ROSを同時にビルドできる 環境構築 ● 最新のESP32ビルド環境への適合 ● mruby_esp32_i2c 必要な部分自前で作る ● mruby_esp32_microrosの実装 ● myCobot280をJoyトピックに反応するよう にする 30

Slide 31

Slide 31 text

mruby-esp32-microros micro-ROSのmrubyラッパー 31

Slide 32

Slide 32 text

デモ サンプルのスクリプトの説明とデモ動画を 32

Slide 33

Slide 33 text

I2Cの利用 33 ● I2Cの初期化 ● I2Cでデータを読み出すメソッド定義

Slide 34

Slide 34 text

コントローラ状態を読んでROSトピックを送信 34 ● 10Hz程度の周期でコント ローラの信号Read ● ROS Topic 送信

Slide 35

Slide 35 text

35 基本動作確認:亀をROSで制御する

Slide 36

Slide 36 text

myCobot280をROSで制御するデモ 36

Slide 37

Slide 37 text

37 パフォーマンス しっかりチェックできてないが、30Hzくらいで送信で きているのは1度確認した (ros2 topic hz /joyコマンド) 30Hzはコントローラ操作としても問題ない周期(ゲー ムのフレームレート) 100Hzくらいで動けると、ある程度細かいモータ制御 等にも使えるはず

Slide 38

Slide 38 text

38 課題はたくさん ● myCobot280思った通りに動かしたい ● rcl APIをどうRubyらしく使えるようにするか ○ Subscription:コールバックに素早く応答 ○ メッセージ型をどうダイナミックに扱うか ● ROSのパッケージ群活かしたい ○ navigation, moveit ● Raspi Pico - PicoRubyでも使いたい ● mruby-esp32もう少しメンテしたい

Slide 39

Slide 39 text

これも動かしたい 39

Slide 40

Slide 40 text

最後に ● Rubyでも物理的に動きのあるものを制御で きる! ● CRubyでROSを使う方法(rclrb)もあるので、 興味を持つ方が増えたら嬉しい 40  ハードがなくても、   シミュレーションから試す手もある!

Slide 41

Slide 41 text

41 Thank you! 何か聞きたいことあればお気軽に X, github : @kishima