659.99 joint_state_publisher_gui를 이용한 관절 수동 제어

1. 개요

joint_state_publisher_guijoint_state_publisher에 GUI(Graphical User Interface) 슬라이더를 추가한 노드이다. 각 가동 관절에 대하여 슬라이더를 제공하여 사용자가 관절 위치를 수동으로 조절할 수 있게 한다. 이 도구는 URDF 모델의 관절 범위 검증, 로봇 자세 시각화, 티칭(teaching) 작업 등에 활용된다.

2. 기능

2.1 GUI 인터페이스

joint_state_publisher_gui는 Qt 기반의 GUI 윈도우를 생성하며, URDF에 정의된 각 가동 관절에 대하여 다음을 표시한다.

GUI 요소설명
관절 이름URDF에서 정의된 관절 이름
슬라이더관절 위치를 연속적으로 조절하는 수평 슬라이더
현재 값 표시관절의 현재 위치 값 (rad 또는 m)
최솟값/최댓값URDF의 <limit> 요소에서 정의된 범위

2.2 관절별 슬라이더 범위

관절 유형슬라이더 범위
revolutelower ~ upper (URDF <limit> 정의)
continuous-\pi ~ \pi (기본값)
prismaticlower ~ upper (URDF <limit> 정의)

3. 사용 방법

3.1 런치 파일에서의 사용

from launch import LaunchDescription
from launch_ros.actions import Node


def generate_launch_description():
    # URDF 로드
    robot_description = ...  # Xacro 처리 또는 파일 읽기

    return LaunchDescription([
        # robot_state_publisher
        Node(
            package='robot_state_publisher',
            executable='robot_state_publisher',
            parameters=[{'robot_description': robot_description}],
        ),

        # joint_state_publisher_gui
        Node(
            package='joint_state_publisher_gui',
            executable='joint_state_publisher_gui',
        ),

        # RViz2
        Node(
            package='rviz2',
            executable='rviz2',
            arguments=['-d', rviz_config_path],
        ),
    ])

3.2 명령행에서의 실행

# robot_state_publisher 실행 (별도 터미널)
ros2 launch my_robot display.launch.py

# 또는 독립적으로 실행
ros2 run joint_state_publisher_gui joint_state_publisher_gui

4. joint_state_publisher와의 차이

특성joint_state_publisherjoint_state_publisher_gui
GUI없음Qt 슬라이더 제공
사용자 입력불가슬라이더로 관절 위치 조절 가능
기본 위치0 또는 URDF 정의값사용자 조절 가능
의존성경량Qt5/PyQt5 필요
용도CI/서버 환경개발/시각화 환경

5. 활용 사례

5.1 URDF 모델 검증

새로운 URDF 모델을 작성한 후, joint_state_publisher_gui와 RViz2를 사용하여 관절의 동작 범위와 회전 방향이 올바른지 시각적으로 확인한다. 관절이 예상과 다른 방향으로 회전하면 URDF의 <axis> 또는 <origin> 설정을 수정한다.

5.2 자기 충돌 검사

매니퓰레이터의 관절을 다양한 자세로 조절하며 링크 간의 자기 충돌(self-collision)이 발생하는지 시각적으로 검사한다.

5.3 관절 좌표 기록

원하는 자세에서의 관절 좌표 값을 기록하여 운동 계획이나 티칭에 활용할 수 있다. GUI에 표시되는 현재 값을 참조하거나, /joint_states 토픽을 녹화(ros2 bag record)하여 관절 궤적을 저장한다.

6. 주의 사항

6.1 실제 하드웨어와의 동시 사용 금지

joint_state_publisher_gui는 실제 하드웨어 드라이버와 동시에 실행하면 안 된다. 두 노드가 동일한 /joint_states 토픽에 관절 상태를 발행하면 robot_state_publisher에서 데이터 충돌이 발생한다.

6.2 헤드리스(Headless) 환경

GUI가 없는 서버 환경(예: CI/CD, 원격 서버)에서는 joint_state_publisher_gui 대신 joint_state_publisher를 사용하여야 한다.

6.3 continuous 관절의 범위

continuous 관절은 URDF에 각도 제한이 없으나, GUI 슬라이더는 유한한 범위를 필요로 하므로 기본값인 [-\pi, \pi]로 제한된다. 다중 회전이 필요한 경우에는 프로그래밍적으로 관절 상태를 발행하여야 한다.

7. 요약

joint_state_publisher_gui는 URDF의 가동 관절에 대하여 GUI 슬라이더를 제공하여 사용자가 관절 위치를 수동으로 조절할 수 있게 하는 개발 도구이다. URDF 모델 검증, 관절 범위 확인, 자세 시각화 등에 활용되며, robot_state_publisher 및 RViz2와 함께 사용하여 TF2 변환의 시각적 검증을 수행한다.


참고 문헌 및 출처

  • joint_state_publisher_gui 패키지, https://github.com/ros/joint_state_publisher (ROS2 Humble 브랜치)
  • ROS2 공식 문서, “URDF Tutorials”, https://docs.ros.org/en/humble/Tutorials/Intermediate/URDF/ (ROS2 Humble Hawksbill)