参考
http://wiki.ros.org/ja/ROS/Tutorials/UnderstandingNodes
Tutrialsを別の角度から実行してみます。
コマンド
インストールしているパッケージを調べる
$ rospack list
grep とかと併用すると目的のパッケージが探しやすい
オプションは、 rospack help
で表示される。
インストールしているserviceを調べる
$ rossrv list
ノードの実行
$ rosrun パッケージ名 ノード名
ノード名は、プログラム名であって実行時の名前(実行名)でない。。デフォルトの実行名のデフォルトは、作成時に指定?されている。 実行名を変えるにはリマップという技があるらしい。
例:$ rosrun turtlesim turtlesim_node __name:=my_turtle
同じ実行名では、ノードを起動させることができないので、同時2つ動かすには、異なる実行名にする必要がある。
実行しているノードの確認
$ rosnode list
他にもrosnode machine マシン名
でマシンで動いているノード一覧を表示させることも可能。rosnode macheine
でマシン名が確認できる。hostname
と一緒?
ノードの情報
$ rosnode info ノード名
例:$ rosnode info /rosout
とすると、
Publication(出力)が/rosout_agg
Subscriptions(入力)が/rosout
Serviceが/rosout/set_logger_level
と/rosout/get_loggers
となっていることが判る。
ノードの死活の確認
$rosnode ping ノード名
でノードからの応答を見て、きちんと動いているか確認できる。
例:$rosnode ping /rosout
実行しているTopicの確認
$ rostopic list
Topicは非同期の1方向通信
Publiserは、Topic名をマスターに登録する。
subscriberはTopic名をマスターに登録すると、Publisher情報を得ることができ通信の環境が整う。あくまでもNode間通信らしい。
実行しているサービスの確認
$rosservice list
でサービス一覧が表示される。
実行中のNodeのGUI表示
rqt_graphパッケージのrqt_graphノードを実行するとGUIで表示される。
$ rosrun rqt_graph rqt_graph
実行
マスターの起動
端末を開いて
$ roscore
roscoreは、ROSマスター+rosoutノード+パラメータサーバを起動するコマンドらしい。まずこれを動かす。
turtlesimの起動
新しい端末を開いてturtlesim パッケージ内の turtlesim_node を起動。(カメの絵は毎回違うの?)
$ rosrun turtlesim turtlesim_node
新しい端末を開いて、$ rosnode list
でノード名確認すると、/turtlesim
というノード名が増えている
turtlesim_nodeはあくまでノード名で実行時の名前でない。
turtlesimのnode情報を$ rosnode info /turtlesim
で見ると
publiserは、/turtle1/color_sensor
,/rosout
,/turtle1/pose
Subscriptionは、/turtle1/cmd_vel
Serviceは、/turtle1/teleport_absolute
,/turtlesim/get_loggers
,/turtlesim/set_logger_level
,/reset
,/spawn
,/clear
,/turtle1/set_pen
,/turtle1/teleport_relative
,/kill
がある事がわかる。
turtle_teleop_keyの起動
新しい端末を開いてturtlesimパッケージ内のturtle_teleop_keyノードを起動する。
$ rosrun turtlesim turtle_teleop_key
これは、/teleop_turtleという実行名で動く
矢印キーでカメが動くのが判る。(端末が違うと動かない)
調べる(topic)
rqt_graphの起動
rqt_graphパッケージのrqt_graphノードを実行する。
$ rosrun rqt_graph rqt_graph
/turtle1/cmd_vel
というTOPIC名がある。
/turtle1/cmd_velを調べる。
/turtle1/cmd_vel
Topicにどんなデータが流れているかをみるため、新しい端末で $ rostopic echo /turtle1/cmd_vel
を実行。
キーを押すごとにLinerとAngularの成分が流れていることが判る。
どんなデータ形式か調べるのに
$ rostopic type /turtle1/cmd_vel
を実行すると
geometry_msgs/Twist
との応答あり
それじゃまだわからないので、$ rosmsg show geometry_msgs/Twist
を実行
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
これを同時にするには、$ rostopic type /turtle1/cmd_vel | rosmsg show
とするとよいらしい。
/turtle1/cmd_vel
にデータを送ってみる
$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
0.0 という表現を0にしても問題ないみたいです。
オプション-1
は 1回送ったのちに終了という意味みたいです。
オプション--
は 負の値の-がそのままでは使用できないので、それ以後オプションががないので -は負を表していることに明言する意味みたいです。
/turtle1/poseを調べる。
Poseって姿勢の意味らしい。。。
$ rostopic type /turtle1/pose
を実行
turtlesim/Pose
の応答、前回と同様 $ rosmsg show turtlesim/Pose
を実行
float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity
と応答
Topicの更新頻度は$ rostoic hz
で見れる。
調べる(Service)
$ rosservice list
で実行中のノードにどんなサービスがあるか調べる
/clearを調べる
どんなものか調べるために$ roservice type clear
を実行すると
std_srvs/Empty
との応答、これは引数が要らないことらしい。
rosservice call /clear
を実行するとturtleSimの画面がクリアされる。
/spawnを調べる。
spawnの意味は産む?。
$ rosservice type spawn| rossrv show
を実行
float32 x
float32 y
float32 theta
string name
- - -
string name
って感じで応答
$ rosservice call spawn 2 2 0.2 ""
を実行すると新しいカメが生成される。
turtle2という応答があるからturtle2という名前が付いた。。
$ rostopic list
を実行すると
/turtle2/cmd_vel
/turtle2/color_sensor
/turtle2/pose
が増えた。もちろんturtle_teleop_keyはそのままだと、新しいカメを動かすことができない。そこで、リマップをして立ち上げると動かすことが可能になる。$ rosrun turtlesim turtle_teleop_key /turtle1/cmd_vel:=/turtle2/cmd_vel
を実行