目次
- 参考
- インストール
- コマンド
- package.xml
- 中枢処理
- 情報伝達
- 機能提供
- rosの実行
- ROS C++
- topic
- 環境設定
- irvs
- 便利なパッケージ
- Tips
- 有名なパッケージ
- gazebo連携
参考
インストール
コマンド
| コマンド | 操作 |
|---|---|
| rospack | パッケージの情報を取得(パッケージ情報を保存しているpackage.xmlをパースするコマンド) |
| rospack find | packageのパスを取得 |
| rospack depends1 | packageの直接依存パッケージを取得 |
| rospack depends | packageの全依存パッケージを取得 |
| rosnode list | 起動中のnodeを列挙 |
| rosnode ping | nodenameが起動中かチェック |
| roscd | packageに移動 |
| rosls | packageのディレクトリでls |
| rosrun [package_name] [node_name] | package_nameに含まれる、node_nameのプログラムを実行する。(__name:=my_turtleなどで、node_nameを操作可能) |
| rosed | packageのfileを編集する |
| rosmsg show [ | ROSメッセージ定義の情報提供 |
| rossrv show [ | ROSサービス定義の情報提供 |
| rosrun rqt_graph rqt_graph | メッセージの配信購読関係の可視化。青を購読していて、緑に配信している。 |
| rosrun rqt_console rqt_console | LOGの監視 |
| rosrun rqt_logger_level rqt_logger_level | LOGレベル監視 |
| rostopic echo / | topic(/ |
| rostopic type / | 流れているメッセージの型を出力 |
| rostopic pub -n / | n回topicに指定したメッセージ型と指定したメッセージで送る。 -nは-r 1で1Hzになる。 |
| rostopic list -v | 起動中のトピックの型を調べるときに使える |
| rosservice type | serviceの型を調査 |
| rossrv show | serviceの型の構成を表示 |
| rosservice call | serviceを利用 |
| rosrun rqt_plot rqt_plot | topicの変数を表示できる |
| rosparam list | parameterの一覧 |
| rosparam set | paramにargをセットする |
| rosparam get | paramの値取得 |
| rosparam get / | paramの値を全部取得(rosparam listの代用にもなる) |
| rosbag info | bagの情報提供 |
| rosbag record | topicsのbagファイルを生成(-aですべてのトピック) |
| rosbag play | 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
| タグ | 意味 | 形式 |
|---|---|---|
| dependencies(build_depend, buildtool_depend, run_depend, test_depend) | 様々な状況で依存するパッケージ | 例略 |
| description | 概要 | |
| maintainer | 開発者 | |
| license | ライセンス |
中枢処理
- roscore
- 「マスター」と呼ばれる名前管理システム
- 「rosout」と呼ばれるstdin, stdoutシステム
- 「パラメータサーバ」
- マルチプロセスなので、ノード間で言語が一致する必要無し。
- roscoreは一つしか実行できない。
情報伝達
- Publisher->(メッセージ)->トピック->(コールバックで引数にメッセージ)->Subscribers
- 情報を書いておく掲示板のようなものがトピック
- 配信者がトピックに思い思いのタイミングで配信し、購読者はトピックが更新されたらコールバックを呼ぶ形式
- ノードはメッセージをトピックへ向けてPublish(配信)し,同様にSubscribe(購読)することでトピックからメッセージを受け取ることができます.
- n.subscribe("chatter", 1000, chatterCallback);
- "chatter"という名前の1000行まで貯めておけるトピックが更新されたら、chatterCallbackせよ。
機能提供
- 「クライアント」を媒介とするシステム(Service Node - Client Nodeの関係)
- クライアントは、起動中のサービスノードのプロセスをインスタンス化したもの。
rosの実行
- catkin_makeを実行した後でかつアプリケーションを使い始める前にワークスペースのsetup.shを読み込んだことを確認してください。
- roscore実行
- ノードを起動していく
ROS C++
| 関数 | 機能 |
|---|---|
| ROS_INFO | printfと同値 |
topic
- 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
- rostopic pub -r 1 /turtle1/command_velocity
環境設定
-
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
- ノード
- 要するに「プロセス」
- トピックは「プロセス間データ転送」が行えて、
- サービスは「プロセス間関数」が行える
トピックのチュートリアル
- 要するに、トピック=「一方的に送りつけるもの」
roscore
rosrun irvs_ros_tutorials ros_tutorial_msg_publisher # topicを提供
rostopic list # 流れてるtopic列挙
rostopic echo /ros_tutorial_msg # topicを購読
サービスのチュートリアル
-
要するに、サービス=「関数」
-
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 # クライアントからのリクエスト発行は、コマンドからもできる
便利なパッケージ
Tips
- Arduinoを介すとROSのメッセージを送ることが出来る
有名なパッケージ
- tf
- ar_track_alvar
- ARマーカ認識を行うar_track_alvarはすごく良く出来ている
- gmapping, hector-slam
- オドメトリが怪しかったり画像も地図も使えなかったりする場合