ROS 학습 42탄: ps4 컨트롤러로 거북이 조작

#프로그래밍 ROS<ps4 컨트롤러로 거북이 조작>


개시하다


ROS(Robot Operating System)를 더 파악하려는 목적이다.

컨디션


컴퓨터.
디바이스
raspberry pi 4 Model B
메모리
3.7 GiB
Graphics
V3D 4.2
OS
Ubuntu
Ubuntu
발포
20.4.2 LTE 64비트
내부 핵
Linux 5.4.0-1035-raspi aarch64
MATE
1.24.0
ROS
Distribution
noetic
컨트롤러
제조사
SONY
시리즈
DUALSHOCK4 Wireless Controller

게임 패드


조종 패드와 조종봉은 로봇을 원격으로 조작하는데 여기서 PS4의 컨트롤러를 사용해 모의 거북이를 이동시킨다.

환경 구조


필요한 패키지 설치


ds4drv

sudo pip install ds4drv

joy

sudo apt install ros-noetic-joy
준비됐습니다.

pyPS4Controller (option)

sudo pip install pyPS4Controller
참고 자료

연결 단계


① PC의 블루투스 기능이 켜져 있는지 확인


②ds4drv 시작

sudo ds4drv

③ PS4 컨트롤러 연결


PS 키와 SHARE 키를 모두 누르면 PS4 컨트롤러의 램프가 흰색으로 깜박입니다.
이로써 PS4 디렉터는 연결되었으나 입력 정보를 얻지 못했습니다.

PS4에 대한 입력 정보를 배포하려면


① 촛불로 주인 시동 걸기

roscore

② joy 노드 시작

rosrun joy joy_node
이로써/joy에 화제를 발표하겠습니다.rostopic echo /joy를 통해 컨트롤러의 입력을 확인할 수 있습니다.

/joy 발표 테마와 ps4 단추의 대응




또한, axes와 관련해서는 13 이후 식별 버튼이 있어 6~12에 대해서는 잘 모릅니다. 따라서 다 설명할 수는 없습니다. 하지만 필요한 부분을 망라했다고 생각합니다.나는 터치스크린에 대해 알지 못한다. 터치패드가 대응할 수 있는 방법이 있을 텐데 찾지 못했다.

이루어지다


여기, ps4 컨트롤러를 사용하여 터틀sim을 이동하기 때문에 필요한 실행 파일은 다음과 같습니다.

개요

  • ds4drv
  • joy_node
  • turtlesim
  • joy_to_twist
  • turtlesim은/turtlesim1/cmdvel 화제를 구독하여 주제의 발표 정보에 따라 행동합니다데드가/joy라는 화제를 발표했습니다. 사실 입력 컨트롤러 즉/joy의 메시지 보내기/turtlesim1/cmd*이 중개를 맡을 필요한joyto_기존 프로그램이 아닌 단순한'구독/joy 및 cmd vel 보내기'자체 제작 프로그램입니다. 컨트롤러를 자주 사용할 때 제작된 것입니다.to_트위터를 배웠어요.
    이것을 참고로 해 나가다.

    joy_to_twist


    이번에는 왼쪽 조종대만 사용해서 거북이를 움직인다. 아주 간단한joyto_트위터 프로그램이 됐어.
    joy_to_twist.py
    #! /usr/bin/env python3
    
    import rospy
    from sensor_msgs.msg import Joy
    from geometry_msgs.msg import Twist
    
    def control(msg, twist_pub):#joy to twist
        L_horizontal = msg.axes[0]  #左ジョイスティック(左右)
        L_vertical = msg.axes[1]    #左ジョイスティック(上下)
        circle = msg.buttons[13]
        velocity = [L_horizontal*(1+circle), L_vertical*(1+circle)]
    
        t = Twist() #Twistのインスタンスを生成
    
        t.angular.z, t.linear.x = velocity #twistにjoyから取得したデータを当てはめる
    
        twist_pub.publish(t)    #twistを配信
    
    if __name__ == '__main__':
        #ノードの初期化
        rospy.init_node('joy_to_twist')
        #配信準備
        twist_pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=1)
        #購読
        rospy.Subscriber('/joy', Joy, control, twist_pub)
    
        rospy.spin()
    

    launch 파일


    실행할 프로그램이 준비되어 있기 때문에, launch 파일에 미리 집합합니다. 단, ds4drv는 포함되지 않습니다.
    joy_lesson.launch
    <launch>
        <include file="$(find joy)/launch/ps4joy.launch"/>
        <node name="turtle" pkg="turtlesim" type="turtlesim_node" output="screen"/>
        <node name="joy_to_twist" pkg="joy_lesson" type="joy_to_twist.py" output="screen"/>
    </launch>
    
    실행하다
    roslaunch joy_lesson joy_lesson.launch
    
    실제 연결 여부를 확인하다.
    rostopic info /turtlesim1/cmd_vel
    

    확실히vel 입력 joy joyto_트위터로 확인 가능합니다.

    실행


    ps4 컨트롤러 연결
    sudo ds4drv
    
    USB 포트 액세스 허용
    sudo chmod 666 /dev/ttyUSB0
    
    실행
    roslaunch joy_lesson joy_lesson.launch
    
    이 모든 실행 상황을 동적 이미지로 표시해라.


    에서 보듯이 joy_to_twist.py 기본적으로 왼쪽 조종대로 조작하고 0을 누르면 거북이는 2배의 속도로 전진한다

    감상


    마침내 ROS에서 ps4 컨트롤러를 사용하는 방법을 이해했다. 과거 한 번 도전했지만 ROS 자체가 이해가 되지 않아 실패했다. 하지만 이번에는 완전히 이해했다. 이번에는 아날로그 거북이를 움직일 뿐, 최근에는실제 로봇을 돌릴 예정입니다.

    참고 문헌


    실용 로봇 개발을 위한 ROS 프로그래밍

    서전건, 삼전현, 강전호지, 원상요,나가사키 공준, 전향권, 담내양평, 대천일도,

    재등공, 전중량도, 유전유태, 석전우태랑 공동 저

    삼북출판주식회사 발행


    좋은 웹페이지 즐겨찾기