ROS2講座00 目次

* 数字は書いた順です。
* ROS2自体の基礎を知った後に、ROS2をロボットに適用する時に必要な知識を順次開設していきます。
そのためにROS2自体よりも、それ周辺のツールの解説がメインになります。
* 室内用を自律で動くAGVの作成を目指して技術要素を説明していきます。

# イントロダクション

[ROS2-01 ROS1との主な相違](https://qiita.com/srs/items/5b925106f88d36c15523)
ROS1経験者向けにROS2での主な違いを説明します。

[ROS2-02 環境のセットアップ](https://qiita.com/srs/items/86c42834bcf2c550bd9a)
ROS2環境構築の方法を説明します。

# ROS2基礎参考資料
ROS2それ自体の入門や解説は様々な良質な資料があるので紹介します。

* Webサイト
    * [５分でワカル!? ROSとはなにか](https://docs.google.com/presentation/d/1BZU3nFDiSrUU7wAMpqgY4kU6-65wxzvfHVRZigsHlDI/edit#slide=id.g19bd6545631fa34e_63)
そもそもROSとは何なのかについて解説されています。
    * [公式ドキュメント/チュートリアル](https://docs.ros.org/en/rolling/Tutorials.html)
よくできている公式のチュートリアルです。ひとまずこれを順番にやっていけば基礎が分かるようになります。

* 書籍
    * [ROS2ではじめよう 次世代ロボットプログラミング](https://www.amazon.co.jp/dp/4297107422)
基礎的な事項はおおむね網羅されている資料です。コード例も多く記載されています。

# 開発環境編

[ROS2-03 colconでの実行ファイルのビルド](https://qiita.com/srs/items/1b9b9de2ad02e689285b)
colconでのビルドの記述を解説します。

[ROS2-21 colcon testを実行する](https://qiita.com/srs/items/4e5cf7bed54ffba1fec0)
コードチェッカーとgtestの実行方法を説明します。

# ROS2基本機能編

[ROS2-16 ROS2 Parameterを使う1](https://qiita.com/srs/items/837958ea11d586a637ee)
rclcppでのパラメーター操作の記述をします。

[ROS2-17 ROS2 Parameterを使う2](https://qiita.com/srs/items/9ab7456e4a3a4c5cf645)
実行時にパラメーターを指定する方法を解説します。

[ROS2-18 actionを使う](https://qiita.com/srs/items/5d7b63bf3a76e8c61d40)
actionの使い方を解説します。

[ROS2-23 記法一覧表](https://qiita.com/srs/items/6a59c446c131ccf2fc64)
各種記法の一覧表です。

# Rvizプラグイン製作編

[ROS2-04 Qtの基本機能](https://qiita.com/srs/items/f1dcdd99dd6c169773fc)
QtのGUIを表示するための基本的な記述を説明します。

[ROS2-05 Qtをクラスで使う](https://qiita.com/srs/items/31fbbd2d2d1ac7b13d07)
Qtのクラス実装の記述を行います。

[ROS2-06 タッチパネルWidgetを作る](https://qiita.com/srs/items/2b0f1657038b5bcb9c35)
QtのGUIでタッチパッドを作ります。

[ROS2-19 RvizPlugin概要](https://qiita.com/srs/items/405ee79e333b12cec162)
Rviz2のpluginの概要の説明をします。

[ROS2-07 Rviz2でタッチのPanelPluginsを作る](https://qiita.com/srs/items/a58b972ebcb8ba282ee2)
Rviz2で自作のpanel pluginを作ります。

[ROS-20 Rviz2で文字をOverlayで表示するPluginを作成する](https://qiita.com/srs/items/ef2118bd422d31dc5803)
文字をOverlay表示するDisplayPluginの解説をします。

# データベース編

[ROS2-08 SQLite基礎](https://qiita.com/srs/items/f88c2a1db0a29e4cd026)
ローカルで動くデータベースであるSQLiteの使い方の基本を説明します。

[ROS2-09 SQLiteをC++から使う](https://qiita.com/srs/items/20a09502a6aebbd0bbb2)
sqliteのC++APIでの発展的な使い方を説明します。

[ROS2-10 更新を検知してsqliteDB情報をROSに送る](https://qiita.com/srs/items/037f0035def556cb5fe2)
他のプロセスがDBを更新したことを検知して、情報を更新する方法を説明します。

[ROS2-22 rostopicのログをrosbagに保存する](https://qiita.com/srs/items/e2eb010b23e3fbcff615)
取得間隔の間引きをしながらrosbagに保存するpythonノードを紹介します。

# Ignition Gazebo編

[Ignition-01 worldファイルを起動する](https://qiita.com/srs/items/49b8512e29bdef0ebcd6)
Ignitionのインストールから、自作world/modelの使い方を説明します。

[Ignition-02 GUIプラグインを作成する](https://qiita.com/srs/items/2675e9dcbb942c979c3c)
IgnitionのGUIプラグインを作成します。

[Ignition-03 SystemプラグインでModelを駆動する](https://qiita.com/srs/items/c1f58886af795bce1357)
モデルのjointをpluginを使って駆動します。

# flutter

[fulutter-01 Ubuntu22.04へのインストール](https://qiita.com/srs/items/464c6515be47bf2a6160)
Ubuntuへのインストールとサンプルプログラムを実行します。

[flutter-02 WebAPIを受けるROSノードの作成](https://qiita.com/srs/items/40144decbb4d32b7a3c9)
FastAPIを用いてros-WebAPIをブリッジするノードを作成します。

[flutter-03 WebAPIを操作するFlutterアプリの作成](https://qiita.com/srs/items/b18dd27e4e2f150dca93)
WebAPIを介してROSノードとつながるflutterアプリを作成します。

[flutter-04 Androidでビルドする](https://qiita.com/srs/items/9b21f4faf501b8cbbf06)
上記のプログラムをAndroidタブレットで実行します。

# デバイス製作

ここではROS2で動かすAGVのハードウェアとドライバについて説明していきます。

## Rover作成編(ハードウェア)
Ardupilot (on Pixhawk)を使って差動2輪機構での台車を作っていきます。

[Rover-01 スペックの設計をする](https://qiita.com/srs/items/866a6ac77068dd7065c5)
ロボットのサイズを決めるために必要な事項を検討します。

[Rover-02 EspressoFrameの紹介、主要部品の選定、必須パーツリスト](https://qiita.com/srs/items/f8c71e2f56d890244004)
今回製作するAGVである「EspressoFrame」の紹介と、この先で必要な購入品の一覧を乗せます。

[Rover-03 MissionPlannerでardupilotと接続・アップデートする](https://qiita.com/srs/items/c278c3d9f56b213ba202)
PixhawkにファームウェアであるArdupilotを書き込みます。

[Rover-04 ArdupilotにXBeeで接続する](https://qiita.com/srs/items/3db6a3532d06931f2334)
XBeeを使って無線でPC-Pixhawkを接続します。

[Rover-05 ArdupilotでIMU、地磁気センサーの初期設定をする](https://qiita.com/srs/items/ff9a6d42640e2dfdc4a3)
IMU、地磁気センサーの設定をします。

[Rover-06 Ardupirotでプロポの初期設定をする](https://qiita.com/srs/items/eb50af277a29a129a5f9)
プロポの接続をします。

[Rover-07 Ardupirotで距離センサーの設定をする](https://qiita.com/srs/items/79efc5f2c0d1eefa1929)
外付けデバイス系の設定します。

[Rover-08 Roboclawの設定をする](https://qiita.com/srs/items/0704ff8da189949e71f0)
モーター周りの配線をして、Roboclawでモーターを駆動します。

[Rover-09 Ardupirotで駆動系の設定をする](https://qiita.com/srs/items/2ab8f7f6e8371c6cfba4)
電装品の実装・電源の接続・モータードライバの設定の後に、MANUALモードでのモーター駆動をします。

[Rover-10 ArduRoverでバンパースイッチ、外付けステータスLEDの設定をする](https://qiita.com/srs/items/4082b69bf2ba55c9600b)
バンパースイッチと外付けステータスLEDの設定をします。

[Rover-11 EspressoFrameの筐体(移動部)を組み立てる](https://qiita.com/srs/items/aeb85ebb6528e89a14ef)
筐体を組み立てて走行可能な状態にします。

[Rover-12 EspressoFrameの筐体（タワー部）を組み立てる](https://qiita.com/srs/items/f1af0e61fcaea2260253)
機体上部のUI部を組み立てます。

[Rover-13 Ardupirotで自己位置・速度制御の設定をする](https://qiita.com/srs/items/b036a7ba18173ad97db4)
自己位置の設定と、ACROモードで移動できるように設定します。

[Rover-14 ロボット用のNUCの事前設定をする](https://qiita.com/srs/items/54ad0d3fd2e9e03de2d7)
メインコンピューターであるNUCをロボット用に自動起動するように設定します。

## Rover作成編(ソフトウェア)

[ROS2-11 FeetechServo(STS3215)を動かす](https://qiita.com/srs/items/5664b3adfea889763a98)
ROSからシリアル方式のサーボモーターを動かします。

[ROS2-12 ydlidarX4を使う](https://qiita.com/srs/items/1c857a1d0bc39d7a068f)
YDLIDAR X4をROS2につなげて使用します。

[ROS2-13 Ardupilotとmavrosで通信する](https://qiita.com/srs/items/1b14bdf0f1fd3c49cf49)
mavrosを使ってardupilotとROSを接続します。

[ROS2-14 mavrosのpluginsを作成する](https://qiita.com/srs/items/8bf1776fe7a062c0c8f2)
mavrosのpluginの記述方法を解説します。

[ROS2-15 RealsenseD435を使う](https://qiita.com/srs/items/9677f4128215c9021571)
RealsenseをROS2に接続して観測データを可視化します。