SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ROSとRaspberryPiで遠隔みまもりロボットを作ろう(「Tech-Sketch」出張所/番外編)

ラズパイで動くロボット「GoPiGo」をつかって遠隔見守りロボットを作ろう(2)ROS基礎編

ROSとRaspberryPiで遠隔みまもりロボットを作ろう 第2回(「Tech-Sketch」出張所/番外編)

  • X ポスト
  • このエントリーをはてなブックマークに追加

GoPiGoのパッケージを見てみる(2)

 次はサービスのリストを見てみます。以下のコマンドを実行します。

$ rosservice list

 例によって、/rosout系のサービスはroscoreのものです。

/encoder_disable
/encoder_enable
/led_off_left
/led_off_right
/led_on_left
/led_on_right
/ropigo_node/get_loggers
/ropigo_node/set_logger_level
/rosout/get_loggers
/rosout/set_logger_level

 サービスは同期型のメッセージングモデルで、1対1でリクエストとレスポンスのやり取りを行うものという説明をしました。実際にメッセージを送ってみます。以下のコマンドを実行します。

$ rosservice call /led_on_left
status: 1
$

 status: 1がレスポンスとして返ってくるのと合わせて、左側のLEDが点灯するはずです。点灯したままになるので、オフにしておきましょう。

$ rosservice call /led_off_left
status: 1
$

 このように状態を確実に変更する設定を行うような場合のために、サービスは用意されています。

 サービスに関する情報全般は以下のようにコマンドを実行するとで見ることができます。

$ rosservice info /led_on_left

 サービスを公開しているノードや呼び出しのためのURI、サービスのメッセージタイプ、引数を見ることができます。

Node: /ropigo_node
URI: rosrpc://ubuntu:39896
Type: ropigo/SimpleWrite
Args: 

 それぞれの値については、rosserviceの個別のオプションで参照することも可能です。rosservice -hでオプションを調べることができるので、必要な場合は適宜参考にしてください。

 さて、サービスまで大まかに見てきました。次は、実際の開発で使用する場面が多いPub/Subメッセージングを、新しいノードを追加して利用してみます。

新たなノードを追加してみる

 ここまではGoPiGoパッケージの中身をのぞいてきましたが、ここからは、GoPiGoパッケージにあらかじめ含まれていないノードを追加してみます。今回はすでに実装済みのノードを追加します。自分でコードを記述してノードを追加する方法については、連載の中で別途説明していきます。

 追加するノードはteleop_twist_keyboardというものです。これはキーボード操作によって、ロボットの動きを制御するノードです。

 前回、動作確認をした際はrostopicコマンドで/cmd_velトピックに動きのための変数値を設定したメッセージを送信しました。これでは毎回値をセットしてPublishするのでちょっと面倒です。そこでteleop_twist_keyboardを利用します。teleop_twist_keyboardは押したキーによって、/cmd_velトピックに送信するメッセージの変数値を変えて動きを制御できるようにしています。以下を実行してインストールします。

$ sudo apt-get update
$ sudo apt-get install ros-indigo-teleop-twist-keyboard

 無事インストールできたら、実際に立ち上げて使ってみましょう。roscoreとGoPiGoパッケージを、立ち上げたターミナルとは別の新しいターミナルで以下のように実行します。rosrunは特定のパッケージ内に含まれるノードを指定して実行することができるコマンドです。

$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

 正しく実行されるとキーによる操作方法が表示されます。

Reading from the keyboard  and Publishing to Twist!
---------------------------
Moving around:
u    i    o
j    k    l
m    ,    .

For Holonomic mode (strafing), hold down the shift key:
---------------------------
U    I    O
J    K    L
M    <    >

t : up (+z)
b : down (-z)

anything else : stop

q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%

CTRL-C to quit

 表示されたキー操作の仕方にしたがってキーを押してみましょう。無事、ロボットが動けばOKです。

 teleopの立ち上がっているターミナルで、試しにoを押してみます。その場で右回転するはずです。他のいずれかのボタンを押せば停止します。

 キーを押した際、トピックへのメッセージ送信状況を確認してみたい場合は、先ほど/batteryトピックのメッセージを表示してみたときと同様、rostopic echoで/cmd_velを指定することで見ることができます。

 最後にteleopのroslaunchファイルを作って、roslaunchで実行してみます。以下のコマンドを実行して、GoPiGoのパッケージのディレクトリに移動し、さらにlaunchディレクトリ下に移動しましょう。

$ roscd ropigo/launch/

 roscdコマンドは、ROS配下でパスが通っているパッケージのディレクトリに移動できます。launchディレクトリ下に移動したら、内容を示す分かりやすい名前でファイルを作成します。今回はteleop_key.launchとしました。vimなどで以下の通り記述します。

<launch>
  <node pkg="teleop_twist_keyboard" type="teleop_twist_keyboard.py" name="teleop" output="screen"/>
</launc>

 launchファイルはXMLによる記述になっています。nodeタグの属性では、それぞれパッケージ名(pkg)、ノードの実行ファイル(type)、ノード名(name)を指定し、さらに今回は利用キーが出力されるので、標準出力に表示できるようにする指定も行っています(output)。launchファイルのタグ構成など、さらに詳しく知りたい場合は公式ページを参照してください。

 作成したファイルをroslaunchコマンドで指定して実行した結果が、rosrunでの実行時と同様になれば、正しくlaunchファイルが作成できています。

 既存のropigo.launchに記述を追加することでも実行可能ですし、同時に立ち上げるノードが1つしかない場合、それほど便利になるわけではありません。ただ、今回は練習の意味も兼ねて個別に作成してみました。

 さて、前回の内容を引き継ぎながらROSの中身について基本的な部分を見てきました。さらなる詳細については、連載を進める中で必要に応じて解説していきます。次回からはいよいよ「見守り」要素の部分の実装に入っていきます。お楽しみに!

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ROSとRaspberryPiで遠隔みまもりロボットを作ろう(「Tech-Sketch」出張所/番外編)連載記事一覧

もっと読む

この記事の著者

佐伯 純(TIS株式会社)(サエキ ジュン)

TIS株式会社 AIサービス事業部AIサービス企画開発部所属入社後、アジャイルで商品先物取引のシステム開発という当時としてはかなり尖ったチームに放り込まれ、以来SIerとは思えない辺境を歩き続けている。現在の部門に異動してからはRubyOnRailsを利用した社内向けサービスの開発に参加後、Andr...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9965 2017/02/20 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング