mrubyと micro-ROSが繋ぐロボットの世界
by
Katsuhiko Kageyama
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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