1 분 소요

Hits

turtlebot3 원격 키보드 제어 코드 만들기

cd ~/robot_ws/src 에서

ros2 pkg create tb3_pkg --build-type ament_python --dependencies rclpy

로보티즈 터틀봇 관련 에서 사용하려는 터틀봇의 최대 이동 속도, 최대 회전 속도 등을 알아냄

MAX_LIN_SPD = 0.22 # 최대 이동 속도
MIN_LIN_SPD = -0.22 # 최소 이동 속도
LIN_SPD_STP = 0.01 # 이동 속도 스텝
MAX_ANG_SPD = 2.84 # 최대 회전 속도
ANG_SPD_STP = 0.1 # 회전 속도 스텝
MIN_ANG_SPD = -2.84 # 최소 회전 속도

cd tb3_pkg/tb3_pkg 에 getchar.py 를 복붙함

(내 블로그 ROS2 turtle keyboard 만들기 참고)

cd tb3_pkg/tb3_pkg 에서 remote_tb3.py

import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
from .getchar import Getchar


MAX_LIN_SPD = 0.22 # 최대 이동 속도
MIN_LIN_SPD = -0.22 # 최소 이동 속도
LIN_SPD_STP = 0.01 # 이동 속도 스텝
MAX_ANG_SPD = 2.84 # 최대 회전 속도
ANG_SPD_STP = 0.1 # 회전 속도 스텝
MIN_ANG_SPD = -2.84 # 최소 회전 속도


msg = '''
Control Your TurtleBot3!
---------------------------
Moving around:
        w
   a    s    d
        x

w/x : increase/decrease linear velocity (Burger : ~ 0.22, Waffle and Waffle Pi : ~ 0.26)
a/d : increase/decrease angular velocity (Burger : ~ 2.84, Waffle and Waffle Pi : ~ 1.82)

space key, s : force stop

CTRL-C or Q to quit
'''

class Remote_TB3(Node):

    def __init__(self):
        super().__init__('remote_tb3')
        
def main(args=None):
    rclpy.init(args=args)

    node = Remote_TB3()
    kb = Getchar()
    tw = Twist()

    pub = node.create_publisher(Twist, '/cmd_vel', 10)
    
    try:
        print(msg)
        while rclpy.ok():

            key = kb.getch()

            if key == 'w':
                if tw.linear.x + LIN_SPD_STP <= MAX_LIN_SPD:
                    tw.linear.x = tw.linear.x + LIN_SPD_STP
                else:
                    tw.linear.x = MAX_LIN_SPD
            elif key == 'x':
                if tw.linear.x - LIN_SPD_STP >= MIN_LIN_SPD:
                    tw.linear.x = tw.linear.x - LIN_SPD_STP
                else:
                    tw.linear.x = MIN_LIN_SPD
            elif key == 'a':
                if tw.angular.z + ANG_SPD_STP <= MAX_ANG_SPD:
                    tw.angular.z = tw.angular.z + ANG_SPD_STP
                else:
                    tw.angular.z = MAX_ANG_SPD
            elif key == 'd':
                if tw.angular.z - ANG_SPD_STP >= MIN_ANG_SPD:
                    tw.angular.z = tw.angular.z - ANG_SPD_STP
                else:
                    tw.angular.z = MIN_ANG_SPD
            elif key == 's' or key == ' ':
                tw.linear.x = tw.angular.z = 0.0
            elif key == 'Q':
                print("Bye~")
                break
            else:
                pass

            pub.publish(tw)

            print("currently:	linear velocity %s	 angular velocity %s" % (tw.linear.x, tw.angular.z))
            
    except KeyboardInterrupt:
        node.destroy_node()
        rclpy.shutdown()


if __name__ == '__main__':
    main()

cd .. 해서 setup.py ‘remote_tb3 = tb3_pkg.remote_tb3:main’,

entry_points={
       'console_scripts': [
           'remote_tb3 = tb3_pkg.remote_tb3:main',
       ],
   },

turtlebot3 원격 키보드 제어 코드 실행

ros2 run tb3_pkg remote_tb3

태그:

카테고리:

업데이트:

Comments