ROSの勉強 第13弾:Teleop-bot ~ key driver ~
#プログラミング ROS< key driver>
はじめに
1つの参考書に沿って,ROS(Robot Operating System)を難なく扱えるようになることが目的である.その第13弾として,key driverを扱う.
環境
仮想環境
ソフト | 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 |
ロボットの操作
遠隔操作や自律システムなどがあるが,遠隔操作のほうが簡単であるため遠隔操作の学習から始める.ここで扱う遠隔操作はキー入力を用いるTeleop-botというものである.
Teleop-botの速度コマンド
ロボットを操作するにあたって,速度コマンドをロボットに伝えなければならない.そのために2つのプログラムにより構成する.
<プログラム①>
キー入力を受け取り,それをメッセージとして配信する
<プログラム②>
①のメッセージを受け取り,レスポンスとしてTwist
メッセージを出す
★ROSでのヒント
小さなROSノードの集まりを作る
ソフトウェアテストの作成を簡単にしてくれる
⇒1つ1つのノードはなるべく小さくする
実装
今回はプログラム①,すなわちkey driverの実装を行う.以下にソースコードとそのときの実行の様子を示す.ここでいうkey driverとは,key入力のPublisher(配信者)である.
ソースコード
#! /usr/bin/env python3
import sys, select, tty, termios #ターミナルでの作業に必要なPythonのライブラリ
import rospy
from std_msgs.msg import String #文字列を扱うメッセージ
if __name__ == '__main__':
key_pub = rospy.Publisher('keys', String, queue_size = 1) #トピック配信の準備
rospy.init_node("keyboard_driver") #ノードの初期化
rate = rospy.Rate(100) #100Hz(0.01s)
old_attr = termios.tcgetattr(sys.stdin) #現在のコンソール設定を保存
tty.setcbreak(sys.stdin.fileno()) #この2行により,ユーザがキーを押したときにすぐに標準入力として受け取れるようになった
print("Publishing keystrokes. Press Ctrl-C to exit ...")
while not rospy.is_shutdown():
"""selectはすぐにリターンする.また0秒でタイムアウトするように設定している"""
if select.select([sys.stdin], [], [], 0)[0] == [sys.stdin]:
key_pub.publish(sys.stdin.read(1)) #読み込んだものをStringとして配信
rate.sleep()
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_attr) #コンソールを標準モードに戻してからプログラムを抜ける必要がある
実行様子
感想
今回はTeleop-botの導入として,キー入力を即座に配信してくれるものを作成した.これは基本的なもので1文字ずつしか取り出せず,矢印キーのような特殊文字については別々に配信してしまう.もしそのような特殊文字を使うときには少し工夫が必要になってくる.なお,Telop-botでは特殊文字のキーは用いないため今回のもので十分であると思われる.
参考文献
プログラミングROS Pythonによるロボットアプリケーション開発
Morgan Quigley, Brian Gerkey, William D.Smart 著
河田 卓志 監訳
松田 晃一,福地 正樹,由谷 哲夫 訳
オイラリー・ジャパン 発行
Author And Source
この問題について(ROSの勉強 第13弾:Teleop-bot ~ key driver ~), 我々は、より多くの情報をここで見つけました https://qiita.com/Yuya-Shimizu/items/98e9b9456b7e1945c941著者帰属:元の著者の情報は、元の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 .