173（ひとなみ）にROS2が使えるようになりたい＃１　ROS2 チュートリアルを試す（１）

#　趣味と実益を兼ねて自宅でロボットを作りたい
　前々からROS2に興味があったのですが、いよいよ勉強をしてみようと思いたち
勉強を始めました。
　プロレベルまで行けるかはわかりませんが、趣味で遊べるレベル（机の上でロボット走らす）くらいにはなりたいなと思います。
　ひとまず、参考用に[書籍](https://www.amazon.co.jp/ROS2%E3%81%A7%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86-%E6%AC%A1%E4%B8%96%E4%BB%A3%E3%83%AD%E3%83%9C%E3%83%83%E3%83%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E8%BF%91%E8%97%A4-%E8%B1%8A/dp/4297107422)を買ったのですが、読み進めながら[公式チュートリアル](https://translate.google.com/translate?sl=en&hl=ja&u=https%3A%2F%2Findex.ros.org%2Fdoc%2Fros2%2FTutorials%2F%23tutorials)もやっていこうと思っています。
　こちらは試行錯誤しながら、やっていた履歴を残していきます。
　ちなみに　ROS２のバージョンはDashingです。

## つまずいた点の総括
　公式チュートリアルの内容は「Eloquent」を対象としているため、「Dashing」を使う場合コマンドが存在しない場合がある。

　色いろ苦心してDashingで再現できたものと、できなかったものがあります。
　再現できたものに関してこちらに履歴を残します。
　再現できなかったものに関して情報あれば教えていただけると幸いです。

##　学習環境を作る
　ROS２のインストールに関しては先駆者がたくさんいらっしゃるので割愛します。
　●[公式のインストール手順](https://index.ros.org/doc/ros2/Installation/Dashing/)
　その代わりに、あると便利なツールとして「Tarminator」のインストールをします。
　細かい話は割愛しますが、ターミナルの改良版に近いもので、キーボード操作でターミナルを増やしたり、複数のターミナルに同じコマンドを一斉に書き込んだり（ブロードキャスト）できる代物です。

###インストール
　ターミナルを起動後下記のコマンドを入力してください

~~~
sudo apt-get install terminator
~~~

###　コマンド覚書覚書
| コマンド | 内容 |
|:-:|:-:|
|  Alt ＋ a | ブロードキャスト開始  |
|  Alt ＋ o | ブロードキャスト停止  |
|Ctrl + Shift + e|左右に分割|
|Ctrl + Shift + o|上下に分割|
|Ctrl + Shift+ t|新規画面起動|
|Ctrl + Shift+ ｗ|現在の画面を閉じる|
|Alt + ↑|上の画面に移動|
|Alt + ↓|下の画面に移動|
|Alt + →|右の画面に移動|
|Alt + ←|左の画面に移動|


##　チュートリアルの進め方
　基本的に上から１つづつやっていきます。
　※　公式ページも上から進めていってね　と書いてあったので従う方向で行きます。

##　①[ROS2環境の設定](https://index.ros.org/doc/ros2/Tutorials/Configuring-ROS2-Environment/)
　ここのページではROS２のノードを実行するターミナルを起動するごとに実行を必要とするコマンドに関する説明になっています。
　下記に記すコマンドを実行することで、ターミナル（シェル）でROSコマンドを実行できるようにするものです（パスを通す）。
### やること
1:セットアップファイルを実行する。

~~~
source /opt/ros/<distro>/setup.bash
~~~

　ここで＜distoro＞はインストールしたROS２のバージョンなので
私の環境の場合はdashingと入力する形になります。
　またSourceはシェルコマンドの１種です。　このコマンドで指定したファイルに記載された内容をシェル上で実行します。

~~~
source /opt/ros/dashing/setup.bash
~~~
2:正常に実行できたか、環境変数をチェックする
セットアップファイルが正常に実行されると環境変数に
ROS_VERSION=2
ROS_PYTHON_VERSION=3
ROS_DISTRO=dashing
が追加されます。
これを確認したいので、ターミナル上で

~~~
printenv | grep -i ROS
~~~
を実行します。
このコマンドを実行すると　環境変数を表示（printenv)する際にROSの文字列を含むものだけを検索して（grep)絞った状態で表示してくれます。

おまけ１　
ターミナルを毎回書き込むのが面倒臭い場合は.bashrcに先程のコマンドを書き込むことでターミナル実行時に自動で起動させることができる。
※　公式HPでは

~~~
echo "source /opt/ros/<distro>/setup.bash" >> ~/.bashrc
~~~

のように「echo」コマンドを使って書き込ませていますが。個人的にはおすすめしません。
ファイルパスの部分に書き損じがあった場合に「.bashrcを修正しようとしても起動できなくて書き換えできない」みたいなことが時折発生するらしく、本すじ外のところに時間を取られてしまいます。

個人的には
１：編集前に「.bashrc」のコピーをテキストファイルで保存し、問題が発生しても復帰できるようにしておく
２：編集にはテキストエディタを使う
という形をおすすめします。

ちなみに「.Hogehoge」のようなファイルは隠しファイルになっているため、ファイルを探そうとしても普通は見つけられません。
ただし。ファイルマネージャを起動している状態で「Ctrl＋ｈ」を入力すると隠しファイルが表示されるようになるので、こちらを使ってファイルを選択して編集してください。[●参考](https://linux.just4fun.biz/?Ubuntu/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%E3%81%A7%E9%9A%A0%E3%81%97%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%BB%E9%9A%A0%E3%81%97%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)

おまけ２
OS_DOMAIN_ID　に関しても記載がありますが、ROS２を使っている開発チームが複数あって、その複数のチーム間でお互いのROS通信が干渉するような自体が発生した際にここに0〜232までの整数を入力して、ネットワークの明示をすると、異なるID間では干渉が発生しないようにできる様です。
まだ使ったことがないので実感はありませんが、複数PJが動くような場合は有効そうです。

ひとまず（１）の内容は以上です。
（２）からは実際にチュートリアルの亀を動かそうと思います。