LoginSignup
4
4

More than 5 years have passed since last update.

ROS_11:基本 ROSのサンプルを使ってみる。(turtleSim)

Posted at

参考

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_velTopicにどんなデータが流れているかをみるため、新しい端末で $ 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を実行

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4