*目次 [#a600931e]
#contents
*参考 [#z8aae1cf]
-[[公式チュートリアル>http://wiki.ros.org/ja/ROS/Tutorials]]
-[[無料公開のROSの本>http://irvs.github.io/rosbook_jp/]]
-[[日本のROS勉強会>http://www.slideshare.net/DaikiMaekawa/ros-meetup-01-33458682?related=1]]
-[[ROS Cheat sheet>http://www.clearpathrobotics.com/wp-content/uploads/2014/01/ROS-Cheat-Sheet-v1.01.pdf]]
-[[おんぷさんおすすめの自己位置推定>https://github.com/ros-planning/navigation/blob/jade-devel/move_base/src/move_base.cpp]]
*インストール [#if86400f]
-[[indigoのインストール>http://wiki.ros.org/ja/indigo/Installation/Ubuntu]]
*コマンド [#qb5a81cb]
|コマンド|操作|h
|rospack|パッケージの情報を取得(パッケージ情報を保存しているpackage.xmlをパースするコマンド)|
|rospack find <package>|packageのパスを取得|
|rospack depends1 <package>|packageの直接依存パッケージを取得|
|rospack depends <package>|packageの全依存パッケージを取得|
|rosnode list|起動中のnodeを列挙|
|rosnode ping <nodename>|nodenameが起動中かチェック|
|roscd|packageに移動|
|rosls|packageのディレクトリでls|
|rosrun [package_name] [node_name]|package_nameに含まれる、node_nameのプログラムを実行する。(__name:=my_turtleなどで、node_nameを操作可能)|
|rosed <package> <file>|packageのfileを編集する|
|rosmsg show [<message> or <package>/<message>]|ROSメッセージ定義の情報提供|
|rossrv show [<service> or <package>/<service>]|ROSサービス定義の情報提供|
|rosrun rqt_graph rqt_graph|メッセージの配信購読関係の可視化。青を購読していて、緑に配信している。|
|rosrun rqt_console rqt_console|LOGの監視|
|rosrun rqt_logger_level rqt_logger_level|LOGレベル監視|
|rostopic echo /<packagename>/<nodename>|topic(/<packagename>/<nodename>)に流れているメッセージをそのまま出力する|
|rostopic type /<packagename>/<nodename>|流れているメッセージの型を出力|
|rostopic pub -n /<packagename>/<nodename> <topictype=message> -- x, y|n回topicに指定したメッセージ型と指定したメッセージで送る。 -nは-r 1で1Hzになる。|
|rostopic list -v|起動中のトピックの型を調べるときに使える|
|rosservice type <service>|serviceの型を調査|
|rossrv show <service>|serviceの型の構成を表示|
|rosservice call <service> <arg>|serviceを利用|
|rosrun rqt_plot rqt_plot|topicの変数を表示できる|
|rosparam list|parameterの一覧|
|rosparam set <param> <arg>|paramにargをセットする|
|rosparam get <param>|paramの値取得|
|rosparam get /|paramの値を全部取得(rosparam listの代用にもなる)|
|rosbag info <bag>|bagの情報提供|
|rosbag record <topics>|topicsのbagファイルを生成(-aですべてのトピック)|
|rosbag play <bag>|topicsのbagファイルを再生|
|roslaunch [package] [filename.launch]|一つのパッケージであればノードを複数同時に起動できる。パッケージのlaunchディレクトリの中にlaunchファイルを入れることで実現|
|catkin_create_pkg <package_name> [depend1] [depend2] [depend3]|(catkinワークスペース内で)depend_iに依存するpackage_nameを作成|
|catkin_make [--source src_dir]|catkin_wsディレクトリで実行。sourceが指定されなければsrcがデフォルトとなる。|
*package.xml [#acacdea0]
|タグ|意味|形式|h
|dependencies(build_depend, buildtool_depend, run_depend, test_depend)|様々な状況で依存するパッケージ|例略|
|description|概要|<description>The beginner_tutorials package</description>|
|maintainer|開発者| <maintainer email="you@yourdomain.tld">Your Name</maintainer>|
|license|ライセンス|<license>BSD</license>|
*中枢処理 [#o45161da]
-roscore
--「マスター」と呼ばれる名前管理システム
--「rosout」と呼ばれるstdin, stdoutシステム
--「パラメータサーバ」
-マルチプロセスなので、ノード間で言語が一致する必要無し。
-roscoreは一つしか実行できない。
*情報伝達 [#l51c6e4b]
-Publisher->(メッセージ)->トピック->(コールバックで引数にメッセージ)->Subscribers
--情報を書いておく掲示板のようなものがトピック
--配信者がトピックに思い思いのタイミングで配信し、購読者はトピックが更新されたらコールバックを呼ぶ形式
-ノードはメッセージをトピックへ向けてPublish(配信)し,同様にSubscribe(購読)することでトピックからメッセージを受け取ることができます.
-n.subscribe("chatter", 1000, chatterCallback);
--"chatter"という名前の1000行まで貯めておけるトピックが更新されたら、chatterCallbackせよ。
*機能提供 [#s5c1e5c0]
-「クライアント」を媒介とするシステム(Service Node - Client Nodeの関係)
--クライアントは、起動中のサービスノードのプロセスをインスタンス化したもの。
*rosの実行 [#b7e4b1c8]
+catkin_makeを実行した後でかつアプリケーションを使い始める前にワークスペースのsetup.shを読み込んだことを確認してください。
+roscore実行
+ノードを起動していく
*ROS C++ [#bf59352a]
|関数|機能|h
|ROS_INFO|printfと同値|
*topic [#ye178ea6]
-topicの送り方
--送るためのトピックが、どのプロジェクトのどのノードかを調べる(/turtle1/command_velocity)
--トピックに、どのトピックタイプのメッセージを送ればよいかを調査(rostopic type /turtle1/command_velocity)
--トピックタイプのデータ形式を調査(rosmsg show turtlesim/Velocity → linier, angular)
--そのトピックタイプのデータ形式にあったメッセージを送信
-topicコマンド
--rostopic pub <トピック> <トピックタイプ> -- <メッセージ>
-例
--rostopic pub -r 1 /turtle1/command_velocity `rostopic type /turtle1/command_velocity` -- 1 0
--rostopic pub /turtle1/command_velocity `rostopic type /turtle1/command_velocity` -- 1 0
*環境設定 [#n1c3e514]
-To find available packages, use: apt-cache search ros-indigo
-If you have more than one ROS distribution installed, ~/.bashrc must only source the setup.bash for the version you are currently using.
-catkinの使い方は基本的にはCMakeに似ていますが、パッケージ検索機能や、複数の独立したプロジェクトを同時にビルドする機能なのが追加
-rosbuildにおける一番の問題の一つは、Microsoft Windowsなどの様々なOSに対する移植性が難しい
--BashからPython&CMakeへ
--Source in buildからOut of Sourseビルドへ
-パッケージは、ひたすら~/catkin_ws/srcに突っ込んでいく。
-catkin_init_workspaceは、 *~/catkin_ws*ではなく*~/catkin_ws/src*でやる。
-典型的なワークフロー
cd ~/catkin_ws/src/beginner_tutorials/src
#Add/Edit source files
cd ~/catkin_ws/src/beginner_tutorials
#Update CMakeFiles.txt to reflect any changes to your sources
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE=Release
*irvs [#f684b3a2]
-ノード
--要するに「プロセス」
--トピックは「プロセス間データ転送」が行えて、
--サービスは「プロセス間関数」が行える
**トピックのチュートリアル [#q27af08a]
-要するに、トピック=「一方的に送りつけるもの」
roscore
rosrun irvs_ros_tutorials ros_tutorial_msg_publisher # topicを提供
rostopic list # 流れてるtopic列挙
rostopic echo /ros_tutorial_msg # topicを購読
**サービスのチュートリアル [#k787492a]
-要するに、サービス=「関数」
-rqt_graphには表示されない!
-ヤバい仕組み
--srvTutorial.srv→.hを作るcmakeのルールがある
--つまり、srvを自分で作ったら、.hができてるので、req.aとかret.resultでアクセスできる(ヤバいね)
--受信はreq, 返信はresの構造体が.hのなかにできているので、そこから読み取ったり書き込んだりする。
roscore
rosrun irvs_ros_tutorials ros_tutorial_srv_server # サーバー建てる
rosrun irvs_ros_tutorials ros_tutorial_srv_client 2 3
rosservice list # 流れてるtopic列挙
rosservice call /ros_tutorial_srv 3 4 # クライアントからのリクエスト発行は、コマンドからもできる
*便利なパッケージ [#c101597d]
*Tips [#b79939ae]
-Arduinoを介すとROSのメッセージを送ることが出来る
*有名なパッケージ [#d6f7de18]
-tf
--[[tfの公式チュートリアルはダメダメで、罠が多い>http://myenigma.hatenablog.com/entry/20130210/1360491625]]
-ar_track_alvar
--ARマーカ認識を行うar_track_alvarはすごく良く出来ている
-gmapping, hector-slam
--オドメトリが怪しかったり画像も地図も使えなかったりする場合
*gazebo連携 [#me6ae36e]
-http://qiita.com/RyodoTanaka/items/6fa7e45f98b55376a95b