ROS의 공부 제7탄: 기초적인 액션의 이용
# 프로그래밍 ROS <액션 사용>
소개
하나의 참고서에 따라 ROS(Robot Operating System)를 어려움 없이 다루는 것이 목적이다. 제 7 탄으로서 기초적인 액션의 이용을 다룬다.
환경
가상 환경
소프트
VMware Workstation 15
실장 RAM
2GB
OS
우분투 64비트
ISO 파일
ubuntu-mate-20.04.1-desktop-amd64.iso
컴퓨터
장치
MSI
프로세서
Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50GHz
실장 RAM
8.00GB(7.89GB 사용 가능)
OS
Windows (Windows 10 Home, 버전: 1909)
ROS
Distribution
noetic
프로그래밍 언어
파이썬 3.8.5
구현
이전 (htps : // m / 유야 시미즈 / ms / fb5cb4b40 145426 5)에서 구현 한 액션 서버를 사용하기 위해 클라이언트를 구현하고 기본 액션 사용에 대한 학습을 진행합니다. 아래에 소스 코드가 나와 있습니다. 소스 코드 내에서 프로그램 설명은 자세히 설명되어 있습니다.
소스 코드
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桁で結果の表示
이것은 이전 (htps : // m / 유야 시미즈 / ms / fb5cb4b40 145426 5)의 서버를 실행할 때 서버를 사용한다는 것입니다. 여기서는 5.0 초의 타이머를 요구하고 있으며, 5.0 초 후에 서버로부터의 결과를 얻을 수 있다고 한다. 그 때의 모습은 다음과 같습니다.
위 그림에서 상단 터미널 (단말)은 액션 서버를 실행하고 하단은 클라이언트 실행입니다. 결과는 Time elapsed: 5.0
입니다. 소수점 이하 1 자리만 표시하고 있기 때문에 5.0 정확하게 보이지만, 아래 그림과 같이 사실은 약 5 초이다.
감상
이번에는 클라이언트가 액션 사용을 구현했습니다. 이것을 보면 다시 주제와 비슷한 것을 이해할 수 있습니다. 또한, 액션 파일 등은 클래스의 인스턴스 생성에 의해 액세스하는 것이 익숙해져 왔다. 덕분에 ROS에서의 프로그램도 구체적으로 무엇을 하려고 하고 있는지 보기 쉬워진 것 같다. 다음 번에는 조금 더 복잡한 액션 서버 구현을 배웁니다. ROS를 활용하는 데 필요한 부분이며 재미입니다.
참고문헌
프로그래밍 ROS Python으로 로봇 애플리케이션 개발
Morgan Quigley, Brian Gerkey, William D.Smart
河田 卓志
마츠다 아키히로, 후쿠지 마사키, 유타니 테츠오
오일러리 재팬 발행
Reference
이 문제에 관하여(ROS의 공부 제7탄: 기초적인 액션의 이용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yuya-Shimizu/items/eef955f93f76f5c2d064
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#! /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桁で結果の表示
Reference
이 문제에 관하여(ROS의 공부 제7탄: 기초적인 액션의 이용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yuya-Shimizu/items/eef955f93f76f5c2d064텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)