ROSの勉強 第7弾:基礎的なアクションの利用


#プログラミング ROS< アクションの利用 >

はじめに

1つの参考書に沿って,ROS(Robot Operating System)を難なく扱えるようになることが目的である.その第7弾として,基礎的なアクションの利用を扱う.

環境

仮想環境
ソフト VMware Workstation 15
実装RAM 2 GB
OS Ubuntu 64 ビット
isoファイル ubuntu-mate-20.04.1-desktop-amd64.iso
コンピュータ
デバイス MSI
プロセッサ Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50GHz
実装RAM 8.00 GB (7.89 GB 使用可能)
OS Windows (Windows 10 Home, バージョン:1909)
ROS
Distribution noetic
プログラミング言語 Python 3.8.5

実装

前回(https://qiita.com/Yuya-Shimizu/items/fb5cb4bb40e145426e5a) に実装したアクションサーバーを利用するため,クライアントの実装を行い,基本的なアクションの利用についての学習を進める.以下にソースコードを示す.なお,ソースコード内で,プログラムの説明は詳細に記述されている.

ソースコード
action_simple_client.py
#! /usr/bin/env python3

import rospy

import actionlib #SimpleActionClientを使うためのパッケージ

from action_lesson.msg import TimerAction, TimerGoal, TimerResult   #アクションにアクセスするためのクラス

rospy.init_node('timer_action_client') #ノードの初期化

#actionlibパッケージにあるSimpleActionClientクラスを使う(アクション利用の最も簡単な方法)
client = actionlib.SimpleActionClient('timer', TimerAction) #サーバー名,型ともに利用するサーバーっと一致させる必要がある

client.wait_for_server()    #サーバーの応答を待つ

goal = TimerGoal()  #goalという変数にTimerGoalのインスタンスを生成(TimerGoalの値にアクセス可能となる)
goal.time_to_wait = rospy.Duration.from_sec(5.0)    #5.0秒をタイマーにセットrospy.Duration.from_secでrosでの期間単位Durationに変換

client.send_goal(goal)  #clientとしてgoalをサーバーに送る
client.wait_for_result()    #サーバーからの結果を待つ

result = client.get_result().time_elapsed.to_sec()  #取得した結果の経過時間を秒単位に変換してresultに格納
print(f"Time elapsed: {result:.1f}")    #小数点以下1桁で結果の表示

これは,前回(https://qiita.com/Yuya-Shimizu/items/fb5cb4bb40e145426e5a) のサーバーを実行しているときにそのサーバーを利用するというものである.ここでは,5.0秒のタイマーを要求しており,5.0秒後にサーバーからの結果が得られることとしている.そのときの様子を次に示す.

上図において,上側のターミナル(端末)はアクションサーバーの実行で,下側がクライアントの実行である.結果がTime elapsed: 5.0となっている.小数点以下1桁のみを表示させているため5.0ちょうどに見えるが,下図に示すとおり本当は約5秒である.

感想

今回はクライアントにより,アクションの利用を実装した.これを見ると改めて,トピックと似ていることが理解できる.また,アクションファイルなどはクラスのインスタンス生成により,アクセスするというのは慣れてきた.おかげで,ROSでのプログラムも具体的に何をしようとしているのか見やすくなった気がする.次回は,もう少し複雑なアクションサーバーの実装を学ぶ.ROSを活用するためには必要な部分であり,また楽しみである.

参考文献

プログラミングROS Pythonによるロボットアプリケーション開発
        Morgan Quigley, Brian Gerkey, William D.Smart 著
                       河田 卓志 監訳
            松田 晃一,福地 正樹,由谷 哲夫 訳
                  オイラリー・ジャパン 発行