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) に実装したアクションサーバーを利用するため,クライアントの実装を行い,基本的なアクションの利用についての学習を進める.以下にソースコードを示す.なお,ソースコード内で,プログラムの説明は詳細に記述されている.
ソースコード
#! /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 著
河田 卓志 監訳
松田 晃一,福地 正樹,由谷 哲夫 訳
オイラリー・ジャパン 発行
Author And Source
この問題について(ROSの勉強 第7弾:基礎的なアクションの利用), 我々は、より多くの情報をここで見つけました https://qiita.com/Yuya-Shimizu/items/eef955f93f76f5c2d064著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .