ROS의 공부 제13탄:Teleop-bot ~ key driver ~
6128 단어 keydriver파이썬teleop-botROS
#프로그래밍 ROS< key driver>
소개
하나의 참고서에 따라 ROS(Robot Operating System)를 어려움 없이 다루는 것이 목적이다. 그 제 13 탄으로서 키 드라이버를 다룬다.
환경
가상 환경
소프트
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
로봇 조작
원격 조작이나 자율 시스템 등이 있지만, 원격 조작이 간단하기 때문에 원격 조작의 학습으로 시작한다. 여기서 다루는 원격 조작은 키 입력을 사용하는 Teleop-bot입니다.
Teleop-bot 속도 명령
로봇을 조작 할 때 속도 명령을 로봇에 전달해야합니다. 이를 위해 두 가지 프로그램으로 구성됩니다.
<프로그램①>
키 입력을 받고 메시지로 전달
<프로그램②>
①의 메시지를 받고 응답으로 Twist
★ ROS의 팁
작은 ROS 노드 모임 만들기
소프트웨어 테스트 작성을 간단하게 해줍니다.
⇒⇒하나의 노드는 가능한 한 작게 한다
구현
이번에는 프로그램 ①, 즉 키 드라이버를 구현합니다. 다음은 소스 코드와 그 때의 실행 방식을 보여줍니다. 여기서 key driver는 key 입력의 Publisher (배달자)이다.
소스 코드
key_publisher.py#! /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
河田 卓志
마츠다 아키히로, 후쿠지 마사키, 유타니 테츠오
오일러리 재팬 발행
Reference
이 문제에 관하여(ROS의 공부 제13탄:Teleop-bot ~ key driver ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Yuya-Shimizu/items/98e9b9456b7e1945c941
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#! /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) #コンソールを標準モードに戻してからプログラムを抜ける必要がある
Reference
이 문제에 관하여(ROS의 공부 제13탄:Teleop-bot ~ key driver ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Yuya-Shimizu/items/98e9b9456b7e1945c941텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)