ROS의 공부 제13탄:Teleop-bot ~ key driver ~

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

좋은 웹페이지 즐겨찾기