0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ROS2 勉強②(turtlesim カメを動かす)

0
Posted at

今のままではカメが真ん中に表示されているだけです。
「キーボードの入力をカメに伝えるノード」を別に立ち上げて、カメを動かしてみましょう。

まず別の新しいターミナルを開きます(元のターミナルは閉じないでください)。

矩形移動ノードの起動

まずは、カメを矩形で動かしてみます

ros2 run turtlesim draw_square

image.png

上記のコマンドを動かしていると、亀は矩形を描いてくれます。
ターミナルには以下のメッセージが表示されています。

[INFO] [1772575562.555887783] [draw_square]: New goal [7.544445 5.544445, 0.000000]
[INFO] [1772575564.476535022] [draw_square]: Reached goal
[INFO] [1772575564.476578480] [draw_square]: New goal [7.448444 5.544445, 1.570796]
[INFO] [1772575568.412361665] [draw_square]: Reached goal
[INFO] [1772575568.412416248] [draw_square]: New goal [7.466837 7.544360, 1.561600]
[INFO] [1772575570.347997782] [draw_square]: Reached goal
[INFO] [1772575570.348126074] [draw_square]: New goal [7.465954 7.448364, 3.132396]
[INFO] [1772575574.283041039] [draw_square]: Reached goal
[INFO] [1772575574.283107831] [draw_square]: New goal [5.466292 7.485147, 3.123200]
[INFO] [1772575576.252312492] [draw_square]: Reached goal
[INFO] [1772575576.252372492] [draw_square]: New goal [5.546279 7.483676, -1.589188]
[INFO] [1772575580.188284615] [draw_square]: Reached goal
[INFO] [1772575580.188381407] [draw_square]: New goal [5.491108 5.484437, -1.598385]
[INFO] [1772575582.124366554] [draw_square]: Reached goal
[INFO] [1772575582.124424929] [draw_square]: New goal [5.493756 5.580400, -0.027589]
[INFO] [1772575586.060208665] [draw_square]: Reached goal
[INFO] [1772575586.060250790] [draw_square]: New goal [7.492404 5.506846, -0.036785]
[INFO] [1772575587.996450743] [draw_square]: Reached goal
[INFO] [1772575587.996497910] [draw_square]: New goal [7.396468 5.510377, 1.534011]
[INFO] [1772575591.933130384] [draw_square]: Reached goal
[INFO] [1772575591.933257426] [draw_square]: New goal [7.488399 7.508264, 1.524815]
[INFO] [1772575593.868163639] [draw_square]: Reached goal
[INFO] [1772575593.868213306] [draw_square]: New goal [7.483986 7.412365, 3.095611]
[INFO] [1772575597.803921139] [draw_square]: Reached goal
[INFO] [1772575597.803972847] [draw_square]: New goal [5.487030 7.522665, 3.086415]
[INFO] [1772575599.739053323] [draw_square]: Reached goal
[INFO] [1772575599.739109739] [draw_square]: New goal [5.582884 7.517370, -1.625973]

キーボード操作ノードの起動

操作用のノードはこれです:

ros2 run turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
Use g|b|v|c|d|e|r|t keys to rotate to absolute orientations. 'f' to cancel a rotation.
'q' to quit.

カメを動かす!

  1. turtle_teleop_key を実行した方のターミナルをクリックして、アクティブな状態にします
  2. キーボードの 矢印キー(↑ ↓ ← →) を押します
  3. 画面上のカメが線を引きながら動き始めます!
  • 上下キーで前後に進む
  • 左右キーで方向を変える

image.png


ROS 2の仕組み

  • /turtlesim ノード
    • カメの描画担当
  • /teleop_turtle ノード
    • キーボードの入力を読み取る担当
  • Topic(トピック)
    • 2つのノードの間を流れるデータ
    • 今回は、/turtle1/cmd_vel という名前のトピックを通して、「右にこれくらい回れ」「前にこれくらい進め」という命令が送られています

トピックの確認

カメを動かしている間に、さらにもう一つターミナルを開いて、以下のコマンドを打ってみてください。

ros2 topic list

いま、システムの中でどんな「道路(トピック)」が使われているかの一覧が見られます。

/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

トピックの中身をリアルタイムで表示する

カメが動いている裏側で、どんな命令(数値)が飛び交っているのか覗いてみましょう。

新しいターミナルを開き、以下のコマンドを入力してください。

ros2 topic echo /turtle1/cmd_vel

このコマンドを打つと、ターミナルが待機状態になります。その状態で、**カメを操作していたターミナル(turtle_teleop_key を動かしている方)**をクリックして、矢印キーでカメを動かしてみてください。

エコー(echo)しているターミナルに、以下のような数字が表示されます。

linear:
  x: 0.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: -2.0
---

これは何を意味している?

  • linear x: 前進・後退のスピードです。
  • angular z: 回転のスピード(ラジアン/秒)です。
  • キーを押した瞬間に、操作ノードがこの「数値データ」をトピックに投げ、カメのノードがそれを受け取って画面上の位置を計算している、というわけです。

データの「型」を確認する

ROS 2では、やり取りするデータの形式(メッセージ型)が決まっています。以下のコマンドを打ってみてください。

ros2 topic info /turtle1/cmd_vel

すると、Type: geometry_msgs/msg/Twist と表示されます。これは「速度を扱うための標準的なパッケージの、Twistという型を使っているよ」という意味です。

Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscription count: 1

【おまけ】コマンドでカメを動かす

キーボードではなく、コマンドラインから直接「動け!」と命令を送ることもできます。

ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 5.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

これを実行すると、カメがシュパッと円を描いて動きます。

  • --once: 1回だけ送る。
  • "{...}": 送りたい数値データ(JSON形式)

image.png

publisher: beginning loop
publishing #1: geometry_msgs.msg.Twist(linear=geometry_msgs.msg.Vector3(x=5.0, y=0.0, z=0.0), angular=geometry_msgs.msg.Vector3(x=0.0, y=0.0, z=1.8))
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?