知能ロボットシステムエンジニアリング第4回 ROS 2入門(1/2)

3.3K Views

July 16, 25

スライド概要

東大松尾・岩澤研 Physical AI講座 知能ロボットシステムエンジニアリング 第4回 ROS 2入門(1/2)の資料です.
ROS 2入門(2/2)の資料はこちら:
https://skinny-chord-c58.notion.site/5-ROS-2-2-2-2049a7a1061380fc8928e500eafc57d0

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

Physical AI 2025 知能ロボットシステムエンジニアリング 第4回 許諾なく撮影や第三者へ の開示を禁止します ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO

2.

Agenda 1 導入 2 パッケージング 3 ROS 2入門(通信) 4 まとめ ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 2

3.

1. 導入 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO

4.

講師自己紹介 上條達也 (東京大学大学院工学系研究科 松尾・岩澤研究室 修士1年) • 経歴 2024年3月 東京大学 工学部 機械工学科 卒業 • 2024年10月〜同 大学院 工学系研究科 技術経営戦略学専攻 • • インターン • • OMRON SINIC X 研究内容 • ロボット学習 • • • 可変力制御の模倣学習 触覚に基づく器用な物体操作学習 Vision-Language-Action Model ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 4

5.

参考資料 • 「入門 モダンLinux」(Michael Hausenblas 著,竹内覚・大岩尚弘 訳) • • • Linuxの基本知識 ROS公式ページ:https://www.ros.org/ • Docs: https://docs.ros.org/ • ROS 2 Humble Tutorials: https://docs.ros.org/en/humble/Tutorials.html 「ROS 2とPythonで作って学ぶAIロボット入門 改訂第2版」(出村公成・萩原良信・ 升谷保博・タン ジェフリー トゥ チュアン 著) • ROS 2の入門本 • マニピュレーションやナビゲーション技術の基礎も実装とともに学べる • 演習環境はこちらを使用 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 5

6.

今回の概要 • 前半:パッケージングで巨人の肩に乗る • • • • • • • パッケージングを学ぶ理由 Debパッケージ apt基本 パッケージマネージャ概観 コンテナ ロボティクスでのパッケージング 後半:ROS 2入門 ROS概要 • ROS 2通信 • • • • • • トピック通信 サービス通信 アクション通信 パラメータ通信 ROS 2プログラミング実践 • トピック通信により物理シミュレータ内のマニピュレータの状態取得,行動実行 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 6

7.

2. パッケージング ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO

8.

パッケージングを学ぶ理由:巨人の肩に乗る • “If I have seen further, it is by standing on the shoulders of giants.” – Isaac Newton, 1676 • • 「私が遠くを見通すことができたのは,巨人の肩の上に立っていたからだ.」 パッケージの依存管理こそ「巨人の肩」に安全に乗る仕組み ┌──────────── 手元のプロジェクト ─────────────┐ ← 幅いちばん狭い │ ・独自ソース / ROS2 パッケージ │ │ ・Dockerfile / requirements.txt / package.xml │ └───────────────────────────────────┘ ▲ 依存解決 (apt, pip, rosdep) │ ┌────────────── ディストロ ───────────────┐ ← 中くらいの幅 │ Ubuntu 22.04 LTS (= apt archive) │ │ ・Security / Backports / PPA │ │ ・メンテナが .deb にビルド │ │ ・dpkg, apt, snapd などのツールチェーン │ └───────────────────────────────────┘ ▲ パッケージ化・バージョン管理 │ ┌────────────── コミュニティ ──────────────┐ ← いちばん広い │ Upstream OSS (GitHub / GitLab / Kernel.org) │ │ ・Linux kernel, OpenCV, Eigen, PyTorch … │ │ ・無数の開発者が Issue / PR / CI で品質担保 │ └───────────────────────────────────┘ ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 8

9.

debパッケージ: OSSの成果を「部品」に封じ込める箱 • ロボット研究開発ではubuntu/Debian 系が主流 • • ROSはUbuntu LTSをターゲットプラットフォームとし,debパッケージとして提供 .debファイル(debパッケージ)とは? Ubuntu/Debian 系で使われるアプリのインストール用ファイル • Windowsの.exe / macOSの.pkg に相当 • • なぜ重要? ワンファイル配布:プログラム本体と必要ライブラリを一つに封入 • 安全なインストール:aptが署名と依存関係をチェック • アップデート追従:同じ仕組みで最新バージョン・セキュリティパッチを取得 • • .debの中身 control ファイル:依存リスト・バージョン・メンテナ • data.tar.*:実ファイル(bin/lib/…) • • 流れ コミュニティがコードを書く • メンテナがパッケージングしテスト • ユーザはaptで一行インストール • ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 9

10.

APT (Advanced Packaging Tool) によるパッケージ管理 • APTとは • Debian/Ubuntu系で使われるパッケージ管理ツール • .deb (dpkg) を裏で動かしつつ,依存解決やリポジトリ操作を自動化 • 主なコマンド • • • • • sudo apt update:リポジトリから最新のパッケージ一覧を取得・キャッシュ更新 sudo apt install <package_name>:依存解決→ダウンロード→インストールを実行 sudo apt upgrade:インストール済みを全て最新バージョンに更新 sudo apt remove <package_name> / purge:アンインストール apt search <key_word> / apt show <package_name>:パッケージの検索・情報確認 • APTが担う主な役割 リポジトリ管理:/etc/apt/sources.list を参照し,HTTP/FTPで一覧取得 • 依存解決:必要な .deb を再帰的に探索 • ダウンロード&インストール:dpkgを呼び出して展開・設定スクリプト実行 • 関連データベース更新:インデックスや設定ファイルの一括メンテナンス • • 誰でも同じ手順で簡単に先人の成果 を簡単に享受できる ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 10

11.

APT基本操作デモ1:検索で先達の成果を探す • まず sudo apt update でリポジトリから最新のパッケージ情報を取得 • Rustを入れるためrust-allを検索(好きなものでOK,x11-appsなど) • apt search rust-all ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 11

12.

APT基本操作デモ2:依存解決ログを読む • sudo apt install rust-all を実行(約400MB使うので注意) あくまで体験なので後でsudo apt purge rust-all && sudo apt autoremoveで消してOK • 依存関係を解決し,追加で必要なパッケージを自動で見つけてくれている • ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 12

13.

APT基本操作デモ3:パッケージの情報確認 • apt show rust-all • メンテナや依存関係などの情報が確認できる ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 13

14.

パッケージマネージャ概観 • ディストリビューション/OSレベルのパッケージマネージャ • APT (Debian/Ubuntu) • Homebrew (macOS/Linux) • プログラミング言語固有のパッケージマネージャ • Python • C/C++ • Rust • …etc. :pip, pyPM :Conan, vcpkg :Cargo • モダンなユニバーサルパッケージ(環境)マネージャ uv(Linux, macOS, Windows):Rust 製の高速 Python パッケージマネージャで,従来の pip や pip-tools ワークフローを置き換えることを目指している.プロジェクトごとに隔離された仮想 環境を生成. • Pixi (Linux, macOS, Windows):Condaエコシステム互換のバイナリ配布&環境分離機能で Python/C++/Rust/ROS 2など多言語・複数バージョン共存を安全に管理.内部ではuvを使い, 最適化された依存解決と環境分離を実現.pixi install でプロジェクト毎に独立した仮想環境を 作成. • ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 14

15.

コンテナ:「アプリ+ OS」の巨大パッケージ • 概要 • アプリ・OS層をまとめた「イメージ」を使い,どこでも同一環境を実行 • Dockerなどのコンテナランタイム上で動作 • 嬉しさ • 環境再現性:イメージを配布するだけで,簡単に手元の環境を他の計算機で再現 • 依存管理:ホストPCの環境とは隔離された環境.ホスト環境を汚さずに済む. • イメージにタグをつけてバージョン管理が可能 出典)【入門】Dockerとは?概要やメリット、インストール方法をわかりやすく 解説,カゴヤのサーバー研究室 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 15

16.

ロボティクスでのパッケージング • ロボティクス分野では,パッケージングが特に大きな役割を果たす 昔はハードウェアごとに1から実装:ドライバや制御アルゴリズムを論文読んで自分で1から実装 する必要があった. • 環境再現性がほぼない:他人の開発環境を手動で揃えるのはほぼ不可能.コラボレーションや 論文実装の再現性を阻害 • OSSミドルウェアであるROSの登場:プロジェクトをROSパッケージ単位で配布可能に.世界中 の研究者・開発者の貢献による数千のROSパッケージを統合し,簡単に新たな機能の実装が できるように. • 出典)ROS.org “ROS user survey – The results are in” (2014年4 月)https://www.ros.org/news/2014/04/ros-user-survey-the-results-are-in.html ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 16

17.

3. ROS 2入門(通信) ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO

18.

ROS 概要 • ROS:Robot Operating System ロボットのソフトウェアコンポーネントを開発・統合するためのフレームワーク • OS(Linux, macOS, Windows OS)とは異なり,ミドルウェア • 非同期分散システム であるロボットに必要な機能を搭載 • • • • • • Plumbling(通信):容易に分散コンピューティングシステムを構築できるように設計された通信基盤 Tools(ツール群):分散システムの設定・起動・監視・デバッグ・可視化・ログ取得・テスト・停止などを行う広範囲な ツール群 Capabilities(機能群):移動・マニピュレーション・近くなどの機能をロボットに実装するための様々なライブラリを提 供 Ecosystem(エコシステム ):世界中の開発者から提供された大量のROSパッケージを利用可能 発祥:2007年,Willow Garage社 目標:ソフトウェアの再利用性とコラボレーションを促進 • ROS 1が普及して浮き彫りになった問題を解決するために開発されたのがROS 2 • 出典)ros.org ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 18

19.

ROS 概要:具体的に何が嬉しいか • ロボットは非同期分散システム .以下が並列に実行される. 環境認識:異なる周波数 で動く複数のセンサ • 意思決定:得られたデータから制御 or/and 学習モデルを通して次の行動決め • • • • ここでの「行動」とはマニピュレーションでは,次の時刻の関節角や手先姿勢(End-effector pose) 行動実行:実際にロボットのアクチュエータが指示値に従って駆動 ROSはこれらのプロセス間通信を簡単にしてくれる. • ロボットの各機能(センシング,知能・制御,運動)を別のプログラムとして複数言語で実装でき る. RGBカメラ 約30-60Hz 力覚センサ 約1000Hz 制御 約100-1000Hz 出典)T. Kamijo, C. C. Beltran-Hernandez and M. Hamaya, "Learning Variable Compliance Control From a Few Demonstrations for Bimanual Robot with Haptic Feedback Teleoperation System," 2024 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), Abu Dhabi, United Arab Emirates, 2024, pp. 12663-12670 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 19

20.

ROS 2通信概要 • • • ROS 2では,実行中の複数のプログラムが,プログラム同士で通信によりデータを やりとりしてロボットを動かす. 実行中のプログラムのことをノード(node)と呼ぶ. ROS 2での通信には以下の4種類があり,用途に応じて使い分ける. 名前 通信方式 用途 トピック通信 一方向・非同期通信 複数ノードに同じデータを送る必要がある場合. 例えば,センサデータの配信・受信など サービス通信 双方向・同期通信 すぐ処理が終わるタスク.例えば機器の起動・終了,状態確 認,モード切り替えなど アクション通信 双方向・非同期通信 ナビゲーションなどタスク終了までに時間がかかり,途中経過 も知りたい複雑なタスク パラメータ通信 双方向・同期通信 ノードやロボットの動作を動的に変更したい場合など ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 20

21.

ROS 2通信詳細( 1/4):トピック通信 • • ノード同士がデータを「公開・購読」する通信方式 トピック通信は一方向・非同期通信 • • イメージ:テレビ放送.テレビ局が視聴者に一方的に,非同期に電波を送り続けている 用語 データの送り手(テレビ局)をパブリッシャ (publisher)と呼ぶ • データの受け手(視聴者)をサブスクライバ (subscriber)と呼ぶ • データの伝送経路(番組のチャンネル)をトピック (topic)と呼ぶ • データをメッセージ (message)と呼ぶ パブリッシャがトピックに一方的にデータを 送り続け,サブスクライバは受信したいトピック を指定してメッセージを受け取る メッセージには型がある • これによりノード間で違う言語を使える • 自分で型を作ることもできる センサデータの垂れ流しに向く • • • • 出典) https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Topics/U nderstanding-ROS2-Topics.html ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 21

22.

ROS 2通信実践:トピック通信 ここで,実際にROS 2によるトピック通信を行います. 手元に本講座の演習環境を準備してください. • Publisherノードの立ち上げ • • ros2 run demo_nodes_py talker:/chatterトピックに”Hello World: {count}”を配信 Subscriberノードの立ち上げ ros2 run demo_nodes_py listener:/chatterトピックを購読 • ros2 run demo_nodes_cpp listener:C++で実装されているが,Pythonノードと通信 • • トピックに流れるデータの型の確認 • ros2 topic list:トピックの一覧を表示 • ros2 topic type /chatter:std_msgs/msg/String • メッセージには色々な型がある:std_msgs, geometry_msgs, sensor_msgs, etc… • 独自の型を作ることもできる • 例:双腕ロボットの状態を1つのメッセージにまとめてpublishしたい,独自の触覚センサを使いたい,等 • 可視化ツール • rqt_graph:ノード間通信の可視化 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 22

23.

ROS 2通信(2/4):サービス通信 • • ノード間で「要求・応答」を 1 対 1 でやり取りする通信方式 サービス通信は双方向・同期通信 • • イメージ:検索サービス.キーワードを入力すると,結果がブラウザ上に表示される. 用語 データの送り手をクライアント (client)と呼ぶ • データを処理し応答する側をサーバ(server)と呼ぶ • クライアントからサーバに仕事を依頼することをリクエスト ,そのデータをリクエストメッセージ と呼ぶ • サーバが結果を返すことをレスポンス , そのデータのことをレスポンスメッセージ と呼ぶ クライアントはレスポンスが返るまで 同期的に 待機するため「命令を一回送り,終わったら結果 を返してもらう」といった関数呼び出しのような 用途に向く • 例:「初期姿勢にロボットを動かして → 初期姿勢に到達しました」 • • 出典) https://docs.ros.org/en/foxy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Services/ Understanding-ROS2-Services.html ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 23

24.

ROS 2通信(3/4):アクション通信 • ノード間で「目標 (goal)・途中経過 (feedback)・結果 (result)」を非同期にやり取りし、長時 間タスクの進行状況を逐次監視できる通信方式 • アクション通信は双方向・非同期通信 • イメージ:配達ロボの走行状況を逐次把握したい時 • 用語 • • • • アクションクライアント ,アクションサーバ (サービス通信のクライアント/サーバに相当) ゴールサービス :アクションサーバに目標送信 リザルトサービス :完了後に結果受信 フィードバックトピック :途中経過を非同期 に配信するトピック • サービス通信とトピック通信の両方を 使っている • 処理に時間がかかり途中経過を知りたい 時に最適 • ナビゲーション・マニピュレーションの 様々なタスク ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 24

25.

ROS 2通信(4/4):パラメータ通信 • ノードに保存された名前付き設定値を実行中に「取得・変更・監視」する通信方式 • パラメータ通信は双方向・同期通信 • • Get/Set はサービス通信 イメージ:ロボットのPIDゲインをその場で微調整 / 何かしらの閾値(score > 0.6などの調整) • 用語 • • • パラメータクライアント/パラメータサーバ Get/Set サービス :値を読み書き パラメータイベントトピック :変更通知を非同期配信 • サービス通信とトピック通信の両方を使っている • が,詳細はあまり重要でなく,ノードで使うパラメータの値を取得したり変更したりできる , 程度の理解でOK ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 25

26.

ROS 2通信実践: turtlesim • turtlesim_node の立ち上げ • • ros2 run turtlesim turtlesim_node :亀が出現 テレオペ(遠隔操作)ノードの立ち上げ • ros2 run turtlesim turtle_teleop_key:亀をトピック通信で遠隔操作するノード • 矢印キーを押すとトピック通信で回転・並進 • キー(G|B|V|C|D|E|R|T)を押すとアクション通信で回転 • トピックの確認 • ros2 topic list:トピックの一覧表示 • ros2 topic echo /turtle1/cmd_vel:流れている生データの確認 • ros2 topic type /turtle1/cmd_vel:データの型を確認 • ros2 topic echo /turtle1/rotate_absolute/_action/feedback: アクションのフィードバックメッセージを確認 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 26

27.

ROS 2プログラミング実践:ワークスペース作成 • • • • ここから実際にROS 2のプログラムを書いていきます. ROS 2では,プログラムをパッケージ (package)と呼ばれる単位で作る. パッケージは,作業用のディレクトリにおく.これをワークスペース と呼ぶ. ROSのワークスペースは特定の構造を持っている • • • • build/ install/ log/ src/ : 中間ファイルが置かれる場所 : ビルドされたパッケージが実際にインストールされている場所 : パッケージをビルドする際などの種々のログが置かれる場所 : パッケージのソースコードを置く場所 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 27

28.

ROS 2プログラミング実践:ワークスペース作成 • 今回の演習用のワークスペース pai_ws を作成 • mkdir -p ~/pai_ws/src • src だけある状態(中身は空っぽ) ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 28

29.

ROS 2プログラミング実践:新しいパッケージ作成 • パッケージ:ROSのプログラムの配布単位 • • 中にいくつかのプログラム(ノード)を入れる ros2 pkg create <pkg_name> で新しいパッケージを作成できる cd ~/pai_ws/src してから,ros2 pkg create test_pkg --build-type ament_python • test_pkg が src の下に作成される • ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 29

30.

ROS 2プログラミング実践:パッケージの中身 • 作成された test_pkg の中身 • 変更する必要があるファイル • package.xml • setup.py ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 30

31.

ROS 2プログラミング実践:パッケージ情報の編集 • package.xml • パッケージマニフェストと呼ばれる • パッケージの情報を記述したファイル • version, description, maintainer, licenseなどを編集する(一旦スキップしてOK) ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 31

32.

ROS 2プログラミング実践: Python用の設定ファイル編集 • setup.py • ROS 2でPythonノードを含むパッケージを作成するときに置くメタデータ/インストール設定 ファイル • ビルドツールcolconがビルド時にsetup.pyを実行し,生成物を install/ 以下へ展開 • これにより source install/setup.bash するとPYTHONPATHに自動で追加され,ノード・ライブ ラリをどこからでも読み込める(後でやります) • Nodeを作成したらentry_points を編集し,プログラムの開始点 を教えてあげる必要がある • パッケージを作成する時に • --node-name オプションを設定すると 自動で作成してくれる(1ノードだけ) 一旦スキップしてOK ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 32

33.

ROS 2プログラミング実践:パッケージをビルド • ROS 2ではcolconというビルドツールを使う • C言語のプログラムをgccでビルドするイメージ • cd ~/pai_ws && colcon build --symlink-install を実行 • --symlink-install はビルド成果物を install/ にコピーする代わりにシンボリックリンクを貼って くれるオプション.Pythonコード変更のたびにビルドする必要がなくなる. • source install/setup.bash を実行 • echo $PYTHONPATH で test_pkg がPYTHONPATH 先頭に追加されていることを確認 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 33

34.

ROS 2プログラミング実践: .bashrcに追加 • 適当なエディタで ~/.bashrc を編集 vim ~/.bashrc • 下図ハイライト部分 source ~/pai_ws/install/setup.bash を追加 • 今後はビルドしたら source ~/.bashrc のみでOK • source ~/.bashrc してパッケージが認識されていることを確認 • ros2 pkg list | grep test_pkg ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 34

35.

ROS 2プログラミング実践:シミュレータ内のロボットを起動 • Gazeboという物理シミュレータを起動し,シミュレータ内のマニピュレータをROSで動かす コードを書いていきます • CRANE+ V2というマニピュレータをGazebo内に表示 • まず source ~/.bashrc • ros2 launch crane_plus_gazebo crane_plus_with_table.launch.py • launch は複数のノードをまとめて起動するコマンド • RViz:ROS付随の可視化ツール (右図右側).Gazebo(右図左側) が現実の挙動を近似する物理シミュ レータである一方,RVizは3次元で 種々のデータの可視化 を行うツール で,物理シミュレータではない. ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 35

36.

ROS 2プログラミング実践: RVizからMoveItでロボットを動かす • • RVizからMoveItを利用することができる MoveItはマニピュレータの動作計画を行うフレームワーク 運動学・逆運動学計算,軌道計画,障害物回避などが含まれる • ロボットモデルを与えるだけで,自分で実装せずに 簡単に上記諸々の恩恵を享受 • ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 36

37.

ROS 2プログラミング実践:ロボットとインタラクトするノード実行 • • 起動しているロボットの状態をsubscribe / 行動をpublishするノードをそれぞれ実 行します 演習用のROS 2パッケージをGitHubからクローンします • cd ~/pai_ws && git clone https://github.com/matsuolab/physicalai_pubsub.git • README.mdに従ってセットアップ • cd ~/pai_ws && rosdep install --from-paths src --ignore-src -r -y • rosdep installはsrc以下のpackage.xmlを見に行って必要な依存関係をインストールしてくれる • colcon build --symlink-install --packages-select physicalai_pubsub • source install/setup.bash Gazeboが立ち上がっている状態で • ロボットの状態をsubscribeするノード実行 • ros2 run physicalai_pubsub state_subscriber • ロボットの関節指示値をpublishするノード実行 • ros2 run physicalai_pubsub action_publisher ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 37

38.

ROS 2プログラミング実践: Subscriberノード詳細( 1/2) • /joint_states トピックからロボットの関節角度・角速度を取得するノード • rclpy (ROS Client Library for Python) がROS 2のPython API • 書き方のお作法がある.たくさん書いていくうちに,慣れる. ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 38

39.

ROS 2プログラミング実践: Subscriberノード詳細( 2/2) • self.create_subscription(メッセージ型,トピック名, callback関数, キューサイズ) • callback関数は,データを受け取ったタイミングで実行される関数 • 実際に受信したデータである msg を引数に取る • 今回は角度と角速度をターミナルにログするだけ • キューサイズは受信待ち バッファに保持できる メッセージの最大数 • • 常に最新値が欲しい:1 最新値じゃなくて良い からデータの取りこぼし を無くしたい:100とか • JointState型なので • • • • msg.name msg.position msg.velocity msg.effort でデータにアクセス可能 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 39

40.

ROS 2プログラミング実践: Publisherノード詳細( 1/3) • トピック通信で行動をpublish • 直立 → 真ん中姿勢 → 直立 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 40

41.

ROS 2プログラミング実践: Publisherノード詳細( 2/3) • JointTrajectory • • • 各関節の「動作計画」 joint_names + 時系列のJointTrajectoryPoint • JointTrajectoryPoint • • • positions[]:目標角度 rad • velocities[]:目標角速度 • accelerations[]:加速度 • time_from_start:到達目標時間 今回は1 pointのみJointTrajectoryに入れ ている 次ページに詳細な流れの可視化 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 41

42.

ROS 2プログラミング実践: Publisherノード詳細( 3/3) [1] Python ノード(RobotActionPublisher) │ publish JointTrajectory ▼ [2] FollowJointTrajectoryController (ros2_control plugin) │ ── subscribe /crane_plus_arm_controller/joint_trajectory ──▶ │ │ on_message(msg): │ ├─ msg.points[0].time_from_start = 2.0s を読み込む │ └─ msg.joint_names, msg.points[0].positions も │ │ ┌─── 100 Hz 制御ループ ──────────┐ │ │ read() ── 現在の関節角度取得 │ │ interpolate() ── 目標までの中間姿勢を計算 │ │ write() ── hardware_interface へコマンド出力 │ └───────────────────────┘ ▼ [3] ros2_control ― Gazebo プラグイン │ 受け取ったコマンドを Gazebo の物理モデルに適用 ▼ [4] Gazebo 上の CRANE+ V2アームが動く ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 42

43.

発展(余力がある人向け) • physicalai_pubsubパッケージのrepoをfork • https://github.com/matsuolab/physicalai_pubsub • 何かしらのプログラムを開発 • Pull Requestを作成 • 全てには対応できませんが,良さそうなPRがあればマージします ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 43

44.

まとめ • 前半:パッケージング 1から自分で全部作るのは無理 • 巨人の肩に乗ろう • 正しくパッケージを管理する方法を学ぼう • ロボティクスにおいてパッケージングは特に重要 • • 後半:ROS 2入門(通信) • • • • • ROS概要,何が嬉しい? 4種類の通信方式の基礎 ワークスペース・ROSパッケージの作成 GitHub上のROSパッケージを自分のワークスペースに取り込む Gazebo上のロボットとトピック通信 ©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO 44

45.

©MATSUO-IWASAWA LAB, THE UNIVERSITY OF TOKYO