プログラミング素人がAutoware.AIを使ったコンテストに参加した話（その２：ROSの情報まとめ）


##まずはじめに
Autoware.AIはROSをベースに構成されています。Autoware.AIを使う前にROSについてある程度知識を持っている必要があります。
今回はROSの情報をまとめます。ROSについては私もほとんどわかってないので細かい説明はしてません（できないです。）
Autowareとラズパイマウスをちょっと触った程度の知識レベルなのでまちがってたらすみません。
ご指摘、ご指導ご鞭撻をお願いいたします。

・[その１：Autoware.AIの環境設定](https://qiita.com/penstood/private/aa0328805bb91ad9340f "自動運転AIチャレンジ")
・[その２：ROSの情報まとめ](https://qiita.com/penstood/private/aa0328805bb91ad9340f "プログラミング素人がAutoware.AIを使ったコンテストに参加した話（その２：ROSの情報まとめ）")←いまここ
・[その3：Autoware.AIとLGSVLシミュレータを使ってみる](https://qiita.com/penstood/private/b024c6486af18fe620e6 "プログラミング素人がAutoware.AIを使ったコンテストに参加した話（その3：Autoware.AIとLGSVLシミュレータを使ってみる）")

| 項番 | ページ内リンク |
|:----:|:-------------|
| 1 | [1. ROSの教材](#1-rosの教材) |
| 2 | [2. よく使うrosコマンド](#2-よく使うrosコマンド) |
| 3 | [参考リンク](#3-参考リンク) |


##ROSをはじめるとき
身近にいるROSユーザーを見つけてコンタクトをとりましょう。
その人にくっついていろいろ教えてもらうのが一番早いと思います。

##ROSユーザーが身近にいないとき（←自分の場合）
ROSのバージョン違い（kineticとかmelodicとかいろいろ）に注意しながらROSの教材で勉強しよう。
独学はかなりしんどいですががんばりましょう。ラズパイマウスやTurtlebotシミュレータなどを動かしながら覚えています。

##1. ROSの教材
####ROS Japan UGの勉強会に参加しよう。
[ROS Japan UGの勉強会](https://rosjp.connpass.com/ "ROS Japan UG")に参加して実際に何ができるのか何をやっているのか触れてみよう。
最初は何言ってるかわからなかったけどだんだんわかってくると聞いているだけで勉強になります。
有識者のみなさまのtwitterを勝手にフォローして日々追いかけて勉強させていただいております。
この場をお借りして厚く御礼申し上げます

[ROS Japan UGのSlack](https://rosjp.slack.com/ "ROS Japan UGのSlack")に登録してみよう。最新情報が入手できます。

[ROS Japan UGのSlack登録フォームはこちら](https://goo.gl/forms/bTA1P7oQo24lzTlX2 "ROS Japan UGのSlack登録フォームはこちら")


####お手軽に試せるもの
まず[ROS講座](https://qiita.com/srs/items/5f44440afea0eb616b4a "ROS講座00 目次")　←かなり詳しく書いてあってわかりやすい。
[ROSTutorials](http://wiki.ros.org/ja/ROS/Tutorials "ROSTutorials")を読む。

[ROSのturtlebot3(Gazeboのシミュレータ)](https://qiita.com/protocol1964/items/1e63aebddd7d5bfd0d1b "ROS MelodicでTurtlebot3をGazeboで動かしてついでにSLAMする")　を動かしてみましょう。　←これならタダ！

[ROBOTIS e-Manual](https://emanual.robotis.com/docs/en/platform/turtlebot3/navigation/ "ROBOTIS e-Manual")　←Navigationまでやりたい方はこちらが参考になります。

####もうすこしやってみたいならラズパイマウス←給付金でかえます（ROSやるならLidar付）
[Raspberry Pi Mouse V3](https://rt-net.jp/products/raspberrypimousev3/ "Raspberry Pi Mouse V3")　　　　　　ただしセットアップがちょっと大変。
[Welcome to Mashykom WebSite](https://www.koi.mashykom.com/Pimouse.html "Welcome to Mashykom WebSite")　　Raspberry Pi Mouseの使い方やコードをざっくり知ることができます。
・[raspimouse_ros_examples](https://github.com/rt-net/raspimouse_ros_examples "raspimouse_ros_examples")　　　 　ROSのサンプルコードはこちら

####ROSチートシートの紹介
チートシートはお守り代わりに持っておくとよいかも。ここらに載っているコマンドは頻出なので知らないコマンドは調べて使ってみて覚えるといいです。知らないコマンドあったら調べて使ってみましょう。Linuxコマンドも載っているのもあります。
[ROS CHEAT SHEET  MELODIC](https://www.generationrobots.com/media/ROS_Cheat_Sheet_Melodic.pdf "ROS CHEAT SHEET  MELODIC")
[ROS platform Cheat Sheet](http://mrs.felk.cvut.cz/summer-school/assets/pdf/cheatsheet.pdf "MRS lab ROS platform Cheat Sheet")

####ROSコマンド紹介
・[よく使用するROSコマンド](https://raspimouse-sim-tutorial.gitbook.io/project/ros_tutorial/appendix/ros_comand "よく使用するROSコマンド")　
・[ROS(Robot Operating System)を使う](http://forestofazumino.web.fc2.com/ros/ros_command_list.html "ROS(Robot Operating System)を使う")　

####ROS参考情報
ROSにはメッセージ型[（基本形はこちら）](http://wiki.ros.org/common_msgs?distro=melodic "ROS common_msgs")というものがありセンサなどの情報をROSメッセージに基づいた型で通信（Publishしたり、Subscribeしたり）しています。
[オリジナルのメッセージを作る](https://qiita.com/srs/items/7ac023c549e585caeed0 "カスタムROSメッセージ")ことも可能です。


ROSには[TF（tf）](http://wiki.ros.org/ja/tf "ROS tf")というものがあります。センサ情報や関節、自分の座標値などの相対関係をまとめるときに使います。
例えばAutowareではマップと自車の位置関係とか、Velodyneセンサは自車のこの辺についているとか、カメラはこの辺についているとか相対位置情報がないとVelodyneの点群情報なんかつかえないよね。という程度の理解です。すみません。

##2. よく使うROSコマンド
・[よく使用するROSコマンド](https://raspimouse-sim-tutorial.gitbook.io/project/ros_tutorial/appendix/ros_comand "よく使用するROSコマンド")　
・[ROS(Robot Operating System)を使う](http://forestofazumino.web.fc2.com/ros/ros_command_list.html "ROS(Robot Operating System)を使う")　

####パッケージコマンド
<dl>
  <dt><code>catkin_create_pkg [パッケージ名]</code></dt>
  <dd>実行したワークスペース内にパッケージディレクトリ/src、及び関連したファイルpackage.xml, CMakeList.txtを作成する。</dd>
  <dt><code>rosdep install --from-paths src --ignore-src --rosdistro melodic -y</code></dt>
  <dd>実行したワークスペース内のROS の依存関係を確認・解釈・解決・更新してくれるツール。<BR> 
　</dd>
</dl>

####ディレクトリーコマンド
<dl>
  <dt><code>roscd [パッケージ名]</code></dt>
  <dd>指定したROSパッケージのディレクトリに移動できます。</dd>
</dl>

####実行コマンド
<dl>
  <dt><code>roscore</code></dt>
  <dd>rosマスタを起動します。</dd>
  <dt><code>killall -9 roscore</code></dt>
  <dd>rosマスタを強制的に停止します。（ctl+cでrosマスタが停止できないときに使用しています。）</dd>
  <dt><code>rosrun [パッケージ名] [ノード名]</code></dt>
  <dd>指定したパッケージのノードを実行します。一つのターミナルで一つのノードを走らせます。</dd>
  <dt><code>roslaunch [パッケージ名] [launchファイル]</code></dt>
  <dd>ローンチファイルを起動します。roscoreが起動していなければroscoreが自動で起動されます。<BR> 
roslaunch [launchファイル]と直接launchファイルを指定することもできます。</dd>
  <dt><code>rosclean [オプション]</code></dt>
  <dd>ROSログファイル削除に使うコマンド。<BR> 
      ROSマスタを起動したときにlogが残ることがあり、logの容量が1GBを超えると警告が出るのでそんなときに使ってる。（←多分間違ってるけど）</dd>
</dl>


####ノードコマンド
<dl>
  <dt><code>rosnode list</code></dt>
  <dd>rosマスタで実行中のノードのリストを表示します。</dd>
  <dt><strong><code>rosnode info [ノード名]</code></strong></dt>
  <dd>指定したノードの情報を表示します。トピックのSubscriberとPublisherの情報も確認できるので非常に便利。<BR> 
      ROSのnodeは必要なトピックがないと動作しないのでこれでシラミツブシに調べました。</dd>
</dl>

####トピックコマンド
<dl>
  <dt><code>rostopic list</code></dt>
  <dd>rosマスタで登録されている全てのトピックのリストを表示します。</dd>
  <dt><code>rostopic echo[トピック名]</code></dt>
  <dd>指定したトピックのメッセージの内容をリアルタイムで表示します。</dd>
  <dt><code>rostopic type [トピック名]</code></dt>
  <dd>指定したトピックのメッセージ型を表示します。<BR> 自分でパッケージ作ってSubscriberとかPublisherとか作るときにメッセージの型を確認するために使います。</dd>
  <dt><code>rostopic info [トピック名]</code></dt>
  <dd>指定したトピックの情報を表示します。</dd>
</dl>

####パラメーターコマンド
<dl>
  <dt><code>rosparam list</code></dt>
  <dd>roscoreに登録されている全てのパラメータを表示します。</dd>
  <dt><code>rosparam set [パラメータ名]</code></dt>
  <dd>指定したパラメータの値を設定します。</dd>
</dl>

####ツールコマンド
<dl>
  <dt><code>rosbag record [オプション] [トピック名]</code></dt>
  <dd>指定したトピックのメッセージをbagファイルに記録します。</dd>
  <dt><code>rosbag play [ファイル名]</code></dt>
  <dd>指定したbagファイルを再生します。</dd>
  <dt><code>roswtf [launchファイル名]</code></dt>
  <dd>launchファイルの不具合を見つける。Autowareはバージョンによってパラメータが異なるので確認するのにすごく便利。</dd>
  <dt><code>rosrun rviz rviz</code></dt>
  <dd>rvizを起動する</dd>
  <dt><code>rosrun rqt_graph rqt_graph</code></dt>
  <dd>システム進行状況・挙動を示す，動的なグラフを生成します。<BR> いま起動しているノードやPubSubされているメッセージを確認するのにすごく便利。</dd>
  <dt><code>rosrun tf view_frames</code></dt>
  <dd>view_framesは現在のtfの構成を可視化してPDFグラフを作るデバッグツールです。</dd>
</dl>



####参考図書
ROS-melodicの本なかなかないです。（あったら教えてください）
そして全部目を通せてないので積み本になりかけ。
・ROSロボットプログラミングバイブル　[-Amazonリンク](https://www.amazon.co.jp/ROSロボットプログラミングバイブル-表-允〓/dp/4274221962/ref=cm_cr_arp_d_product_top?ie=UTF8 "ROSロボットプログラミングバイブル")
・実用ロボット開発のためのROSプログラミング (日本語)　[-Amazonリンク](https://www.amazon.co.jp/実用ロボット開発のためのROSプログラミング-西田-健/dp/462767581X "実用ロボット開発のためのROSプログラミング (日本語)")
・プログラミングROS ―Pythonによるロボットアプリケーション開発 (オライリー・ジャパン) 　[-Amazonリンク](https://www.amazon.co.jp/プログラミングROS-―Pythonによるロボットアプリケーション開発-オライリー・ジャパン-Morgan-Quigley/dp/4873118093 "プログラミングROS ―Pythonによるロボットアプリケーション開発 (オライリー・ジャパン) ")　←分厚い
・トランジスタ技術 2020年 9月号 ロボット1日開発 初めてのROS&位置推定　[-CQ出版社リンク](https://shop.cqpub.co.jp/hanbai/books/MTR/MTR202009.html "トランジスタ技術 2020年 9月号 ロボット1日開発 初めてのROS&位置推定")　←トランジスタ技術でもROSでロボット作ってる特集があるので参考になります。
・ロベールのC++入門講座　[-Amazonリンク](https://www.amazon.co.jp/ロベールのC-入門講座-ロベール/dp/4839926050 "ロベールのC++入門講座")　　←分厚くてびびった（最近ようやく読み始めた）
・OpenCVによるコンピュータビジョン・機械学習入門　[-Amazonリンク](https://www.amazon.co.jp/OpenCVによるコンピュータビジョン・機械学習入門-KS情報科学専門書-中村-恭之/dp/4061538306 "OpenCVによるコンピュータビジョン・機械学習入門")←C++とpython両方のコードが載っています。
（ROSはOpenCV３系までしか対応してない）

##まとめ
結局ROSはむずかしいことがわかりました。Autowareなんてさらに複雑。
ということでこれからもよろしくお願いいたします。
かなり長くなってしまったのでAutowareの使い方は別にまとめます。
（LGSVLを使ったAutowareの使い方についてご紹介。）



##3. 参考リンク
・[ROSTutorials](http://wiki.ros.org/ja/ROS/Tutorials "ROSTutorials")　
・[ROS Japan UG](https://rosjp.connpass.com/ "ROS Japan UG")
・[ROS講座](https://qiita.com/srs/items/5f44440afea0eb616b4a "ROS講座00 目次")　
・[Raspberry Pi Mouse V3](https://rt-net.jp/products/raspberrypimousev3/ "Raspberry Pi Mouse V3")
・[Welcome to Mashykom WebSite](https://www.koi.mashykom.com/Pimouse.html "Welcome to Mashykom WebSite")
・[ROS MelodicでTurtlebot3をGazeboで動かしてついでにSLAMする](https://qiita.com/protocol1964/items/1e63aebddd7d5bfd0d1b "ROS MelodicでTurtlebot3をGazeboで動かしてついでにSLAMする")
・[ROS CHEAT SHEET  MELODIC](https://www.generationrobots.com/media/ROS_Cheat_Sheet_Melodic.pdf "ROS CHEAT SHEET  MELODIC")
・[MRS lab ROS platform Cheat Sheet](http://mrs.felk.cvut.cz/summer-school/assets/pdf/cheatsheet.pdf "MRS lab ROS platform Cheat Sheet")
・[ROBOTIS e-Manual](https://emanual.robotis.com/docs/en/platform/turtlebot3/navigation/ "ROBOTIS e-Manual")　
・[raspimouse_ros_examples](https://github.com/rt-net/raspimouse_ros_examples "raspimouse_ros_examples")　
・[よく使用するROSコマンド](https://raspimouse-sim-tutorial.gitbook.io/project/ros_tutorial/appendix/ros_comand "よく使用するROSコマンド")　
・[ROS(Robot Operating System)を使う](http://forestofazumino.web.fc2.com/ros/ros_command_list.html "ROS(Robot Operating System)を使う")　
・[ROS tf](http://wiki.ros.org/ja/tf "ROS tf")　
・[ROS common_msgs](http://wiki.ros.org/common_msgs?distro=melodic "ROS common_msgs")　
・[ROS Japan UGのSlack](https://rosjp.slack.com/ "ROS Japan UGのSlack")
・[ROS Japan UGのSlack登録フォーム](https://goo.gl/forms/bTA1P7oQo24lzTlX2 "ROS Japan UGのSlack登録フォーム")
・[OpenCVによるコンピュータビジョン・機械学習入門](https://www.amazon.co.jp/OpenCVによるコンピュータビジョン・機械学習入門-KS情報科学専門書-中村-恭之/dp/4061538306 "OpenCVによるコンピュータビジョン・機械学習入門")




・[★HTMLタグリファレンス（目的別）](http://www.htmq.com/html/indexm.shtml "★HTMLタグリファレンス（目的別）")