概要
主に研究室の学生教育用して作成する.
このページは全体の構成をあらわし,各所へのリンク集とする.
ソースコードをのせ行指定での説明(〇行目は~という意味,みたいな説明)をしているので"Qiitaをより便利にするChrome拡張機能をつくりました"を見ながら拡張機能を入れて行表示できるようにしておくと見やすいかも.
公式チュートリアル
公式チュートリアルがROSのそれと同レベルになり,「これやっとけば大丈夫」になった.特に概念を理解するためのgifが非常によいので,公式チュートリアルのBeginner: CLI Toolsくらいは一読することをすすめる.
目標レベル
本ページは,ROS2はじめての人が順々に勉強していくことを想定している.または,気になって調べた情報を個別にまとめたものでもある.特に初級に書かれているものは学習途中のもので,最終的にはコンポーネントを作成・利用できるようになればよい...ですね.
更新履歴
2024/07/30:初級のROS2プロジェクトの作成をhumble用に書き換え開始
2024/07/30:まとめた一般的な情報のROS2 package.xmlとCMakeLists.txtのチートシートをhumble用に書き換え開始
2023/06/15:応用にROS2 + Raspberry Piを追加
2023/06/15:環境にIron Irwiniを追加
対象
対象読者
- 学部学生(B3)
- ROSの存在を知らず,C++言語の知識も不定
- 学部学生(B4)
- ROSの演習(公式チュートリアル)済
- 大学院生(M1,M2)
- ROSを用いた研究を遂行中
いずれもROS2は知らない学生を対象とする.
環境
それぞれの違い・変更点はDistributionsを参考のこと.結構重要.
現行
- ROS2 Rolling Ridley
- 開発バージョン
- ROS2 Jazzy Jalisco
- 2029/5月までサポート
- 2024年*月より使用開始
- for 24.04 LTS
- 新規機能や変更点: from Iron Irwini to Jazzy Jalisco
- ROS2 Iron Irwini
- 2024/11月までサポート
- 2023年6月より使用開始
- for 22.04 LTS
- 変更点: from Humble Hawksbill to Iron Irwini
- ROS2 Humble Hawksbill
- 2027/5月までサポート
- 2022年7月より使用開始
- for 22.04 LTS
- 変更点: from Galactic Geochelone to Humble Hawksbill
- Ubuntu on Raspberry Pi
以前使用していたもの
- ROS2 Eloquent Elusor
- 2020/11月までサポート
- 2020/1月より使用開始
- for 18.04 LTS
- ROS2 Dashing Diademata
- 2021/5月までサポート
- 2019年6月より使用開始
- for 18.04 LTS
知っといてほしい知識
詳しくは習うより慣れよ.ただ「見たことある」くらいにはしておいてもらい,「どんなものか」という概要を知り自学出来るようになっておいてもらえればよい.
クラス
- 継承・コンストラクタはROS2でとても重要である.
- 例えばC++の基礎:クラスを参照.
テンプレート
- <>の書き方はよく使用する.
- 例えば適当なC++テンプレート入門を参照.
名前空間
- スコープ解決演算子::はよく使用する.
- 例えばnamespaceの賢い使い方を参照.
スマートポインタ
- unique・shared・weakあるよ.
- 例えばC++11スマートポインタ入門を参照.
lambda関数
std::bind
Modern C++...っぽいなにか
- おっさんのためのModern C++入門ガイド
- 特にGalacticからC++17になってModern C++勉強のいいタイミングとなる.あと書いているひとがおっさんだから.
Future
- 非同期処理でのパターンで,Parameterで関係する.
- 他に仕事を非同期で任せて結果をもらうので,「今はまだ結果をもらえていない.が仕事は任せ終わった.任せたプロセスから『仕事が終わったらこのオブジェクトに入れとくね!』ってオブジェクトをもらった.だから近い『未来』にこのオブジェクトに結果が入ってるはず.それがFutureオブジェクト!」というイメージのもの.
- 例えばマルチスレッドプログラミングのFutureパターンを参照.
ROS2基本情報&準備
なぜROS2か
未執筆
- なぜROSか
- ROS/ROS2の特徴:メッセージを使った分散処理
ROS2設定
管理者向け
一般ユーザ向け
ROS2レクチャー
それぞれの項目に対して以下を目標に作成
- 読むのに5分以内
- やるのに15分以内
- 入り組んだ話は後に.
- ただ,すぐに読めるようにリンクで対処
初級
-
初級 -ROS1 Style-
- ROS風の書き方.クラスを極力使わない書き方で,とりあえずこちらから?
-
初級 -class style-
- クラス化したnodeを使用した書き方.ROS2で推奨するコーディングスタイルへの第一歩.
内容一覧
- ROS2に関する基本情報
- ROS2プロジェクトの作成
- ROS2の最小構成プログラム
- ROS2のpublisher/subscriber概要
- ROS2の最小構成subscriber
- ROS2における時間管理・Rate系とTimer系
- ROS2の最小構成publisher
- ROS2独自メッセージの作成
- 独自メッセージを用いたROS2 publisher/subscriber
- ROS2の最小構成service/client
- ROS2の最小構成parameter
- YAMLファイルによるROS2のパラメータ設定
中級
中級以降は,基本的には「class style」を対象とする.
共有ライブラリとコンポーネントについて
初級では分かりやすさから「ROS1 style」と「class style」の二種類の方法で説明した.実用的にはコンポーネントを作成し使用する.
コンポーネントについては,classでのnode作成(初級のclass style)し,それを共有ライブラリ化,共有ライブラリをコンポーネント化する流れで説明する.
コンポーネントは共有ライブラリとしても使用できるので,とりあえずコンポーネント化しておけばよい.
ROS2 Parameter
- ROS2におけるパラメータのdeclareとundeclareに関わる諸事
- ROS2における個々のパラメータの詳細設定 - ParameterDescriptorの使用 -
- ROS2におけるパラメータ変更に対するcallback関数の設定
-
ROS2の非同期parameterクライアントについて
- 書きかけ・未整理
その他
- service/client,publish/subscribe関係
- ROS2におけるメッセージ -common_interfacesの活用
- ROS2の単一ターゲット内での複数nodeの実行
- NodeOptionsによるROS2ノードの初期化について
- ROS2におけるQoS
- ROS2 launchの使用
応用
- ROS2 + Raspberry Pi
- ボタンを押してLチカに移転
- 旧情報
- ROSとpigpioによるモータ制御
- 以下参考程度
-
Ubuntu + Raspberry PiでGPIOアクセスのための設定
- 現状,pigpioでは使用できていないので注意
-
Ubuntu + Raspberry PiでGPIOアクセスのための設定
- ROS2でのキー入力専用nodeの作成
ROS2 + Raspberry Pi
まとめた一般的な情報
その他の異なるテーマで書いた情報庫は以下の通り.
- ROS2に関する基本情報
-
ROS2コマンド一覧
- ROS2 package.xmlとCMakeLists.txtのチートシート
- ROS2における名前空間・ノード名の使い方
- 独自ルール:ROS2における名前付け
- 独自ルール:GitLab上でのROS2のドキュメント
- ROS2のsetup.とlocal_setup.
- ROS2でEigen3を使う
future work
- actionについて
- launchについて
参考
-
公式チュートリアル
- 重要なことはここに集約されている.集約されてすぎてROSを知らない人には分かりにくい気がするが.
- Tutorials-BasicにあるUsing Amentは多分古いので読まなくてよい(と当該ページに書いてある)
- メッセージの型一覧はAbout ROS 2 Interfacesにある
-
docs.ros2
- 現在非公式みたいだがrclcppのoverviewも参考になる.
- 公式の細々した情報
- 特にc++用のAPIであるrclcppのapiが参考になる.
-
Introspection with command line tools
- ros2コマンド一覧
- ros2/common_interfaces
-
ROS Japan ユーザグループ 講習会 ~ ROS 2 の紹介 ~
- 講習会の資料で分かりやすい.
- ros.youtalk.jp
-
Exploring the performance of ROS2
- ROS1とROS2の比較の話.ROSよりもう少し広い視点から説明していて分かりやすい.
- An Introduction to Modern CMake
- CMakeスクリプトを作成する際のガイドライン