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
                   河田 卓志
         마츠다 아키히로, 후쿠지 마사키, 유타니 테츠오
               오일러리 재팬 발행

좋은 웹페이지 즐겨찾기